Como separar valores MQTT

Bom dia a todos!

Atualmente tenho uma conexão com 5 dispositivos que enviam mensagens JSON para o MQTT.
Cada dispositivo envia a seguinte mensagem:

{"Setor":"node01","Valor":13}
{"Setor":"node02","Valor":20}
{"Setor":"node03","Valor":35}
....

Quando chega no Nodered eu consigo visualizar os valores pelo Debug.
001
002

Eu estou tentando a dias separa esse valores individualmente, como se fosse um Switch do nodered, porem sem sucesso.
Algo do tipo…

Alguem tem alguma ideia de como eu faço isso?
Desde já agradeço por qualquer ajuda…

Vc quer criar um sensor no HA com base no valor?

Bom dia
Na verdade seriam 5 sensores!

Tem diversos jeitos de fazer, eu particularmente uso mais assim:

image

nó function:

msg.entity_id = 'sensor.nome'

msg.payload = {

    data: {

        state: msg.payload.Valor,

        attributes: {

            friendly_name: 'Nome Bonito',

        }

    }

};

return msg;

Nó API

[{"id":"8d6a4a75c80cbf74","type":"ha-api","z":"f727fdcc.c16a4","name":"","server":"d854bbe5.321208","version":1,"debugenabled":false,"protocol":"http","method":"post","path":"/api/states/{{entity_id}}","data":"","dataType":"json","responseType":"json","outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"results"}],"x":970,"y":1480,"wires":[[]]},{"id":"d854bbe5.321208","type":"server","name":"Home Assistant","version":4,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m"}]

O que queres fazer é relativamente fácil e quase que chegaste lá, embora não tenhas mostrado a configuração dos nodes para saber o que fizeste.

Tal como tens, para iniciar usas um MQTT In para ler o tópico que tem os valores.

image

Se colocares um Debug na saida do MQTT terás algo parecido com isto:

image

Se o valor que queres usar for o C1, neste exemplo, colocas o rato em cima do valor na janela de debug e irão aparecer três icones:

image

O primeiro permite-te copiar a path para o valor pretendido.

De seguida colocas um Change para te mover o valor para outra msg, por exemplo:

image

Repetes este passo as vezes necessárias para todos os valores, ficando assim:

Neste caso o valor do C1 está na msg com o valor payload.COUNTER.C1 (no teu caso será diferente) e será movido para a msg com o valor node1. Fazes o mesmo para todos os valores que pretendes separar.

Assim ficas com o valor de cada dispositivo em msg diferentes.

Finalmente, e partindo do principio que queres utilizar estes valores no HA, colocas um Entity que vai ler cada uma msg especifica para cada valor.

Crias um Entity para cada msg, mudando apenas o State e o Name de cada node. O resultado final é este:

image

Espero que ajude!

Jorge, boa tarde!

Não funcionou…
Os valores que chegam pelo MQTT não consegui separar com sua ajuda.
No meu debug aparece assim…
image

Passando o mouse sobre o object no debug retorna os valores:

path = payload
value = {"Setor":"node03","Valor":0}

Obrigado pela ajuda!

Coloca o rato em cima de valor: para ver qual a path.

O Path que ele retorna é:
Para Setor - payload.Setor
Para valor - payload.Valor

Atenciosamente…

Então se queres o valor tens de usar o payload.Valor.


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


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