Propaganda

Gratuito nem sempre significa "não tão bom quanto pago", e o OpenHAB não é uma exceção. O software de automação residencial de código aberto excede em muito os recursos de qualquer outro sistema de automação residencial no mercado - mas não é fácil de configurar. De fato, pode ser completamente frustrante.

Este guia está disponível para download em PDF gratuito. Baixe o Guia do Iniciante do OpenHAB Parte 2: ZWave, MQTT, Regras e Gráficos agora. Sinta-se livre para copiar e compartilhar isso com seus amigos e familiares.

Na parte 1 do guia, acompanhei você instalando o OpenHAB em um Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry PiO OpenHAB é uma plataforma madura de automação residencial de código aberto que roda em uma variedade de hardware e é independente de protocolo, o que significa que ele pode se conectar a praticamente qualquer hardware de automação residencial do mercado hoje. consulte Mais informação , apresentou os conceitos principais do OpenHAB e mostrou como adicionar seus primeiros itens ao sistema. Hoje vamos além:

  • Adicionando dispositivos ZWave
  • Adicionando um controlador Harmony Ultimate
  • Introdução de regras
  • Apresentando o MQTT e instalando um broker MQTT no seu Pi, com sensores em um Arduino
  • Gravando dados e criando gráficos

Introdução ao Z-Wave

O Z-Wave é o protocolo de automação residencial dominante há anos: é confiável, foi amplamente desenvolvido e funciona em uma faixa muito mais longa do que qualquer outro produto doméstico inteligente. Existem centenas de sensores Z-Wave disponíveis para você que executam uma ampla gama de tarefas. OpenHAB posso trabalhe com o Z-Wave, mas é um incômodo de configurar, e a confiabilidade não é garantida.

Se você está pensando em comprar uma casa cheia de sensores Z-Wave especificamente para uso com o OpenHAB, recomendamos que você reconsidere. Pode funcionar muito bem para você ou pode ser atormentado por problemas pequenos, mas persistentes. Pelo menos, não compre uma casa cheia de sensores até ter a chance de experimentar alguns. O único motivo para escolher o Z-Wave é se você não está 100% satisfeito com o OpenHAB e gostaria de deixar suas opções em aberto no futuro: o Z-Wave, por exemplo, trabalha com Samsung SmartThings Qual Smart Hub para automação residencial é melhor para você?Por um tempo, as pessoas pensaram na idéia apenas como um truque, mas lançamentos recentes de produtos mostraram que a automação residencial inteligente está começando a cumprir suas promessas. consulte Mais informação hub, bem como hubs específicos do Z-Wave, como Homeseer, e uma variedade de outras opções de software, como Domoticz.

Embora o OpenHAB inclua uma ligação Z-Wave, você ainda precisa configure a rede Z-Wave primeiro, antes que o OpenHAB possa começar a consultar dados. Se você possui uma placa controladora Rasberry, possui algum software fornecido para configurar a rede, portanto não abordaremos isso aqui. Se você comprou um controlador USB Aeotec Z-Stick ou similar, provavelmente não possui nenhum software incluído, então continue a ler.

Aeotec Z-Stick Gen5, Z-Wave Plus USB para criar gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB para criar gateway Compre agora na Amazon $44.95

Se você já possui uma configuração de rede Z-Wave, basta conectar seu controlador ao Pi e começar a configurar a ligação e os itens. Se esta é sua primeira incursão no Z-Wave, é um pouco mais complexo.

Primeiro, no lado do hardware: cada controlador tem seu próprio modo de emparelhar com dispositivos (tecnicamente conhecido como "modo de inclusão" no qual um ID de nó é atribuído). No caso do Aotec Z-Stick, isso significa desconectá-lo da porta USB e pressionar o botão uma vez para colocá-lo no modo de inclusão. Em seguida, aproxime-o do dispositivo que você está emparelhando e pressione o botão de inclusão também (isso também varia: meu soquete Everspring exige que o botão seja pressionado 3 vezes em rápida sucessão; portanto, a lição aqui é ler o manual do seu dispositivo).

O Z-Stick pisca brevemente para indicar sucesso. Isso apresenta problemas ao conectá-lo novamente ao Pi, pois uma nova porta é atribuída. Reinicie seu Pi para que ele seja redefinido de volta à porta padrão, se você achar que foi redesignado dinamicamente por uma porta diferente. Melhor ainda: não o conecte ao Pi até que você tenha feito todos os pares de hardware primeiro.

Instalando as Ligações HABmin e Z-Wave

Como o OpenHAB não é realmente um utilitário de configuração para o Z-Wave, instalaremos outra ferramenta de gerenciamento da web - algo chamado HABmin. Siga para o Repositório do HABmin Github faça o download da versão atual. Depois de descompactá-lo, você encontrará 2 .jar arquivos no diretório addons - eles devem ser colocados no diretório addons correspondente no compartilhamento do OpenHAB Home (se você também estiver usando o Aotec gen5 Z-Stick, verifique se possui pelo menos a versão 1.8 da ligação Z-Wave).

Em seguida, crie uma nova pasta no diretório webapps e chame-a de “habmin” (letras minúsculas são importantes). Copie o restante dos arquivos baixados para lá.

Nota: também há um HABmin 2 em desenvolvimento ativo. A instalação é praticamente a mesma, mas com um complemento .jar adicional. Pode valer a pena tentar os dois apenas para ver qual você prefere.

Se você ainda não o fez, conecte seu controlador ao seu Pi. Digite o seguinte para encontrar a porta correta.

ls / dev / tty *

Você está procurando algo com USB no nome ou, no meu caso particular, o Z-stick se apresentou como /dev/ttyACM0 (um modem). Pode ser mais fácil executar o comando uma vez antes de conectá-lo e uma vez depois, para que você possa ver o que muda se não tiver certeza.

devtty

Abra o arquivo de configuração do OpenHAB e modifique a seção no Z-Wave, descomentando as duas linhas e colocando o endereço real do dispositivo. Uma etapa final para mim foi permitir que o usuário do OpenHAB acesse o modem.

sudo usermod -a -G discagem openhab

Agora, para colocar tudo em ação, reinicie o OpenHAB

serviço sudo reiniciar openhab

Felizmente, se você estiver verificando o log de depuração, verá algo assim. Parabéns, você está falando do Z-Wave. Você também pode encontrar o log de depuração inundado com mensagens de vários nós do Z-Wave. Vamos começar verificando o HABMIN para ver o que foi encontrado: http://openhab.local: 8080 / habmin / index.html (substituindo openhab.local pelo seu nome de host ou endereço IP do Raspberry Pi).

zwave iniciando no log do openhab

Há muito o que ver no HABMIN, mas estamos realmente preocupados com o Configuração -> Ligações -> Z-Wave -> Dispositivos guia, como você pode ver abaixo. Expanda o nó para editar o local e o rótulo do nome para facilitar a referência.

editar o nome do dispositivo

Configurando itens do Z-Wave

Cada dispositivo Z-Wave terá uma configuração específica para o OpenHAB. Felizmente, a maioria dos dispositivos já foi explorada e já existem exemplos para o seu. A configuração de dispositivos personalizados que não são reconhecidos está muito além do escopo deste guia, mas vamos supor que ele seja suportado por enquanto.

Primeiro, eu tenho um interruptor e um medidor básicos de energia Everspring AN158 no nó 3. Uma rápida pesquisa no Google me levou a uma postagem no blog Wetwa.re, com uma configuração de exemplo de item. Eu adaptei isso da seguinte maneira:

Alternar Desumidificador_Switch "Desumidificador" {zwave = "3: command = switch_binary"} Número Desumidificador_Watts "Consumo de energia do desumidificador [% .1f W]" {zwave = "3: command = meter"}

Perfeito.

A seguir, um multi-sensor Aeotec Gen5.

Aeon Labs Multi-sensor Aeotec Z-Wave Gen5 (Z-Wave Plus)Aeon Labs Multi-sensor Aeotec Z-Wave Gen5 (Z-Wave Plus) Compre agora na Amazon $69.27

Para este, encontrei um exemplo de configuração em iwasdot.com, e meu multisensor está no nó 2.

Número Hallway_Temperature "Temperatura do corredor [% .1f ° C]" (Corredor, temperatura) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Umidade do corredor [% .0f %%]" (Corredor, umidade) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Número Hallway_Luminance "Luminância do corredor [% .0f Lux]" (Corredor) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Contate o Hallway_Motion "Movimento do corredor [% s]" (Corredor, movimento) {zwave = "2: 0: command = sensor_binary, respon_to_basic = true"} Número sensor_1_battery "Bateria [% s %%]" (Movimento) {zwave = "2: 0: command = battery"}

Se o formato parecer estranho para você, volte para a primeira Guia do iniciante Introdução ao OpenHAB Home Automation no Raspberry PiO OpenHAB é uma plataforma madura de automação residencial de código aberto que roda em uma variedade de hardware e é independente de protocolo, o que significa que ele pode se conectar a praticamente qualquer hardware de automação residencial do mercado hoje. consulte Mais informação , especificamente a seção de ligação Hue, onde explico como os itens são adicionados. Provavelmente, você só precisará copiar exemplos de colagem como este, mas, caso tenha um novo dispositivo, a documentação da ligação detalha todos os comandos.

Logitech Harmony Binding

Antes de entrarmos em regras, eu queria adicionar uma nota rápida sobre como trabalhar com a ligação Harmony. Eu sou um grande fã do Série Harmony de controles remotos finais Revisão e distribuição Logitech Harmony UltimateSua sala de estar é um caos - admita. Você está perdoado por se perguntar qual controle remoto controla qual dispositivo. O que acontece com a TV, amplificador, TiVO, BluRay player, talvez até as atividades de troca de iluminação se tornem um longo ... consulte Mais informação para simplificar a experiência do media center doméstico, mas eles geralmente permanecem como um sistema separado na casa inteligente. Com o OpenHAB, as atividades do Logitech Harmony e o controle total do dispositivo agora podem fazer parte do seu sistema centralizado e até mesmo incluídos nas regras de automação.

Comece instalando os três arquivos de ligação encontrados, usando o apt-cache para procurar por "harmonia":

pesquisa de apt-cache do openhab para ligação de harmonia

Não se esqueça de chown o diretório de ligações novamente quando terminar:

O sudo apt-get install openhab-addon-action-harmonyhub. sudo apt-get install openhab-addon-binding-harmonyhub. O sudo apt-get install openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab

Para configurar a ligação, abra o arquivo openhab.cfg e adicione uma nova seção da seguinte maneira:

########## CONTROLES DE CONTROLE REMOTO DE HARMONIA ########### harmonyhub: host = 192.168.1.181ou seu ip
harmonyhub: nome de usuário =your-harmony-email-login
harmonyhub: password =sua senha

O endereço IP é o do seu hub Harmony. Use um scanner de rede para descobrir isso. Você também precisará inserir seus detalhes de login, os que você digitar quando iniciar o utilitário de configuração padrão do Harmony. É isso aí. Ao reiniciar o Hue, seu log de depuração deve ter uma explosão repentina de saída da ligação.

Esta é uma lista formatada em JSON de todas as suas atividades, dispositivos e comandos que podem ser enviados. É uma boa ideia copiar isso para referência futura. você pode facilitar ainda mais a leitura com nós recolhíveis colando em um formatador JSON online como este.

saída openhab formatada json

Além da atividade padrão do PowerOff, que é o padrão, você encontrará suas próprias atividades definidas listadas aqui por nome. Agora vamos criar um controle simples de um botão para iniciar atividades. Primeiro, no seu arquivo de itens, adicione a seguinte linha. Mude o grupo e o ícone, se quiser.

/ * Hub da harmonia * / String Harmony_Activity "Harmonia [% s]" (Living_Room) {harmonyhub = "* [currentActivity]"}

Isto é um ligação de cadeia bidirecional, que é capaz de buscar a atividade atual e comandar que a atividade atual seja outra coisa. Agora podemos criar um botão para ele, no arquivo do sitemap.

Item de alternância = Mapeamentos Harmony_Activity = [PowerOff = 'Desligado', Exercício = 'Exercício', 13858434 = 'TV', Karaokê = 'Karaokê]]

No colchete, você verá cada atividade junto com o rótulo. Geralmente, você pode se referir diretamente às atividades como as nomeou no controle remoto, mas a exceção encontrada foi qualquer coisa com um espaço no nome da atividade, como "Assistir à TV". Nesse caso, você precisará usar o ID da atividade. Novamente, você pode encontrar o ID na saída de depuração JSON. Salve e atualize sua interface, você verá algo semelhante a este:

harmonia do openhab no mapa do site

Você também pode consultar as atividades em suas regras, como veremos a seguir. Leia a página wiki para mais informações sobre o Ligação de harmonia.

Uma introdução geral às regras

A maioria dos hubs domésticos inteligentes inclui algum tipo de criação de regras para que você possa reagir automaticamente aos dados e eventos do sensor na casa. Na verdade, eu argumentaria que uma casa verdadeiramente inteligente não é a que você precisa para gastar tempo interagindo com aplicativos para dispositivos móveis - é invisível ao usuário final e completamente automatizada. Para esse fim, o OpenHAB também inclui uma poderosa linguagem de script de regras que você pode programar, excedendo muito a complexidade da maioria hubs domésticos inteligentes Batalha dos Hubs de Casa Inteligente: O que há por aí e o que está por vir? consulte Mais informação ou Receitas IFTTT IFTTT agora se conecta a qualquer coisa: Apresentando o canal MakerOs usos potenciais do IFTTT são infinitos. Mas até agora, tem sido difícil fazer a interface com seus próprios projetos de hardware. Hoje tudo mudou. consulte Mais informação .

Regras de programação parecem piores do que são. Vamos começar de maneira simples com um par de regras que acendem ou apagam a luz, dependendo do sensor de presença:

regra "A luz do escritório acende quando James está presente" quando o Item JamesInOffice mudou de OFF para ON. em seguida, sendCommand (Office_Hue, ON) regra final "A luz do escritório apaga quando James sai" quando o Item JamesInOffice mudou de ON para OFF. em seguida, sendCommand (Office_Hue, OFF) fim

Primeiro, nomeamos a regra - seja descritivo, para que você saiba qual evento está disparando. Em seguida, definimos nossa regra simples dizendo quando x é verdadeiro, y. Fim significa o fechamento dessa regra específica. Existem várias palavras especiais que você pode usar nas regras, mas por enquanto estamos lidando com dois bits simples de sintaxe: Item, que permite consultar o estado de algo; e sendCommand, que faz exatamente o que você pensa. Eu te disse que isso era fácil.

Provavelmente, é desnecessário usar um par de regras, mas, conforme minha lógica se torna mais complexa, será benéfico separá-las para saber se estou entrando ou saindo da área - e pode ser uma boa ideia adicionar um sensor de luz em algum lugar da equação para não ligar desnecessariamente luzes.

Vejamos outro exemplo para criar uma regra agendada.

regra "Exercite-se todas as manhãs" quando Time cron "0 0 8 1/1 *? *" então harmonyStartActivity ("Exercício") fim.

Novamente, nomeamos a regra, definimos as condições em que deve ser acionada e as ações a serem tomadas. Mas, neste caso, estamos definindo um padrão de tempo. O código engraçado que você vê nas aspas é uma expressão CRON para o Quartz Scheduler (o formato é ligeiramente diferente de um CRONtab comum). eu usei cronmaker.com para ajudar a criar a expressão, mas você também pode ler o guia de formatos [Não está mais disponível] para obter uma explicação detalhada e mais exemplos.

gerador cron
CronMaker.com usado para gerar a expressão Cron formatada corretamente

Minhas regras dizem simplesmente "08:00 todas as manhãs, todos os dias da semana, diga ao meu sistema Harmony Ultimate para iniciar a atividade do exercício", que, por sua vez, ativa a TV, o Xbox, o amplificador e pressiona o botão A após um minuto para iniciar o disco na unidade.

Infelizmente, o OpenHAB ainda não é capaz de fazer o exercício por mim.

Mais uma regra que quero lhe mostrar é algo que eu uso para gerenciar os níveis de umidade em minha casa. Eu tenho um único desumidificador que eu preciso mover onde for necessário, então decidi olhar para todos os meus sensores de umidade, descobrir qual é o mais alto e armazenar em uma variável. Atualmente, é acionado a cada minuto, mas isso pode ser facilmente reduzido. Dê uma olhada primeiro:

import org.openhab.core.library.types. * import org.openhab.model.script.actions. * importar java.lang. Regra de cadeia "Monitor de umidade" quando Time cron "0 * * * *?" então var prevHigh = 0 var highHum = "" Umidade? .members.forEach [hum | logDebug ("umidade.rules", hum.nome); if (hum.state como DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("umidade.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); fim.

O núcleo da regra está no Umidade? .Members.foreach linha. Umidade é um nome de grupo para meus sensores de umidade; .membros agarra todos os itens desse grupo; para cada itera sobre eles (com um curioso formato de colchete com o qual você provavelmente não está familiarizado). A sintaxe das regras é um derivado do Xtend, para que você possa ler o Documentação Xtend se você não encontrar um exemplo para se adaptar.

Você provavelmente não precisará - existem centenas de exemplos de regras por aí:

  • Explicação detalhada das regras no wiki oficial
  • o amostras de regras oficiais página wiki
  • Levando as regras a novas alturas
  • Amostras avançadas em IngeniousFool.net

MQTT para OpenHAB e Internet das Coisas

O MQTT é um sistema de mensagens leve para comunicação máquina a máquina - um tipo de Twitter para o seu Arduinos ou Raspberry Pis para conversar (embora, é claro, funcione com muito mais do que apenas Essa). Ele está rapidamente ganhando popularidade e se tornando um lar com dispositivos da Internet das Coisas, que geralmente são baixos microcontroladores de recursos que precisam de uma maneira confiável de transmitir dados do sensor de volta ao seu hub ou receber remotamente comandos. É exatamente o que faremos com isso.

Mas por que reinventar a roda?

O MQ Telemetry Transport foi inventado em 1999 para conectar oleodutos via satélite lento conexões, projetadas especificamente para minimizar o uso da bateria e a largura de banda, além de fornecer confiabilidade entrega de dados. Ao longo dos anos, os princípios de design permaneceram os mesmos, mas o caso de uso mudou de sistemas embarcados especializados para dispositivos gerais da Internet das Coisas. Em 2010, o protocolo foi liberado sem royalties, aberto para qualquer pessoa usar e implementar. Nós gostamos de graça.

Você pode estar se perguntando por que estamos nos incomodando com outro protocolo - já temos o HTTP, afinal - que pode ser usado para enviar mensagens rápidas entre todos os tipos de sistemas conectados à Web (como o OpenHAB e o IFTTT, principalmente com o novo canal do criador IFTTT agora se conecta a qualquer coisa: Apresentando o canal MakerOs usos potenciais do IFTTT são infinitos. Mas até agora, tem sido difícil fazer a interface com seus próprios projetos de hardware. Hoje tudo mudou. consulte Mais informação ). E você estaria certo. No entanto, a sobrecarga de processamento de um servidor HTTP é bastante grande - tanto que você não pode executar facilmente um em um servidor HTTP. microcontrolador incorporado como o Arduino (pelo menos, você pode, mas você não terá muita memória para nada outro). Por outro lado, o MQTT é leve, portanto, o envio de mensagens pela sua rede não obstrui os canos e pode se encaixar facilmente em nosso pequeno espaço de memória do Arduino.

Como o MQTT funciona?

O MQTT requer um servidor (chamado de "broker") e um ou mais clientes. O servidor atua como intermediário, recebendo mensagens e retransmitindo-as para qualquer cliente interessado.

Vamos continuar com o Twitter para máquinas analogia embora. Assim como os usuários do Twitter podem twittar seus próprios 140 caracteres sem sentido, e eles podem "seguir" outros usuários para ver um fluxo de postagens com curadoria, Os clientes MQTT podem se inscrever em um canal específico para receber todas as mensagens de lá e publicar suas próprias mensagens nesse canal. canal. Esse padrão de publicação e assinatura é referido como pub / sub, em oposição à tradição servidor cliente modelo de HTTP.

O HTTP exige que você entre em contato com a máquina com a qual está se comunicando, digamos Olá, e depois se reconheça constantemente enquanto obtém ou coloca dados. Com pub / sub, o cliente que está publicando não precisa saber quais clientes estão inscritos: apenas distribui as mensagens e o broker as redistribui para todos os clientes inscritos. Qualquer cliente pode publicar e assinar tópicos, como um usuário do Twitter.

Ao contrário do Twitter, o MQTT não está limitado a 140 caracteres. Como os dados são independentes, você pode enviar números pequenos ou grandes blocos de texto, datagramas no formato JSON ou até mesmo imagens e arquivos binários.

Não é que o MQTT seja melhor que o HTTP para tudo - mas é é mais adequado se tivermos muitos sensores espalhados pela casa, informando constantemente.

Também é importante saber que o OpenHAB não atuará como seu intermediário MQTT - abordaremos isso um pouco mais tarde. No entanto, o OpenHAB atuará como um cliente: ele pode publicar seu log de atividades do OpenHAB, bem como vincular determinados canais para dispositivos, para que você possa, por exemplo, ter um comutador controlado por mensagens MQTT em um determinado canal. Isso é ideal para criar uma casa cheia de sensores.

Instale o Mosquitto no seu Pi

Embora o OpenHAB inclua um cliente MQTT para que você possa se inscrever em um tópico e também publicar mensagens, ele não atuará como servidor. Para isso, você precisa usar um broker MQTT baseado na Web (pago ou gratuito) ou instalar o software livre no seu Pi. Gostaria de manter tudo internamente, por isso instalei o Mosquitto no Pi.

Infelizmente, a versão disponível através do habitual apt-get está completamente desatualizada. Em vez disso, vamos adicionar as fontes mais recentes.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key adicione mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get instala mosquito.

É tudo o que precisamos fazer para ter um servidor MQTT em funcionamento na rede local. Seu broker está em execução na porta 1883 por padrão.

Verifique se o servidor MQTT está funcionando usando o MQTT.fx gratuito, que é multiplataforma. Clique no ícone de configurações para criar um novo perfil e digite o endereço IP ou o nome do seu Raspberry Pi. Salve e clique em conectar. Se o pequeno semáforo no canto superior direito ficar verde, você estará pronto.

perfil de exemplo mqttfx

Para um teste rápido, clique na guia "inscrever-se" e digite inTopic / na caixa de texto e pressione o Se inscrever botão. Agora você está inscrito para receber uma mensagem sobre o tópico denominado inTopic, embora ele mostre 0 mensagens. Volte para a guia publicar, digiteTopic na caixa pequena e uma mensagem curta na caixa de texto grande abaixo. Bater Publicar algumas vezes e veja a guia de inscrição. Você deve ver algumas mensagens aparecendo nesse tópico.

teste inTopic MQTT

Antes de adicionarmos alguns sensores reais à nossa rede, precisamos aprender sobre os níveis de tópicos, que permitem estruturar e filtrar a rede MQTT. Os nomes de tópicos diferenciam maiúsculas de minúsculas, não devem começar com $ ou incluir um espaço ou caracteres não ASCII - práticas de programação padrão para nomes de variáveis, na verdade.

O separador / indica um nível de tópico hierárquico, por exemplo, todos os níveis de tópico válidos a seguir.

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / temperatura. myHome / livingRoom / umidade. myHome / cozinha / temperatura. myHome / cozinha / umidade

Você já deve estar vendo como essa estrutura em árvore é perfeita para uma casa inteligente cheia de sensores e dispositivos. A melhor prática para uso com vários sensores em uma única sala é publicar cada variável de sensor como seu próprio nível de tópico - ramificando para mais especificidade (como nos exemplos acima) - em vez de tentar publicar vários tipos de sensores no mesmo canal.

Os clientes podem publicar ou assinar qualquer número de níveis de tópicos individuais ou usar alguns caracteres curinga especiais para filtrar de cima para baixo na árvore.

O curinga + substitui qualquer nível de tópico. Por exemplo:

myHome / + / temperatura

assinaria o cliente para ambos

myHome / livingRoom / temperatura. myHome / cozinha / temperatura

… Mas não os níveis de umidade.

O # é um curinga de vários níveis, portanto, você pode buscar qualquer coisa do conjunto de sensores livingRoom com:

myHome / livingRoom / #

Tecnicamente, você também pode se inscrever no nível raiz #, no qual você obtém absolutamente tudo o que está acontecendo passando pelo corretor, mas isso pode ser como enfiar uma mangueira de incêndio na sua cara: um pouco esmagadora. Tente conectar-se ao broker MQTT público do HiveMQ e assinando #. Recebi cerca de 300 mensagens em alguns segundos antes de meu cliente travar.

Dica para iniciantes do MQTT: "/myHome/” é um tópico diferente de "myHome / " - incluir uma barra no início cria um nível de tópico em branco que, embora tecnicamente válido, não é recomendado porque pode ser confuso.

Agora que conhecemos a teoria, vamos testar um Arduino, Ethernet Shield e um sensor de temperatura e umidade DHT11 - você provavelmente tem um no seu kit inicial, mas, se não, basta trocar o sensor ambiental por um sensor de movimento (ou mesmo um botão).

Publicando o MQTT a partir de um Arduino com Conexão Ethernet

Se você possui um dispositivo híbrido compatível com Arduino com Wi-Fi ou Ethernet integrado, isso também deve funcionar. Eventualmente, queremos uma maneira melhor / mais barata de comunicar que é necessário usar uma conexão de rede em todas as salas, mas isso serve para aprender o básico.

Comece baixando biblioteca pubsubclient do Github. Se você usou o botão "Baixar como ZIP", a estrutura está um pouco errada. Descompacte, renomeie a pasta para apenas pubsubclient, retire os dois arquivos do src pasta e mova-os um nível acima para a raiz da pasta baixada. Em seguida, mova a pasta inteira para o seu Arduino / bibliotecas diretório.

Aqui está o meu código de exemplo que você pode adaptar: a saída do sinal DHT11 está no pino 7. Altere o IP do servidor para o do seu Pi na seguinte linha:

client.setServer ("192.168.1.99", 1883);

Infelizmente, não podemos usar esse nome amigável (OpenHAB.local no meu caso) como a pilha TCP / IP no Arduino é muito simplista e adicionar o código para nomeação de Bonjour seria muita memória que não queremos desperdiçar. Para alterar os tópicos em que os dados do sensor estão sendo transmitidos, role para baixo até estas linhas:

buffer de char [10]; dtostrf (t, 0, 0, buffer); client.publish ("openhab / himitsu / temperature", buffer); dtostrf (h, 0, 0, buffer); client.publish ("openhab / himitsu / umidade", buffer);

O código também inclui assinatura para um canal de comando. Localize e ajuste a seguinte linha:

client.subscribe ("openhab / himitsu / command");

Examine o código por aí e você poderá controlar facilmente um LED ou retransmissão, por exemplo, enviando comandos para canais específicos. No código de exemplo, ele simplesmente envia uma mensagem de volta reconhecendo o recebimento do comando.

Faça o upload do seu código, conecte seu Arduino à rede e, usando o MQTT.fx, assine # ou openhab / himitsu / # (ou o que você alterou para o nome da sala, mas não se esqueça de incluir o # no final). Em breve você deverá receber mensagens; e se você enviar LIGADO ou DESLIGADO ao tópico de comando, também verá os agradecimentos.

Mensagens do mqtt arduino voltando

Ligação MQTT para OpenHAB

A etapa final na equação é conectar isso ao OpenHAB. Para isso, é claro que precisamos de um vínculo.

sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

E edite o arquivo de configuração para ativar a ligação.

mqtt: broker.url = tcp: // localhost: 1883. mqtt: broker.clientId = openhab

Reinicie o OpenHAB

serviço sudo reiniciar openhab

Em seguida, vamos adicionar um item ou dois:

/ * Sensores MQTT * / Número Himitsu_Temp "Temperatura Himitsu [% .1f ° C]"(Himitsu, Temperatura) {mqtt = " (Himitsu, Umidade) {mqtt = "

Até agora você deve entender o formato; está ficando um Item numérico da ligação do MQTT, em um tópico especificado. Este é um exemplo simples, você pode querer consultar a página wiki onde pode ficar muito mais complexo.

Parabéns, agora você tem a base de uma matriz de sensores barata baseada em Arduino. Vamos revisitar isso no futuro e colocar o Arduino em sua própria rede de RF totalmente separada. Eu também criei uma versão idêntica para placas Wizwiki 7500 se você tiver um desses.

Persistência e representação gráfica de dados

Até agora você provavelmente configurou um monte de sensores, seja do Z-Wave ou de Arduinos personalizados executando o MQTT - para que você pode visualizar o estado atual desses sensores a qualquer momento e você também deve reagir ao valor deles em regras. Mas o interessante sobre os valores dos sensores geralmente é que eles mudam com o tempo: é aí que a persistência e os gráficos entram. Persistência no OpenHAB significa salvar os dados ao longo do tempo. Vamos seguir em frente e configurar o RRD4J (Round Robin Database para Java), assim chamado porque os dados são salvos de maneira round robin - dados mais antigos são descartados para compactar o tamanho do banco de dados.

Instale os pacotes rrd4j com os seguintes comandos.

O sudo apt-get install openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab. 

Em seguida, crie um novo arquivo chamado rrd4j.persist no configurações / persistência pasta. Cole o seguinte:

Estratégias {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" padrão = everyChange. } Itens {// mantêm tudo quando o valor é atualizado, apenas um padrão, e os restauram do banco de dados na inicialização *: strategy = everyChange, restoreOnStartup // a seguir, definimos estratégias específicas de everyHour para qualquer coisa no grupo Temperature e a cada minuto para Humidity Temperature *: strategy = everyHour Umidade *: strategy = everyMinute // Como alternativa, você pode adicionar itens específicos aqui, como // Bedroom_Humidity, JamesInOffice: strategy = everyMinute. }

Na primeira parte deste arquivo, estamos definindo estratégias, o que significa apenas dar um nome a uma expressão CRON. É o mesmo que já fizemos com o Meu. OpenHAB, mas desta vez criamos novas estratégias que podemos usar de everyDay, everyHour e everyMinute. Ainda não os usei, mas posso estar no futuro.

Na segunda metade do arquivo, dizemos ao rr4dj quais valores de dados salvar. Por padrão, salvaremos tudo a cada atualização, mas também especifiquei algumas estratégias baseadas em tempo para sensores específicos. Temperaturas com as quais não me preocupo, defini isso para economizar apenas a cada hora, mas a umidade é uma grande preocupação para mim, então quero ver como isso muda a cada minuto. Se houver outros dados que você deseja salvar especificamente em horários definidos, adicione-os aqui agora ou ajuste conforme necessário.

Nota: se você quiser representar graficamente os dados também, DEVE armazená-los pelo menos uma vez por minuto. Não importa se os dados do seu sensor são atualizados tão rapidamente, basta informar o rr4dj para armazená-los uma vez por minuto.

Com isso definido, você deve começar a ver alguma saída de depuração informando que os valores estão sendo armazenados.

rrd4j armazenando dados

A seguir, vamos fazer alguns gráficos bonitos de todos esses dados. É muito fácil Para fazer um gráfico de um sensor individual, adicione o seguinte ao mapa do site:

Item do gráfico = Período de umidade do quarto = h

Isso é literalmente tudo que você precisa. Valores válidos para o período são h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y; deve ser óbvio o que isso significa. O padrão é D para um dia inteiro de dados, se não especificado.

Para criar um gráfico com vários itens, basta representar graficamente o nome do grupo:

Item do gráfico = Período de umidade = h
gráfico

Você também pode estar interessado em saber que pode usar esse gráfico em outro lugar; está gerando uma imagem usando o seguinte URL: http://YOUROPENHABURL: 8080 / gráfico? grupos = Umidade e período = h

Como Seu O sistema OpenHAB está chegando?

É isso nesta parte do guia, mas não espere que seja o último que você ouvir sobre o OpenHAB. Espero que este e o guia para iniciantes tenham lhe dado uma base sólida para desenvolver seu próprio sistema OpenHAB completo - mas é um processo que nunca está realmente completo.

Felizmente, o OpenHAB pode escalar bem de alguns dispositivos a centenas, desde a simples complexidade de regras até o máximo em automação residencial - então como está o seu sistema? Quais dispositivos você escolheu? Qual é o próximo grande projeto que você vai enfrentar?

Vamos falar nos comentários - e, se você achou este guia útil, clique nos botões de compartilhamento para informar aos seus amigos como eles também podem configurar seu próprio sistema OpenHAB.

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.