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

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

Gratuito 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 totalmente frustrante.





Na parte 1 do guia, mostrei-lhe instalando OpenHAB em um Raspberry Pi , apresentou os principais conceitos do OpenHAB e mostrou como adicionar seus primeiros itens ao sistema. Hoje iremos mais longe:





  • Adicionando dispositivos ZWave
  • Adicionando um controlador Harmony Ultimate
  • Apresentando regras
  • Apresentando MQTT e instalando um broker MQTT em seu Pi, com sensores em um Arduino
  • Registro de dados e representação gráfica

Introdução ao Z-Wave

O Z-Wave tem sido o protocolo de automação residencial dominante há anos: é confiável, foi amplamente desenvolvido e funciona em um alcance muito mais longo 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 funcionam com 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 OpenHAB, recomendo que 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é que você tenha a chance de experimentar alguns. A única razão para escolher Z-Wave é se você não está 100% satisfeito com o OpenHAB e gostaria de deixar suas opções abertas no futuro: Z-Wave, por exemplo, funciona com hub Samsung SmartThings, 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 configure a rede Z-Wave primeiro , antes que o OpenHAB possa começar a consultar os dados. Se você tem uma placa controladora Rasberry, você tem algum software fornecido para configurar a rede, então não vamos cobrir isso aqui. Se você comprou um controlador Aeotec USB Z-Stick ou similar, provavelmente não possui nenhum software incluído, então continue lendo.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB para criar gateway (branco comum) COMPRE AGORA NA AMAZON

Se você já tem uma configuração de rede Z-Wave , você pode simplesmente 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 sua própria maneira 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, leve-o para perto do dispositivo que você está pareando e pressione o botão de inclusão nele também (isso também vai 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 do seu dispositivo) .





O Z-Stick pisca brevemente para indicar sucesso. Isso apresenta problemas ao reconectá-lo ao Pi, pois uma nova porta é atribuída. Reinicie o seu Pi para que ele seja redefinido para a porta padrão se você descobrir que ele foi reatribuído dinamicamente a uma porta diferente. Melhor ainda: não o conecte ao Pi antes de fazer todos os emparelhamentos de hardware primeiro.

Instalando HABmin e Z-Wave Bindings

Como o OpenHAB não é realmente um utilitário de configuração para o Z-Wave, vamos instalar outra ferramenta de gerenciamento da web que o faz - algo chamado HABmin. Vá para o Repositório HABmin Github baixe a versão atual. Depois de descompactá-lo, você encontrará 2 .jar arquivos no diretório de complementos - eles devem ser colocados no diretório de complementos correspondente em seu compartilhamento OpenHAB Home (se você também estiver usando o Aotec gen5 Z-Stick, certifique-se de ter pelo menos a versão 1.8 da encadernaçã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á.

Observação: 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 ambos apenas para ver qual você prefere.

Conecte seu controlador ao Pi, caso ainda não tenha feito isso. 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 uma vez depois, para que você possa ver o que muda se não tiver certeza.

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

sudo usermod -a -G dialout openhab

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

sudo service openhab restart

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

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

Configurando itens Z-Wave

Cada dispositivo Z-Wave terá uma configuração específica para 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 haja suporte por enquanto.

Primeiro, eu tenho um interruptor de alimentação Everspring AN158 básico e medidor no Nó 3. Uma rápida pesquisa no Google me levou a uma postagem de blog em Wetwa.re, com uma configuração de item de amostra. Eu adaptei isso da seguinte forma:

Mude Desumidificador_Switch 'Desumidificador' {zwave = '3: comando = switch_binary'}

Número Desumidificador_Watts 'Consumo de energia do desumidificador [% .1f W]' {zwave = '3: comando = medidor'}

Perfeito.

O próximo é um multissensor Aeotec Gen5.

Aeon Labs Aeotec Z-Wave Gen5 multissensor (Z-Wave Plus) COMPRE AGORA NA AMAZON

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

Number Hallway_Temperature 'Hallway Temperature [% .1f ° C]' (Hallway, Temperature) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Number Hallway_Humidity 'Hallway Humidity [% .0f %%]' (Hallway, Humidity) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Number Hallway_Luminance 'Hallway Luminance [% .0f Lux]' (Hallway) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Entre em contato com Hallway_Motion 'Movimento do corredor [% s]' (Corredor, movimento) {zwave = '2: 0: command = sensor_binary, respond_to_basic = true'}

Número sensor_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 do iniciante , especificamente a seção de ligação Hue, onde explico como os itens são adicionados. Você provavelmente só precisará copiar e colar exemplos como este, mas no caso de você ter um novo dispositivo, a documentação de ligação detalha todos os comandos .

Logitech Harmony Binding

Antes de entrarmos nas regras, gostaria de adicionar uma nota rápida sobre como trabalhar com a vinculação do Harmony. Sou um grande fã da série Harmony de controles remotos definitivos para simplificar a experiência do media center doméstico, mas eles costumam ser um sistema separado dentro da 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 que você encontra usando apt-cache para procurar por 'harmonia':

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

sudo apt-get install openhab-addon-action-Harmonhub

sudo apt-get install openhab-addon-binding-harmonhub

sudo apt-get install openhab-addon-io-harmonhub

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 REMOTOS HARMONY ###########

Harmonyhub: host = 192.168.1.181 ou seu ip

Harmonyhub: username = seu-harmonia-email-login

Harmonyhub: senha = 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, aqueles que você insere ao iniciar o utilitário de configuração Harmony padrão. É isso. Ao reiniciar o Hue, o 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 copiá-lo para referência futura. você pode tornar ainda mais fácil de ler com nós recolhíveis colando em um formatador JSON online como este .

Assim como a atividade PowerOff padrão, que é um 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 as atividades. Primeiro, em seu arquivo de itens, adicione a seguinte linha. Altere o grupo e o ícone se desejar.

/ * Harmony Hub * /

String Harmony_Activity 'Harmony [% s]' (Living_Room) {Harmonyhub = '* [currentActivity]'}

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

Switch item = Harmony_Activity mappings = [PowerOff = 'Desligado', Exercício = 'Exercício', 13858434 = 'TV', Karaokê = 'Karaokê']

modelo de lista de tarefas do google docs

No colchete, você verá cada atividade junto com o rótulo. Geralmente, você pode se referir diretamente às atividades conforme as nomeou no controle remoto, mas a exceção a isso que 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 JSON. Salve e atualize sua interface, você verá algo semelhante a isto:

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

Uma introdução geral às regras

A maioria dos hubs de casa inteligente inclui algum tipo de criação de regras para que você possa reagir automaticamente aos dados do sensor e eventos na casa. Na verdade, eu diria que uma casa verdadeiramente inteligente não é aquela em que você precisa gastar tempo interagindo com aplicativos móveis - ela é invisível para o usuário final e totalmente automatizada. Para esse fim, o OpenHAB também inclui uma linguagem de script de regras poderosa que você pode programar, excedendo em muito a complexidade da maioria dos hubs domésticos inteligentes ou receitas IFTTT.

Regras de programação parecem pior do que realmente são. Vamos começar com um par de regras que ligam ou desligam a luz dependendo do sensor de presença:

regra 'Luz do escritório acesa quando James estiver presente'

quando

Item JamesInOffice alterado de OFF para ON

então

sendCommand (Office_Hue, ON)

fim

regra 'Luz do escritório desligada quando James sai'

quando

Item JamesInOffice alterado de ON para OFF

então

sendCommand (Office_Hue, OFF)

fim

Primeiro, nomeamos a regra - seja descritivo, para saber qual evento está sendo disparado. Em seguida, definimos nossa regra simples dizendo quando x é verdadeiro, então faça y . Fim significa o fechamento dessa regra particular. Há uma série de palavras especiais que você pode usar nas regras, mas por enquanto estamos lidando com duas partes simples de sintaxe - Item , que permite consultar o estado de algo; e sendCommand , que faz exatamente o que você pensa que fará. Eu disse que isso era fácil.

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

Vejamos outro exemplo para criar uma regra programada.

regra 'Exercite-se todas as manhãs'

quando

Cron '0 0 8 1/1 *? * '

então

harmoniaStartActivity ('Exercício')

fim

Novamente, nomeamos a regra, determinamos as condições em que ela deve ser acionada e as ações a serem executadas. 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 Quartz Scheduler (o formato é ligeiramente diferente de um CRONtab regular). eu usei cronmaker.com para ajudar a criar a expressão, mas você também pode ler o guia de formato [Não mais disponível] para uma explicação detalhada e mais exemplos.

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

Minhas regras dizem simplesmente '8h todas as manhãs, todos os dias da semana, diga ao meu sistema Harmony Ultimate para iniciar a atividade de exercícios', 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 mostrar a vocês é algo que uso para gerenciar os níveis de umidade em minha casa. Eu tenho um único desumidificador que preciso mover sempre que necessário, então decidi olhar todos os meus sensores de umidade, descobrir qual deles é o mais alto e armazenar isso em uma variável. Atualmente é acionado a cada minuto, mas pode ser facilmente reduzido. 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 Time cron '0 * * * *?'

então

var prevHigh = 0

var highHum = ''

Umidade? .Members.forEach [hum |

logDebug ('umidade.regras', hum.nome);

if (hum.state as DecimalType> prevHigh) {

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '%'

}

pacote amazon diz entregue, mas não foi

]

logDebug ('umidade.regras', 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 pega todos os itens desse grupo; para cada itera sobre eles (com um curioso formato de colchetes com o qual você provavelmente não está familiarizado). A sintaxe das regras é um derivado do Xtend, então você pode ler o Documentação Xtend se você não consegue encontrar um exemplo para se adaptar.

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

MQTT para OpenHAB e Internet das coisas

MQTT é um sistema de mensagens leve para comunicação máquina a máquina - uma espécie de Twitter para que seus Arduinos ou Raspberry Pis conversem entre si (embora, é claro, funcione com muito mais do que apenas esses). Ele está ganhando popularidade rapidamente e se tornando um lar com os dispositivos da Internet das Coisas, que normalmente são microcontroladores de poucos recursos que precisam de uma maneira confiável para transmitir dados do sensor de volta ao hub ou receber comandos remotos. Isso é exatamente o que faremos com ele.

Mas por que reinventar a roda?

O MQ Telemetry Transport foi inventado em 1999 para conectar oleodutos por meio de conexões lentas de satélite, especificamente projetadas para minimizar o uso da bateria e largura de banda, ao mesmo tempo em que fornece entrega confiável 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 de Internet das Coisas. Em 2010, o protocolo foi lançado sem royalties, aberto para qualquer pessoa usar e implementar. Nós gostamos de grátis.

Você deve estar se perguntando por que estamos nos incomodando com outro protocolo - afinal, já temos o HTTP - que pode ser usado para enviar mensagens rápidas entre todos os tipos de sistemas conectados à web (como OpenHAB e IFTTT, especialmente com o novo canal Maker ) E você estaria certo. No entanto, a sobrecarga de processamento de um servidor HTTP é muito grande - tanto que você não pode facilmente executar 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, por outro lado, é leve, portanto, enviar mensagens pela rede não obstruirá os canos e pode caber facilmente em nosso pequeno espaço de memória do Arduino.

Como funciona o MQTT?

O MQTT requer um servidor (denominado 'intermediário') e um ou mais clientes. O servidor atua como intermediário, recebendo mensagens e retransmitindo-as para quaisquer clientes interessados.

Vamos continuar com o Twitter para máquinas analogia embora. Assim como os usuários do Twitter podem tweetar seus próprios 140 caracteres sem sentido e os usuários 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á, bem como publicar suas próprias mensagens para esse canal. Este padrão de publicação e assinatura é conhecido como pub / sub , ao contrário da tradição servidor cliente modelo de HTTP.

O HTTP requer que você alcance a máquina com a qual está se comunicando, diga Olá, e depois fique constantemente reconhecendo um ao outro enquanto você 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 quaisquer clientes inscritos. Qualquer cliente pode publicar e assinar tópicos, assim como um usuário do Twitter.

Ao contrário do Twitter, porém, MQTT não está limitado a 140 caracteres. É agnóstico em relação aos dados, então você pode enviar pequenos números ou grandes blocos de texto, datagramas formatados em JSON ou até mesmo imagens e arquivos binários.

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

Também é importante saber que o OpenHAB não atuará como seu corretor MQTT - trataremos disso mais tarde. No entanto, o OpenHAB atuará como um cliente: ele pode publicar seu log de atividades do OpenHAB, bem como ligar canais específicos a dispositivos, portanto, você pode, por exemplo, ter um switch que é controlado por mensagens MQTT em um canal específico. Isso é ideal para criar uma casa cheia de sensores.

Instale o Mosquitto em 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 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 internamente, então instalei o Mosquitto no Pi.

Infelizmente, a versão disponível através do apt-get usual 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 add mosquitto-repo.gpg.key

cd /etc/apt/sources.list.d/

sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list

sudo apt-get install mosquitto

Isso é tudo que precisamos fazer para ter um servidor MQTT instalado e funcionando na rede local. Seu broker está sendo executado 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 nome do seu Raspberry Pi. Salve e clique em conectar. Se o pequeno semáforo no canto superior direito ficar verde, você está pronto para continuar.

Para um teste rápido, clique na guia 'inscrever-se' e digite inTopic / na caixa de texto e, em seguida, clique no Se inscrever botão. Você agora está inscrito para receber mensagens no tópico chamado inTopic, embora não mostre nenhuma mensagem. Volte para a guia de publicação, digite inTopic na caixa pequena e uma mensagem curta na caixa de texto grande abaixo. Bater Publicar algumas vezes e olhe para trás na guia de inscrição. Você deve ver algumas mensagens que apareceram nesse tópico.

Antes de adicionarmos alguns sensores reais à nossa rede, precisamos aprender sobre os níveis dos tópicos, que nos permitem estruturar e filtrar a rede MQTT. Os nomes dos 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, que é hierárquico, por exemplo, a seguir estão todos os níveis de tópico válidos.

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 prática recomendada 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 sensor no mesmo canal .

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

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

myHome / + / temperatura

inscreveria o cliente em ambos

myHome / livingRoom / temperatura

myHome / cozinha / temperatura

... mas não os níveis de umidade.

O # é um caractere curinga de vários níveis, então você pode buscar qualquer coisa da matriz de sensores livingRoom com:

myHome / livingRoom / #

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

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

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

Publicando MQTT de um Arduino com conexão Ethernet

Se você tiver um dispositivo híbrido compatível com o Arduino com Wi-Fi ou Ethernet integrado, isso também deve funcionar. Eventualmente, vamos querer uma forma melhor / mais barata de comunicação do que ter que 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 , em seguida, retire os dois arquivos do src pasta e mova-os um nível acima para a raiz da pasta baixada. Em seguida, mova toda a pasta para o seu Arduino / bibliotecas diretório.

Aqui está meu código de amostra que você pode adaptar : a saída do sinal DHT11 está no pino 7. Altere o IP do servidor para aquele do 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 nomenclatura Bonjour seria uma grande quantidade de memória que não queremos desperdiçar. Para alterar os tópicos sobre os quais os dados do sensor estão sendo transmitidos, role para baixo até estas linhas:

buffer char [10];

dtostrf (t, 0, 0, tampão);

client.publish ('openhab / himitsu / temperature', buffer);

dtostrf (h, 0, 0, tampão);

client.publish ('openhab / himitsu / umidade', buffer);

O código também inclui inscrição em um canal de comando. Encontre e ajuste a seguinte linha:

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

Examine o código ali e você verá que pode controlar facilmente um LED ou relé, por exemplo, enviando comandos para canais específicos. No código de exemplo, ele simplesmente envia uma mensagem de volta confirmando o recebimento do comando.

Faça upload de seu código, conecte seu Arduino à rede e, usando MQTT.fx, inscreva-se em qualquer # ou openhab / himitsu / # (ou qualquer outro nome para o qual você mudou o nome da sala, mas não se esqueça de incluir o # no final). Em breve você verá mensagens chegando; e se você enviar ON ou OFF para o tópico de comando, você verá confirmações voltando também.

MQTT Binding para OpenHAB

A etapa final da equação é conectá-lo ao OpenHAB. Para isso, é claro que precisamos de uma ligação.

sudo apt-get install openhab-addon-binding-mqtt

sudo chown -hR openhab: openhab / usr / share / openhab

E edite o arquivo de configuração para habilitar a vinculação.

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

mqtt: broker.clientId = openhab

Reinicie o OpenHAB

sudo service openhab restart

Então, vamos adicionar um ou dois itens:

/ * Sensores MQTT * /

Número Himitsu_Temp 'Temperatura Himitsu [% .1f ° C]' (Himitsu, Temperatura) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Número Himitsu_Humidity'Himitsu Umidade [% .1f %%] '(Himitsu, Umidade) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Agora você deve entender o formato; está recebendo um Número do item 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 um array de sensores baseado em Arduino barato. Estaremos revisitando isso no futuro e colocando 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 acontecer de você ter um desses.

Dados de persistência e gráficos

Agora você provavelmente já configurou um monte de sensores, seja do Z-Wave ou Arduinos customizados executando MQTT - então você pode visualizar o estado atual desses sensores a qualquer momento, e você também deve reagir ao seu valor nas regras. Mas o interessante sobre os valores do sensor geralmente é que eles mudam com o tempo: é aí que entram a persistência e os gráficos. 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 em rodízio - dados mais antigos são descartados para comprimir 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 no configurações / persistência pasta. 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 restaura-os do banco de dados na inicialização

*: estratégia = everyChange, restoreOnStartup

// em seguida, definimos estratégias específicas de everyHour para qualquer coisa no grupo de Temperatura e a cada minuto para a Umidade

como descobrir quando um artigo foi publicado

Temperatura *: estratégia = everyHour

Umidade *: estratégia = 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. É o mesmo que já fizemos com My.OpenHAB, mas desta vez estamos criando algumas novas estratégias que podemos usar para everyDay, everyHour e everyMinute. Eu não usei todos eles ainda, mas posso usar no futuro.

Na segunda metade do arquivo, informamos a rr4dj quais valores de dados salvar. Como padrão, salvaremos tudo sempre que ele for atualizado, mas também especifiquei algumas estratégias baseadas no tempo para sensores específicos. Não estou muito preocupado com as temperaturas, então configurei para salvar todas as horas apenas, mas a umidade é uma grande preocupação para mim, então quero ver como ela 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ê também quiser representar graficamente os dados, DEVE armazená-los pelo menos uma vez por minuto. Não importa se os dados do seu sensor são atualizados tão rapidamente, você simplesmente precisa dizer ao 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.

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 = Quarto_período de umidade = 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 ; deve ser óbvio o que isso significa. O padrão é D para um dia inteiro de dados, se não for 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

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

Como está Sua Sistema OpenHAB vindo?

É isso para esta parte do guia, mas não espere que esta seja a última vez que você ouvirá de nós sobre o OpenHAB. Espero que este e o guia do iniciante tenham dado a você uma base sólida para desenvolver seu próprio sistema OpenHAB completo - mas é um processo que nunca está totalmente concluído.

Felizmente, o OpenHAB pode escalar bem de alguns dispositivos a centenas, desde a complexidade de regras simples até o que há de mais moderno 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 conversar nos comentários - e por favor, se você achou este guia útil, clique nos botões de compartilhamento para dizer aos seus amigos como eles também podem configurar seu próprio sistema OpenHAB.

Esperamos que goste dos itens que recomendamos e discutimos! A MUO tem afiliados e parcerias patrocinadas, por isso recebemos uma parte da receita de algumas de suas compras. Isso não afetará o preço que você paga e nos ajuda a oferecer as melhores recomendações de produtos.

Compartilhado Compartilhado Tweet O email Um guia para iniciantes em animação de discurso

Animar a fala pode ser um desafio. Se você estiver pronto para começar a adicionar diálogo ao seu projeto, vamos dividir o processo para você.

Leia a seguir
Tópicos relacionados
  • faça você mesmo
  • Lar inteligente
  • Arduino
  • Automação residencial
  • Forma longa
  • Guia Longform
Sobre o autor James Bruce(707 artigos publicados)

James é bacharel em Inteligência Artificial e certificado pela CompTIA A + e Network +. Quando não está ocupado como Editor de Avaliações de Hardware, ele gosta de LEGO, VR e jogos de tabuleiro. Antes de ingressar na MakeUseOf, ele foi técnico de iluminação, professor de inglês e engenheiro de data center.

Mais de James Bruce

Assine a nossa newsletter

Junte-se ao nosso boletim informativo para dicas de tecnologia, análises, e-books grátis e ofertas exclusivas!

Clique aqui para se inscrever