TapHome

IKEA TRADFRI E1810

Packet Parser → MQTT
Submitted by
Last updated: 03. 2026

Requires external gateway

tasmota zigbee2tasmota-gateway — product page

IKEA TRADFRI E1810

This device communicates via Zigbee through a Tasmota gateway. Make sure you have the Zigbee2Tasmota Gateway template imported and your device paired before proceeding.

The IKEA TRADFRI E1810 is a compact 5-button Zigbee remote control (also known as E1524 in some regions). TapHome detects button presses via the Zigbee2Tasmota gateway over MQTT and exposes each button as a separate Push Button device — allowing you to trigger scenes, control dimmers, operate blinds, or run any Smart Rule automation.

The remote is battery-powered (CR2032) and sleeps between button presses to conserve energy. TapHome monitors battery level and device connectivity through the gateway.

Configuration

Pairing the remote
  1. Ensure the Zigbee2Tasmota Gateway is set up and the Permit Join switch is ON in TapHome
  2. Open the battery compartment on the back of the remote
  3. Press the small pairing button (next to the CR2032 battery) 4 times within 5 seconds
  4. The red LED on the remote will flash a few times — the device has joined the Zigbee network
  5. Note the Device ID (e.g., 0x1234) from the gateway’s service attributes
Template import parameters

The device template requires 4 parameters:

ParameterDescriptionExample
MQTT Broker IP AddressIP of your MQTT broker192.168.1.10
MQTT Broker PortBroker port (default 1883)1883
Gateway nameTasmota MQTT topic (same as gateway template)tasmota_XXXXX
Device IDZigbee short address from pairing0x1234

After import, 5 Push Button devices appear in TapHome — one for each button on the remote.

Device capabilities

Button mapping

The template creates 5 Push Button devices that detect button presses:

TapHome DeviceRemote ButtonZigbee Event
Dimmer DownBottom (−)DimmerStepDown
Dimmer UpTop (+)DimmerUp
LeftLeft arrow (◀)ArrowClick = 1
RightRight arrow (▶)ArrowClick = 0
ToggleCenter (●)Power

Each button uses pulse detection — the button state resets to 0 and briefly pulses to 1 when pressed. This makes them ideal for triggering Smart Rules in TapHome.

The E1810 also supports hold and release events in Zigbee2MQTT, but the TapHome template detects click events only. This is sufficient for most automation use cases like scene switching and toggle control.

Use cases with Smart Rules

Since this is a remote control, it does not directly control TapHome devices. Instead, TapHome detects each button press and you can react using Smart Rules:

  • Toggle → switch lights on/off, toggle a scene
  • Dimmer Up / Down → adjust light brightness, change thermostat setpoint
  • Left / Right → cycle through scenes, control blinds (open/close)

Configure Smart Rules to trigger on the Push Button state change for each button device.

Battery and connectivity monitoring

The module polls the gateway every hour (ZbInfo command) and monitors:

  • Battery Percentage — estimated battery level. A warning is triggered when the level drops below 30%
  • Battery Voltage — raw voltage of the CR2032 cell
  • Link Quality — Zigbee signal strength (0–100%)
  • Offline detection — a warning appears if the device has not been seen for more than 12 hours, and an error after 24 hours

Service attributes also include the device’s IEEE address, Zigbee model ID, manufacturer string, and active endpoints.

Troubleshooting

Button presses not detected
  1. Verify the Device ID in the template matches the Zigbee short address assigned during pairing (check the gateway’s service attributes or use ZbStatus in the Tasmota console)
  2. Press the pairing button once to wake the remote — it sleeps between presses and the first press after a long idle may not register
  3. Check the Tasmota console for ZbReceived messages when pressing buttons — this confirms the gateway receives Zigbee events
Remote not pairing
  1. Factory reset the remote: press the pairing button 4 times quickly, then hold it for 10+ seconds until the LED pulses
  2. Move the remote within 2–3 meters of the Zigbee gateway during pairing
  3. Ensure Permit Join is active on the gateway before starting the pairing sequence
Battery draining quickly
  1. The CR2032 battery typically lasts 1–2 years under normal use
  2. If battery warnings appear frequently, check the Link Quality — a weak Zigbee signal causes more retransmissions and faster battery drain
  3. Consider adding a Zigbee router device (any mains-powered Zigbee device) near the remote to improve signal quality

How to install in TapHome

Prerequisites

  • Zigbee gateway with Tasmota firmware (e.g., Sonoff ZBBridge, eWeLink ZB-GW03)
  • MQTT broker running on your local network (TapHome built-in broker or external)
  • TapHome CCU on the same network

TapHome has a built-in MQTT broker — enable it in SettingsHardwareMQTT Broker. No additional software is needed.

Step 1 — Set Up the Tasmota Zigbee Gateway

  1. Flash Tasmota firmware on a supported Zigbee coordinator (e.g., Sonoff ZBBridge, eWeLink ZB-GW03)
  2. Connect the gateway to your Wi-Fi network via the Tasmota web UI
  3. Navigate to ConfigurationConfigure MQTT and set:
    • Host: your MQTT broker IP (e.g., 192.168.1.10)
    • Port: 1883
    • Topic: note down the topic name (e.g., tasmota_XXXXX) — you will need it during template import

For detailed instructions, see the Tasmota Zigbee documentation.

Step 2 — Import the Gateway Template in TapHome

  1. Download the gateway template from the Zigbee2Tasmota Gateway compatibility page
  2. In TapHome, go to SettingsHardwarePacket ParserImport
  3. Import the template with these parameters:
    • MQTT Broker IP Address: your broker IP (e.g., 192.168.1.10)
    • MQTT Broker Port: 1883
    • Gateway name: the Tasmota MQTT topic from Step 1 (e.g., tasmota_XXXXX)

After import, you will see two devices: Permit Join (switch) and Devices Found (counter).

Step 3 — Pair a Zigbee Device

  1. In TapHome, turn on the Permit Join switch — this opens a 60-second pairing window
  2. On the Zigbee device, start the pairing procedure (typically hold the reset button for 5 seconds until the LED blinks)
  3. Watch the Devices Found counter — it increments when a new device joins
  4. Check the Service Attributes of the gateway to see the new device’s ID (e.g., 0x1234), manufacturer, and model
  5. The pairing mode deactivates automatically after the timeout

Step 4 — Import the Device Template

  1. Download the device-specific template from the corresponding compatibility page
  2. Import the template with these parameters:
    • MQTT Broker IP Address: same as the gateway
    • MQTT Broker Port: 1883
    • Gateway name: same Tasmota MQTT topic as above
    • Device ID: the short address from pairing (e.g., 0x1234)

Available devices

IKEA TRADFRI E1810 Module
Service Attributes
IEEE AddressZigbee IEEE address (64-bit unique identifier)
Model IDZigbee model identifier reported by the device
ManufacturerZigbee manufacturer string reported by the device
EndpointsActive Zigbee endpoints on the device
Link QualityZigbee link quality indicator (0–100%)
Battery VoltageCR2032 battery voltage
Battery PercentageEstimated battery level (warning at <30%)
Custom Variables
GWname (string)Tasmota MQTT topic name of the Zigbee gateway (found in Configuration → MQTT → Topic)
ID (string)Zigbee short address of the sensor (assigned during pairing)
After pairing the sensor via Permit Join, find the device short address in the gateway's Devices Found service attribute or via Tasmota console command ZbStatus

IKEA - TRADFRI - E1810

Read (module)
MQTTPUBLISH("cmnd/" + GWname+ "/ZbInfo", ID)
Listener
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(TOSTRING(RECEIVEDMSG.Payload), "ZbReceived." + ID, true);
    var bat := PARSEJSON(ZbReceived, "BatteryPercentage", true);
    if(!ISNULL(bat), BatteryPercentage := bat);
    var volt := PARSEJSON(ZbReceived, "BatteryVoltage", true);
    if(!ISNULL(volt), BatteryVoltage := volt);
    
    var deviceInfo := PARSEJSON(TOSTRING(RECEIVEDMSG.Payload), "ZbInfo." + ID, true);
    if !ISNULL(deviceInfo)
    	LastSeenEpoch := PARSEJSON(deviceInfo, "LastSeenEpoch");
        COMPLETESERVICEATTRIBUTE("IEEEAddr", PARSEJSON(deviceInfo, "IEEEAddr"));
        COMPLETESERVICEATTRIBUTE("ModelId", PARSEJSON(deviceInfo, "ModelId"));
        COMPLETESERVICEATTRIBUTE("Manufacturer", PARSEJSON(deviceInfo, "Manufacturer"));
        COMPLETESERVICEATTRIBUTE("Endpoints", PARSEJSON(deviceInfo, "Endpoints"));
        #COMPLETESERVICEATTRIBUTE("Config", PARSEJSON(deviceInfo, "Config"));
        COMPLETESERVICEATTRIBUTE("Link Quality", ROUND(LINEAR(PARSEJSON(deviceInfo, "LinkQuality"), 0,0, 254, 100)) + "%");
    end
end

if BatteryPercentage < 30
	ADDWARNING("Low battery (<30%)");
end

if !ISNAN(LastSeenEpoch)
	DATETIME now := NOW();
	var secondsSeen := now.UNIXTIME - LastSeenEpoch;
	if secondsSeen > 12 * 60 * 60
		if secondsSeen > 24 * 60 * 60
			ADDERROR("Device is offline > 24H");
		else
			ADDWARNING("Device is offline > 12H");        
		end
	end
end
Service Attributes
IEEEAddr
MQTTPUBLISH("cmnd/" + GWname+ "/ZbInfo", ID)
ModelId
Manufacturer
Endpoints
Link Quality
Battery Voltage
BatteryVoltage + " V"
Battery Percentage
BatteryPercentage + "%"
Dimmer Down Push Button Read-only

Detects bottom button press — triggers on DimmerStepDown Zigbee event

boolean pulse

Dimmer Down

Listener
Bp := 0;
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    var button := PARSEJSON(ZbReceived, "DimmerStepDown", true);
    if(!ISNULL(button), Bp := 1);
end
Dimmer Up Push Button Read-only

Detects top button press — triggers on DimmerUp Zigbee event

boolean pulse

Dimmer Up

Listener
Bp := 0;
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    var button := PARSEJSON(ZbReceived, "DimmerUp", true);
    if(!ISNULL(button), Bp := 1);
end
Left Push Button Read-only

Detects left arrow press — triggers on ArrowClick Zigbee event

boolean pulse

Left

Listener
Bp := 0;
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    var button := PARSEJSON(ZbReceived, "ArrowClick", true);
    if(!ISNULL(button) and button = 1, Bp := 1);
end
Right Push Button Read-only

Detects right arrow press — triggers on ArrowClick Zigbee event

boolean pulse

Right

Listener
Bp := 0;
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    var button := PARSEJSON(ZbReceived, "ArrowClick", true);
    if(!ISNULL(button) and button = 0, Bp := 1);
end
Toggle Push Button Read-only

Detects center button press — triggers on Power Zigbee event

boolean pulse

Toggle

Listener
Bp := 0;
if INDEXOF(RECEIVEDMSG.Topic, "SENSOR") > 0
	var ZbReceived := PARSEJSON(RECEIVEDMSG.Payload, "ZbReceived." + ID, true);
    var button := PARSEJSON(ZbReceived, "Power", true);
    if(!ISNULL(button), Bp := 1);
end
Connection: Packet Parser → MQTT
Possible improvements (3)
  • Dimmer Down Hold — brightness_down_hold event — long press detection not implemented in TapHome template
  • Dimmer Up Hold — brightness_up_hold event — long press detection not implemented
  • Arrow Left/Right Hold — arrow_left_hold / arrow_right_hold — long press events not implemented

Sources