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 ….
Buenas, gracias por tus post, son muy instructivos.
Por cierto, con el sonoff03, si tienes apagada el interruptor de la luz, tampoco funciona… ideal sería poner un relé? o mejor un pulsador wifi?
Gracias y buen trabajo
Buenas , no entiendo lo que quieres decir , ifan03 gestiona la luz y las velocidades del ventilador , la alimentación es directa , si tienes un interruptor lo tendrias que anular o puentear para que le llegase alimentación siempre y la luz desde el mando o desde HA