Skip to content

Instantly share code, notes, and snippets.

@quazzie
Last active September 2, 2024 07:18
Show Gist options
  • Save quazzie/09ee3ef2c419ecbcf979a7410062481b to your computer and use it in GitHub Desktop.
Save quazzie/09ee3ef2c419ecbcf979a7410062481b to your computer and use it in GitHub Desktop.
esphome ifan02 cookbook info
#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);
}
}
};
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"
@rishabmehta7
Copy link

@javihg1986 I wrote an ESP home yaml for iFan02 which even allows for restoration of the light state. Feel free to give this a go. https://devices.esphome.io/devices/Sonoff-iFan02

@javihg1986
Copy link

Thank you @DeeBeeKay and @rishabmehta7 . I will test it as soon as I can ;)

@rishabmehta7
Copy link

I do have an iFan04H but no cycles to check the GPIOs, if you figure it out. Let me know :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment