I am absolutely new to HA and everything related. I just flashed my sonoff with a ESPhome bin and got some basic functionality. but i just realized api is not something good at retaining state and now need to convert my yaml for mqtt.
I know tasmota would be a better option but I am kind of hesitant bcoz ill need a custom bin. Not very sure on compiling that.
I am even open to getting on a zoom session to get this done if required.
i also have a few questions about using the automation on HA and somethings related to mdi:icons
all you need to change is to remove api: and put in a section mqtt: (with your broker details) in the yaml file for that device. However what do you mean regarding retain state? what are you trying to retain?
esphome:
name: ifan02_02
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:
password:
manual_ip:
static_ip:
gateway:
subnet:
dns1:
dns2: 1.1.1.1
api:
#mqtt:
# broker:
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
- platform: gpio
id: light_button
pin:
number: GPIO1
inverted: True
on_press:
then:
- light.toggle: ifan02_light
- platform: gpio
id: fan_button
pin:
number: GPIO3
inverted: true
on_multi_click:
- timing:
- ON for 0.5s to 2s
then:
- fan.turn_off: ifan02_fan
- timing:
- ON for 050ms to 350ms
then:
- fan.turn_on:
id: ifan02_fan
speed: LOW
- timing:
- ON for 050ms to 350ms
- OFF for 050ms to 200ms
- ON for 050ms to 350ms
then:
- fan.turn_on:
id: ifan02_fan
speed: MEDIUM
- timing:
- ON for 050ms to 350ms
- OFF for 050ms to 200ms
- ON for 050ms to 350ms
- OFF for 050ms to 200ms
- ON for 050ms to 350ms
then:
- fan.turn_on:
id: ifan02_fan
speed: HIGH
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"
This is my yaml, I am using a Sonoff iFan02 and have added touch buttons on Rx and Tx pin to be used for light and fan control. I need the speed and the state of light and fan retained after a power failure.
i tried commenting the api and adding the mqtt server details (I have a Pi4 where i run Hassio with mqtt) but the device never got detected.
We see a lot of power failures. That will also reboot the Pi. I am not sure if that will then allow a power state restore.
Any clue on how mqtt discovery has to be enabled?
So does it mean, if i comment the api and add the mqtt details the yaml works as is?
Sorry, no. I don’t use MQTT much, only for an alarm interface. All of my ESPhome devices use the API. Is there not a way to manually add the device by MQTT? Perhaps try asking on the ESPhome Discord channel