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: 1En 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: falsePara 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: dividerAsí 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 ….