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

Fala Moçada!

Para esse tutorial são necessário esses dois tutoriais:

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 (Microsoft OneDrive - Access files anywhere. Create docs with free Office Online.) 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.

9 curtidas

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

1 curtida

Fiz hoje 24/08/2020 Sucesso
valeu monstro
Abraço

1 curtida

Muito top meu amigo, fiz aq e funcionou quase tudo. Só o assistant que não falow, mais acho que já sei o que é. Continue nos expirando com seus projetos.
:smiling_face_with_three_hearts:

1 curtida

Tentei fazer aqui, mas usando Alexa. Não consegui fazer ela reconhecer o input_boolean

Nas configurações já adicionei no configuration.yaml:

alexa:
  smart_home:
    filter:
      include_domains:
        - switch
        - light
        - media_player
        - input_boolean
1 curtida

Com a Alexa deve ser diferente, esse tutorial é pro Google Home. Tenta adaptar usando o Node Amazon Echo e o TTS da Alexa! Se conseguir posta pra gente saber como fez!

Só pra dar uma atualizada no tutorial.

Para criar o input_boolean pode ser via interface também!

Vai em configurações, Ajudantes.

Adicionar Ajudate, Alternar. Coloca um nome e clica em criar. Vai ter um input_boolean criado.

Antigamente o Google Home puxava todos os dispositivos do Home Assistant. Hoje precisamos colocar na lista no configuration.yaml quais tipos de dispositivos queremos que o Google Home veja. Então vá no config e no configuration.yaml e ache as configurações do seu Google Assistant e coloque o input_boolean na lista se ele não estiver lá.

google_assistant:
  project_id: hassio
  service_account: !include Hassio-960bb24e572b.json
  report_state: true
  exposed_domains:
    - switch
    - light
    - sensor
    - camera
    - script
    - scene
    - vacuum
    - input_boolean
    - alarm_control_panel

Depois de colocado reinicie o Home Assistant e no app Google Home atualize a lista de dispositivos puxando para baixo na tela principal.

1 curtida

Como fazer com que o Google Home possa “enxegar” o sensores de porta e janelas que são zigbee?

Alguém seguiu esse tutorial para usar na Alexa poderia me ajudar?

Esse código fala que está errado pra mim, alguem poderia mandar um print dele? Acho que a formatação não está correta aqui.

Consegui, meu código ficou assim:

msg = msg.payload;
if (msg === '') {
    msg = "Todas as portas estão fechadas. Vou ligar o Ar Condicionado.";
}
return { payload : msg };

Depois foi só colocar um tts para falar na alexa e pronto, ficou ótimo

1 curtida