Last active
September 2, 2024 07:18
-
-
Save quazzie/09ee3ef2c419ecbcf979a7410062481b to your computer and use it in GitHub Desktop.
esphome ifan02 cookbook info
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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); | |
} | |
} | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
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
Thank you @DeeBeeKay and @rishabmehta7 . I will test it as soon as I can ;)