Integração de dados do registrador ESP8266 / DSRM com Home-Assistant

Colocado sobre

Plataforma: 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:

pi@raspberry:~ $ sudo apt update
pi@raspberry:~ $ sudo apt install -y mosquitto mosquitto-clients
Para iniciar automaticamente o servidor mosquito ao iniciar seu RPi, digite:

pi@raspberry:~ $ sudo systemctl enable mosquitto.service
Tanto para a teoria.

Integração

A integração entre o ESP8266 e o Home-Assistant via MQTT fica esquematicamente assim:
ESP/MQTT/HA 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.
1of!-ESP12 Proto GY68 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:
#include 
#include
Claro que você deve primeiro baixar a biblioteca “Adafruit_BMP085” (https://github.com/adafruit/Adafruit-BMP085-Library) e instale-o no Arduino IDE!

As linhas 31, 32 e 33 precisam ser modificadas para sua instalação.
31 const char* ssid = "........";
32 const char* senha = "........";
33 const char* mqtt_server = "broker.mqtt-dashboard.com";
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).

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!)
//Conecte o GND ao terra
// Conecta SCL ao relógio i2c - no GPIO05
// Conecta SDA aos dados i2c - no GPIO04
Adafruit_BMP085 bmp;
e em setup() após a linha 113 adicione isto:
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:
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 MQTT
char* mqttPasswd = "..."; // .. e sua senha
A linha 92 diz:
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 Saída ESP8266 MQTT
Agora faça login no seu servidor HA e digite:
mosquitto_sub -h  -u  -P mqttPasswd> -v -t ESP8266/#
A 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/”.

Em seguida, você verá as seguintes informações aparecerem:
mosquito_sub 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:
mqtt:
corretor:
postagem: 1883
client_id: HassIO
manter vivo: 60
nome de usuário:
senha:
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:
grupo: !include_dir_merge_named groups/
sensor: !include_dir_merge_list sensores/
no mapa ~/.homeassistant/sensors/ vamos criar um novo arquivo chamado esp8266.yaml que tem este conteúdo:
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:
Depois de reiniciar o Home-Assistant, podemos admirar os dados no Front-end.
Interface HA 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 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)
#
@reboot /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
# comando m h dom mon dow
# todo minuto
* * * * * /home/homeassistant/.homeassistant/scripts/DSMR_Actual.py
#
O programa DSMR_Actual.py tem o seguinte conteúdo:
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:
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:
grupo: !include_dir_merge_named groups/
sensor: !include_dir_merge_list sensores/
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
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 Energia real do assistente doméstico
Não está mais disponível
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
postado por Local na rede Internet Willem Aandewiel (1955) tem formação em eletrônica e técnicas digitais. No entanto, na maior parte de sua vida profissional, ele trabalhou em automação, onde trabalhou em praticamente todas as disciplinas, de programador a líder de projeto e gerente de projeto. Willem foi um dos primeiros holandeses com um microcomputador (KIM-1, 1976) numa época em que o PC ainda não havia sido inventado. Actualmente dedica-se principalmente à concepção e produção de pequenos circuitos electrónicos com microprocessadores. Sua 'missão na vida' é fazer as pessoas se entusiasmarem em fazer seus próprios circuitos eletrônicos, microcomputadores e programação.

Comentários

Webwinkelkeur Kiyoh Trustpilot Opencircuit