Home Assistant #27: Integrando termostato BeOK, Fluoreon y Decdeal

Home Assistant #27: Integrando termostato BeOK, Fluoreon y Decdeal

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.

  1. Copiar el fichero python ( extension .py) en custom_componentsclimate
    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

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

¿Quieres montarte tu propio sistema Smart Home?

¿Te gustaría empezar poco a poco teniendo Google Home, Alexa o Home Assistant para controlar las luces, calefacción y otros electrodomésticos de la casa? ¡Te ayudamos!
Entra en nuestro Grupo de Telégram de Domótica y también puedes entrar a nuestro Foro de Domótica donde podrás empezar a leer y preguntar tus dudas.
¡Te esperamos!

La entrada Home Assistant #27: Integrando termostato BeOK, Fluoreon y Decdeal se publicó primero en Domótica en Casa.

Eduardo Ruiz

Informático de vocación, apasionado de la tecnología y blogger desde hace mucho tiempo, escribo de lo que me entretiene y disfruto con ello. Si deseas seguirme, usa el rss del blog o en mi perfil de .