Introduction
This post is about bridging Zigbee devices to my Home Assistant server.
From Wikipedia : “Zigbee is a low-cost, low-power, wireless mesh network standard targeted at battery-powered devices in wireless control and monitoring applications. Zigbee delivers low-latency communication. Zigbee chips are typically integrated with radios and with microcontrollers.”
Make sure to not confuse with Z-Wave, they are not compatible even if they are wireless low-power mesh networks.
Being low-power, Zigbee is especially useful to battery powered devices like:
- Sonoff SNZB-01 Button
- Sonoff SNZB-02 Temperature / humidity sensor
- Sonoff SNZB-03 Motion / PIR sensor
- Sonoff SNZB-04 Door / window opening sensor
- Sonoff ZBMINI Smart Switch (in-wall)
- Sonoff BASICZBR3 Smart Switch
- And so on from many different other brands (Osram, Philips, IKEA to name a few)
In case you’re wondering, left box is the Sonoff Zigbee Bridge (ZBBridge) and is required.
Mesh network
The zigbee wireless networking uses a mesh topology, meaning that devices known as routers are speaking to each other, routing message all around as needed to reach far nodes. One cost is that this drains battery, so having always on nodes is not practical when running on batteries. I recommend on any big network to have a few nodes powered by main, such as plugs, light switches or light bulbs.
In a nutshell:
- Zigbee Coordinator : Usually a bridge or USB dongle, this is the brain of the network and is required;
- Zigbee Router : Usually always-on devices like switches on mains power, not required but helps a LOT for bigger networks;
- Zigbee End Device : All devices actually, this includes battery powered devices and are not able to relay packets between devices, thus not enough for a big network.
Requirements
This post assumes you already have a working installation of Home Assistant on your LAN network.
To build below minimum setup, on top of your Wi-Fi and Home Assistant, you need a Sonoff Zigbee Bridge (ZBBridge) and a Sonoff temperature / humidity sensor (SNZB-02).
The flashing process is done using a Serial-to-USB adapter, easiest is to grab one based on the CH340G chip or FTDI. Always double check voltage when using such adapter, using accordingly either 3.3V or 5V.
The zigbee bridge has two chips to connect to both zigbee and Wi-Fi networks, assuming the routing between both networks.
The nodes have a single zigbee chip for networking.
Getting started
We are going to setup a few things to use our temperature sensor node. Here are the building blocks, starting from the end node:
- The temperature sensor has a single button to pair it to the zigbee network.
- The Sonoff zigbee bridge is powered over USB and has a single button to enable pairing of new sensors. To use it with Home Assistant instead of the built-in eWeLink cloud app, we are going to flash a new firmware called Tasmota.
- Lastly Home Assistant needs to add an integration to use zigbee bridge. This integration also helps manage the zigbee sensors.
The trickiest part being to flash Tasmota, most of this post is about that specific step.
Flashing Tasmota to Sonoff ZBBridge
A note about Tasmota and requirements
Tasmota is an open source firmware aimed at ESP8266 or ESP8285 based devices. It features a great flexibility and abilities to set it up using its built-in web interface.
Using the dedicated ZBBridge image (tasmota-zbbridge.bin), it is very easy to set its Wi-Fi network and MQTT connection settings.
So the macro steps are:
- Open the ZBBridge device to access the PCB
- Wire the Serial-to-USB on the ZBBridge PCB
- Flash Tasmota using Tasmotizer
- Disconnect the adapter
- Power the ZBBridge over regular USB
- Access the Tasmota web interface and finally configure the device
- If everything went fine, put back the PCB in its enclosure
You’ll need some hardware:
- Sonoff Zigbee bridge as our main victim of the day
- Serial-to-USB adapter to flash firmware, one supporting 3.3V (5V would likely destroy your chip)
- Breadboard and jumping wires
- Computer with Wi-Fi or smartphone to setup Tasmota over Wi-Fi
- Obviously, a computer with a USB port
… and a few pieces of software:
- Tasmotizer for flashing. This is an all-in-one tool to automatically flash Tasmota to a device
- Windows, if you use Tasmotizer as in this guide
- A web browser, I’m using Google Chrome
Refer to Tasmota Getting Started page if you’re new or not using Windows.
Wiring the ZBBridge to the Serial-to-USB adapter
If you’re used to flashing, don’t get fooled, you have to ground an extra pin, also there are multiple TX/RX on the ZBBridge.
Here is the correct wiring:
Adapter side | ZBBridge side | Notes |
---|---|---|
GND | GND | Power |
GND | IO0 | Enable flashing of ESP chip |
VCC | 3V3 | Power, don’t forget to set adapter to 3V3 and NOT 5V |
RX | ETX | Data exchange |
TX | ERX | Data exchange |
I’m using breadboard jumper wires, there pins are thinner than usual Dupont cables. A Dupont won’t fit the small thru holes of the ZBBridge. Having proper connection might get tricky.
Connecting to Tasmota
After successfully flashing Tasmota firmware, the device starts a new Wi-Fi hotspot in the form tasmota_XXXXXX-####.
Connect to it and open http://192.168.4.1/ to administrate the device.
Tasmota configuration
Tasmota needs a few tweaks to work properly in our situation:
- Updated firmware for the zigbee chip
- Setup MQTT server and credentials
- Activate Home Assistant ZHA template, delegating full control to Home Assistant
- Optional : Network configuration, always nice to set a static IP address on the network
Flashing Zigbee firmware
Get latest firmware for zigbee chip from https://github.com/arendst/Tasmota/tree/development/tools/fw_SonoffZigbeeBridge_ezsp
From the Tasmota web UI, go to Firmware Upgrade > Upgrade by file upload
Note: Might be possible to use the direct OTA URL but I haven’t tried 🙂
Updating MQTT
From the Tasmota web UI, go to Console this time.
Issue below command to setup your MQTT server (you COULD use Configuration > Configure MQTT but I had issues saving credentials).
Adjust the command as per your requirements, especially mqtthost, mqttuser and mqttpassword.
Backlog mqtthost 192.168.0.xxx; mqttport 1883; mqttuser XXXX; mqttpassword XXXX; topic zigbridge
Device will restart.
Activate Home Assistant ZHA template
Back to the console, use this line as-is, except if you want to use a custom port (default is 8888).
backlog rule1 on system#boot do TCPStart 8888 endon ; rule1 1 ; template {"NAME":"Sonoff ZHABridge","GPIO":[56,208,0,209,59,58,0,0,0,0,0,0,17],"FLAG":0,"BASE":18} ; module 0
Defining a static IP address
This is optional but my ISP router limits DHCP to range x.x.x.2 to x.x.x.26.
The “IPAddressX” commands means:
- IP address
- Gateway
- Mask
- DNS server (here, Google)
IPAddress1 192.168.0.XXX IPAddress2 192.168.0.1 IPAddress3 255.255.255.0 IPAddress4 8.8.8.8 restart 1
Restart one more time, but the device is very fast to reboot and reconnect!
See Tasmota Commands / Wi-Fi for full reference. If you do this often, consider using backlog command.
Adding ZBBridge to Home Assistant
Finally, let’s add the Zigbee bridge to Home Assistant.
In Home Assisstant, go to Configuration > Integrations > Add integration
Select Zigbee Home Automation from the list of integrations.
Configure using :
- Serial port : Enter manualy
- Ratio type : EZSP
- Serial device path : socket://:8888
- Speed: 115200
It should detect your bridge and add it to integrations.
Adding devices
To add a zigbee device, go to Configuration > Integrations and hit Configure on your Zigbee Home Automation integration.
At the bottom right is a “+ Add device” button, hit it.
This starts pairing mode for the coordinator, it’s time to press pairing button on the SNZB-02 temp/humidity device.
As you add devices, they’ll appear in the screen, proposing to set their name.
About devices
Once you’re done adding devices, you can review what’s done from Devices menu.
Since these are not using WiFi, that’s the only place you can check their state and especially the battery level.
The sensors are automatically created for them. You’re done for the zigbee configuration!
About sensors
When sensors are created, use the Developer Tools menu of Home Assistant to have a look.
I’m filtering here on the one added for the demo:
References
The official Tasmota getting started doc
This post is partially based on Sonoff Zigbee Bridge ZBBridge Zigbee compatibility info.
6 thoughts on “Setting up a Zigbee WiFi bridge using Tasmota and Sonoff hardware”
SylvH
(2021-02-12 - 18:47)Hello !
Ok, it works well, thanks! but if I have more than one bridge? I cannot add multiple ZHAs ..
Shut
(2021-02-13 - 21:52)Hello Sylvain,
Haven’t tried with more than one.
Stupid question, why do you have more than one? Is that related to network coverage?
By the way Home Assistant just got a brand new Z-Wave integration!
https://www.home-assistant.io/blog/2021/02/03/release-20212/
rbaker91
(2021-03-31 - 01:09)Hi, thanks for the article. I have a question. Sonoff says this bridge supports only 32 devices, also as far as my research has told me, that seems to be the limit to any zigbee coordinator. So if I need more devices do I have to pair another bridge to the existing bridge and they will talk to each other? How does that work?
Shut
(2021-03-31 - 02:01)Hi,
I haven’t seen anything about a 32 devices limit, except if specific to a device/chip, can you point me to that?
I found however this thread : https://www.silabs.com/community/wireless/zigbee-and-thread/forum.topic.html/zigbee_maximum_numbe-afoh
Some people are able to achieve network of 100’s devices. However the feasibility is rather limited by network use and distances.
My zigbee network is currently quite small (1 coordinator, 2 routers, 6 nodes), but I’ve added 2 powered devices to act as routers and limit dependencies on battery powered devices.
rbaker91
(2021-03-31 - 11:27)Turns out I found an answer earlier.
I saw a paper online that says the theoretical capacity for a zigbee network is of around 64000 total devices.
But any zigbee COORDINATOR has a maximum capacity of around 32 “end devices” like maybe battery powered sensors (some people report getting around 40).
The way out seems to be to use devices that are always plugged in (like sonoff mini zigbee, or some light bulb) since MOST of them can work as a router also. By using those devices there’s virtually no limit for the network. Also, the more routers you have the better the mesh network will become (it seems to take time to get to “Know” every node in the network).
As you said, I don’t really know about the feasibility of that either, but it sure would be fun to try with thousands of devices lol
This guy mapped a zigbee mesh network: https://www.youtube.com/watch?v=YEtyuDxon7A
Shut
(2021-04-02 - 12:02)Thanks for feedback, that was also my understanding.
Anyway it kind of is mandatory to have “always on” devices. If you don’t have any, I doubt the network throughput and latency would make it usable.
For the fun of it, please note I’ve recently published about bridging zigbee and z-wave devices using a Sonoff ZBBridge and Z-Wave ME USB dongle. I mostly use Home Assistant and in that case also Node-RED.
https://stuffblog.dullier.eu/2021/03/21/control-a-z-wave-plug-using-a-zigbee-button/