Adding Tasmota Switches to Homebridge

Introduction

I want to control my various smarthome devices via a central UI. I like giving Siri commands to switch on lights or to increase the temperature. For this, I’m using HomeBridge in a Docker container. Adding stuff like HomeMatic is relatively easy, but adding Tasmota switches which are controlled via MQTT are a little bit tricky.

Installation of the plugin

I’ve decided to use Homebridge Mqttthing. It supports a lot of Tasmota devices and also supports many generic MQTT devices, since topics can be defined for almost everything including javascript transformation of values. The plugin itself can be installed from the Homebridge UI. Just search for Homebridge Mqttthing and install it.

Configuration of Tasmota devices

My Tasmota device have this MQTT configuration:

Important to mention is the Full Topic tasmota/%prefix%/%topic%/ which we’ll need later on.

Configuration of a device in the plugin

A single device hash must be added to the Homebridge config.json:

{
    "type": "outlet",
    "name": "SpĆ¼lmaschine",
    "url": "mqtt://192.168.100.11:1883",
    "username": "<aUserName>",
    "password": "<aPassword>",
    "logMqtt": true,
    "topics": {
        "getOnline": {
            "topic": "tasmota/tele/16A-1/LWT",
            "apply": "return message == 'Online' ? 'ON' : 'OFF';"
        },
        "getOn": "tasmota/stat/16A-1/POWER",
        "setOn": "tasmota/cmnd/16A-1/POWER"
    },
    "integerValue": false,
    "onValue": "ON",
    "offValue": "OFF",
    "accessory": "mqttthing",
    "startPub": {
        "tasmota/cmnd/16A-1/POWER": "",
        "tasmota/stat/16A-1/POWER": ""
    }
}

This socket is an outlet and tracks the power consumption of our dishwasher. Its checking tasmota/tele/16A-1/LWT to see if the device is actually online and sends data to MQTT. The returned values are translated from the presence of the Online string to a boolean flag. It should be the same value that is configured under onValue and offValue.

The variables getOn and setOn control and verify the current status of the device.

The startPub hash is especially interesting. After a Homebridge restart, the software doesn’t know about the current status of the outlet. Upon Homebridge start, the plugin will send an empty message to tasmota/cmnd/16A-1/POWER which will trigger a status message on tasmota/stat/16A-1/POWER which is then used to confirm the initial state, comparing it with the values defined in onValue and offValue.

Conclusion

Adding the tasmota devices was quite fun, especially when the current state of the switch is properly readout. After trying several plugins, I liked Homebridge Mqttthing most. I’m especially glad that I’m able to get the initial state of the devices right after a restart of HomeBridge.