Integrando notificaciones HTML push en Home Assistant (parte 2)

Vamos a continuar con la configuración de las notificaciones push en home assistant. Venimos de configurar el servicio de notificaciones y ya somos capaces de enviar nuestra primera notificación de ejemplo. Al final de este post seremos capaces de tener notificaciones interactivas donde podremos ejecutar comandos de respuesta.

Para facilitar este post, realizaremos la configuración siguiendo un ejemplo. Nuestro ejemplo consistirá en poder abrir la puerta si llaman al timbre, como por ejemplo si hemos realizado la modificación al vídeo portero, aunque esto solo servirá de ejemplo.

 

Creando notificación simple

Lo primero que tenemos que hacer es crear una automatización o editar alguna existente con la cual queramos disparar una notificación por HTML5. Por ejemplo, cuando llamen al timbre.

De esa manera, cuando llamen al timbre recibiremos la notificación en los dispositivos suscritos. De momento, realizaremos la automatización notificando a todos los usuarios suscritos.

Vamos a seguir con el ejemplo del videoportero. Suponiendo que hemos llamado a nuestra plataforma “notifications.htmlpush”, un ejemplo de notificación sería el siguiente:

- id: '1'
  alias: 'Pican a la puerta'
  hide_entity: true
  trigger:
    platform: state
    entity_id: binary_sensor.timbre_videportero
    from: 'off'
    to: 'on'
  action:
    - service: notify.htmlpush
      data:
        message: 'Estan llamando al timbre'
        title: 'Timbre'

 

Con esto, recibiremos una notificación cuando nos llamen al timbre. Hasta aquí, nada distinto a lo que teniamos anteriormente.

 

Añadiendo acciones a la notificación

Sin embargo, la potencia de estas notificaciones reside en que también pueden ponerse acciones a ejecutar. En nuestro caso, vamos a configurar en la notificación de llamada al timbre vamos a añadir un botón para abrir la puerta. Para ello, dentro del servicio notify.htmlpush, añadiremos los parametros action, dentro de otra clave ‘data’. Modificamos la acción anterior para que quede como sigue:

 

- id: '1'
  alias: 'Pican a la puerta'
  hide_entity: true
  trigger:
    platform: state
    entity_id: binary_sensor.timbre_videportero
    from: 'off'
    to: 'on'
  action:
    - service: notify.htmlpush
      data:
        message: 'Estan llamando al timbre'
        title: 'Timbre'
        data:
          actions:
            - action: "abrir_puerta"
              title: "Abrir"

De esta manera, tendremos un botón en la notificación para abrir la puerta:

Notificación en android
Notificación en android

SI quisieramos más acciones, podríamos añadirlas en al array de actions.

Ahora debemos interceptar el comando, es decir, configurar el qué queremos hacer cuando hagan click en una acción u en otra. es por eso que es importante al nombre de la acción, el valor que aparece en la clave – action. Es importante que sea único en toda la app, ya que será la clave que nos ayudará a identificar en las automatizaciones qué acción o script queremos ejecutar.

Para ello, añadimos una nueva automatización para interceptar el “abrir_puerta”:

- alias: "abrir puerta"
  trigger:
    platform: event
    event_type: html5_notification.clicked
    event_data:
      action: abrir_puerta
  action:
   - service: script.turn_on
     entity_id: script.videportero
   - service: notify.pushchrome
     data:
       message: "Puerta abierta"
Lo que hacemos es reaccionar al evento html5_notification.clicked con el event_data que coincida con la clave de nuestra acción, y así ejecutamos el script que queramos en reacción a esta.
Así, si organizamos nuestras automatizaciones en un fichero, quedaría como sigue:
###################
#
# Automatización para cuando llaman a la puerta
#
#####################
- id: '1'
  alias: 'Pican a la puerta'
  hide_entity: true
  trigger:
    platform: state
    entity_id: binary_sensor.timbre_videportero
    from: 'off'
    to: 'on'
  action:
    - service: notify.htmlpush
      data:
        message: 'Estan llamando al timbre'
        title: 'Timbre'
        data:
          actions:
            - action: "abrir_puerta"
              title: "Abrir"
##Callback de las acciones
- alias: "abrir puerta"
  trigger:
    platform: event
    event_type: html5_notification.clicked
    event_data:
      action: abrir_puerta
  action:
   - service: script.turn_on
     entity_id: script.videportero
   - service: notify.pushchrome
     data:
       message: "Puerta abierta"
De esta manera, podemos realizar notificaciones con eventos o callbacks asociados sin necesidad de una app de terceros!

Filtrar dispositivos a notificar

Con la configuración anterior, todos los dispositivos suscritos recibirían la notificación, y podrían tomar la determinación de abrir o no la puerta. Sin embargo, se puede filtrar este comportamiento para enviar solo la notificación a algunos dispositivos.

Para ello, con cada suscripción, Home assistant habrá creado una entrada en un fichero json en /config/html5_push_registrations.conf como la siguiente:

"unnamed device": {
          "browser": "chrome",
           "subscription": {
              "endpoint": "https://android.googleapis.com/gcm/send/fQooZ....",
              "expirationTime": null,
               "keys": {
               "auth": "4wK[...]",
               "p256dh": "BNKW5Oa_JoFAMVP[...]E"
              }
            }
         }

SI vamos añadiendo las suscripciones una a una, podremos saber de qué dispositivo son. A continuación podemos editar el nombre “unnamed device” y poner lo que queramos, por ejemplo, “Mi movil”

"Mi movil": {
          "browser": "chrome",
           "subscription": {
              "endpoint": "https://android.googleapis.com/gcm/send/fQooZ....",
              "expirationTime": null,
               "keys": {
               "auth": "4wK[...]",
               "p256dh": "BNKW5Oa_JoFAMVP[...]E"
              }
            }
         }

A continuación, después de los cambios , es necesario reiniciar HA.

Una vez arrancado, podemos editar las automatizaciones añadiendo a quién queremos enviar la notificación. SI no indicamos nada, se enviarán a todos los dispositivos suscritos. Para ello, debermos añadir un atributo target indicando a quién va dirigida la notificación. Así, si quisieramos enviar la anterior sólo al dispositvo Mi MOvil, editado anteriormente, nuestra automatización quedaría como sigue:

- id: '1'
  alias: 'Pican a la puerta'
  hide_entity: true
  trigger:
    platform: state
    entity_id: binary_sensor.timbre_videportero
    from: 'off'
    to: 'on'
  action:
    - service: notify.htmlpush
      data:
        message: 'Estan llamando al timbre'
        title: 'Timbre'

        target: 'Mi movil'
        data:
          actions:
            - action: "abrir_puerta"
              title: "Abrir"

Como en todas las ocasiones, podemos usar templates en los mensajes, títulos, etc.

Con esto, ya tenemos nuestras notificaciones bidireccionales funcionando!

Como siempre, si tenéis cualquier duda, dejad vuestros comentarios en la web o en el grupo de telegram de @Domology

 

Saludos y Happy Automation!

Deja un comentario

Síguenos

Siguenos en facebook