Integração de dados do registrador ESP8266 / DSRM com Home-Assistant
Colocado sobrePlataforma: MQTT
A maneira mais fácil de compartilhar dados em um ESP8266 com Home-Assistant (HA) é por meio de um broker MQTT. Um broker MQTT é um serviço executado na instalação HassIO do HA por padrão. MQTT significa Transporte de telemetria de enfileiramento de mensagens sistema e consiste em clientes que se comunicam com um servidor (o 'broker'). Um cliente pode ser um assinante (alguém que solicita dados) e um publicador (alguém que fornece dados). As informações são agrupadas em 'tópicos'. Se um editor tiver novas informações, ele as envia ao corretor. O corretor então garante que todo cliente que tenha uma assinatura desse tópico específico receba essas novas informações.Os tópicos são organizados hierarquicamente, o que significa que um tópico, por exemplo “ESP8266/Abc/Temperatura”, é composto por “ESP8266, sob o qual está “Abc” e sob o qual está “Temperatura”. Por exemplo, a hierarquia “ESP8266/Abc/” também pode conter “Pressão de ar” (ESP8266/Abc/Pressão de ar). Se um cliente tiver uma assinatura apenas “ESP8266”, ele também receberá todas as mensagens que se enquadram nela!
Se um novo cliente se registrar com interesse em um determinado tópico, esse cliente receberá imediatamente as informações mais recentes sobre esse tópico. O assinante, portanto, não precisa esperar por uma atualização para este tópico. Ele sempre obtém, instantaneamente, as últimas informações conhecidas.
Se o broker MQTT (mosquitto) não estiver instalado em seu Raspberry Pi , você ainda poderá fazê-lo:
Para iniciar automaticamente o servidor mosquito ao iniciar seu RPi, digite:
pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
pi@raspberry:~ $ sudo systemctl enable mosquitto.serviceTanto para a teoria.
Integração
A integração entre o ESP8266 e o Home-Assistant via MQTT fica esquematicamente assim: ESP/MQTT/HA
Para poder se conectar a um broker MQTT com o ESP8266, a biblioteca pubsubcliente por Nick O'Leary
ser instalado no Arduino IDE (https://github.com/knolleary/pubsubclient).
Como exemplo utilizamos um projeto onde o ESP8266 lê um sensor BMP085 (GY-68) e envia os dados para o broker MQTT.Eu tenho o circuito como mostrado na imagem abaixo 1 de! protótipo placa (esquerda) soldada e o Sketch na 1or!-ESP12 sinal (à direita) piscou.
ser instalado no Arduino IDE (https://github.com/knolleary/pubsubclient).
Como exemplo utilizamos um projeto onde o ESP8266 lê um sensor BMP085 (GY-68) e envia os dados para o broker MQTT.Eu tenho o circuito como mostrado na imagem abaixo 1 de! protótipo placa (esquerda) soldada e o Sketch na 1or!-ESP12 sinal (à direita) piscou.
1of!-ESP12 Proto GY68
Depois de instalar a biblioteca mencionada, existem em “Ficheiro->Exemplos” / ”Ficheiro->Exemplos” colocou uma série de programas de exemplo em “PubSubClient”. Para esta introdução assumimos o programa “mqtt-esp8266” e todos os números de linha referem-se às posições em o esboço original!
Após a linha 27, as duas linhas a seguir devem ser adicionadas:
As linhas 31, 32 e 33 precisam ser modificadas para sua instalação.
Após a linha 36, o seguinte código deve ser adicionado:
Se chegar uma mensagem no tópico “inTopic”, a função se torna ligar de volta()chamado onde, no programa de exemplo, nas linhas 73 a 80, dependendo do conteúdo da mensagem, o BUILTIN_LED é ativado ou desativado. Não usarei essa funcionalidade e esses tópicos neste post.
Como queremos principalmente enviar dados do ESP8266 para o HA para este post, vamos criar uma função extra que fica assim:
Após a linha 27, as duas linhas a seguir devem ser adicionadas:
#includeClaro que você deve primeiro baixar a biblioteca “Adafruit_BMP085” (https://github.com/adafruit/Adafruit-BMP085-Library) e instale-o no Arduino IDE!
#include
As linhas 31, 32 e 33 precisam ser modificadas para sua instalação.
31 const char* ssid = "........";Abelha ssid você deve digitar o nome da sua rede WiFi e em senha a senha da sua rede WiFi. Abelha mqtt_server você deve inserir o endereço IP do seu servidor HA (que no HA geralmente é o mesmo endereço IP do seu servidor HA).
32 const char* senha = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
Após a linha 36, o seguinte código deve ser adicionado:
// Conecte o VCC do sensor BMP085 a 3,3V (NÃO 5,0V!)e em setup() após a linha 113 adicione isto:
//Conecte o GND ao terra
// Conecta SCL ao relógio i2c - no GPIO05
// Conecta SDA aos dados i2c - no GPIO04
Adafruit_BMP085 bmp;
if (!bmp.begin()) >O esboço tem um inscrição sobre o assunto "inTopic” e publica no tópico “outTopic”.
Se chegar uma mensagem no tópico “inTopic”, a função se torna ligar de volta()chamado onde, no programa de exemplo, nas linhas 73 a 80, dependendo do conteúdo da mensagem, o BUILTIN_LED é ativado ou desativado. Não usarei essa funcionalidade e esses tópicos neste post.
Como queremos principalmente enviar dados do ESP8266 para o HA para este post, vamos criar uma função extra que fica assim:
Essa função lê o BMP085 e imprime os valores encontrados no Serial Monitor e publica esses dados. O tema principal é “ESP8266”. O subtópico “thisDevID” deve ser modificado em um ambiente de produção em “algo” que possa identificar de forma única este 'módulo sensor' (caso tenha mais de um) e abaixo dele uma indicação que indique o tipo de dado (Temperatura, Pressão Barométrica e Altitude). Os valores reais são enviados como uma string json.
Em seguida, alteramos a função loop() da seguinte forma:
Em seguida, alteramos a função loop() da seguinte forma:
laço vazio() > // laço()Se você tem um nome de usuário e senha configurou, você deve usar essas informações ao se conectar ao corretor. Após a linha 33, adicione as duas linhas a seguir:
char* mqttName = "..."; // nome para login MQTTA linha 92 diz:
char* mqttPasswd = "..."; // .. e sua senha
92 if (client.connect(clientId.c_str())) {você tem que ajustar da seguinte forma:
92 if (client.connect(clientId.c_str(), mqttName, mqttPasswd)) {Se você agora subir o programa para o ESP8266 verá no Serial Monitor:
Saída ESP8266 MQTT
Agora faça login no seu servidor HA e digite:
Em seguida, você verá as seguintes informações aparecerem:
mosquitto_sub -hA instalação do MQTT no Raspberry Pi é chamada de 'mosquitto'. Com o comando acima, iniciamos um cliente que se conecta ao servidor MQTT no endereço IP especificado (que em muitos casos será o mesmo endereço IP do endereço IP do servidor HA) com o nome de usuário e a senha que você digitou para configurar o servidor MQTT. A opção “-t” indica que estamos interessados apenas em tópicos que começam com “ESP8266/”.-u -P mqttPasswd> -v -t ESP8266/#
Em seguida, você verá as seguintes informações aparecerem:
mosquito_sub
Agora que temos certeza de que as mensagens do ESP8266 vão parar no broker MQTT, podemos tentar fazer o HA extrair esses valores do MQTT e apresentá-los em seu front-end.
O HA precisa saber quem o corretor MQTT deve contatar. É por isso que estamos levando configuração.yaml arquivar esses dados em:
O HA precisa saber quem o corretor MQTT deve contatar. É por isso que estamos levando configuração.yaml arquivar esses dados em:
mqtt:Eu tenho todas as minhas configurações de grupo na pasta ./grupos e todos os meus arquivos yaml de configuração do sensor na subpasta ./sensores. eu tenho pra isso configuração.yaml também incluiu estas regras:
corretor:
postagem: 1883
client_id: HassIO
manter vivo: 60
nome de usuário:
senha:
grupo: !include_dir_merge_named groups/no mapa ~/.homeassistant/sensors/ vamos criar um novo arquivo chamado esp8266.yaml que tem este conteúdo:
sensor: !include_dir_merge_list sensores/
Nisto dizemos que queremos usar a plataforma mqtt, que dentro das configurações os itens “ESP8266_Temperatura”, “ESP8266_Pressão do ar" e "ESP8266_Altura” ocorrem e os dados da publicação “ESP8266/thisDevID/xxx” deve ser extraído da string json.
Então nós adicionamos na pasta ~/.homeassistant/grupos o arquivo esp8266.yaml com o seguinte conteúdo:
Então nós adicionamos na pasta ~/.homeassistant/grupos o arquivo esp8266.yaml com o seguinte conteúdo:
Depois de reiniciar o Home-Assistant, podemos admirar os dados no Front-end.
Interface HA
Plataforma: restAPI
O Home-Assistant também pode recuperar dados de outros sistemas (por exemplo, do registrador DSMR) por meio de uma restAPI.no mapa ~/.homeassistant/sensors Por exemplo, você precisa inserir as seguintes informações:
No entanto, se a restAPI retornar vários dados com uma solicitação, essa abordagem terá a desvantagem de que, se você chamar a restAPI para cada campo, haverá muitos dados.”vai além da linha" e que o sistema externo também está bastante carregado. Optei por uma abordagem diferente para ler o leitor Smart Meter (logger DSMR).
Plataforma: arquivo
Para ler o registrador DSMR, optei por fazer com que o Home-Assistant extraísse os dados de um arquivo. Esse arquivo está no mesmo computador que também executa o Home-Assistant, o que minimiza a sobrecarga.Funciona assim:
DSMR - Assistente Doméstico
Cron é o daemon Unix/Linux que inicia tarefas com base no tempo. No nosso caso, ele precisa iniciar o script python “DSMR_Actual.py” a cada minuto. Com o comando 'crontab -e' (como usuário root!!), você pode adicionar a seguinte linha no crontab:
# Para obter mais informações, consulte as páginas de manual do crontab(5) e do cron(8)O programa DSMR_Actual.py tem o seguinte conteúdo:
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# comando m h dom mon dow
# todo minuto
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
Na linha 5, 'url' obtém o valor da API restante do logger DSMR que é usado para solicitar os dados atuais. A linha 6 converte isso em uma solicitação para o registrador DSMR e a linha 9 interrompe a resposta de
o registrador DSMR na variável 'r' que é então decodificada na linha 10 e colocada na variável 'resposta'. Por fim, json.dump() grava o conteúdo da resposta no arquivo '/tmp/DSMR-Actual.json'.
O conteúdo do arquivo '/tmp/DSMR-Actual.json' tem a seguinte aparência:
o registrador DSMR na variável 'r' que é então decodificada na linha 10 e colocada na variável 'resposta'. Por fim, json.dump() grava o conteúdo da resposta no arquivo '/tmp/DSMR-Actual.json'.
O conteúdo do arquivo '/tmp/DSMR-Actual.json' tem a seguinte aparência:
Para manter as coisas um pouco claras, coloquei todos os programas e scripts que uso para o Home-Assistant (HA) na pasta ~/.homeassistant/scripts/ parou.
Agora tudo o que temos a fazer é deixar claro para HA que eles podem extrair os dados do registrador DSMR do arquivo /tmp/DSMR-Actual.json preciso ter.
Eu tenho todos os sensores no mapa ~/homeassistant/sensores parou. No configuração.yaml arquivo eu tenho a seguinte referência:
analisado e incluído.
Um dos arquivos de configuração do sensor é DSMT_Actueel.yaml. Este tem o seguinte conteúdo:
Agora tudo o que temos a fazer é deixar claro para HA que eles podem extrair os dados do registrador DSMR do arquivo /tmp/DSMR-Actual.json preciso ter.
Eu tenho todos os sensores no mapa ~/homeassistant/sensores parou. No configuração.yaml arquivo eu tenho a seguinte referência:
grupo: !include_dir_merge_named groups/Essas regras garantem que todos os arquivos .yaml que estão na pasta grupos/ ou sensores/ ser salvo como um arquivo de configuração da instalação do HA
sensor: !include_dir_merge_list sensores/
analisado e incluído.
Um dos arquivos de configuração do sensor é DSMT_Actueel.yaml. Este tem o seguinte conteúdo:
Para realmente obter esses dados no front-end do HA, a pasta ~/.homeassistant/groups/ um arquivo DSMR logger.yaml são criados com o seguinte conteúdo:
Com o reinício do Home-Assistant podemos admirar os dados do leitor Smart Meter:
Energia real do assistente doméstico
Módulo WIFI ESP8266 ESP-01SO módulo WiFi ESP8266 foi apresentado como um módulo TTL "Serial to Internet" em seu lançamento. Útil para conectar placas Arduino à internet. Em estoque € 4,65