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

Beok Decdeal Floureon Marcas Tutoriales

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_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

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. Además, si quieres estar al tanto de las ofertas de domótica que salen a diario para poder hacerte un sistema de domótica low cost, entra a nuestro Canal de ofertas de domótica y no te perderás ni una o si lo prefieres y no tienes Telegram, puedes entrar a nuestra página de ofertas de domótica o Smart Home en Facebook. ¡Síguenos también en nuestro Facebook, Twitter o Instagram! ¡Te esperamos!

Si también buscas otro tipo de ofertas, puedes echar un ojo a nuestros otros canales:
* Tecnología en general *
* Juguetes / consolas / Juegos de mesa *
* Manualidades *
Si no tienes Telegram puedes consultar todas las ofertas en Megabazar.es

16 Comentarios

  1. Luisdlahuerta

    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

    Reply
    • eduardo

      Si te refieres a activar desde cada ESP8266 el termostato integrado en HA, si, podrías mantener la misma lógica que ahora tienes, con una llamada a una URL de tu HA (por API)

      Reply
      • Luisdlahuerta

        Gracias por la respuesta, lo veré y estudiaré su funcionamiento.
        Pinta bien.
        Un saludo

        Reply
  2. Javier López

    Hola buenas tardes, quería prdguntarle si sabe que tipo de adaptacion se ha de realizar para que funcione en Home assistant versión 0.92. Gracias. No logro que funcione tras la actualización

    Reply
    • eduardo

      No tengo el Beok, en el canal de Telegram igual alguien puede ayudarte

      Reply
  3. LeFric

    ¿Puedes volver a subir el fichero, en concreto, el Package de la calefacción?

    Gracias.

    Reply
  4. Alejandro

    Hola buenos días,

    En primer lugar gracias por el aporte. He recibido el termostato y estoy intentado integrarlo siguiendo todos tus pasos. Después de dejar el .py en la carpeta climate en custom_components, modificar el configurator.yaml y reiniciar recibo un error en el log que dice “BroadlinkHysen unidentified integration”. ¿Sabrías decirme porque?

    Gracias de antemano

    Reply
  5. portátiles de ocasión

    Hola, buenas noches.
    Estoy valorando cambiar mi termostato y he visto este modelo: BOT306RF-WIF. Es Rf y wifi, tiene una base que va a la caldera y luego el termostato… es lo que necesito puesto que mi instalación no tiene cableado…
    Sabéis si esta integración es válida para ese modelo?, he preguntado en telegram, pero nadie me ha dicho nada.
    Gracias.

    Reply
    • eduardo

      No sabría decirte porque igual el modelo lleva cerrado el MQTT y por tanto, no serviría

      Reply
    • Cesar

      Hola, estoy en la misma situación que tu… necesito que la base sea portátil para poder ponerla en otro sitio que no sea el que decidió el “iluminado de turno”… al final lo pusiste???

      Reply
    • Cesar Gonzalez Cacho

      Hola, final instalaste éste termostato?? yo he estado mirando algunos, pero me interesa el que la base no tenga que estar enchufada al cargador de movil continuamente…. se puede integrar en HA???

      Gracias

      Reply
  6. jorge

    has tenido problemas para conectar el termostato a la wifi?

    en mi caso es imposible he probado varias configuraciones y no lo consigo

    Reply
  7. Five Correo

    Hola desde hace algún tiempo aparece este mensaje de advertencia en registros

    Template warning: ‘float’ got invalid input ‘None’ when rendering template ‘{{ states.climate.termostato_casa.attributes.temperature | float }}’ but no default was specified. Currently ‘float’ will return ‘0’, however this template will fail to render in Home Assistant core 2022.1

    Me pordiais idicar que se debe modificar ??
    Gracias

    Reply
  8. Juanma

    Hola! He conseguido instalar mi beok, tengo una pregunta. Se podría instalar un segundo termostato? Si es así … como se añadiría al configuration.yaml?

    Reply

Contestar

Tu e-mail no será publicadoRequired fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Lost Password

Registro