Como capturar um atributo de um payload e usá-lo como dado de serviço!

Olá, pessoal.

Para entender melhor esse tutorial recomendo esse aqui primeiro!

Com a ajuda do pessoal do grupo do telegram, descobri uma maneira simples e rápida de contornar um problema que é bem chato.

Precisava capturar o valor de um determinado atributo de um payload no Node-Red.
No caso, precisava do valor do atributo msg.payload.event.event_response que peguei do payload.

Eu queria utilizar esse valor, que seria um número inteiro no meu caso, para definir a temperatura do ar condicionado, usando o call_service, e o climate.

Assim, o que tive que fazer é uma função (node function) com o seguinte texto:

1

Payload do ar condicionado:

photo_2020-12-22_18-01-17

O caminho do payload é colocado no node function com esse código:

be527581eb18b20cb87c8c23e95d16f70aada49f

newmsg = {};
newmsg.payload = msg.payload.colocarseupayload;
return msg;

No seu caso é só mudar o caminho da informação que você precisa.

O meu flow, no fim das contas, ficou assim:

Resumindo: A função pega somente um atributo da mensagem anterior e cria uma nova mensagem com somente a informação que você precisa.

Espero ter ajudado.

5 Likes

Estou tentando resolver uma situação mas não encontrei como.
A Alexa lê o payload (mensagem do whatsapp) mas também quero fazer a Alexa ler o nome de quem me mandou (android.title).

Tentei usar dentro do call service para meu dispositivo Echo, mas ele lê apenas o payload 2 vezes

{
    "message": "<voice name=''>{{android.title}} {{payload}}.</voice>",
    "data": {
        "type": "tts"
    }
}

Qual seria melhor forma de obter o nome da pessoa também?

1 Like

Pode fazer antes, através de uma função, o armazenamento do que vc quer em uma variável…

Ou o mais simples, usando o node change, criar um segundo payload…

Set | msg.remetente | (string) | msg.data.new_state.attributes.android.title

Pra confirmar só clicar no ícone >_ que há na frente do que vc quer.

{{payload}} funciona, mas quando é um caminho diferente, tem que adaptar.

O que eu consegui aqui foi mais ou menos. Usando o nó Change a Alexa leu o nome da pessoa. Como o change está sendo usado para substituir uma coisa pela outra dessa forma ele não lê o txt da mensagem.
Eu gostaria de ler os DOIS. (“Mensagem de” “Fulano”, “txt da msg”), mas ainda não consegui.

Se for possível, de uma olhada no meu código.

[{"id":"41b7011e2c280d10","type":"server-state-changed","z":"13a11bc58fb374e4","name":"Obtém mensagens do celular","server":"b771286b.8c8f28","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"sensor.pocophone_f1_last_notification","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":520,"y":1920,"wires":[["e89822074472e053","e89822074472e053"]]},{"id":"34e4e0864f9482d8","type":"debug","z":"13a11bc58fb374e4","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1350,"y":1920,"wires":[]},{"id":"e619585fe9877ab1","type":"api-call-service","z":"13a11bc58fb374e4","name":"payload","server":"b771286b.8c8f28","version":3,"debugenabled":false,"service_domain":"notify","service":"alexa_media_echo_dot_sala","entityId":"","data":"{\"message\":\"<voice name=''>Mensagem: {{payload}}</voice>\",\"data\":{\"type\":\"tts\"}}","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":1220,"y":1920,"wires":[["34e4e0864f9482d8","34e4e0864f9482d8"]]},{"id":"b3b691a1df6397f7","type":"change","z":"13a11bc58fb374e4","name":"Ler o Android.title","rules":[{"t":"change","p":"payload","pt":"msg","from":"payload","fromt":"msg","to":"data.new_state.attributes[\"android.title\"]","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":1050,"y":1920,"wires":[["e619585fe9877ab1","e619585fe9877ab1"]]},{"id":"e89822074472e053","type":"switch","z":"13a11bc58fb374e4","name":"Whatsapp [attributes.package]","property":"data.new_state.attributes.package","propertyType":"msg","rules":[{"t":"eq","v":"com.whatsapp","vt":"str"}],"checkall":"true","repair":false,"outputs":1,"x":810,"y":1920,"wires":[["b3b691a1df6397f7","b3b691a1df6397f7"]]},{"id":"b771286b.8c8f28","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30"}]

@k7franklin boa tarde, me orienta por favor, o meu “android.title” somente aparece o informação “whatsapp” no debug, nunca mostra “nome do contato”. Saberia me dizer como corrigir ? Obrigado

image

Interessante, assim eu nunca vi.
O que eu tento contornar são os irritantes “null”, quando estou escutando um áudio esse “null” é enviado como payload. O que eu fiz foi usar um replace para substituir o null por um espaço.