Ezlo Plus as Network Attached Zigee & Z-Wave Device
-
Hello, all!
For several years now I've had a Vera Edge at home providing all my z-wave needs. I only really use it as a mechanism to get all my devices integrated into home assistant, which is the brains of the operation.
Recently I ordered a few new z-wave devices that have z-wave 700 chips. They work fine with the Vera (albeit with some more advanced features unavailable), but I figure the Vera's days are numbered are there was a really good pre-order deal available on an Ezlo Plus, so I bought one of those too expecting it would be a drop-in replacement for the aging Vera.
It arrived yesterday, and how wrong I was. There isn't any local control at all as best as I can tell, I can't integrate it with Home Assistant, and doing anything at all requires a clunky app and the cloud. Not what I want.
Googling around I found this post on the home assistant community from few years back from someone who killed the running Vera software on their Vera Edge and ran some software to expose the serial Z-Wave chip to the network so Home Assistant could work with it directly. It looks like that idea eventually evolved into a script that automates the process of nuking the Vera.
Despite just barely knowing what I'm doing I'm giving the same approach a shot on the Ezlo Plus. The first barrier was that ser2net wasn't installed and wasn't available in the mios repo, so I've compiled it from source and I just got it running.
So far that's as far as I've gotten, but I'm interested in hearing from the community - especially those of you with more knowledge and experience. I have home assistant running on a server in my basement so the goal of network-attached radios that can be better located in the house is an attractive one, but is there even merit to the approach I'm trying to take? Is there a simpler way to get the Ezlo Plus working with Home Assistant that I'm overlooking? Has anyone else already done this and I'm just reinventing the wheel for no good reason? Should I just chalk the Ezlo up as a poor purchasing decision and get on with my life?
Looking forward to your responses!
-
It would be a lot of workaround and intermediates to go through... You can see that I posted a few things towards the end of that HA thread. The issue is that the zwave700 serial API is very different from the zwave300/500 as far as I know. You will have a hard time getting it to work on another controller. The best recommendation I would have for an HA bridge is to go with hubitat which also supports zwave700. It already has an integration into home assistant.
-
It would be a lot of workaround and intermediates to go through... You can see that I posted a few things towards the end of that HA thread. The issue is that the zwave700 serial API is very different from the zwave300/500 as far as I know. You will have a hard time getting it to work on another controller. The best recommendation I would have for an HA bridge is to go with hubitat which also supports zwave700. It already has an integration into home assistant.
I don't have openLuup. I gave it a try this afternoon, running it in a docker container. I didn't need to set up anything with mqtt, I just used the home assistant Vera integration to connect to openLuup, then used the Vera bridge plugin to connect openLuup to my existing Vera edge, and the Ezlo bridge plugin to connect it to my new Ezlo. There was some odd behaviour with both bridge plugins running at once and the brightness sliders for my dimmer switches don't work quite right, but all my devices show up in Home Assistant with this setup and I'm sure with some tweaking I could get this working. This may be the way to go, so thanks for the recommendation @Elcid!
In the meantime, I've been pursuing my original plan despite what I've got no doubt is excellent advice that you gave me, @rafale77. I started with Zigbee rather than Z-Wave, and it's been a frustrating afternoon. I took a look in
/dev
and the Ezlo folks have helpfully created descriptive symlinks to both the Z-Wave and Zigbee devices so it's obvious which is which right off the bat. I usedlsof
to identify what process was using the device and killed it. It came back to life, but I tracked down the script that was restarting it and killed that too. I found some logs that indicated the zigbee device uses the EZSP protocol and should therefore work with Home Assistant's zigbee integration. All promising stuff. Then I fired upser2net
and... nothing.After a couple of hours trying a bunch of different stuff with no joy I started to suspect that
ser2net
was the problem. It was listening on the port I'd specified just fine, but I couldn't find any evidence that it was connecting to the serial device. I have no idea if I somehow compiled it incorrectly, if I'm using it incorrectly, or if it's not me at all, but nothing I tried worked so instead I compiled and installedsocat
to try instead and...
Working in home assistant!
For anyone wishing to give it a try, the commands I ran on the Ezlo to kill it's build-in zigbee addon and share it over the network were:
ps | grep "/ha-zig" | cut -b1-5 | xargs -t kill socat /dev/ttyS2,raw,echo=1 tcp-listen:3333,reuseaddr,fork
I'll upload the socat
.ipk
that I compiled somewhere and share a link to it when I get a chance. Rebooting the Ezlo brings it back to stock functionality.I haven't tested the stability of all this yet - I haven't even paired any devices - so take it all with a healthy grain of salt, but I'm pleased with my progress so far.
Home Assistant now recommends Z-Wave JS as the way to integrate Z-Wave networks. I've been trying to figure out if they support 700 series chips but I can't tell from the docs. I suspect not, but I'm hoping it will in the not too distant future, and then I'll try and get that working too
-
I don't have openLuup. I gave it a try this afternoon, running it in a docker container. I didn't need to set up anything with mqtt, I just used the home assistant Vera integration to connect to openLuup, then used the Vera bridge plugin to connect openLuup to my existing Vera edge, and the Ezlo bridge plugin to connect it to my new Ezlo. There was some odd behaviour with both bridge plugins running at once and the brightness sliders for my dimmer switches don't work quite right, but all my devices show up in Home Assistant with this setup and I'm sure with some tweaking I could get this working. This may be the way to go, so thanks for the recommendation @Elcid!
In the meantime, I've been pursuing my original plan despite what I've got no doubt is excellent advice that you gave me, @rafale77. I started with Zigbee rather than Z-Wave, and it's been a frustrating afternoon. I took a look in
/dev
and the Ezlo folks have helpfully created descriptive symlinks to both the Z-Wave and Zigbee devices so it's obvious which is which right off the bat. I usedlsof
to identify what process was using the device and killed it. It came back to life, but I tracked down the script that was restarting it and killed that too. I found some logs that indicated the zigbee device uses the EZSP protocol and should therefore work with Home Assistant's zigbee integration. All promising stuff. Then I fired upser2net
and... nothing.After a couple of hours trying a bunch of different stuff with no joy I started to suspect that
ser2net
was the problem. It was listening on the port I'd specified just fine, but I couldn't find any evidence that it was connecting to the serial device. I have no idea if I somehow compiled it incorrectly, if I'm using it incorrectly, or if it's not me at all, but nothing I tried worked so instead I compiled and installedsocat
to try instead and...
Working in home assistant!
For anyone wishing to give it a try, the commands I ran on the Ezlo to kill it's build-in zigbee addon and share it over the network were:
ps | grep "/ha-zig" | cut -b1-5 | xargs -t kill socat /dev/ttyS2,raw,echo=1 tcp-listen:3333,reuseaddr,fork
I'll upload the socat
.ipk
that I compiled somewhere and share a link to it when I get a chance. Rebooting the Ezlo brings it back to stock functionality.I haven't tested the stability of all this yet - I haven't even paired any devices - so take it all with a healthy grain of salt, but I'm pleased with my progress so far.
Home Assistant now recommends Z-Wave JS as the way to integrate Z-Wave networks. I've been trying to figure out if they support 700 series chips but I can't tell from the docs. I suspect not, but I'm hoping it will in the not too distant future, and then I'll try and get that working too
I have to applaud your resillience! I had read in the socat manual that it could be used that way but just never did it. It makes a lot of sense.
Now since you are very familiar with the vera scenes, devices and automations and that you have already setup openLuup, why not use openLuup as your automation hub? I personally have found it much easier to control and automate than HA and am using HA only as "child device hub" for openLuup for my zigbee and other integration devices. This would enable you to move over all of your vera scenes and plugins... Just an idea (I of course am running my setup this way). I am pretty confident that the zigbee integration to HA through ZHA will have no problem.
Z-Wave JS is in active development and I don't think they support 700 series API at the moment...
-
I have to applaud your resillience! I had read in the socat manual that it could be used that way but just never did it. It makes a lot of sense.
Now since you are very familiar with the vera scenes, devices and automations and that you have already setup openLuup, why not use openLuup as your automation hub? I personally have found it much easier to control and automate than HA and am using HA only as "child device hub" for openLuup for my zigbee and other integration devices. This would enable you to move over all of your vera scenes and plugins... Just an idea (I of course am running my setup this way). I am pretty confident that the zigbee integration to HA through ZHA will have no problem.
Z-Wave JS is in active development and I don't think they support 700 series API at the moment...
@rafale77 thanks! I've discovered something else encouraging too. At the top of the Ezlo Z-Wave log is a line that says
Z-Wave stick based on EFR32ZG14 is supported
A quick search reveals the EFR32ZG14 is a silicon labs Z-Wave 700 chip that seems to be pretty ubiquitous, and according to comments on a couple of closed github issues on the Z-Wave JS repo, it seems like it is already supported. That's at least enough motivation for me to want to keep going
I'm definitely going to play around with openLuup some more. I actually don't have any scenes or automations on the Vera, that's all in Home Assistant. HA automations have seen some big improvements recently, but you're right that they're playing catch-up in that regard. I've been considering taking Node-RED for a spin too.
-
Yeah I only hear good things about node red. That's encouraging about zwave-JS. On our side, z-way has added support for it too though I have yet to see the hardware getting sold at the moment. I don't have a huge motivation to migrate to the 700 series on the controller side given how little incremental benefits it offers. I think the long range mode is probably the biggest one and I have no use for it. All the other benefits are really for the devices. Keep us posted on your progress! It may inspire others.
-
I've been tinkering with a ZWave-JS interface for MSR in the background, after having a good start converting my Hass installation to it. It's definitely an improvement on the Hass side, a breath of much-needed fresh air.
-
I've been tinkering with a ZWave-JS interface for MSR in the background, after having a good start converting my Hass installation to it. It's definitely an improvement on the Hass side, a breath of much-needed fresh air.
@toggledbits said in Ezlo Plus as Network Attached Zigee & Z-Wave Device:
I've been tinkering with a ZWave-JS interface
I have been testing a Zooz 700 stick with Zwave-JS. It appears to be working well. I would like to see a interface into MSR. Right now I have devices from Zwave-JS to Hass to MSR.
-
@toggledbits said in Ezlo Plus as Network Attached Zigee & Z-Wave Device:
I've been tinkering with a ZWave-JS interface
I have been testing a Zooz 700 stick with Zwave-JS. It appears to be working well. I would like to see a interface into MSR. Right now I have devices from Zwave-JS to Hass to MSR.
The Zooz stick and the Ezlo share a common Z-Wave chipset. In fact when I added the Ezlo to ZWave-JS it shows up with a product code of ZST10-700, which I believe is the Zooz stick.
So, good news! I have both Z-Wave and Zigbee working in home assistant now, bypassing all the Ezlo software. The home assistant Zigbee integration connects directly to the Ezlo, and for Z-Wave I have ZWave-JS as an intermediary - but that's hass' recommended configuration anyway.
I think I've figured out some initial stability issues I was having as a result of not setting socat up quite right, but don't quote me on that yet, and for some reason the status of the Z-Wave controller shows up as 'Dead' but it doesn't seem to matter? Not sure what that's about. Also if I start hass before the Ezlo is ready then it will never successfully connect - you have to run socat on the Ezlo first, then start Home Assistant. Other than that it seems to work well. Zigbee in particular is more stable and responsive in this configuration than it was on the sonoff zigbee bridge I was previously using in my setup.
Here's how I did all this:
- Using the instructions on the openWrt site, compile socat for the Allwinner H3 SoC (or, if you're feeling trusting, download the binary I already compiled).
- Copy the .ipk to the Ezlo using whatever method you prefer. I used
scp
. Unfortunately you can't download the binary directly to the Ezlo because it doesn't support SSL and I don't have anywhere I can share the file from that doesn't enforce secure connections. - Install it:
opkg install socat_1.7.3.3-1_arm_cortex-a7_neon-vfpv4.ipk
- Kill the running ezlo processes: (One single error at the end about a process that can't be killed because it doesn't exist is expected).
ps | grep "/ha-" | cut -b1-5 | xargs -t kill
- Share the Z-Wave and Zigbee radios over the network using socat:
socat /dev/ttyS1,raw,echo=0 tcp-listen:3333,reuseaddr,keepalive,fork &
socat /dev/ttyS2,raw,echo=0 tcp-listen:3300,reuseaddr,keepalive,fork &
- In Z-Wave JS' ZWave settings under serial port, ignore the choices in the dropdown menu and manually enter
tcp://192.168.0.100:3333
(change the IP to that of your Ezlo) - In Home Assistant's Zigbee integration select a radio type of EZSP and for the serial port enter
socket://192.168.0.100:3300
- ...
- Profit
If you reboot the Ezlo it returns to its stock setup. I think my plan is to write a little script that checks whether the Ezlo processes are running and, if so, kills them and starts socat, then run that script as a cronjob. @rafale77, do you have any advice on a better approach based on your Nuke-Vera work? I don't want to nuke the Ezlo and do anything irreversible necessarily, but I'm also a little concerned that my plan might be leaving the thing functional enough to one day download a firmware update that breaks what I'm doing.
If it's helpful to anyone, I also compiled binaries for ser2net (I never got it to work) and Nano.