Hoy os traemos un post de un colaborador y miembro del grupo de Telegram, así como del foro, que es donde originalmente se ha publicado este tutorial, pero, he pensado que la idea es buena y seguro que a muchos os puede ayudar. Él autor es Alberto Miguelez, desde Asturias que ha querido compartir su trabajo para facilitar al resto el que podamos integrar este termostato BeOK de forma sencilla.
Integrando el termostato BeoK, Fluoreon o Decdeal en Home Assistant
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.
- Copiar el fichero python ( extension .py) en \custom_components\climate
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 climate , en ella tendrás que pegar el fichero broadlinkHysen.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 código que hay que escribir lo podéis 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.
climate: - platform: broadlinkHysen name: 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
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.
Con estos dos simples pasos ya puedes verificar el código y reiniciar el sistema. Ya lo tendrías operativo y te debería salir este grupo
EXTRAS
Esta sección de extras voy a compartir algunos sensores y automatizaciones que tengo creados por si podéis sacarle algún beneficio.
- Sensores
Vamos a extraer de la información que manda el termostato sensores por si queremos utilizarlos en nuestras automatizaciones o bien para ver estadísticas.- Sensor calefacción. 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 0 a 1 .
1 : el contacto del termostato está cerrado . Es cuando da la orden a la caldera de que se ponga en marcha
0 : el contacto del termostato está abierto, bien porque termostato apagado o por temperatura por encima del setpoint.
- Sensor calefaccion_temperatura: La temperatura de la habitación donde está el termostato.
- Sensor calefaccion_setpoint: La temperatura que queremos que alcance la habitación.
Para conocer las estadísticas del tiempo que está activa la caldera , utilizando el sensor de calefaccion_activa, creamos unas variables que nos muestran el tiempo que lleva la caldera activa :
- Sensor calefaccion_activa_hoy: El tiempo que llevamos con ella activa durante el día de hoy
- Sensor calefaccion_activa_ayer: Cuanto tiempo estuvo 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
- Sensor calefacción. Es un sensor que puede tomar tres valores : off, heat o auto.
El código para crear estos sensores es :
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: # 1 si está la orden de funcionar a la caldera friendly_name: calefaccion_activa value_template: "{{ states.climate.termostato_casa.attributes.heating_active }}" 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: 1 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: 1 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: 1 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: switch.despacho state: 'on' type: time start: '{{ as_timestamp( now().replace(hour=0).replace(minute=0).replace(second=0) ) - now().day * 86400 }}' end: '{{ now() }}'
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 sencillo
- id: '1542895212917' alias: Apagar_calefaccion_23:30 trigger: - at: '23:30:00' platform: time action: - data: entity_id: climate.termostato_casa service: climate.turn_off
- 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.Ojo , que tendréis que modificar el nombre de vuestro gateway
El Código es
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 -%}
Para usar esta automatización deberemos crear 2 scripts , que serían
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 }}" ]
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 mínima información 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 estadísticas 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 código será:
#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
Como se indicó anteriormente , se deja todo el código en un único fichero 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.
Fichero: BroadlinkHysen
Fichero: Package de la calefacción
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 demás trocitos de código.
Un saludo, amiguelezg
—
Si estáis interesados en comprar estos termostatos, podéis hacerlo aquí:
COMPRA
Comprobado que funciona el BEOK: Amazon, Amazon (sin prime), se puede comprar en Aliexpress pero la diferencia no es muy grande.
Confirmado por un usuario en el foro de HA DECDEAL: Amazon
Debería funcionar el FLUOREON (El modelo de Amazon está confirmado por un usuario del foro de HA): Amazon, Aliexpress.
—
¡Muchas gracias a Alberto Miguelez por este gran tutorial! Si queréis ver su post original en el foro, podéis verlo aquí.
Fuente: Foro de domótica
Muchas gracias por este aporte, acabo de probarlo y me va perfecto, no estoy usando las automatizaciones, ya que no controlo mucho y no quiero liarla...
Hasta ahora he usado el "generic thermostat" con un esp8266 directo a la caldera y los sensores DHT22 en las habitaciones con su correspondiente esp de forma que todos apuntaban al relé de la caldera.
¿Sabéis si es posible hacer lo mismo pero con este termostato? ¿cómo sería la automatización para esto?
Un saludo