Integración de un Shelly Dimmer en Home Assistant con Rest Command

Buenas!

Este es mi primer tuto de home assistant, espero explicarme bien.
Vamos a ver cómo integrar utilizando rest un shelly dimmer en ha sin utilizar mqtt pudiendo así mantener el funcionamiento a través de su nube.
Se puede hacer también utilizando un custom component, pero de esta forma tendremos un mayor control y personalización y no dependeremos de posibles errores con el custom components en futuras actualizaciones de ha.

Para empezar instalaremos el shelly dimmer y lo configuraremos en la app (aconsejo realizar la calibración, tarda un poco pero asegura mejores resultados).

En lo que respecta a ha, vamos a configurar lo siguiente:

  • Un sensor con el que sabremos en todo momento el estado del shelly (on/off) y el brillo. Por lo que he podido ver se pueden sacar todos los demás atributos como se haría por mqtt, pero en nuestro caso en principio sólo necesitaremos esos dos
  • Una entidad de tipo light, para controlar la luz desde ha
  • Dos rest_command, que se encargarán de encender/apagar la luz y de establecer el brillo.

Así que manos a la obra. Empezamos creando el sensor rest para conocer el estado de la luz:

- platform: rest
  name: "shellydmcomedor"
  scan_interval: 1
  resource: http://192.168.1.74/light/0
  value_template: 'OK'
  json_attributes:
      - ison
      - brightness
  headers:
    content-type: application/x-www-form-urlencoded

Sustituid la ip por la de vuestro shelly. Si tenéis varios, tendréis que definir un sensor para cada uno.
Como podéis ver estamos sacando dos attributos de json:

  • ison: Indica si está encendido o apagado. Puede tener los valores TRUE o FALSE
  • brightness: Indica el brillo

Ahora vamos a crear los dos rest_command. Uno encenderá y apagará, mientras que el otro será para establecer el brillo
Al contrario que con el sensor, no es necesario declarar uno por cada shelly dimmer que tengamos, porque en este caso le pasaremos en el momento de actuar 3 parámetros:

  • ip: la ip del shelly sobre el que estamos actuando
  • action: indicándole si queremos encender o apagar (on/off)
  • brightness: indicándole el brillo que queremos que tenga.
shelly_dimmer_action:
  url: http://{{ip}}/light/0
  method: POST
  headers:
    accept: 'application/json, text/html'
  payload: 'turn={{action}}'
  content_type:  'application/x-www-form-urlencoded'
  verify_ssl: true
  

shelly_dimmer_set_brightness:
  url: http://{{ip}}/light/0
  method: POST
  headers:
    accept: 'application/json, text/html'
  payload: 'turn=on&brightness={{(brightness | float * 0.3882 + 1) | round(0)}}'
  content_type:  'application/x-www-form-urlencoded'
  verify_ssl: true

Y ya sólo nos falta la entidad light, de tipo template poder utilizar los valores del sensor que hemos declarado. Al igual que en el sensor, sustituid la ip por la de vuestro shelly, y tendréis que declarar uno por cada shelly dimmer que tengáis.

- platform: template
  lights:
    shellydm:
      friendly_name: Lámpara Comedor
      level_template: "{{ (state_attr('sensor.shellydmcomedor', 'brightness') | float * 2.55) | round(0) }}"
      value_template: "{% if state_attr('sensor.shellydmcomedor', 'ison') %} on {% else %} off {% endif %}"
      turn_on:
        service: rest_command.shelly_dimmer_action
        data:
          ip: 192.168.1.74
          action: 'on'
      turn_off:
        service: rest_command.shelly_dimmer_action
        data:
          ip: 192.168.1.74
          action: 'off'
      set_level:
        service: rest_command.shelly_dimmer_set_brightness
        data_template:
          ip: 192.168.1.74
          brightness: "{{ brightness }}"
        data:
          ip: 192.168.1.74
          brightness: brightness

Una vez hayamos configurado todo ya sólo nos queda añadirlo en una card de tipo light y podremos controlar sin problema nuestro shelly dimmer.

Espero que os sirva y que sea más o menos fácil de entender. Para cualquier duda podéis encontrarme en el grupo de Telegram

Muchas gracias!

Deja un comentario

Síguenos

Siguenos en facebook