mirror of
https://github.com/esphome/esphome-docs.git
synced 2024-12-27 17:37:45 +01:00
00abf8b483
* ifan02 cookbook * removed spaces * removed spaces * indent codeblock, newline at end * fixes * add seo :image: * spaces... * Complete the example code & fix compilation errors Tried compiling this code today using ESPHome 1.13.6.. it would not compile. * The ifan02.h file was the main culprit and I was able to fix the issue. * The .yaml example was missing a few declarations at the beginning so I added them. * I fixed an error related to using ```light``` for the light id since that is a reserved name. * I added an ```on_boot``` declaration to turn off the light as early as possible after power is restored. (if mains power is restored in the middle of the night and the light turns on while you are sleeping it can be quite annoying, this turns it off during the boot process). * removed blank spaces on line 66 Those blank spaces get me every time ;-) * fix doc links (hopefully) I think my last PR was made against the wrong fork/branch/etc... sorry, I'm still learning github. I currently have the time and really want to see this make it into the cookbook. I think if you add me as a collaborator I would be able to push the changes and help get the errors sorted more quickly; if not, no worries, I'll take no offense and do my best to continue helping as we are doing now. * fix fan link replace ``` :doc:`/components/fan` ``` with ``` :doc:`/components/fan/index` ``` Co-authored-by: mjoshd <35782597+mjoshd@users.noreply.github.com> Co-authored-by: Guillermo Ruffino <glm.net@gmail.com>
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`
|