TL;DR:

  • Tasmota replaces the vendor firmware on ESP8266/ESP32 IoT devices with local-only control via HTTP API and MQTT — no cloud account or subscription required
  • The Tasmota Web Installer makes flashing straightforward in Chrome; for older devices you may need esptool.py over serial
  • Home Assistant auto-discovers Tasmota devices via MQTT, giving you full local integration without any cloud bridge

Cloud-connected smart home devices have a structural problem: the vendor’s cloud service is load-bearing. When the service goes down, gets discontinued, or changes its terms, your devices stop working or lose functionality. This has happened repeatedly — Belkin WeMo, Insteon, Wink, and a string of others have either shut down entirely or degraded over time.

Tasmota sidesteps this entirely. It’s an alternative firmware for the ESP8266 and ESP32 microcontrollers that power a huge number of consumer IoT devices, and it runs entirely locally. Your smart plugs, switches, and sensors communicate over your own network, controlled via HTTP or MQTT, with no vendor cloud in the path.

What Devices Run Tasmota

Tasmota was originally created for Sonoff devices, which use ESP8266. The hardware compatibility list has since expanded considerably and covers hundreds of devices — smart plugs, in-wall switches, dimmers, bulbs, relays, temperature sensors, energy monitors.

Common categories:

Smart plugs and power monitoring — Sonoff S20/S26, BlitzWolf BW-SHP, Gosund EP2, Nous A1 (which ships with Tasmota pre-installed in some versions). Power monitoring plugs are particularly popular as the ENERGY readings come through MQTT and integrate well with Home Assistant energy dashboards.

In-wall switches and relays — Sonoff Basic, Mini, Dual, 4CH. These require more care to flash if they’re embedded in wall wiring, but they’re widely used.

ESP32-based devices — Tasmota has supported ESP32 for several years and coverage continues to expand. ESP32 devices include the Athom Plug (ships with Tasmota) and various temperature/humidity sensors.

Before buying anything specifically to flash with Tasmota, check devices.tasmota.com — it’s a searchable database of supported hardware with flash method notes and gotchas.

Flashing: The Web Installer Route

For devices that are currently running stock firmware and can be put into flash mode via a USB connection, the Tasmota Web Installer at install.tasmota.com is the simplest path. It runs in Chrome/Chromium (Web Serial API required) and handles the flash process through a wizard:

  1. Connect the device to your computer via USB (for devices with USB ports — Sonoff Mini R2, for example, or devices where you’ve opened the case to access the USB serial pins)
  2. Open install.tasmota.com in Chrome
  3. Select the appropriate Tasmota build (standard, sensors, lite, etc.)
  4. Click Install and follow the prompts
  5. After flashing, the wizard walks you through WiFi configuration

The installer handles erasing the original firmware and writing Tasmota. For most modern Sonoff devices with an accessible USB port or pads, this takes under five minutes.

Flashing: esptool Over Serial

Older devices or those without accessible USB require opening the case and connecting to serial pads (TX, RX, GND, 3.3V) with a USB-to-UART adapter like the CH340 or CP2102. The process:

pip install esptool

# Erase existing firmware
esptool.py --port /dev/ttyUSB0 erase_flash

# Flash Tasmota
esptool.py --port /dev/ttyUSB0 write_flash -fs 1MB -fm dout 0x0 tasmota.bin

You need to hold the device in flash mode (usually by grounding GPIO0 at power-on) for the flash to proceed. The specific GPIO0 pin location varies by device — check the templates database before opening anything.

Initial Configuration

After flashing, Tasmota creates a WiFi access point named tasmota-XXXXXX. Connect to it, enter your home WiFi credentials, and the device joins your network. From there, access the web interface at the device’s IP address.

Key configuration steps:

Set the correct template — Tasmota needs to know which GPIO pins control which functions (relay, button, LED, power monitoring). The templates database at templates.blakadder.com has ready-made configs for hundreds of devices. Copy the JSON template, paste it into Configuration > Configure Other > Template, and hit Save.

Configure MQTT — if you’re using Home Assistant or any MQTT broker, set the broker address in Configuration > Configure MQTT. Tasmota will auto-discover in Home Assistant if you’ve enabled the Tasmota integration in HA settings.

Set the timezone — Configuration > Configure Other > Timezone. Also set up NTP if you need reliable timestamps on ENERGY and sensor data.

MQTT and HTTP API

Once configured, Tasmota responds to commands in two ways:

HTTPhttp://device-ip/cm?cmnd=Power%20toggle toggles the relay. You can send any Tasmota command over HTTP GET requests. Useful for scripting, cron jobs, or any system that can make HTTP calls.

MQTT — publish to cmnd/tasmota-device/Power with payload ON, OFF, or TOGGLE. Tasmota publishes state updates to stat/tasmota-device/POWER and telemetry (including power monitoring data) to tele/tasmota-device/SENSOR on a configurable schedule (default: every 300 seconds).

The MQTT topic structure is configurable if you want to organise devices differently.

Home Assistant Integration

Home Assistant’s Tasmota integration discovers devices automatically via MQTT discovery. Enable MQTT in HA (requires a broker — Mosquitto as an HA add-on is the easiest option), and Tasmota devices that have MQTT configured will appear in Home Assistant automatically within a minute or two of coming online.

You get entities for relay state (on/off), power monitoring (current, voltage, apparent power, energy today, energy total), and any sensor readings (temperature, humidity, CO2 depending on the device). These feed directly into HA automations and the Energy dashboard without any manual entity configuration.

Berry Scripting

Tasmota 10.x added Berry, a Python-like scripting language that runs on the device itself. Berry scripts can implement local automations without requiring any external controller:

# Turn off at 11pm
def nighttime()
  tasmota.cmd("Power1 off")
end
tasmota.add_cron("0 23 * * *", nighttime, "night")

Berry is particularly useful for sensors where you want local pre-processing — averaging readings, triggering rules on thresholds, or combining inputs from multiple sensors. For simple automations that would otherwise require cloud services or a persistent Home Assistant instance, Berry moves the logic to the edge device itself.

Why Bother in 2026?

Consumer smart home devices still largely depend on cloud services, and the track record for longevity remains poor. Tasmota-flashed devices work indefinitely regardless of what happens to the original vendor — because the firmware is open-source and runs entirely on your network.

The tradeoff is the initial setup effort. Flashing firmware is not a consumer-grade experience, and some devices require opening the case. But for devices you’re planning to leave in place for years, spending an hour to set up local control is a reasonable investment.

The ecosystem has matured — Tasmota’s Web Installer removed most of the friction for compatible devices, and the templates database covers the devices most likely to be worth the effort.