Node-RED - Pedir para o Google Home checar Portas e Janelas (Sensores)

Fala Moçada!

A quem interessar, segue fluxo em que é possível PEDIR pelo Google Home (Assistant) para que o HA verifique quais PORTAS e JANELAS estão abertas.

O fluxo em si é pequeno e abaixo detalho cada passo dele:

A primeira coisa que temos que fazer é criar um INPUT BOOLEAN no HA. Uma vez criado, reinicie o HA para surtir efeito.
image

Em seguida, vamos fazer o INPUT BOOLEAN que acabamos de criar APARECER no aplicativo HOME do Google para podermos interagir com ele via Google Home (Assistant). Feito isso, reinicie o HA para surtir efeito, vá no seu Assistant e diga “OK Google, sincronizar meus dispositivos”. Isso fará com o “CHECAR SENSORES” apareça no aplicativo HOME e seja possível interagir com ele pelo Assistente.

Em seguida, precisamos criar uma ROTINA no app HOME para que possamos ATIVAR o INPUT BOOLEAN.

Agora vamos para o NODE-RED…

Esse cara é o começo do FLUXO, ou seja, o FLUXO começa sempre que houver alguma mudança de ESTADO (status) no INPUT BOOLEAN “Checar Sensores” mas só segue quando for ON (ligado).

Aqui eu faço toda a lógica de verificação dos sensores de PORTAS e JANELAS que tenho:

Lógica:

{% if is_state('binary_sensor.porta_da_frente_contact', 'on') %}
 PORTA DA FRENTE ABERTA!
{%endif %}
{% if is_state('lock.door', 'unlocked') %}
 PORTA DA FRENTE DESTRANCADA!
{%endif %}
{% if is_state('binary_sensor.janela_do_banheiro_da_sala_contact', 'on') %}
 JANELA DO BANHEIRO DA SALA ABERTA!
{%endif %}
{% if is_state('binary_sensor.janela_da_sala_contact', 'on') %}
 JANELA DA SALA ABERTA!
{%endif %}
{% if is_state('binary_sensor.janela_da_cozinha_contact', 'on') %}
 JANELA DA COZINHA ABERTA!
{%endif %}
{% if is_state('binary_sensor.porta_do_quintal_contact', 'on') %}
 PORTA DO QUINTAL ABERTA!
{%endif %}
{% if is_state('binary_sensor.janela_do_escritorio_contact', 'on') %}
 JANELA DO ESCRITÓRIO ABERTA!
{%endif %}
{% if is_state('binary_sensor.janela_do_quarto_de_visita_contact', 'on') %}
 JANELA DO QUARTO DE VISITA ABERTA!
{%endif %}
{% if is_state('binary_sensor.janela_do_banheiro_da_vanessa_contact', 'on') %}
 JANELA DO BANHEIRO DA VANESSA ABERTA!
{%endif %}
{% if is_state('binary_sensor.porta_da_varanda_contact', 'on') %}
 PORTA DA VARANDA ABERTA!
{%endif %}

A lógica acima vai juntando (concatenando) todas as frases em que por ventura ela entrar.
Portanto, o próximo passo é verificar e remover os espaços em branco que por ventura possam existir:

Lógica:
result = msg.payload.replace(/(\r\n|\n|\r)/gm, “”);
return { payload: result };

Em seguida, fiz uma verificação que se o conteúdo do texto for VAZIO, ou seja, todas as PORTAS e JANELAS estiverem FECHADAS, quero que diga: “AS PORTAS E JANELAS ESTÃO FECHADAS!”

Lógica:
msg = msg.payload;

if (msg === ‘’)
{
msg = “AS PORTAS E JANELAS ESTÃO FECHADAS!”;
}

return { payload : msg };

Baixe o arquivo “1sec.mp3” do link (https://1drv.ms/u/s!AjOmmz9u71z83xgPQH9mY0Sx_gic?e=NzHbYE) e salve-o na pasta /config/www/sounds pois o utilizaremos a seguir.
image

Uso esse node para ACORDAR o Google Home antes de falar qualquer coisa nele. De fato você não escutará nada pois o arquivo “1sec.mp3” é 1 segundo de silêncio absoluto e só serve para fazer o Google Home “se mexer” e tocar algo antes de falar a frase que queremos. No campo Entity Id você deve colocar o SEU Google Home.

Lógica:
{
“media_content_id”: “https://SeuHomeAssistant.duckdns.org:8123/local/sounds/1sec.mp3”,
“media_content_type”: “audio/mp3”
}

Esse node é de fato onde o Google Home falará (com a voz da Isabela do Watson) a mensagem que a lógica de verificação de PORTAS e JANELAS gerou. No campo Entity Id coloque o SEU Google Home. (Para quem não tem a Isabela do Watson configurada, basta colocar no campo service: “google_translate_say” que também funcionará).

Lógica:
{
“message”: “{{payload}}”,
“cache”: “false”
}

A parte de envio de mensagem ao TELEGRAM não irei descrever pois já temos outros artigos ensinando como fazer isso, porém, ali faz com que eu receba no TELEGRAM a mesma MENSAGEM que o Google Home vai ler.

Por fim, devemos fazer com que o INPUT BOOLEAN volte para OFF (desligado) para que seja possível dizer novamente “OK Google, Checar Sensores” e aí o Google entenda que o INPUT BOOLEAN está desligado e ligue-o novamente.

Código para importação do Fluxo via Clipboard:

[{"id":"9d724631.457698","type":"tab","label":"Checar Sensores","disabled":false,"info":""},{"id":"fcdebd0b.7f9e4","type":"api-call-service","z":"9d724631.457698","name":"","server":"ef4eb39d.410e6","version":1,"service_domain":"tts","service":"watson_tts_say","entityId":"media_player.casa_4","data":"{\"message\":\"{{payload}}\",\"cache\":\"false\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":790,"y":240,"wires":[[]],"icon":"node-red-contrib-cast/home.png"},{"id":"29f0ce63.4f1b32","type":"server-state-changed","z":"9d724631.457698","name":"LIGOU INPUT?","server":"ef4eb39d.410e6","version":1,"entityidfilter":"input_boolean.checar_sensores","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"x":100,"y":100,"wires":[["6e2c5a8.92d5da4"],["d339cdf8.84699"]]},{"id":"6e2c5a8.92d5da4","type":"api-call-service","z":"9d724631.457698","name":"DESLIGA INPUT","server":"ef4eb39d.410e6","version":"1","service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.checar_sensores","data":"","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":330,"y":60,"wires":[[]]},{"id":"d339cdf8.84699","type":"api-render-template","z":"9d724631.457698","name":"CHECA SENSORES","server":"ef4eb39d.410e6","template":"{% if is_state('binary_sensor.porta_da_frente_contact', 'on') %}\n PORTA DA FRENTE ABERTA!\n{%endif %}\n{% if is_state('lock.door', 'unlocked') %}\n PORTA DA FRENTE DESTRANCADA!\n{%endif %}\n{% if is_state('binary_sensor.janela_do_banheiro_da_sala_contact', 'on') %}\n JANELA DO BANHEIRO DA SALA ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.janela_da_sala_contact', 'on') %}\n JANELA DA SALA ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.janela_da_cozinha_contact', 'on') %}\n JANELA DA COZINHA ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.porta_do_quintal_contact', 'on') %}\n PORTA DO QUINTAL ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.janela_do_escritorio_contact', 'on') %}\n JANELA DO ESCRITÓRIO ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.janela_do_quarto_de_visita_contact', 'on') %}\n JANELA DO QUARTO DE VISITA ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.janela_do_banheiro_da_vanessa_contact', 'on') %}\n JANELA DO BANHEIRO DA VANESSA ABERTA!\n{%endif %}\n{% if is_state('binary_sensor.porta_da_varanda_contact', 'on') %}\n PORTA DA VARANDA ABERTA!\n{%endif %}","resultsLocation":"payload","resultsLocationType":"msg","templateLocation":"template","templateLocationType":"msg","x":340,"y":140,"wires":[["6c553773.b056a8"]]},{"id":"6c553773.b056a8","type":"function","z":"9d724631.457698","name":"REMOVE LINHAS","func":"result = msg.payload.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\nreturn { payload: result };","outputs":1,"noerr":0,"x":330,"y":220,"wires":[["ba97ce0c.3c3e8"]]},{"id":"ba97ce0c.3c3e8","type":"function","z":"9d724631.457698","name":"TUDO FECHADO?","func":"msg = msg.payload;\n\nif (msg === '')\n{\n    msg = \"AS PORTAS E JANELAS ESTÃO FECHADAS!\";    \n}\n\nreturn { payload : msg };","outputs":1,"noerr":0,"x":330,"y":280,"wires":[["f525987f.e9a478"]]},{"id":"f525987f.e9a478","type":"api-call-service","z":"9d724631.457698","name":"1 SEGUNDO","server":"ef4eb39d.410e6","version":1,"service_domain":"media_player","service":"play_media","entityId":"media_player.casa_4","data":"{\"media_content_id\":\"https://SeuHomeAssistant.duckdns.org:8123/local/sounds/1sec.mp3\",\"media_content_type\":\"audio/mp3\"}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":570,"y":240,"wires":[["fcdebd0b.7f9e4"]],"icon":"node-red-contrib-cast/home.png"},{"id":"ef4eb39d.410e6","type":"server","z":"","name":"Home Assistant"}]

Faça o DEPLOY e solte um: “OK Google, Checar Sensores” :white_check_mark:

Forte Abraço,
José Henrique.

3 Likes

Parabéns pelo tópico! Implementei e funcionou perfeito!

1 Like