Node-Red - Telegram envio data e hora juntamente com a mensagem

Boas.

Este é a minha primeira publicação pelo que agradeço alguma paciência. Vou tentar cumprir as regras.

Instalei o HA na ultima semana. Na semana anterior estive a fazer uns testes de configuração e cheguei à conclusão que a configuração mais simples é a que tenho atualmente:

QNAP NAS TS-251A com 4 GB RAM (já estão a caminho mais 4 GB)
Ubunto server (ultima versão) em virtualização + Hassio + Node-Red (MQTT server ainda por configurar).
Na semana passada tentei testar o HA em Countainer no NAS, mas a integração dos restantes serviços não me pareceu simples (Node-RED, MQTT server, etc). Segui as recomendações do fórum e estou a utilizar o Hassio.

Os meus conhecimentos em programação são muito limitados.

Agora ao que interessa:
Apenas estou com um equipamento ligado: TP-LINK HS110 ( Wi-Fi Smart Plug with Energy Monitoring). Tenho um Shelly 2.5 para instalar nos estores, mas o tempo não dá para tudo.
Tinha configurada uma automação para quando o TP-LINK ligava o HA envia uma mensagem para o Telegram com o seguinte código:

- id: '1579626290199'
  alias: Notificar que Resistência está Ligada
  description: 'Descrição: Notificar que Resistência está Ligada'
  trigger:
  - entity_id: switch.resistencia
    from: 'off'
    platform: state
    to: 'on'
  condition: []
  action:
  - data:
      message: '{{ now().strftime(''%Y-%m-%d %H:%M'') }} A Resistência está Ligada'
    service: notify.teste
- id: '1579647410598'
  alias: Notificar que Resistência está Desligada
  description: Notificar que Resistência está Desligada
  trigger:
  - entity_id: switch.resistencia
    from: 'on'
    platform: state
    to: 'off'
  condition: []
  action:
  - data:
      message: '{{ now().strftime(''%Y-%m-%d %H:%M'') }} A Resistência está Desligada'
    service: notify.teste`Texto pré-formatado`

No entanto, estive a ler e ver uns videos para começar a utilizar o Node-Red. Já consegui fazer um fluxo em que o sistema me avisa se o TP-LINK liga e desliga (envia mensagem para o telegram). No entanto não consigo colocar no texto da mensagem para o telegram a data e hora atual.

Código da função que gera a mensagem para enviar:

msg.payload = { type: 'message', chatId: 1XXXXXXXXXX }
msg.payload.content = 'A Resistência está Desligada'
return msg;

Questões:

1 - Acham que utilizar o ubuntu em virtualização é a melhor hipótese?
2 - Têm alguma sugestão para o envio da data e hora atual na mensagem do telegram?

Muito Obrigado.
Lopitos

No NR é muito simples fazer isso. Eu utilizo isso para me informar da abertura da porta de casa. Para o fazes utilizas o node Simpletime e de seguida um template node. Caso o node Simpletime não estiver instalado podes tu instalar (node-red-contrib-simpletime).

Anota%C3%A7%C3%A3o%202020-01-24%20105513

A configuração do template node é a seguinte:

{ “chatId”: xxxxxxxxxx, “type”: “message” , “content”: “{{mydom}}/{{mymonth}}/{{myyear}} {{mytimes}} \n Porta da Rua ABERTA - Receber imagem?” }

Como resposta a primeira pergunta: SIM. A instalação no QNAP de uma VM com Ubuntu e script do hass.io é a forma mais correta e funciona muito bem. Já tenho feito diversos testes… até a passagem de usb devices e com várias placas de rede, sempre sem problemas e com excelentes performances. Não só é a forma mais correta com a ideal !!!

Não deves ter o hass.io em container por motivos de performance ( container inception ), containers dentro de containers não é boa prática… e fazer tudo em containers separados é muito trabalhoso e dificulta todo o processo de atualização e manutenção.

Obrigado pela resposta.
Estou a colocar o código que enviaste e está a dar o seguinte erro (debug após template node):

"Unexpected token “ in JSON at position 2"

Junto o flow para melhor análise:

[{"id":"bb988781.781458","type":"tab","label":"TESTE1","disabled":false,"info":""},{"id":"9237c8ff.4942e8","type":"telegram sender","z":"bb988781.781458","name":"","bot":"adf54e69.980f3","x":750,"y":80,"wires":[[]]},{"id":"bb9f79f.8df9488","type":"trigger-state","z":"bb988781.781458","name":"Resistência Solar Ligou-se","server":"62b78aa2.823994","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"switch.resistencia","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"id":"0syzlbus2ri","targetType":"this_entity","targetValue":"","propertyType":"previous_state","propertyValue":"old_state.state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"off"},{"id":"bb5hc6xz6u8","targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"on"}],"constraintsmustmatch":"all","outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"str","x":120,"y":100,"wires":[["fc9cc0ca.28ca1"],[]]},{"id":"fc9cc0ca.28ca1","type":"simpletime","z":"bb988781.781458","name":"","x":270,"y":200,"wires":[["c5ea4065.d82ef"]]},{"id":"c5ea4065.d82ef","type":"template","z":"bb988781.781458","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{ “chatId:” \"XXXXXXXX\", “type”: “message” , “content”: “{{mydom}}/{{mymonth}}/{{myyear}} {{mytimes}} \\n Porta da Rua ABERTA - Receber imagem?” }","output":"json","x":460,"y":140,"wires":[["9237c8ff.4942e8","659ee2ba.6b5e4c"]]},{"id":"659ee2ba.6b5e4c","type":"debug","z":"bb988781.781458","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":200,"wires":[]},{"id":"adf54e69.980f3","type":"telegram bot","z":"","botname":"HA Lopes","usernames":"","chatids":"XXXXXXXX","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false},{"id":"62b78aa2.823994","type":"server","z":"","name":"Home Assistant","legacy":false,"hassio":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]

Relativamente à resposta do @Luis_Andrade, agradeço o feedback. O meu NAS é mais fraquinho mas vai dando para isto. Pelo menos para já.

Obrigado.
Lopitos

Não estás a pôr mesmo o xxxxxxxxxx ou "xxxxxxxxxx" pois não?? Aí é suposto colocares o teu chatid (sem aspas)…

Boas.
Não, eu fiz um “substituir” no meu chatId antes de copiar para aqui o código. No lugar do “XXXXX” tenho o meu chatId.

Obrigado.
Lopitos

Não é isso que está no flow que meteste aqui…

Manda um screenshot da tua configuração do template node e do erro que aparece.

Vai dando feedback da performance dessa qnap com virtualização do HA. Poderá ser importante para outros membros da comunidade que pretendam fazer o mesmo ou adquirir uma igual.

Boas,

Segue o screenshot:
Erro + Flow completo:


Detalhe do Node template:

Obrigado. Lopitos

Eu tive que desativar alguns aplicativos básicos do NAS devido à falta de RAM para poder correr a VM sem problemas. No entanto, quando instalar os restantes 4GB de RAM vou dar feedback. Penso que o melhor é ser noutra publicação especifica para isso. Nestes últimos dias passei algum tempo a ler as Vossas experiências.

1 Curtiu

Está a utilizar o tipo de aspas erradas… Usa as aspas que ficam na tecla dois " e não uses as nem as . Nem sei onde foste buscar isso mas cheira-me a copy/paste…

Altera isso e dá feedback.

@lopitos Se estiveres a utilizar a palete no nodered node-red-contrib-telegrambot-home não precisas colocar isso tudo, podes fazer da seguinte forma…

No simpletime só lhe dás o nome que queres, depois no template colocas desta forma…

E no Notify node tens de ter o bot já configurado e adicionar o ChatID. Não precisas escrever nada na mensagem, escreves antes no template o que queres enviar.

Eu, para colocar a hora actual, vou buscar à msg original… É um dado que te é fornecido logo de inicio. Não se justifica complicar com nodes adicionais, acho eu…

Bingo.

Era esse o problema. Muito obrigado.
Já agora, @Maddoctor, como é que “chamas” a data e hora da mensagem original?

Para já está a funcionar perfeitamente com a primeira solução. Muito simples de implementar. O meu problema é ter muitos poucos conhecimentos em programação.

Abraço, e muito obrigado pela ajuda de todos.
Lopitos

Tens essa info em msg.data.new_state.last_changed, por exemplo… A partir daí podes extrair a parte que quiseres…

Aproveitando o mesmo topico e como também estou a iniciar no NodeRed, segui os mesmos passos mas nao me está a enviar notificação…

[{"id":"605f8883.932ed8","type":"tab","label":"TESTE1","disabled":false,"info":""},{"id":"45e94aa8.636c34","type":"trigger-state","z":"605f8883.932ed8","name":"Porta Principal","server":"8ad89b3d.5f0528","exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityid":"sensor.interruptorsirene","entityidfiltertype":"exact","debugenabled":false,"constraints":[{"id":"0syzlbus2ri","targetType":"this_entity","targetValue":"","propertyType":"previous_state","propertyValue":"old_state.state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"off"},{"id":"bb5hc6xz6u8","targetType":"this_entity","targetValue":"","propertyType":"current_state","propertyValue":"new_state.state","comparatorType":"is","comparatorValueDatatype":"str","comparatorValue":"on"}],"constraintsmustmatch":"all","outputs":2,"customoutputs":[],"outputinitially":false,"state_type":"str","x":80,"y":100,"wires":[["953f222a.4aa4a"],[]]},{"id":"953f222a.4aa4a","type":"simpletime","z":"605f8883.932ed8","name":"","x":270,"y":200,"wires":[["78a8faf.b194404"]]},{"id":"78a8faf.b194404","type":"template","z":"605f8883.932ed8","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"{ \"chatId\": CHATID, \"type\": \"message\" , \"content\": \"{{mydom}}/{{mymonth}}/{{myyear}} {{mytimes}} \\n Porta da Rua ABERTA - Receber imagem?\" }","output":"json","x":460,"y":140,"wires":[["c00515b.4e3c3e8","cd50fcbf.fcdfc"]]},{"id":"cd50fcbf.fcdfc","type":"debug","z":"605f8883.932ed8","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":650,"y":200,"wires":[]},{"id":"82a0b405.9d3538","type":"template","z":"605f8883.932ed8","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"plain","template":"Dia {{mydom}}/{{mymonth}}/{{myyear}} ás {{mytimes}}\nPorta da Rua ABERTA","output":"json","x":460,"y":300,"wires":[[]]},{"id":"c00515b.4e3c3e8","type":"telegram sender","z":"605f8883.932ed8","name":"","bot":"add8f463.d3b338","x":660,"y":100,"wires":[[]]},{"id":"8ad89b3d.5f0528","type":"server","z":"","name":"Home Assistant"},{"id":"add8f463.d3b338","type":"telegram bot","z":"","botname":"telegram","usernames":"","chatids":"","baseapiurl":"","updatemode":"polling","pollinterval":"300","usesocks":false,"sockshost":"","socksport":"6667","socksusername":"anonymous","sockspassword":"","bothost":"","localbotport":"8443","publicbotport":"8443","privatekey":"","certificate":"","useselfsignedcertificate":false,"sslterminated":false,"verboselogging":false}]

https://gyazo.com/ad81418106843a7a5a466c59390da8f0

Testei o teu flow e substituí o seguinte:

  • Coloquei as configurações do meu Home assistant
  • Escolhi um switch que tenho para poder aplicar e testar a condição no node “Triguer State”
  • Substituí o CHATID pelo meu
  • Alterei a configuração no “sender” para o meu BOT.

Funcionou tudo perfeitamente.

Questão: o teu sensor está a passar bem de off para on? tenta colocar um debug adicional no node “Porta principal” - ajuda para confirmar que o estado do sensor mudou no Node-Red. Eu quando tenho duvidas meto um debug em tudo. :wink:
Já alguma vez conseguiste colocar o Node-Red a falar com o teu bot?

Aguardo noticias.

Sim ele passa bem de ON para OFF e vice versa (vejo essa transição a ser feita no NodeRed)…
Nunca consegui colocar o meu bot no Node-Red até porque eu iniciei-me há uns dias atrás, mas eu estava a usar as notificações tipo “Call Service” - Chamava o notify.telegram do HA e ainda escrevia a mensagem que queria nesse “Call Service”. Acho que foi por aí que o meu HA começou a dar o berro.

Tenho de desactivar o serviço Telegram todo no HA não tenho? E no NodeRed é que adiciono os chatID?
No “Sender” insiro só o “API” e o nome do meu “Bot” e no “Template” é que coloco o “ChatID”?

Corrige-me se estiver errado

Experimenta o seguinte video: https://www.youtube.com/watch?v=HsM4CbMGWmU.

Como já tens um BOT criado ignora a parte de o criares. Podes usar o mesmo.
Faz um flow simples como este apenas para testares. Foi assim que comecei. o teste do video serve para criares um flow que responde com o mesmo texto que envias no telegram no chat com o teu bot.

Relativamente a isto penso que seja como Índico:
Não necessitas de desativar no HA. Eu não o fiz.
No Node-Red tens que criar o perfil. Eu recomendo colocar o chatId porque pelo que eu testei e li, evita logo à cabeça que outros comecem a falar e mandar comandos ao teu bot que interfiram com os teus flows do Node-Red.
Relativamente a colocar o chatId no template eu também o faço.
Estou a responder no telemóvel, pelo que não é fácil.


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


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