Guia do Iniciante do OpenHAB Parte 2: ZWave, MQTT, Regras e Gráficos

O OpenHAB, o software de automação residencial de código aberto, excede em muito as capacidades de outros sistemas de automação residencial no mercado - mas não é fácil de configurar. Na verdade, pode ser francamente frustrante.

O OpenHAB, o software de automação residencial de código aberto, excede em muito as capacidades de outros sistemas de automação residencial no mercado - mas não é fácil de configurar.  Na verdade, pode ser francamente frustrante.
Propaganda

Livre nem sempre significa “não tão bom quanto pago”, e o OpenHAB não é exceção. O software de automação residencial de código aberto excede em muito as capacidades de qualquer outro sistema de automação residencial no mercado - mas não é fácil de configurar. Na verdade, pode ser francamente frustrante.

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

Na parte 1 do guia, acompanhei a instalação do OpenHAB em um Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry Pi O OpenHAB é uma plataforma de automação residencial de código aberto e madura que é executada em uma variedade de hardware e é protocolo agnóstico, o que significa que pode se conectar a quase qualquer hardware de automação residencial no mercado hoje. Leia mais, introduziu os principais conceitos do OpenHAB e mostrou como adicionar seus primeiros itens ao sistema. Hoje vamos mais longe:

  • Adicionando dispositivos ZWave
  • Adicionando um controlador Harmony Ultimate
  • Introduzindo regras
  • Apresentando o MQTT e instalando um broker do MQTT no seu Pi, com sensores em um Arduino
  • Gravando dados e representando graficamente

Introdução ao Z-Wave

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

Se você está considerando a compra de uma casa cheia de sensores Z-Wave especificamente para uso com o OpenHAB, eu recomendo que você reconsidere. Pode funcionar muito bem para você, ou pode ser atormentado com problemas pequenos, mas persistentes. Pelo menos, não compre uma casa cheia de sensores até que você tenha a chance de experimentar alguns. A única razão para escolher o Z-Wave é se você não estiver 100% estabelecido no OpenHAB e quiser deixar suas opções em aberto no futuro: o Z-Wave, por exemplo, funciona com o Samsung SmartThings Qual Smart Hub for Home Automation é o melhor para você ? Qual Smart Hub para automação residencial é melhor para você? Por um tempo, as pessoas pensaram na ideia como nada mais do que um truque, mas lançamentos recentes de produtos mostraram que a automação residencial inteligente está começando a cumprir suas promessas. Leia mais hub, bem como hubs específicos 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 configurar a rede Z-Wave primeiro, antes que o OpenHAB possa começar a consultá-la em busca de dados. Se você tem uma placa controladora Rasberry, você tem algum software fornecido para configurar a rede, por isso não vamos cobrir isso aqui. Se você comprou um controlador Aeotec USB Z-Stick ou similar, provavelmente não tem nenhum software incluído, então continue a ler.

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

Se você já tem 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 investida no Z-Wave, é um pouco mais complexo.

Primeiro, do lado do hardware: cada controlador tem seu próprio modo de emparelhamento 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. Então, aproxime-se do dispositivo que você está emparelhando e pressione o botão de inclusão também (isso também variará: meu soquete Everspring requer que o botão pressione 3 vezes em rápida sucessão, então a lição aqui é ler o manual para seu dispositivo) .

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

Instalando HABmin e Z-Wave Bindings

Como o OpenHAB na verdade não é um utilitário de configuração para o Z-Wave, vamos instalar outra ferramenta de gerenciamento web que faz - algo chamado HABmin. Dirija-se ao repositório HABmin Github para baixar a versão atual. Uma vez que você tenha descompactado, você encontrará 2 arquivos .jar no diretório de addons - estes devem ser colocados no diretório addons correspondente em seu diretório Home do OpenHAB (se você também estiver usando o Aotec gen5 Z-Stick, certifique-se de tenho 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" (minúscula é importante). Copie o restante dos arquivos baixados para lá.

Nota: Há também um HABmin 2 em desenvolvimento ativo. A instalação é praticamente a mesma, mas com um add-on adicional .jar. Pode valer a pena tentar ambos 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 por qualquer coisa 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 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, removendo o comentário das duas linhas e colocando o endereço real do dispositivo. Um passo final para mim foi permitir que o usuário do OpenHAB acessasse o modem.

 sudo usermod -a -G dialout openhab 

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

 sudo service openhab restart 

Espero que, se você estiver verificando o log de depuração, você verá algo assim. Parabéns, agora 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 em log de openhab

Há muito o que ver em HABMIN, mas estamos preocupados apenas com a guia Configuration -> Bindings -> Z-Wave -> Devices, como você pode ver abaixo. Expanda o nó para editar o local e o rótulo de nome para facilitar sua referência.

edite o nome do dispositivo

Configurando Itens 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á haverá exemplos para você. 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 de energia básico Everspring AN158 e um medidor no Nodo 3. Um estudo rápido do Google levou-me a um post no blog da Wetwa.re, com uma configuração de item de amostra. Eu adaptei isso da seguinte forma:

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

Perfeito.

Em seguida, encontra-se um multissensor 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

Para este, encontrei uma configuração de amostra em iwasdot.com e meu multisensor está no Nó 2.

 Número Hallway_Temperature "Corredor Temperatura [% .1f ° C]" (Corredor, Temperatura) {zwave = "2: 0: comando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Número Hallway_Humidity "Corredor Umidade [% .0f %% ] "(Corredor, Umidade) {zwave =" 2: 0: comando = sensor_multilevel, sensor_type = 5 "} Número Hallway_Luminance" Luminosidade do Corredor [% .0f Lux] "(Corredor) {zwave =" 2: 0: comando = sensor_multilevel, sensor_type = 3 "} Contact Hallway_Motion" Movimento do corredor [% s] "(Corredor, Movimento) {zwave =" 2: 0: comando = sensor_binary, respond_to_basic = true "} Sensor de número_1_battery" Bateria [% s %%] "( Movimento) {zwave = "2: 0: command = battery"} 

Se o formato deste parece estranho para você, por favor, volte para o primeiro guia para iniciantes Introdução ao OpenHAB Home Automation no Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry Pi O OpenHAB é uma plataforma de automação residencial madura e de código aberto que é executada uma variedade de hardware e é independente do protocolo, o que significa que pode se conectar a praticamente qualquer hardware de automação residencial no mercado hoje. Leia mais, especificamente a seção de ligação de matiz, onde explico como os itens são adicionados. Você provavelmente só precisará copiar exemplos de pasta como essa, mas no caso de ter um novo dispositivo, a documentação de ligação detalha todos os comandos.

Ligação de harmonia da Logitech

Antes de entrarmos em regras, eu queria adicionar uma nota rápida sobre como trabalhar com a ligação do Harmony. Sou um grande fã da série Harmony de controles remotos finais Logitech Harmony Ultimate Review e Giveaway Logitech Harmony Ultimate Review e Giveaway Sua sala de estar é um caos - admita. Você está perdoado por saber qual controle remoto controla qual dispositivo. O que com a TV, amplificador, TiVO, BluRay player, talvez até mesmo as atividades de comutação de iluminação se torna um longo ... Leia mais para simplificar a experiência do media center em casa, mas muitas vezes se destacam como um sistema separado dentro da casa inteligente. Com o OpenHAB, as atividades da Logitech Harmony e o controle total de dispositivos agora podem fazer parte de seu sistema centralizado e até mesmo incluídos em regras de automação.

Comece instalando os três arquivos de ligação que você encontra usando o apt-cache para procurar por “harmonia”:

openhab apt-cache pesquisa por ligação de harmonia

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

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

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

 ########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181 ou seu ip harmonyhub: nome de usuário = seu-harmonia-email-login harmoniahub: senha = seu- 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, aqueles que você inseriu ao iniciar o utilitário de configuração padrão do Harmony. É isso aí. Ao reiniciar seu Hue, seu log de depuração deve ter uma explosão súbita 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 tornar ainda mais fácil a leitura com nós colapsáveis ​​ao colar em um formatador JSON on-line como este.

json formatado saída openhab

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

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

Essa é uma ligação de cadeia bidirecional, que é capaz de buscar a atividade atual e comandar a atividade atual para algo diferente. Agora podemos criar um botão para isso, no arquivo do sitemap.

 Switch item = mapeamentos Harmony_Activity = [PowerOff = 'Off', 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 a atividades como você as nomeou no seu controle remoto, mas a exceção a isso eu encontrei, era 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 do JSON. Salve e atualize sua interface, você deve ver algo semelhante a isto:

openhab harmonia no mapa do site

Você também pode se referir a atividades em suas regras, como veremos a seguir. Leia a página wiki para mais informações sobre a ligação Harmony.

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 em casa. Na verdade, eu diria que uma casa realmente inteligente não é aquela que você precisa gastar tempo interagindo com aplicativos móveis - é uma que é invisível para o 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 em muito a complexidade da maioria dos hubs domésticos inteligentes Batalha dos Smart Home Hubs: O que há lá fora e o que vem por aí? Batalha dos Smart Home Hubs: O que há lá fora e o que vem por aí? Leia mais ou receitas IFTTT O IFTTT agora se conecta a qualquer coisa: Apresentando o canal Maker O IFTTT agora se conecta a qualquer coisa: Apresentando o canal do Maker Os 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 soam piores do que são. Vamos começar simples com um par de regras que ligam ou desligam a luz, dependendo do sensor de presença:

 regra "Luz do escritório quando James apresenta" quando Item JamesInOffice é alterado de OFF para ON e sendCommand (Office_Hue, ON) end regra "Office light desligado quando James parte" quando Item JamesInOffice é alterado de ON para OFF depois sendCommand (Office_Hue, OFF) end 

Primeiro, nomeamos a regra - seja descritiva, para que você saiba qual evento está sendo disparado. Em seguida, definimos nossa regra simples dizendo quando x é verdadeiro e, em seguida, y . Fim significa o encerramento dessa regra específica. Há um número de palavras especiais que você pode usar em regras, mas por enquanto estamos lidando com dois bits simples de sintaxe - Item, que permite consultar o estado de alguma coisa; e sendCommand, que faz exatamente o que você acha que vai fazer. Eu te disse que isso foi fácil.

É provavelmente desnecessário usar um par de regras, mas à medida que 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. na equação, então não estamos desnecessariamente acendendo luzes.

Vamos ver outro exemplo para criar uma regra planejada.

 regra "Exercício todas as manhãs" quando cron cronograma "0 0 8 1/1 *? *", em seguida, harmonyStartActivity ("Exercício") end 

Novamente, nomeamos a regra, as condições de estado quando deveria ser disparada 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 citações é uma expressão CRON para o Quartz Scheduler (o formato é um pouco diferente de um CRONtab regular). Eu usei o cronmaker.com para ajudar a criar a expressão, mas você também pode ler o guia de formato para uma explicação detalhada e mais exemplos.

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

Minhas regras dizem simplesmente "8h todas as manhãs, todos os dias da semana, digo 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 para mim.

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

 import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang.String regra "Monitor de Umidade" quando Cron Tempo "0 * * * *?" então var prevHigh = 0 var highHum = "" Umidade? .members.forEach [hum | logDebug ("humidity.rules", hum.name); 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á na linha Umidade? .members.foreach . Umidade é um nome de grupo para meus sensores de umidade; .members pega todos os itens desse grupo; foreach itera sobre eles (com um formato curioso de colchetes que você provavelmente não está familiarizado). A sintaxe das regras é uma derivada do Xtend, então você pode ler a documentação do Xtend se não puder encontrar um exemplo para se adaptar.

Você provavelmente não precisará - existem centenas de regras de exemplo:

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

MQTT para OpenHAB e Internet das coisas

O MQTT é um sistema de mensagens leve para a comunicação máquina-a-máquina - uma espécie de Twitter para os seus Arduinos ou Raspberry Pis falarem uns com os outros (embora, é claro, funcione com muito mais do que apenas isso). Ele está rapidamente ganhando popularidade e se tornando um lar com dispositivos da Internet of Things, que normalmente são micro-controladores de baixo recurso que precisam de uma maneira confiável de transmitir dados do sensor de volta ao seu hub ou receber comandos remotos. É exatamente o que vamos fazer com isso.

Mas por que reinventar a roda?

O MQ Telemetry Transport foi inventado em 1999 para conectar oleodutos através de conexões de satélite lentas, projetado especificamente para minimizar o uso da bateria e largura de banda, enquanto ainda fornece entrega de dados confiável. 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 of Things. 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 incomodando ainda com outro protocolo - já temos o HTTP depois de tudo - que pode ser usado para enviar mensagens rápidas entre todos os tipos de sistemas conectados à web (como OpenHAB e IFTTT, em particular com o novo canal criador O IFTTT agora se conecta a qualquer coisa: Apresentando o Maker Channel IFTTT agora se conecta a qualquer coisa: Apresentando o Maker Channel Os usos potenciais do IFTTT são infinitos, mas até agora, tem sido difícil fazer a interface com seus próprios projetos de hardware. 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 microcontrolador embutido como o Arduino (pelo menos, você pode, mas você não terá muita memória para mais nada ). O MQTT é o outro lado é leve, então enviar mensagens pela sua rede não vai entupir os canos, e pode facilmente caber no nosso pequeno espaço de memória do Arduino.

Como funciona o MQTT?

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

Vamos continuar com a analogia Twitter-para-máquinas . Assim como os usuários do Twitter podem twittar seus próprios 140 caracteres sem sentido, e os usuários podem “seguir” outros usuários para ver um fluxo curado de posts, os clientes MQTT podem se inscrever em um canal específico para receber todas as mensagens de lá, bem como publicar suas próprias mensagens para esse canal. Esse padrão de publicação e assinatura é chamado de pub / sub, em oposição ao modelo tradicional de cliente / servidor do HTTP.

O HTTP exige que você entre em contato com a máquina com a qual está se comunicando, diga "Olá" e, em seguida, alterne constantemente ao reconhecer um ao outro enquanto obtém ou coloca dados. Com o pub / sub, o cliente que faz a publicação não precisa saber quais clientes estão inscritos: ele apenas envia as mensagens e o corretor as redistribui para qualquer cliente inscrito. Qualquer cliente pode publicar e se inscrever em tópicos, assim como um usuário do Twitter.

Diferentemente do Twitter, o MQTT não está limitado a 140 caracteres. É independente de dados, para que você possa enviar pequenos números ou grandes blocos de texto, datagramas formatados em JSON ou até imagens e arquivos binários.

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

Também é importante saber que o OpenHAB não atuará como seu broker MQTT - abordaremos esse bit mais tarde. No entanto, o OpenHAB atuará como um cliente: ele pode publicar seu log de atividades do OpenHAB, bem como vincular canais específicos a dispositivos, para que você possa, por exemplo, ter um switch controlado por mensagens MQTT em um determinado canal. Isto é 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 funcionará como o servidor. Para isso, você precisa usar um corretor MQTT baseado na Web (pago ou gratuito) ou instalar o software gratuito no seu Pi. Eu gostaria de manter tudo em casa, então eu 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 adicionar mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo wget http: // repo.mosquitto.org/debian/mosquitto-wheezy.list sudo apt-get instala mosquitto 

Isso é tudo o que precisamos fazer para ter um servidor MQTT instalado e funcionando na rede local. Seu corretor está sendo executado na porta 1883 por padrão.

Verifique se o seu servidor MQTT está funcionando usando o MQTT.fx gratuito, que é multi-plataforma. 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 pressione Conectar. Se o pequeno semáforo no canto superior direito ficar verde, você está pronto para ir.

perfil de exemplo mqttfx

Para um teste rápido, clique na guia "inscrever-se" e digite inTopic / na caixa de texto e, em seguida, pressione o botão Inscrever-se . Agora você está inscrito para receber uma mensagem sobre o tópico chamado inTopic, embora ele mostre 0 mensagens. Volte para a guia publicar, digite inTopic na pequena caixa e uma pequena mensagem na caixa de texto grande abaixo. Hit Publique algumas vezes e olhe novamente na aba de inscrição. Você deve ver algumas mensagens que apareceram nesse tópico.

teste inTopic MQTT

Antes de adicionarmos alguns sensores reais à nossa rede, precisamos aprender sobre os níveis de tópicos, o que nos permite estruturar e filtrar a rede MQTT. Os nomes de tópicos fazem distinção entre maiúsculas e 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, que é hierárquico, por exemplo, os seguintes são todos os níveis de tópico válidos.

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / sala de estar / temperatura myHome / sala de estar / humidade myHome / cozinha / temperatura myHome / cozinha / humidade 

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

Os clientes podem publicar ou inscrever-se em qualquer número de níveis de tópicos individuais ou usar alguns caracteres curinga especiais para filtrar a partir da parte superior da árvore.

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

 myHome / + / temperature 

iria subscrever o cliente para ambos

 myHome / livingRoom / temperature myHome / cozinha / temperatura 

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

O # é um curinga multi-nível, então você pode buscar qualquer coisa da matriz de sensores do livingRoom com:

 myHome / livingRoom / # 

Tecnicamente, você também pode se inscrever no nível da raiz, o que lhe dá absolutamente tudo que passa pelo corretor, mas pode ser como enfiar uma mangueira de incêndio na sua cara: um pouco esmagadora. Tente conectar-se ao broker MQTT público a partir do HiveMQ e se inscrever no #. Eu recebi cerca de 300 mensagens em poucos segundos antes do meu cliente ter caído.

Dica para iniciantes do MQTT: “ / myHome /” é um tópico diferente de “ myHome /” - incluindo 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 trabalhar com 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 movimento. sensor (ou até mesmo um botão).

Publicando o MQTT de um Arduino com Conexão Ethernet

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

Comece baixando a 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, tire os dois arquivos da pasta src e mova-os um nível acima para a raiz da pasta baixada. Em seguida, mova a pasta inteira para o seu diretório Arduino / libraries .

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 seu Pi na seguinte linha:

 client.setServer ("192.168.1.99", 1883); 

Infelizmente, não podemos usar seu nome amigável (OpenHAB.local no meu caso) já que a pilha TCP / IP no Arduino é muito simplista e adicionar o código para a nomeação do 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 caracteres [10]; dtostrf (t, 0, 0, buffer); client.publish ("openhab / himitsu / temperature", buffer); dtostrf (h, 0, 0, buffer); client.publish ("openhab / himitsu / humidity", buffer); 

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

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

Examine o código por lá e você verá que pode controlar facilmente um LED ou um relé, 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.

Envie seu código, conecte seu Arduino à rede e, usando o MQTT.fx, assine # ou openhab / himitsu / # (ou o nome para o qual você alterou o nome da sala, mas não se esqueça de incluir o # no final). Logo você deve ver as mensagens chegando; e se você enviar ON ou OFF para o tópico de comando, verá confirmações voltando também.

mensagens mqtt arduino voltando

Ligação MQTT para OpenHAB

O passo final na equação é ligar isso ao OpenHAB. Para isso, é claro que precisamos de uma ligação.

 sudo apt-get instala 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

 sudo service openhab restart 

Então vamos adicionar um item ou dois:

 / * Sensores MQTT * / Número Himitsu_Temp "Temperatura Himitsu [% .1f ° C]" (Himitsu, Temperatura) {mqtt = "<[corretor: openhab / himitsu / temperatura: estado: padrão]"} Número Himitsu_Humidity "Himitsu Humidity [ % .1f %%] "(Himitsu, Umidade) {mqtt =" <[corretor: openhab / himitsu / umidade: estado: padrão] "} 

Até agora você deve entender o formato; ele está recebendo um item Number da ligação 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 baseada em Arduino barata. Nós estaremos revisitando isso no futuro e colocando o Arduino em sua própria rede RF totalmente separada. Eu também criei uma versão idêntica para as placas Wizwiki 7500 se você tiver uma delas.

Dados de Persistência e Gráficos

A essa altura você provavelmente já montou um conjunto de sensores, seja do Z-Wave ou Arduinos personalizados rodando MQTT - assim você pode ver o estado atual desses sensores a qualquer momento, e você também deve reagir ao seu valor nas regras. Mas a coisa interessante sobre os valores do sensor é geralmente que eles mudam com o tempo: é aí que a persistência e o gráfico aparecem. Persistência no OpenHAB significa salvar os dados ao longo do tempo. Vamos em frente e configurar o RRD4J (Round Robin Database para Java), assim chamado porque os dados são salvos de uma maneira round robin - os dados mais antigos são descartados para compactar o tamanho do banco de dados.

Instale os pacotes rrd4j com os seguintes comandos.

 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 na pasta configurações / persistência . Cole o seguinte:

 Estratégias {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange} Itens {// persiste tudo quando o valor é atualizado, apenas um padrão, e os restaura 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 // alternativamente 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. Isso é o mesmo que já fizemos com My.OpenHAB, mas desta vez estamos criando algumas novas estratégias que podemos usar de everyDay, everyHour e everyMinute. Eu ainda não usei todos eles, mas posso estar no futuro.

Na segunda metade do arquivo, informamos ao rr4dj quais valores de dados salvar. Por padrão, vamos salvar tudo a cada atualização, mas também especificamos algumas estratégias baseadas no tempo para sensores específicos. Temperaturas eu não estou muito preocupado, então eu configurei isso para salvar a cada hora apenas, mas a umidade é uma grande preocupação para mim, então eu quero ver como ele está mudando 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, você DEVE armazená-los pelo menos uma vez por minuto. Não importa se os dados do sensor são atualizados com rapidez, basta informar ao rr4dj para armazená-lo 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 armazenar dados

Em seguida, 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 seu mapa do site:

 Item do gráfico = Período do Quarto_Humidade = h 

Isso é literalmente tudo que você precisa. Os valores válidos para o período são h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; deveria 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 você pode usar esse gráfico em outro lugar; está gerando uma imagem usando o seguinte URL: http: // YOUROPENHABURL: 8080 / chart? groups = Umidade e período = h

Como está o seu sistema OpenHAB?

É isso para esta parte do guia, mas não espere que seja a última vez que você nos ouve 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á completamente terminado.

Felizmente, o OpenHAB pode escalar bem de alguns dispositivos a centenas, da 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 por favor, se você achou este guia útil, clique nesses botões de compartilhamento para dizer aos seus amigos como eles também podem configurar seu próprio sistema OpenHAB.

In this article