While working on fixing my KuLED light switches from magically but unexpectedly switching on, I found this great post and video from The Hookup regarding how to stop Wifi switches flashed with Tasmota open source firmware from seemingly being switched on by ghosts.
MQTT Retain Settings
As Rob explains, most of the time this random switching is caused by MQTT retain commands that are not in sync between your hub (e.g., Home Assistant) and the Tasmota device.
A Ghostly Example
Rob gives a common example of the problem:
- Turn on your device using Home Assistant.
- Turn it off using the physical switch.
- Unplug the device, wait 10 seconds, and plug it back into the wall.
- Wait and see if the device turns back on.
I tried this on a Sonoff-modified desk lamp that was experiencing the random switching. After following the steps I re-plugged it into the wall, and after about 2 seconds it turned back on exhibiting this “ghostly” behavior.
Fix Your Retain Settings
The fix for 90% of cases is the following (for a detailed explanation and coverage of some specific use cases see The Hookup’s post)
- Add “retain:false” to each of your Tasmota device switches in your Home Assistant configuration.yaml file.
Change Retain Related Settings in the Tasmota Console of Each Device
- In your browser, navigate to the internal ip of your Tasmota device (e.g., 192.168.X.X, click on “Console”).
- Type in the following command (this is a one-line backlog command that combines the various commands that The Hookup provides):
Tasmota Console Commands To Fix Ghosting Issues12345Backlog switchretain off; buttonretain on; buttonretain off; PowerOnState 3; PowerRetain on;
as shown below:
Restart Home Assistant
- On one of my devices, I also had to delete the Tasmota device from my Home Assistant integration (Configuration->Integrations->Tasmota) before restarting Home Assistant.
Delete Your MQTT Topics
In addition to the above steps, I also had to use Mqtt Explorer (an excellent free MQTT client available in the Windows store) to delete the MQTT retain messages manually. Instead of hunting all the relevent topics down, I decided to delete ALL the MQTT topics held by the broker as all my devices will simply recreate them (your setup may be different or there might be historical data that you don’t want to lose so you may want to think a little before deleting all your topics).
Without deleting the MQTT retain messages, my devices were turning OFF on a reconnect if the WiFi disconnected. If you watch Rob’s video he explains how the broker will keep MQTT retain messages forever unless they are manually deleted. The switchretain/buttonretain Tasmota commands in the second step above are intended to do that but they didn’t work for my KULED switches.
Change Retain to False in Your Home Assistant Configuration File
If the above doesn’t work for you, you probably have an incorrect value in one of your Tasmota settings. Try setting the Tasmota device back to its defaults and then configure your Tasmota from scratch. Then try the above again.