Viva comunidade,
Partilho um projeto em que tenho vindo a trabalhar nas últimas semanas.
Objetivo
Integrar devices Shellys via MQTT usando o NR
Pré-requisitos
- O(s) Shelly(s) a criar já estão conectados à rede WIFI
- Broker MQTT configurado
- Função conhecida de cada Shelly (luz, switch, etc)
- IP do Shelly conhecido;
- NodeRed - palletes random-generator_node-red-contrib e node-red-contrib-loop-processing
Memória descritiva:
Este projeto nasceu numa brincadeira onde eu gostava de ter alguns dados dos Shelly’s que habitualmente não estão disponíveis no HA. A forma mais rápida de ter conhecimento destes dados era via app oficial ou web page de cada Shelly.
Foto da primeira versão:
A este conjunto de dados chamei atributos e os mesmos aparecem na versão atual, não como entidades (como na imagem acima) mas sim como atributos de uma das entidades de cada Shelly (habitualmente entidades switch ou light ):
Indo à parte mais interessante, o flow p/ criar os devices/entidades/atributos é:
O flow está dividido em 4 partes:
-
1ª parte - comum - Header ou cabeçalho de cada Shelly
-
2ª parte - composta por 5 flow - um especifico p/ cada tipo de Shelly
Define as entidades p/ cada tipo de Shelly -
3ª parte - comum - publica no brokre MQTT os dados, criando os devices/entidades
-
4 parte - comum - faz uma consulta à API de cada Shelly e publica no borker MQTT(atualização de hora em hora):
Existem 3 pontos importantes neste flow (na realidade são 7, mas 5 são muito semelhantes):
- Node: Entidades (este repete 5x mas com conteúdo adaptado a cada tipo de Shelly)
É neste node (node template) onde colocámos todo o YAML que habitualmente usamos nos ficheiros YAML para criar entidades:
Exemplo p/ o Shelly 1 (é o mais pequeno)
device: '{{{shelly.header.device}}}'
topics:
{{! Relé de comando }}
- topic: homeassistant/{{shelly.type}}/shelly_{{shelly.short_name}}_ch{{shelly.channel0}}/config
payload:
'{
"name": "{{shelly.channel0_name}}",
"state_topic": "shellies/{{shelly.settings.device.hostname}}/relay/0",
"command_topic": "shellies/{{shelly.settings.device.hostname}}/relay/0/command",
"json_attributes_topic": "shellies/{{shelly.settings.device.hostname}}/attributes",
"icon": "{{shelly.icon}}",
"unique_id": "{{shelly.uuid.0}}",
"payload_on": "on",
"payload_off": "off",
"payload_available": "true",
"payload_not_available": "false",
"optimistic": "false",
"qos": "1",
"retain": "false",
"device": {##device##}
}'
- topic: homeassistant/{{shelly.type_sensor}}/shelly_{{shelly.short_name}}/hasupdate/config
payload:
'{
"name": "{{shelly.full_name}} | Update", {{!shelly.full_name}}
"state_topic": "shellies/{{shelly.settings.device.hostname}}/hasupdate",
"icon": "mdi:update",
"force_update": "true",
"unique_id": "{{shelly.uuid.1}}",
"device": {##device##}
}'
retain: true
-
Node: # UUID (node change)
p/ cada device/entidade é necessário um identificador único, este conjunto de nodes define a quantidade necessário.
Usando o caso do Shelly 1, temos um device e um sensor, sendo necessários dois identificadores únicos (UUID):
Por curiosidade, para o Shelly 3M foram necessários 20 UUID. -
Node: Shelly | Lista (Subflow) <<<<<------- é node mais importante e onde devemos fazer as alterações com os dados dos nossos Shellys
Este node é um Subflow:
O node Lista de Shelly’s é onde colocámos a informação requerida e comentada no ponto pré-requisitos:
Nesta lista e para cada Shelly devemos/podemos alterar todos os campos sombreados a amarelo com a seguinte informação: -
Short name: Nome curto será a base de todas as entidades que serão criadas para cada Shelly, exemplo:
-
Full name: Nome que surgirá na UI[/floatl]
-
IP: ip do Shelly na nossa rede <<<<<<----- CAMPO OBRIGATÓRIO
-
Channel_name: nome da cada um dos canais de comando dos Shelly’s, por exemplo, o Shelly 2.5 tem dois canais, channel0 e channel1
-
Icon: podem colocar o icon que desejarem, por exemplo da biblioteca MDI
Depois de estar tudo devidamente configurado, basta correr o flow, carregando no node Cria devices/entidades (node injetc):
Após o flow correr e se tudo estiver bem, na integração MQTT irão aparecer os devices:
Não faço uma descrição detalhada de cada NODE, mas se houver alguma questão posso esclarecer.
Limitações:
O flow só considera os seguintes Shellys (não tenho outros para testar):
- 3EM – sensores de energia em W.min
- 25 – sensores de energia em W.min
- 1 – não considera sensores adicionais
- 1PM – não considera sensores adicionais
- Smart Plug S – sensores de energia em W.min
Flow: https://pastebin.com/raw/Fp1nsv9c
Notas finais
- Este projeto ainda é um WIP - Work in progress;
- Provavelmente (é caso certo) poderá haver algum bug;
- Se porventura a explicação estiver pouco clara, ou se houver dúvidas, estejam à vontade para questionar;
- Sintam-se livres p/ comentar, alterar, complementar, etc, o flow, mas não se esqueçam de partilhar as alterações/sugestões;
Um agradecimento especial ao @pmfernandes pelo apoio e orientação.
Obrigado