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!