En el grupo de Telegram me han pedido si podía explicar la integración del termostato BEOK con Home Assistant.
Pues bien, vamos allá. Lo primero indicar que el termostato BEOK funciona con una nube bajo la plataforma de Broadlink, lo que vamos a hacer es controlarlo localmente desde el Home Assistant, eso sí, sin perder la operativa desde la nube de Broadlink.
Este procedimiento, aunque sólo lo he probado con el Beok BOT-313Wifi , en principio funciona para las marcas BEOK , FLOUREON, DECDEAL ya que comparten el mismo hardware.
PASOS PREVIOS - no indicados en este tutorial
- 1. Tener instalado y operativo el termostato , por supuesto conectado a la wifi.
2. Darle una ip fija al termostato ( en el ejemplo será 192.168.0.110 ) . Yo las asigno en el router.
3. Conocer la MAC del termostato . En la pantalla de la app móvil te lo indica. ( para el ejemplo será 34:ea:34:xx:yy:zz )
4. Tener acceso via Samba ( o similar) a los ficheros de configuración de Home Assistant.
CONFIGURACIÓN EN HOME ASSISTANT
Lo primero indicar que Home Assistant no soporta oficialmente los termostatos BEOK, por lo que tenemos que utilizar los custom_components.
- 1. Copiar los fichero python ( extension .py) en \custom_components\broadlink
En el directorio donde tienes el configuration.yaml crea una carpeta ( si no la tienes ya creada) que se llame custom_components, dentro de ella una que se llame broadklink , en ella tendrás que pegar los ficheros __init__.py y climate.py ( se encuentra en el zip adjunto a este hilo) o bien puedes descargarlo de aquí ( aunque tienes que cambiarle la extension de .yaml a .py)
A partir de este paso todo el codigo que hay que escribir lo podeis descargar al final del post, en un package para tenerlo todo junto y ordenado . Ir al final del post en el apartado PACKAGE
2. Crear termostato en el configuration.yaml
Ahora el paso es crear la entrada en el configuration.yalm similar a este codigo, obviamente con la ip fija asignada al termostato en el campo host y con la MAC de tu termostato.El scan_interval son los segundo que tarda en refrescar la información del termostato. Aquí está cada 15sg, yo una vez finalice todas la automatizaciones lo cambiaré a 60 sg, ya que con ese refresco me parece suficiente.Código: Seleccionar todo
climate: - platform: broadlinkHysen [color=#FF0000]friendly_name:[/color] Termostato_Casa host: 192.168.0.110 # <- Cambiala por la IP asignada a tu termostato mac: 34:EA:34:xx:yy:zz # <- Cambiala por la MAC de tu termostato target_temp_default: 20 target_temp_step: 0.5 scan_interval: 15
EXTRAS
Esta seccion de extras voy a compartir algunos sensores y automatizaciones que tengo creados por si podeis sacarle algun beneficio.
- Sensores
Vamos a extraer de la informacion que manda el termostato sensores por si queremos utilizarlos en nuestras automatizaciones o bien para ver estadisticas.- Sensor calefaccion. Es un sensor que puede tomar tres valores : off, heat o auto.
off : termostato apagado
heat : termostato encendido en modo manual
auto : termostato encendido en modo programación ( la del Beok, no del HA)
- Sensor calefaccion_activa . Es un sensor que puede estar a "heat" o "idle" .
"heat" : el contacto del termostato está cerrado . Es cuando da la orden a la caldera de que se ponga en marcha
"idle" : el contacto del termostato está abierto, bien porque termostato apagado o por temperatura por encima del setpoint.
- Sensor calefaccion_temperatura: La temperatura de la habitacion donde está el termostato.
- Sensor calefaccion_setpoint: La temperatura que queremos que alcance la habitacion.
- Sensor calefaccion_activa_hoy: El tiempo que llevamos con ella activa durante el dia de hoy
- Sensor calefaccion_activa_ayer: Cuanto tiempo estubo activa ayer
- Sensor calefaccion_activa_semana: El tiempo que llevamos con ella activa durante esta semana
- Sensor calefaccion_activa_hoy: El tiempo que llevamos con ella activa durante el mes
Código: Seleccionar todo
sensor: - platform: template sensors: calefaccion_modo: #el modo puede ser off , heat o auto friendly_name: calefaccion_modo value_template: "{{ states.climate.termostato_casa.attributes.operation_mode }}" calefaccion_activa: #"True" si está la orden de funcionar a la caldera friendly_name: calefaccion_activa value_template: "{{ is_state('climate.termostato_casa', 'heat') }}" calefaccion_temperatura: # Temperatura actual de la habitacion del termostato friendly_name: calefaccion_temperatura value_template: "{{ states.climate.termostato_casa.attributes.current_temperature | float }}" calefaccion_setpoint: # Setpoint a la temperatura que quedamos alcanzar friendly_name: calefaccion_setpoint value_template: "{{ states.climate.termostato_casa.attributes.temperature | float }}" - platform: history_stats name: calefaccion_activa_hoy entity_id: sensor.calefaccion_activa state: "True" type: time start: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}' end: '{{ now() }}' - platform: history_stats name: calefaccion_activa_ayer entity_id: sensor.calefaccion_activa state: "True" type: time end: '{{ now().replace(hour=0).replace(minute=0).replace(second=0) }}' duration: hours: 24 - platform: history_stats name: calefaccion_activa_semana entity_id: sensor.calefaccion_activa state: "True" type: time start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().weekday() * 86400 }}' end: '{{ now() }}' - platform: history_stats name: calefaccion_activa_mes entity_id: ssensor.calefaccion_activa state:"True" type: time start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().day * 86400 }}' end: '{{ now() }}'
- Sensor calefaccion. Es un sensor que puede tomar tres valores : off, heat o auto.
- Automatizaciones
Voy ahora a compartir dos automatizaciones que tengo realizadas .- AutoApagado a las 23:30
Con el fin de no olvidarme la calefaccion encendida toda la noche, he creado una automatizacion para apagar la calefaccion todos los dias a las 23:30.
El Código es muy sencilloPara usar esta automatización deberemos crear 2 scripts , que seríanCódigo: Seleccionar todo
- id: '1542895212917' alias: Apagar_calefaccion_23:30 trigger: - at: '23:30:00' platform: time action: [color=#FF0000] - service: climate.set_operation_mode data: entity_id: climate.termostato_casa operation_mode : "off"[/color] [/list] [list]Luz de Xiaomi Gateway Para conocer de manera rápida el estado de la calefacción, he aprovechado el gateway de Xiami para que mediante su iluminacion me diga el estado de la caldera. La idea es que si el termostato está apagado , la luz del gateway tambien. Si está en automático la luz se ponga en amarillo. Si está en manual se ponga de morado. Además de si está activa, es decir calentando, la intensidad de la luz sea mas fuerte. [color=#FF0000]Ojo , que tendréis que modificar el nombre de vuestro gateway[/color] El Código es [code] automation: - id: '1546118478475' alias: luz_calefaccion trigger: - platform: state entity_id: sensor.calefaccion_modo - platform: state entity_id: sensor.calefaccion_activa condition: [] action: - service_template: >- {%- if is_state('sensor.calefaccion_modo', "off") -%} script.Luz_apagar {%- else -%} script.luz_encender {%- endif -%} data_template: light: light.gateway_light_abcdefghi brightness : >- {%- if is_state('sensor.calefaccion_activa', '1') -%} 200 {%- else -%} 30 {%- endif -%} color1 : >- {%- if is_state('sensor.calefaccion_modo', "auto") -%} 255 {%- else -%} 255 {%- endif -%} color2 : >- {%- if is_state('sensor.calefaccion_modo', "auto") -%} 225 {%- else -%} 0 {%- endif -%} color3 : >- {%- if is_state('sensor.calefaccion_modo', "auto") -%} 0 {%- else -%} 225 {%- endif -%}
Código: Seleccionar todo
script: #Script apagar la luz , con input del entity luz_apagar: alias: Apagar_Luz sequence: - service: light.turn_off data_template: entity_id: "{{ light }}" #Script apagar la luz , con input del entity, brillo y colores RGB luz_encender: alias: Encender_luz sequence: - service: light.turn_on data_template: entity_id: "{{ light }}" brightness: "{{ brightness }}" rgb_color: [ "{{ color1 | int }}" ,"{{ color2 | int }}","{{ color3 | int }}" ]
- AutoApagado a las 23:30
- Customizacion y grupo
Vamos ahora a dejarlo un poco presentable con las customizaciones y los grupos.
Lo que haremos será que en el panel que vemos en la pestaña muestre la minima informacion que deseemos. En mi caso he decidido poner solo el componente climate y las dos automatizaciones para poder activar o desactivarlas.
Pinchando en el grupo , en la ventana que aparece se mostrará todo los sensores creados anteriormente y las estadisticas de uso.
Asi pues, así quedaría el grupo y las dos ventanas que aparecen bien pinchando en el sensor de caldera o bien en el grupo.
El codigo seráCódigo: Seleccionar todo
#Creacion del grupo para tenerlo todo ordenado group: caldera: name: Caldera view: no control: hidden entities: - climate.termostato_casa - sensor.calefaccion_modo - sensor.calefaccion_activa - sensor.calefaccion_temperatura - sensor.calefaccion_setpoint - automation.luz_calefaccion - automation.auotapagado_calefaccion_noche - sensor.calefaccion_activa_hoy - sensor.calefaccion_activa_ayer - sensor.calefaccion_activa_semana - sensor.calefaccion_activa_mes # Customizacion homeassistant: customize: sensor.calefaccion_modo: hidden: true sensor.calefaccion_activa: hidden: true sensor.calefaccion_temperatura: hidden: true sensor.calefaccion_setpoint: hidden: true script.luz_apagar: hidden: true script.luz_encender: hidden: true automation.luz_calefaccion : icon: mdi:lightbulb-on automation.auotapagado_calefaccion_noche : icon: mdi:timer-off sensor.calefaccion_activa_hoy: hidden: true sensor.calefaccion_activa_ayer: hidden: true sensor.calefaccion_activa_semana: hidden: true sensor.calefaccion_activa_mes: hidden: true climate.termostato_casa: icon: mdi:radiator
- PACKAGE
Este fichero se ha de copiar en el directorio packages y requiere que se modifiquen las líneas 5 , 6 y 99.
Tener en cuenta que para utilizarlo con esas modificaciones se ha de tener un gateway de xiaomi ( u otra lámpara que admita brillo y color).
Puedes descargarlo y modificarlo a tu gusto justo aquí debajo.
Bueno espero que sea de utilidad este pequeño post, o bien para el termostato BEOK o para copiar alguna idea de las automatizaciones, grupos y demas trocitos de codigo.
Un saludo, amiguelezg