mirror of
https://github.com/esphome/esphome-docs.git
synced 2024-12-26 17:27:47 +01:00
213 lines
5.3 KiB
ReStructuredText
213 lines
5.3 KiB
ReStructuredText
|
Sonoff iFan02
|
||
|
=============
|
||
|
|
||
|
.. seo::
|
||
|
:description: Instructions for using Sonoff ifan02 in ESPHome.
|
||
|
:keywords: Fan, Sonoff, ifan02
|
||
|
:image: fan.svg
|
||
|
|
||
|
Sonoff iFan02 is a driver for ceiling fans with lights.
|
||
|
By replacing the old driver with iFan02, your non-smart led ceiling fan will be converted to a smart ceiling fan.
|
||
|
For more information see `iFan02 <https://www.itead.cc/sonoff-ifan02-wifi-smart-ceiling-fan-with-light.html>`__
|
||
|
|
||
|
This configuration will expose a :doc:`/components/light/binary` and a :doc:`/components/fan/speed`.
|
||
|
|
||
|
To get this working in ESPHome you first need to create a :doc:`/components/output/custom` to control the iFan02.
|
||
|
|
||
|
Create a ifan02.h file:
|
||
|
|
||
|
.. code-block:: c++
|
||
|
|
||
|
#include "esphome.h"
|
||
|
using namespace esphome;
|
||
|
|
||
|
class IFan02Output : public Component, public FloatOutput {
|
||
|
public:
|
||
|
void write_state(float state) override {
|
||
|
if (state < 0.3) {
|
||
|
// OFF
|
||
|
digitalWrite(5, LOW);
|
||
|
digitalWrite(4, LOW);
|
||
|
digitalWrite(15, LOW);
|
||
|
} else if (state < 0.6) {
|
||
|
// low speed
|
||
|
digitalWrite(5, HIGH);
|
||
|
digitalWrite(4, LOW);
|
||
|
digitalWrite(15, LOW);
|
||
|
} else if (state < 0.9) {
|
||
|
// medium speed
|
||
|
digitalWrite(5, HIGH);
|
||
|
digitalWrite(4, HIGH);
|
||
|
digitalWrite(15, LOW);
|
||
|
} else {
|
||
|
// high speed
|
||
|
digitalWrite(5, HIGH);
|
||
|
digitalWrite(4, LOW);
|
||
|
digitalWrite(15, HIGH);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
Then you need to set it up with yaml.
|
||
|
|
||
|
.. code-block:: yaml
|
||
|
|
||
|
esphome:
|
||
|
name: ifan02
|
||
|
platform: ESP8266
|
||
|
board: esp8285
|
||
|
includes:
|
||
|
- ifan02.h
|
||
|
on_boot:
|
||
|
priority: 225
|
||
|
# turn off the light as early as possible
|
||
|
then:
|
||
|
- light.turn_off: ifan02_light
|
||
|
|
||
|
wifi:
|
||
|
ssid: <YOUR_SSID>
|
||
|
password: <YOUR_PASSWORD>
|
||
|
|
||
|
api:
|
||
|
|
||
|
logger:
|
||
|
|
||
|
ota:
|
||
|
|
||
|
binary_sensor:
|
||
|
- platform: gpio
|
||
|
id: vbutton_light
|
||
|
pin:
|
||
|
number: GPIO0
|
||
|
inverted: True
|
||
|
on_press:
|
||
|
then:
|
||
|
- light.toggle: ifan02_light
|
||
|
|
||
|
- platform: gpio
|
||
|
id: vbutton_relay_1
|
||
|
pin:
|
||
|
number: GPIO9
|
||
|
inverted: True
|
||
|
on_press:
|
||
|
then:
|
||
|
- switch.toggle: fan_relay1
|
||
|
- switch.turn_on: update_fan_speed
|
||
|
|
||
|
- platform: gpio
|
||
|
id: vbutton_relay_2
|
||
|
pin:
|
||
|
number: GPIO10
|
||
|
inverted: True
|
||
|
on_press:
|
||
|
then:
|
||
|
- switch.toggle: fan_relay2
|
||
|
- switch.turn_on: update_fan_speed
|
||
|
|
||
|
- platform: gpio
|
||
|
id: vbutton_relay_3
|
||
|
pin:
|
||
|
number: GPIO14
|
||
|
inverted: True
|
||
|
on_press:
|
||
|
then:
|
||
|
- switch.toggle: fan_relay3
|
||
|
- switch.turn_on: update_fan_speed
|
||
|
|
||
|
output:
|
||
|
- platform: custom
|
||
|
type: float
|
||
|
outputs:
|
||
|
id: fanoutput
|
||
|
lambda: |-
|
||
|
auto ifan02_fan = new IFan02Output();
|
||
|
App.register_component(ifan02_fan);
|
||
|
return {ifan02_fan};
|
||
|
|
||
|
- platform: gpio
|
||
|
pin: GPIO12
|
||
|
id: light_output
|
||
|
|
||
|
light:
|
||
|
- platform: binary
|
||
|
name: "iFan02 Light"
|
||
|
output: light_output
|
||
|
id: ifan02_light
|
||
|
|
||
|
switch:
|
||
|
- platform: template
|
||
|
id: update_fan_speed
|
||
|
optimistic: True
|
||
|
turn_on_action:
|
||
|
then:
|
||
|
- delay: 200ms
|
||
|
- if:
|
||
|
condition:
|
||
|
and:
|
||
|
- switch.is_off: fan_relay1
|
||
|
- switch.is_off: fan_relay2
|
||
|
- switch.is_off: fan_relay3
|
||
|
then:
|
||
|
- fan.turn_off: ifan02_fan
|
||
|
- if:
|
||
|
condition:
|
||
|
and:
|
||
|
- switch.is_on: fan_relay1
|
||
|
- switch.is_off: fan_relay2
|
||
|
- switch.is_off: fan_relay3
|
||
|
then:
|
||
|
- fan.turn_on:
|
||
|
id: ifan02_fan
|
||
|
speed: LOW
|
||
|
- if:
|
||
|
condition:
|
||
|
and:
|
||
|
- switch.is_on: fan_relay1
|
||
|
- switch.is_on: fan_relay2
|
||
|
- switch.is_off: fan_relay3
|
||
|
then:
|
||
|
- fan.turn_on:
|
||
|
id: ifan02_fan
|
||
|
speed: MEDIUM
|
||
|
- if:
|
||
|
condition:
|
||
|
and:
|
||
|
- switch.is_on: fan_relay1
|
||
|
- switch.is_off: fan_relay2
|
||
|
- switch.is_on: fan_relay3
|
||
|
then:
|
||
|
- fan.turn_on:
|
||
|
id: ifan02_fan
|
||
|
speed: HIGH
|
||
|
- switch.turn_off: update_fan_speed
|
||
|
|
||
|
- platform: gpio
|
||
|
pin: GPIO5
|
||
|
id: fan_relay1
|
||
|
|
||
|
- platform: gpio
|
||
|
pin: GPIO4
|
||
|
id: fan_relay2
|
||
|
|
||
|
- platform: gpio
|
||
|
pin: GPIO15
|
||
|
id: fan_relay3
|
||
|
|
||
|
fan:
|
||
|
- platform: speed
|
||
|
output: fanoutput
|
||
|
id: ifan02_fan
|
||
|
name: "iFan02 Fan"
|
||
|
|
||
|
See Also
|
||
|
--------
|
||
|
|
||
|
- :doc:`/components/light/index`
|
||
|
- :doc:`/components/light/binary`
|
||
|
- :doc:`/components/fan/index`
|
||
|
- :doc:`/components/fan/speed`
|
||
|
- :doc:`/components/output/index`
|
||
|
- :doc:`/components/output/custom`
|
||
|
- :doc:`/guides/automations`
|
||
|
- :ghedit:`Edit`
|