Skip to main content

Tasmota Open-Source Firmware

Tasmota is an alternative firmware for ESP8266 and ESP32-based devices, focusing on local control over MQTT with a web-based configuration UI. It is widely used to "de-cloud" smart plugs and switches.

Initial Setup & Tools

Installing esptool

The standard CLI tool for flashing ESP devices.

# Alpine Linux example
apk add py3-pip py3-wheel
sudo pip install esptool

Basic Device Diagnostics

# Verify connection and read chip info
esptool.py read_mac
esptool.py flash_id

Flashing Procedure

1. Backup & Erase

It is highly recommended to backup the original firmware before erasing.

# Backup 1MB flash
esptool.py read_flash 0x00000 0x100000 fwbackup.bin

# Erase flash completely
esptool.py erase_flash

2. Download & Flash Tasmota

# Download latest Chinese version
curl -LO https://github.com/arendst/Tasmota/releases/latest/download/tasmota-CN.bin

# Flash (typical ESP8266 settings: 1MB flash, DOUT mode)
esptool.py write_flash -fs 1MB -fm dout 0x0 tasmota-CN.bin

3. Initial Configuration

  • After flashing, the device will broadcast an AP like tasmota_XXXXXX-####.
  • Connect to it and navigate to http://192.168.4.1 to configure your WiFi.

Hardware Flashing Pinout (Generic ESP8266)

To enter flashing mode, GPIO0 must be pulled to GND during power-up or reset.

ESP PinConnectionNote
GNDGNDCommon ground with USB adapter.
GP2OpenNot connected.
GP0GNDCRITICAL: Pull to GND to enter flash mode.
RXDTXCross-connected to adapter.
TXDRXCross-connected to adapter.
CHPD3.3VEnable pin (High).
RSTOpenReset pin.
VCC3.3V3.3V Power (Do not use 5V).

Home Assistant Integration

Tasmota supports Home Assistant MQTT Discovery for automatic setup.

Enabling Discovery

Navigate to the Tasmota console and run:

# Enable Home Assistant MQTT Discovery
SetOption19 1

Logging & Debugging

Example MQTT state messages observed via syslog:

// STATE message
tele/tasmota_0A7B40/STATE = {"Time":"2020-10-19T20:35:29","Uptime":"0T00:08:47","UptimeSec":527,"Heap":25,"SleepMode":"Dynamic","Sleep":50,"LoadAvg":19,"MqttCount":1,"POWER":"OFF","Wifi":{"RSSI":96,"Signal":-52}}

// POWER result
stat/tasmota_0A7B40/RESULT = {"POWER":"OFF"}
stat/tasmota_0A7B40/POWER = OFF