Aqara WS-EUK04 H1 EU: Zigbee2MQTT + Home Assistant Setup Guide
The Aqara H1 EU with-neutral double-rocker switch (WS-EUK04) is the one in the H1 EU family that most people actually want when they go looking for it, and then mistakenly land on guides written for the no-neutral version. It exposes real-time power and cumulative energy monitoring, it has no minimum load requirement, and it handles decoupled mode reliably without the LED flicker or false-trigger issues that come with the no-neutral variants.
If you’ve already got one in hand and want to integrate it with Zigbee2MQTT and Home Assistant without touching the Aqara app or cloud, this is the guide. I’ll cover the full entity set you should expect, how to pair it without triggering the missing-entities bug I’ve seen bite a number of people, how to configure decoupled mode correctly per-rocker, and how to get the energy monitoring feeding into the HA Energy Dashboard.
If you’re new to running Aqara hardware without the vendor hub, start with our guide to Aqara Zigbee devices in Home Assistant without a hub for the coordinator and Zigbee2MQTT basics this guide assumes.
WS-EUK04 vs the rest of the H1 EU family
Before pairing anything, it’s worth knowing exactly what device you have. The H1 EU line has four members with overlapping names, and picking the wrong guide costs you an hour of confusion.
| Model | Neutral | Rockers | Zigbee ID | Energy monitoring |
|---|---|---|---|---|
| WS-EUK01 | No | Single | lumi.switch.l1aeu1 | No |
| WS-EUK02 | No | Double | lumi.switch.n2acn2 | No |
| WS-EUK03 | Yes | Single | lumi.switch.l2aeu1 | Yes |
| WS-EUK04 | Yes | Double | lumi.switch.n2aeu1 | Yes |
The WS-EUK04 is lumi.switch.n2aeu1. If Zigbee2MQTT shows a different model ID after pairing, you’ve got a different switch. The no-neutral double-rocker WS-EUK02 is the one most often confused with it; it shares the same form factor but drops energy monitoring entirely.
What the WS-EUK04 exposes in Zigbee2MQTT
A correctly paired WS-EUK04 surfaces the following entities. If you’re missing any of the energy or action ones, read the pairing section carefully before troubleshooting anything else. The full definition is on the Zigbee2MQTT WS-EUK04 device page if you want to confirm against your installed version.
Switch control:
– switch_left — left rocker relay on/off
– switch_right — right rocker relay on/off
Energy monitoring:
– power is real-time draw in watts (both channels combined)
– energy is cumulative consumption in kWh
– power_outage_count counts supply interruptions on this circuit
– device_temperature is the switch’s internal temperature
Action events (decoupled mode):
– action fires single_left, double_left, hold_left, single_right, double_right, hold_right, single_both, double_both on physical press
Configuration:
– operation_mode_left and operation_mode_right set control_relay or decoupled per rocker
– power_outage_memory controls relay state behaviour after power is restored
– led_reversed flips the LED indicator logic
– led_disabled_night suppresses LED between set hours
– power_calibration and energy_calibration apply offset correction for reported figures
– power_precision and energy_precision set decimal places in reported values
Pairing the WS-EUK04, and why proximity matters
Here’s the problem I’ve seen come up repeatedly: someone pairs the WS-EUK04, it shows up in Zigbee2MQTT, but the entity list is missing power, energy, device_temperature, and any action events. The left and right on/off switches are there, and that’s it.
The root cause is mesh routing at pairing time. The WS-EUK04 is a Zigbee router device, not an end device, which means it will join the mesh via whichever Zigbee router it hears strongest at the moment you trigger pairing. If that happens to be a router across the house rather than your coordinator, the device pairs via an intermediate hop, and on some firmware versions the full entity set doesn’t get correctly advertised through that relay. The switch works as a basic on/off device, but half its capabilities are silent.
The fix is pairing close to the coordinator directly. Here’s how I do it:
- Delete the device from Zigbee2MQTT if it’s already paired with missing entities. Remove it from the Devices list in the Z2M frontend.
- Factory reset the switch. Long-press the left button until the LED flashes three times and goes into a slow-blink pairing mode. If that doesn’t trigger it, look up the specific reset sequence for your firmware version; some require pressing both rockers simultaneously.
- Temporarily disable permit-join on other Zigbee routers if you can. This sounds fiddly, but the goal is to prevent the switch from finding a better signal path to a router before it can reach the coordinator. If disabling individual routers isn’t practical, just physically bring the switch (if it’s on a long enough flex during testing) to within a metre of the coordinator before triggering permit-join.
- Enable permit-join on the coordinator only, then immediately press the button to start pairing.
- Verify the entity list before moving the switch to its final location. All the entities in the table above should appear. If power and energy are still missing, reset and try again.
Once correctly paired and in its final location, the switch will maintain mesh routing through its nearest router. It just needs the coordinator as the pairing anchor.
Setting up decoupled mode
Decoupled mode is the key feature for anyone running smart bulbs on a circuit controlled by this switch. The default control_relay mode cuts power to the circuit when the button is pressed, which means smart bulbs on that circuit lose power and go offline, their state, schedules, and automation targets all disappearing until they power back up. Not what you want.
In decoupled mode the relay stays in whatever state you left it (typically always on), and physical button presses instead fire action events that Home Assistant can use to trigger automations. The light state is then managed entirely through HA, not through the relay.
The Chinese-language community has documented this exact problem extensively: users running 混用Aqara开关与米家灯 (mixed Aqara switches with Mi Home smart lights) who found their Wi-Fi lights going offline every time they pressed a wall switch. The recommended fix, known in those threads as 无线模式 (wireless mode), is exactly decoupled mode on the Zigbee side. Keep the relay always on, route all control through Home Assistant.
Each rocker is configured independently. To set the left rocker to decoupled mode, publish to zigbee2mqtt/<friendly_name>/set:
{"operation_mode_left": "decoupled"}
And for the right:
{"operation_mode_right": "decoupled"}
Valid values are control_relay (default) and decoupled. You can also set this through the Z2M frontend: navigate to the device, find the Exposes tab, and the operation mode dropdowns for each rocker are there.
One thing to verify after setting: trigger a physical press and watch the Z2M event log. You should see action: single_left or action: single_right appearing. If you press a rocker in decoupled mode and nothing appears in the event log, the mode didn’t take. Re-publish the MQTT payload and check again.
Automating from action events in Home Assistant
Action events come through as event entities in Home Assistant rather than state changes. The automation trigger uses the action attribute. Here’s a basic example for the left rocker triggering a light scene:
automation:
- alias: "H1 left button - toggle living room lights"
trigger:
- platform: device
domain: mqtt
device_id: YOUR_DEVICE_ID
type: action
subtype: single_left
action:
- service: light.toggle
target:
entity_id: light.living_room_ceiling
If you’re driving Aqara’s own bulbs from these actions, our Aqara LED Bulb T2 setup guide covers pairing those into the same Z2M instance.
For device triggers to appear in the UI automation editor, the switch must have been correctly paired with its full entity set. If device triggers aren’t showing up, that’s another symptom of the partial pairing issue described above.
Energy monitoring in Home Assistant
The WS-EUK04’s energy monitoring is one of the reasons to pick it over the no-neutral WS-EUK02. The power entity gives you real-time consumption in watts and energy gives you cumulative kWh, both of which feed directly into the HA Energy Dashboard.
To add the switch to the Energy Dashboard, go to Settings > Dashboards > Energy, then add it as an individual device under “Individual Devices.” HA will use the energy entity automatically if it’s exposed correctly.
A few practical notes on the monitoring:
The power reading is combined. There’s one power entity covering both rockers, not separate per-relay readings. If you need to know which circuit is drawing what, you’ll need two separate switches or an energy-monitoring smart plug on one of the circuits.
Calibration offsets. If the reported wattage drifts from what a clamp meter shows on the same circuit, use power_calibration to correct it. A 5–10% drift is normal for the class of sensor in these switches. The energy figure accumulates from the (possibly uncalibrated) power readings, so set the calibration offset early if accuracy matters.
Power outage count. The power_outage_count entity tracks how many times the mains supply to this switch has been interrupted. That number incrementing without a corresponding power outage in your home is a signal worth investigating; it can indicate wiring issues, a tripping breaker, or voltage instability on that circuit.
Firmware updates via OTA
Zigbee2MQTT supports OTA updates for the WS-EUK04. Earlier firmware versions (some units shipped with firmware dated around late 2021) had a known relay malfunction bug where the relay would behave erratically after extended operation. That’s been resolved in later firmware.
Check the OTA tab in the Z2M frontend after pairing. If an update is available, apply it before spending time configuring automations. The update takes a few minutes and the switch will reboot at the end. Your configuration settings (operation modes, power-outage memory) are retained across OTA in my experience, but verify the operation modes afterwards.
Privacy: Zigbee2MQTT means no Aqara cloud
This is worth being direct about. The WS-EUK04 paired to Zigbee2MQTT communicates exclusively with your local Zigbee coordinator. There is no Aqara hub in the path, no connection to Aqara’s servers, no account required.
Compare this to using the switch through an Aqara hub with HomeKit: Chinese community analysis has shown that Aqara devices maintain cloud connections to Aqara’s servers even when operating in HomeKit mode. The device is added to HomeKit and automations run locally through the hub, but the hub itself stays in contact with Aqara infrastructure. For users who want the switch to make no outbound connections at all, Zigbee2MQTT is the cleaner path. Block the coordinator’s host from making outbound connections beyond your local network and you’re done.
Troubleshooting
Power, energy, or action entities missing after pairing. This is almost always the proximity-pairing problem. Reset the device, pair close to the coordinator with permit-join targeted at the coordinator rather than the mesh broadly, and verify the full entity list before deploying.
Decoupled mode set but no action events appearing. Re-publish the MQTT payload. The setting can silently fail if the device was in the middle of a state update when you sent it. After re-publishing, physically press the button and watch the Z2M event log; action: single_left should appear within a second. If actions still never fire, updating your coordinator firmware (Z-Stack on a CC2652-class stick) has resolved this for others reporting the same issue.
Power reading stuck at 0W with a load connected. First check that the relay is actually on (switch_left or switch_right state = ON). If the relay is on and the load is drawing power, the zero reading usually means the OTA hasn’t been applied and you’re on older firmware. Update via OTA and re-check.
State not syncing after HA restart. The WS-EUK04 doesn’t actively push state on reconnect in all firmware versions. Add a Z2M-MQTT retain setting or use HA’s entity restore to handle this. Setting retain: true in Zigbee2MQTT’s MQTT configuration means the last known state is preserved across broker restarts.
Device temperature rising. The switch will report a steady device temperature under load; some warmth is expected and normal for a relay device handling continuous current. If device_temperature climbs above 60°C under moderate load, check that the switch is correctly rated for the circuit it’s on. The WS-EUK04 is rated for a combined load across both relays.
WS-EUK04 vs WS-EUK02: which to choose
If you haven’t bought yet and you’re deciding between the with-neutral and without-neutral versions, the comparison is fairly concrete.
| Feature | WS-EUK04 (with neutral) | WS-EUK02 (without neutral) |
|---|---|---|
| Neutral wire required | Yes | No |
| Energy monitoring | Yes | No |
| Minimum load | None | ~3W |
| LED flicker with LED bulbs | None | Possible without bypass |
| Decoupled mode reliability | Reliable | Works, but load-dependent |
| Zigbee router role | Yes | End device only |
| OTA via Z2M | Yes | Not confirmed |
If you’ve landed on the no-neutral path instead, our Aqara H1 no-neutral decoupled-mode guide walks through that variant’s quirks.
The deciding factor is usually your wiring. If you have a neutral wire at the switch box, the WS-EUK04 is the better device; energy monitoring alone is worth it on circuits you care about tracking, and the elimination of LED flicker and minimum-load constraints makes decoupled mode more dependable. If you don’t have neutral, the WS-EUK02 is your only option in this family and it works fine for basic on/off and decoupled-mode use.
FAQ
Why are power and energy readings not showing for my WS-EUK04 in Zigbee2MQTT?
The most common cause is pairing via an intermediate Zigbee router rather than directly to the coordinator. Delete the device, factory reset it, and re-pair with the switch physically close to the coordinator. The full entity set should appear.
How do I enable decoupled mode on the Aqara H1 EU switch (WS-EUK04)?
Publish {"operation_mode_left": "decoupled"} or {"operation_mode_right": "decoupled"} to zigbee2mqtt/<friendly_name>/set. You can also set this in the Z2M frontend Exposes tab. Verify by pressing the button and checking for action events in the Z2M log.
What is the difference between the WS-EUK04 (with neutral) and WS-EUK02 (without neutral)?
The WS-EUK04 exposes power and energy monitoring entities that the WS-EUK02 doesn’t have. The WS-EUK04 also has no minimum load requirement and acts as a Zigbee router in the mesh, while the WS-EUK02 is an end device. Both support decoupled mode.
Can I use the Aqara H1 EU switch with smart bulbs without them losing power when I press the button?
Yes, that’s exactly what decoupled mode is for. Set operation_mode_left or operation_mode_right to decoupled, keep the relay permanently on, and use Home Assistant automations triggered by the button action events to control the lights. The bulbs never lose power.
Does the WS-EUK04 work without the Aqara app or cloud?
Yes. Paired to Zigbee2MQTT with a standalone Zigbee coordinator, the switch has no dependency on Aqara’s app or servers. No account, no cloud connection.