Last active
April 12, 2021 17:54
-
-
Save quazzie/09ee3ef2c419ecbcf979a7410062481b to your computer and use it in GitHub Desktop.
esphome ifan02 cookbook info
This file contains 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 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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
'esp8266_restore_from_flash' option can help to restore settings after power failure and 'api.connected' condition can be used to prevent the early turning on of light component. Has anyone succeded in turing this code 'power failure resistant'?