Integración en HA de un ventilador con IFan03 y Tasmota

En esta ocasión integraremos un IFan03 en otro ventilador pero con tasmota en lugar de por sonoff LAN , el ventilador elegido es un ventilador AC de tres velocidades y con luz.

Como siempre viene el controlador que es compatible en medidas con el controlador original que no llegaremos ni a montar y un mando por RF433.

Vista de los cuatro relés que controlaran el ventilador , el primero para la luz y el resto para las velocidades

Localizamos los pines de comunicación en la parte inferior de la placa

Aquí tenemos los pines de alimentación , ojo va a 3,3V y los de Rx/Tx que iran cruzados

Lo soldamos o conectamos a nuestro adaptador de USB a 232

En esta ocasión decidí conectarlo simplemente por presión sin soldar nada a la placa

Así quedaria una vez montado , recordad que Rx y Tx van cruzados !!!!!!!!

Usaremos con en anteriores ocasiones Tasmotizer para grabar el firmware y no hacerlo por la linea de comandos

Lo primero será darle alimentación con el botón pulsado para entrar en el modo de programación , una vez en dicho modo haremos una copia del firmware original

Una vez realizado el backup , automáticamente borrara el contenido de la memoria de programa y grabara en nuevo firmware que será la versión completa del ultimo binario de tasmota

SI todo es correcto reiniciaremos el modulo

Y nos aparecerá la nueva red a la que conectarnos.

Seleccionamos la red a la que nos conectaremos , y el modulo se volverá a reiniciar

Una vez desde nuestra propia red seleccionaremos el tipo de modulo eligiendo la plantilla del IFan03

Después de reiniciarse el modulo ya podemos ver el interruptor de la luz , como las cuatro velocidades del ventilador

Configuramos toda la parte de MQTT

Cambiamos el nombre al dispositivo

Después de reiniciarlo si todo es correcto en MQTT Explorer podremos ver la comunicación hacia el servidor MQTT

En la sección de mqtt del configuration.yaml definiremos nuestro elemento fan

  fan:
  - unique_id: ventilador_oriol
    name: "Ventilador Oriol"
    command_topic: "cmnd/tasmota_8FA03F/FanSpeed"
    state_topic: "stat/tasmota_8FA03F/RESULT"
    state_value_template: >
      {% if value_json.FanSpeed is defined %}
        {% if value_json.FanSpeed == 0 -%}off{%- elif value_json.FanSpeed > 0 -%}on{%- endif %}
      {% else %}
        {% if states.fan.tasmota_8FA03F.state == 'off' -%}off{%- elif states.fan.tasmota_8FA03F.state == 'on' -%}on{%- endif %}
      {% endif %}
    availability_topic: "tele/tasmota_8FA03F/LWT"
    payload_off: "off"
    payload_on: "on"
    payload_available: Online
    payload_not_available: Offline
    percentage_command_template: >
      {% if ( value >= 1 ) and ( value <= 33 ) %}
        1
      {% elif ( value > 33 ) and ( value <= 66 ) %}
        2
      {% elif ( value > 66 ) and ( value <= 100 ) %}
        3
      {% elif value < 0 %}
        0
      {% elif value > 100 %}
        0
      {% else %}
        0 
      {% endif %}
    percentage_command_topic: "cmnd/tasmota_8FA03F/FanSpeed"
    percentage_state_topic: "stat/tasmota_8FA03F/RESULT"
    percentage_value_template: >
      {% if value_json.FanSpeed == 1 %}
        33
      {% elif value_json.FanSpeed == 2 %}
        66
      {% elif value_json.FanSpeed == 3 %}
        100
      {% else %}
        0 
      {% endif %}
    qos: 1

En la sección de mqtt del configuration.yaml definiremos nuestro elemento light para controlar la luz del ventilador

    - name: ventilador_oriol
      state_topic: "stat/tasmota_8FA03F/POWER1"
      state_value_template: "{{ value_json['values']['POWER1'] }}"
      command_topic: "cmnd/tasmota_8FA03F/POWER1"
      availability_topic: "tele/tasmota_8FA03F/LWT"
      qos: 1
      payload_on: "ON"
      payload_off: "OFF"
      payload_available: "Online"
      payload_not_available: "Offline"
      retain: false

Para dejarlo un poco mas bonito en nuestro panel lovelace podemos usar esta tarjeta https://github.com/finity69x2/fan-percent-button-row

La añadiremos en los repositorios personalizados.

Añadiremos la url en configuration.yaml

url: /hacsfiles/fan-percent-button-row/fan-percent-button-row.js
type: module

Y modificaremos nuestro panel lovelace para que aparezcan todos los elementos

          - type: divider
          - switch.enchufe_16_mosq_oriol
          - type: divider
          - fan.ventilador_oriol
          - light.ventilador_oriol
          - type: divider
          - entity: fan.ventilador_oriol
            type: custom:fan-percent-button-row
            name: Ventilador Oriol
            customTheme: true
            customSetpoints: true
            lowPercent: 33
            medPercent: 66
            hiPercent: 100          
          - binary_sensor.sensor_puerta_armario_oriol_evento
          - type: divider

Así quedaria la sección del ventilador en nuestro panel

Pasaremos a definir las automatizaciones , esta por ejemplo al abrir una puerta de un armario que esta cerca apaga el ventilador si esta activo y da un aviso

- alias: apagado del ventilador al abir la puerta del armario luz ventilador encendida
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: binary_sensor.sensor_puerta_armario_oriol_evento
      to: 'on'         
  condition:
    - condition: state
      entity_id: fan.ventilador_oriol
      state: 'on'      
  action: 
    # Ventilador Oriol
    - service: fan.turn_off
      entity_id: fan.ventilador_oriol
    - service: light.toggle
      entity_id: light.ventilador_oriol 
    - delay: 00:00:02
    - service: light.toggle
      entity_id: light.ventilador_oriol 
    - delay: 00:00:02
    - service: light.toggle
      entity_id: light.ventilador_oriol 
    - delay: 00:00:02
    - service: light.toggle
      entity_id: light.ventilador_oriol 
    - service: light.turn_on
      entity_id: light.ventilador_oriol   
    - service: notify.notif_telegram_bot
      data:
        message: |
           {{"\U0001F4A8"}}{{"\U0001F4A8"}}{{"\U0001F4A8"}}{{"\U0001F4A8"}} ¡¡¡ Puerta armario Oriol *abierta* ventilador parado !!! {{"\U0001F4A8"}}{{"\U0001F4A8"}}{{"\U0001F4A8"}}{{"\U0001F4A8"}}

Estas por ejemplo serian algunas de las acciones para controlar con un mando remoto ikea como este

Por ejemplo con las flechas izquierda y derecha disminuiria y aumentaría la velocidad del ventilador de forma rotatoria , 0 -1 -2 – 3 – 0 y 3 – 2 – 1 – 0 – 3

####################################
########## ACCIONES ORIOL ##########
####################################

- alias: pulsador tiras led oriol simple click
  id: pulsador tiras led oriol simple click
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.puls_leds_oriol_evento
      to: 'single'      
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: "toggle"      
  action: 
    - service: light.toggle
      entity_id: light.ventilador_oriol
      
- alias: pulsador tiras led oriol triple click 
  id: pulsador tiras led oriol triple click 
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.puls_leds_oriol_evento
      to: 'triple'     
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: brightness_up_click            
  action: 
    - service: light.turn_on
      entity_id: light.tira_led_cama_oriol
    - service: light.turn_on
      entity_id: light.tira_led_mesa_oriol
    - service: light.turn_on
      entity_id: light.ventilador_oriol
      
- alias: pulsador tiras led oriol hold press
  id: pulsador tiras led oriol hold press
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.puls_leds_oriol_evento
      to: 'hold'    
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: brightness_down_click  
  action: 
    - service: light.turn_off
      entity_id: light.tira_led_cama_oriol
    - service: light.turn_off
      entity_id: light.tira_led_mesa_oriol  
    - service: light.turn_off
      entity_id: light.ventilador_oriol
            

- alias: pulsador ikea oriol flecha izquierda
  id: pulsador ikea oriol flecha izquierda
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: arrow_left_click  
  action:  
    - service: fan.turn_on
      entity_id: fan.ventilador_oriol
          
    - service: mqtt.publish
      data:
        topic: "cmnd/tasmota_8FA03F/FanSpeed"
        payload_template: >
          {% set velocidad = states.fan.ventilador_oriol.attributes['percentage']| int(0)  %}
          {% if ( velocidad >= 1 ) and ( velocidad <= 33 ) %} 0
          {% elif ( velocidad >= 34 ) and ( velocidad <= 66 ) %} 1
          {% elif ( velocidad >= 100 )  %} 2
          {% elif ( velocidad == 0 )  %} 3
          {% endif %} 
        
    - delay: 00:00:01



- alias: pulsador ikea oriol flecha derecha
  id: pulsador ikea oriol flecha derecha
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: arrow_right_click  
  action:  
    - service: fan.turn_on
      entity_id: fan.ventilador_oriol
          
    - service: mqtt.publish
      data:
        topic: "cmnd/tasmota_8FA03F/FanSpeed"
        payload_template: >
          {% set velocidad = states.fan.ventilador_oriol.attributes['percentage']| int(0)  %}
          {% if ( velocidad >= 1 ) and ( velocidad <= 33 ) %} 2
          {% elif ( velocidad >= 34 ) and ( velocidad <= 66 ) %} 3
          {% elif ( velocidad >= 100 )  %} 0
          {% elif ( velocidad == 0 )  %} 1
          {% endif %} 
          
    - delay: 00:00:01
 
- alias: luz oriol conmutadores 1 y 2 single
  id: luz oriol conmutadores 1 y 2 single
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.puls_conmut_1_oriol_evento
      to: 'single'        
    - platform: state
      entity_id: sensor.puls_conmut_2_oriol_evento
      to: 'single'        
  action: 
    - service: light.toggle
      entity_id: light.ventilador_oriol
 
- alias: luz oriol hold press 1 y 2 apagar todo
  id: luz oriol hold press 1 y 2 apagar todo
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.puls_conmut_1_oriol_evento
      to: 'hold'        
    - platform: state
      entity_id: sensor.puls_conmut_2_oriol_evento
      to: 'hold'          
  action: 
    - service: light.turn_off
      entity_id: light.ventilador_oriol
    - service: light.turn_off
      entity_id: light.tira_led_cama_oriol 
    - service: light.turn_off
      entity_id: light.tira_led_mesa_oriol   

Si queremos que sea lineal del estilo 0 – 1 – 2 – 3 y 3 – 2 – 1 – 0 cambiaríamos el template por este

- alias: pulsador ikea oriol flecha izquierda
  id: pulsador ikea oriol flecha izquierda
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: arrow_left_click  
  action:  
    - service: fan.turn_on
      entity_id: fan.ventilador_oriol
          
    - service: mqtt.publish
      data:
        topic: "cmnd/tasmota_8FA03F/FanSpeed"
        payload_template: >
          {% set velocidad = states.fan.ventilador_oriol.attributes['percentage']| int(0)  %}
          {% if ( velocidad >= 1 ) and ( velocidad <= 33 ) %} 0
          {% elif ( velocidad >= 34 ) and ( velocidad <= 66 ) %} 1
          {% elif ( velocidad >= 100 )  %} 2
          {% elif ( velocidad == 0 )  %} 0
          {% endif %} 

    - delay: 00:00:01

- alias: pulsador ikea oriol flecha derecha
  id: pulsador ikea oriol flecha derecha
  initial_state: 'on'
  trigger:
    - platform: state
      entity_id: sensor.ikea_mando_2_evento
      to: arrow_right_click  
  action:  
    - service: fan.turn_on
      entity_id: fan.ventilador_oriol
          
    - service: mqtt.publish
      data:
        topic: "cmnd/tasmota_8FA03F/FanSpeed"
        payload_template: >
          {% set velocidad = states.fan.ventilador_oriol.attributes['percentage']| int(0)  %}
          {% if ( velocidad >= 1 ) and ( velocidad <= 33 ) %} 2
          {% elif ( velocidad >= 34 ) and ( velocidad <= 66 ) %} 3
          {% elif ( velocidad >= 100 )  %} 3
          {% elif ( velocidad == 0 )  %} 1
          {% endif %} 

El montaje no tiene perdida alguna ya que solo hay que darle 220 y luego hay tres cables de color blanco , negro y azul que coinciden con los mismos colores en el ventilador.

El controlador cabe perfectamente en sustitución del original en la parte superior del ventilador , una vez finalizado quedaria así

Y con esto y un bizcocho ….