[MQTT + Shelly + NR] Criar devices & entidades

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:

image

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

image

Indo à parte mais interessante, o flow p/ criar os devices/entidades/atributos é:

image

O flow está dividido em 4 partes:

  • 1ª parte - comum - Header ou cabeçalho de cada Shelly


    image

  • 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
    image

  • 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)
    image
    É 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)
    image
    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):
    image
    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
    image
    Este node é um Subflow:
    image
    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:
    image
    image

  • Full name: Nome que surgirá na UI[/floatl]
    image

  • 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
    image

  • 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):
image

Após o flow correr e se tudo estiver bem, na integração MQTT irão aparecer os devices:
image

image

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

4 Curtiram

Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade