Disappointed by the lack of Local Scene support on the Flagship ZBBridge-Ultra

​It is extremely frustrating that the Sonoff Zigbee Bridge Ultra (ZBBridge-U) still lacks Local Scene (Local Automation) support. We are talking about Sonoff’s flagship Zigbee gateway—a device packed with a 1.5 GHz Dual-Core CPU and 1GB DDR4 RAM—yet simple automations like triggering a Zigbee relay via a Zigbee switch still rely entirely on the eWeLink cloud!

​When the internet goes down, the entire smart home intelligence vanishes, rendering high-end hardware useless for basic offline interactions. Smaller or entry-level gateways and competing devices have local execution, yet the “Ultra” model is left waiting for a feature that should have been present on day one.

​Having top-tier processing power means nothing if the software stack keeps us tethered to cloud latency and outages. Sonoff and eWeLink teams urgently need to prioritize offline local scenes for the ZBBridge-U to justify its “Ultra” naming and premium specs.

I have the same problem and when my internet goes down I cannot turn the lights on / off and that’s very annoying

This problem is as old as time. And nothing is likely to change anytime soon.

We need to host a central point, whether it’s Home Assistant or eWeLink CUBE OS, otherwise, unfortunately, the cloud.

Hello, thank you very much for your detailed feedback and criticism regarding the ZBBridge‑U.

Regarding local scenes (offline automation), we truly value your input and have already included this feature in our roadmap. It is currently being planned and developed. Before the official release, we would like to understand as much as possible about your real‑world expectations for local scenes. So we would like to ask:

  • What specific suggestions or ideas do you have for local scenes?

  • Which device types or trigger‑action logic would you like to see prioritized?

  • Are there any specific use cases you have in mind—for example, critical automations that must still work even when the internet is down?

Any information you provide will be directly incorporated into our requirements evaluation, helping us design a local automation solution that better fits real‑world usage. If you have any other suggestions, please feel free to share them as well.

Thank you again for your support and patience!

​Hi Minnie, Thank you for the open response and for prioritizing local scenes on the ZBBridge-U roadmap. Since this device boasts superior hardware specs, it has the full potential to handle instant and complex offline logic.

​One of our most critical real-world expectations is ultra-low latency execution. Currently, presence sensors take about 5-6 seconds to trigger a lighting scene upon entering a room. We expect local scenes to eliminate this delay and ensure sub-second response times for motion and presence detection. Also, as previously mentioned:

​Direct Input-to-Output Binding: Zigbee wireless switches and sensors must trigger relays and plugs offline instantly.

​Reliable Environmental Automation: Climate and ventilation controls must operate seamlessly even without the internet.

​We look forward to seeing these improvements in firmware updates.

Hello,

Thank you very much for your specific expectations and real‑world feedback regarding the local scene functionality. Your input is timely and extremely valuable to us. We will incorporate your suggestions into our requirements evaluation and take them fully into consideration during the design phase.

Thank you again for your patience and support!

Thank you for asking for real-world use cases. One of the most important use cases for me is what I call “virtual parallel switches.”

In my home, I use Sonoff Zigbee switches to reproduce the behavior of traditional parallel/three-way switches, but using local scenes.

For example:

Switch A → controls the light
Switch B → is physically independent, but should behave as a second parallel switch

I therefore create two local automations:

  • Switch A ON → Switch B ON
  • Switch A OFF → Switch B OFF

And, importantly, the reverse direction as well:

  • Switch B ON → Switch A ON
  • Switch B OFF → Switch A OFF

This makes the two physical switches behave as if they were part of the same electrical circuit, even though there is no traveler wire between them.

I use this extensively throughout my home. The screenshots attached to this post show several examples of these local automations currently running in my home, including bedrooms and corridors.

A very important problem: automation loops

There is, however, a significant problem with the way I currently have to implement this.

When I create a virtual parallel circuit involving three or more switches, I frequently experience what I call automation loops.

An automation loop happens when one automation changes a switch, that change triggers another automation, which changes another switch, and eventually the resulting change triggers the first automation again.

For example:

A ON → B ON → C ON → A ON → B ON → C ON → …

The system can continue executing these automations repeatedly, even though all switches are already supposed to be synchronized.

In my case, this can become much more serious than simply generating unnecessary automation executions.

The lights can start turning ON and OFF continuously, sometimes repeatedly cycling between states, and they do not stop by themselves.

When this happens, I have to manually power-cycle the ZBBridge-U — turn it off and turn it back on — to stop the loop and restore normal operation.

This is particularly frustrating in a real home environment.

For example, I use virtual parallel switches for the lights in my corridors. When the children are already tired and we are putting them to bed, having the corridor lights suddenly start turning on and off continuously is extremely disruptive. It can wake the children up and make a normally simple bedtime routine very frustrating.

So I believe loop prevention is an essential requirement for local scenes, especially when using bidirectional synchronization between three or more devices.

Ideally, the bridge should understand the difference between:

A physical user action:
Switch A physically changed → synchronize B and C

and

A state change caused by the automation itself:
A → B → C

The second type should not be allowed to restart the same automation chain indefinitely.

A local automation engine should therefore have some form of loop detection / execution context / recursion protection.

For example, once a scene has started synchronizing a group of switches, subsequent state changes generated by that same scene should not trigger the same synchronization chain again.

It would also be useful if an action such as:

Switch B → ON

were simply ignored when B is already ON, rather than generating another state-change event capable of triggering additional automations.

Why local execution is important

This is actually one of the main reasons why I would like to see local scenes/offline automation supported by ZBBridge-U.

These automations are not dependent on the cloud. They are basic state-to-state relationships that should continue working even if the Internet connection is completely unavailable.

For a smart home, I consider this a fundamental function. If I physically press a wall switch to turn on a light, another physical switch configured as its virtual parallel switch should immediately reflect the same state — even when the Internet is down.

The key requirement is that the local scene must react to the actual physical state change of the Zigbee switch, rather than requiring an Internet connection or cloud processing.

Features I would prioritize

  1. Zigbee switch ON/OFF → Zigbee switch ON/OFF
  2. Bidirectional synchronization
  3. One trigger → multiple actions
  4. Multiple switches controlling the same virtual circuit
  5. Very low latency
  6. Execution entirely inside the Zigbee bridge/local network
  7. Operation without Internet/cloud connectivity
  8. Persistence after bridge reboot
  9. Built-in loop detection and prevention
  10. Protection against recursive/chained automation execution
  11. No unnecessary trigger when the target device is already in the requested state
  12. Reliable synchronization of 3, 4 or more switches

For me, virtual parallel switching is one of the clearest and most useful real-world applications for local scenes, because it allows smart switches to reproduce conventional electrical behavior while also giving much more flexibility.

And solving the loop problem would make a huge difference in reliability. I would be very interested in testing this functionality with ZBBridge-U and providing detailed feedback before the official release.

1. Explain the Root Cause

In-wall relays vs. M5

The issue lies in using basic in-wall relay modules (like ZBMINI) with physical toggle switches connected to S1/S2 terminals. These modules operate on simple dry-contact/state-toggle logic: they cannot distinguish between a physical switch toggle (user action) and a soft state change executed by an automation payload. When an automation changes the relay state, it creates a feedback trigger that the bridge misinterprets as a new physical event, creating a recursive automation loop.

2. Propose the SwitchMan M5 Alternative

Hardware upgrade

Switching to dedicated smart wall switches like the Sonoff SwitchMan M5 (Zigbee version) resolves this natively at the hardware/firmware level. The M5 operates on an integrated microcontroller that tracks input state logic internally—it explicitly separates physical touch/button events from network-driven state updates. This prevents state changes received via automations from falsely re-triggering bidirectional scenes.

Here is a ready-to-post response you can send to Renanjose in English:

Hi Renanjose,

Your issue stems from using simple in-wall relay modules (like the ZBMINI series) attached to traditional wall switches via S1/S2 terminals.

These basic in-wall relays use simple contact-state detection. They cannot distinguish between a physical switch flip made by a person and an internal relay state change triggered by a Zigbee automation payload. As a result, when Automation A changes the state of Relay B, Relay B broadcasts its new state as an event, which Automation A picks up as a new trigger—causing the endless recursive loop you are experiencing.

To permanently solve this without waiting for a software patch, consider replacing those setup locations with integrated smart wall switches like the Sonoff SwitchMan M5 (Zigbee version). Unlike basic relays, smart switches like the M5 process input signals via an onboard MCU. They natively separate physical button presses from incoming network state commands, which completely prevents bidirectional synchronization loops.

On another note, I am also eagerly waiting for full local scene / local automation execution support to arrive on the ZBBridge Ultra (ZBBridge-U). Because of this current limitation and delay, I actually had to switch back to using the ZBBridge Pro in the interim to keep my local automations running reliably.

Hopefully, the eWeLink team adds proper loop detection and execution context to local scenes soon!

Hi, thank you very much for the detailed explanation. I believe there is just a misunderstanding regarding my hardware setup.

I am not using ZBMINI, in-wall relay modules, or traditional switches connected to S1/S2 terminals.

All of the switches involved (38 in total) in the examples I provided are Sonoff SwitchMan M5 Zigbee switches — specifically the ZBM5-1C-120.

I have several of these M5 switches installed throughout my home, and the virtual parallel configurations shown in my screenshots are ZBM5 → ZBM5 automations.

For example, with three M5 switches:

M5 A ON → M5 B ON → M5 C ON

and the reverse synchronization:

M5 C ON → M5 B ON → M5 A ON

The same applies to the OFF state.

So unfortunately, replacing ZBMINI modules with SwitchMan M5 switches would not address my particular situation, because I am already using SwitchMan M5 switches throughout the installation.

My screenshot of the device information also shows:

Manufacturer: SONOFF
Model: ZBM5-1C-120
Firmware: SN-MG22-ZBM5

The issue I am reporting is specifically related to bidirectional eWeLink automations between multiple M5 switches.

When three or more M5 switches are involved, I sometimes experience a feedback loop where a state change generated by one automation triggers another automation, which then changes another M5, eventually causing the original automation chain to be triggered again.

When this happens, the lights can repeatedly turn ON and OFF without stopping. In some cases, the only way I have found to stop the behavior is to power-cycle the ZBBridge.

This is especially inconvenient because some of these virtual parallel switches control my corridor lights, and it has happened at bedtime when my children are already tired. Having the corridor lights continuously switching on and off is very disruptive.

So my main request is not a hardware upgrade. The hardware is already M5 throughout the installation.

What I believe would solve this problem is proper loop/feedback protection in the automation engine, for example:

  • detecting when a state change was caused by an automation rather than a physical button press;
  • preventing the same automation chain from recursively triggering itself;
  • maintaining an execution context for a scene;
  • and ignoring an action when the target device is already in the requested state.

I hope this clarifies my setup. And thank you again for taking the time to look into the issue — I really appreciate it.

In short: this is not a ZBMINI → M5 issue. It is a M5 → M5 → M5 automation-loop issue.

​Hi Renanjose,

​Thank you for clarifying! I completely misread your setup—having 38 SwitchMan M5s (ZBM5-1C-120) deployed throughout your home is a serious installation, and that definitely changes the picture.

​This proves that the root issue is purely within eWeLink’s automation engine software logic, rather than a hardware limitation. When 3 or more M5 switches are tied in a bidirectional loop (A ➔ B ➔ C ➔ A), the engine fails because it cannot distinguish between a physical button press and an automation-driven state update, while also failing to ignore commands for devices that are already in the target state.

​Until the eWeLink/Sonoff team adds native origin tracking and loop prevention to the ZBBridge-U, here is a practical logic workaround you can apply today to break the recursive loop on your 3+ M5 parallel circuits:

​State-Combination Condition Matching (Match ALL / AND Logic)

​Instead of using simple single-device triggers (e.g., IF M5-A = ON ➔ Turn ON M5-B), construct your scenes using State-Combinations with “Match ALL Conditions” (AND logic).

​By defining conditions that only evaluate when devices are out of sync, the automation automatically stops execution the exact moment all switches reach the target state (A=ON, B=ON, C=ON).

​For Turning ON (Create 3 Scenes):

​IF M5-A is ON AND M5-B is OFF AND M5-C is OFF ➔ THEN Turn ON A, B, and C.

​IF M5-A is OFF AND M5-B is ON AND M5-C is OFF ➔ THEN Turn ON A, B, and C.

​IF M5-A is OFF AND M5-B is OFF AND M5-C is ON ➔ THEN Turn ON A, B, and C.

​For Turning OFF (Create 3 Scenes):

​IF M5-A is OFF AND M5-B is ON AND M5-C is ON ➔ THEN Turn OFF A, B, and C.

​IF M5-A is ON AND M5-B is OFF AND M5-C is ON ➔ THEN Turn OFF A, B, and C.

​IF M5-A is ON AND M5-B is ON AND M5-C is OFF ➔ THEN Turn OFF A, B, and C.

​Why this works: Once all three M5s reach the state of ALL ON or ALL OFF, the OFF condition checks fail, immediately breaking the recursive chain and stopping the flashing loop!

​I hope this logic structure helps restore peace at bedtime for your kids while we wait for an official firmware/engine update! I will continue pushing the dev team alongside you for proper local loop detection in ZBBridge-U.