Flashing
Connect RX -> TX | 3.3 -> 3.3 | TX -> RX | GND -> GND and connect TP16 to GND.
Press and hold the button while connecting to power.
This is an ESP 8285 in the iFan2.
Download and compile the Tasmota firmware:
git clone https://github.com/arendst/Tasmota.git
cd ./Tasmota/lib/
vi deployLibs.sh
#!/bin/sh rm -rf ~/Documents/Arduino/libraries/* cp -R ./default/* ~/Documents/Arduino/libraries/. cp -R ./lib_audio/* ~/Documents/Arduino/libraries/. cp -R ./lib_basic/* ~/Documents/Arduino/libraries/. cp -R ./lib_display/* ~/Documents/Arduino/libraries/. cp -R ./lib_div/* ~/Documents/Arduino/libraries/. cp -R ./lib_i2c/* ~/Documents/Arduino/libraries/. cp -R ./lib_rf/* ~/Documents/Arduino/libraries/. cp -R ./lib_ssl/* ~/Documents/Arduino/libraries/. cp -R ./lib_ssl/* ~/Documents/Arduino/libraries/.
chmod +x deployLibs.sh
./deployLibs.sh
Open Arduino IDE
Open tasmota project
Set board to ESP8285 and other settings, see below:
With the iFan in flash mode, click Upload.
Tasmota Commands
Cmd | Cmnd | Value | URL |
---|---|---|---|
Light Off | Power | 0 | http://xxx/cm?cmnd=Power 0 |
Light On | Power | 1 | http://xxx/cm?cmnd=Power 1 |
Fan Off | FanSpeed | 0 | http://xxx/cm?cmnd=FanSpeed 0 |
Low Speed | FanSpeed | 1 | http://xxx/cm?cmnd=FanSpeed 1 |
Med Speed | FanSpeed | 2 | http://xxx/cm?cmnd=FanSpeed 2 |
High Speed | FanSpeed | 3 | http://xxx/cm?cmnd=FanSpeed 3 |
Integration with Homebridge
Configure MQTT
Using the mqttthing homebridge plugin, we configure our fan using the following:
{ "accessory": "mqttthing", "type": "fan", "name": "fireplace-fan", "url": "http://192.168.1.50:1883", "username": "homebridge", "password": "pass", "topics": { "getOn": { "topic": "stat/fireplace-fan/RESULT", "apply": "return JSON.parse(message).FanSpeed > 0 ? true : false;" }, "setOn": { "topic": "cmnd/fireplace-fan/FanSpeed", "apply": "return message ? '' : '0';" }, "getRotationSpeed": { "topic": "stat/fireplace-fan/RESULT", "apply": "return Math.round(JSON.parse(message).FanSpeed * 33.3);" }, "setRotationSpeed": { "topic": "cmnd/fireplace-fan/FanSpeed", "apply": "return Math.round(message / 33.3);" } }, "confirmationPeriodms": 1000 },
Order of Operations when Setting Rotation Speed
If we add some console.log statments in our apply function, we see that setting the rotation speed makes 2 calls. The first to setRotationSpeed and then to setOn.
setRotationSpeed - mesage=73 setOn - mesage=true
After installing the iFan for use with my fireplace, I concluded that the fan level 1 was too low and decided to bypass it. This new configuration changes the fan such that it operates at 0% (off), 50%(fan level2) and 100%(fan level 3).
{ "accessory": "mqttthing", "type": "fan", "name": "fireplace-fan", "url": "http://192.168.1.50:1883", "username": "homebridge", "password": "pass", "topics": { "getOn": { "topic": "stat/fireplace-fan/RESULT", "apply": "return JSON.parse(message).FanSpeed > 0 ? true : false;" }, "setOn": { "topic": "cmnd/fireplace-fan/FanSpeed", "apply": "return message ? '' : '0';" }, "getRotationSpeed": { "topic": "stat/fireplace-fan/RESULT", "apply": "val=JSON.parse(message).FanSpeed; if(val==0)return '0'; if(val=='2') return '50'; if(val==3) return '100';" }, "setRotationSpeed": { "topic": "cmnd/fireplace-fan/FanSpeed", "apply": "if(message >50) return 3; if(messag=e=0) return 0; return 2;" } }, "confirmationPeriodms": 1000 },
References
Reference | URL |
---|---|
Flashing Tasmota | https://tasmota.github.io/docs/devices/Sonoff-iFan02/ |
Tasmota Commands | https://tasmota.github.io/docs/Commands/ |
Issue | https://github.com/arachnetech/homebridge-mqttthing/issues/78 |