Best Zigbee approach to onboard Lowes Iris Devices?

Hi List -
As discussed here, Lowes Iris is being shutdown on March 31st. I have relied on Lowes Iris for my irrigation, as it is the only platform that supports inexpensive hose controllers such as the zigbee based Orbit Hose Timer.

As I see it, this gives me very little time to try to figure out how to get these working with OpenHAB. I think I have 2 options:

  1. Try to sniff the zigbee traffic between the working Iris hub and the devices. I have a CC2531 dongle and debugger. I tried doing some basic captures during pairing with the TI packet sniffer but am only seeing a few broadcast packets. Seems like I should be seeing more than that.
    In the TI capture tool, there is a myrid of zigbee protocol (802.15.4 2003, 2006, 2007/PRO, RF4CE) and channel (2405mhz up to 2480mhz) capture options. I don’t mind trial and error with the protocols, but testing every combination of protocol and channel isn’t realistic.

  2. zigbee2mqtt I’ve been reading the documentation with regards to adding a new device. Looks like I may be able to pair the hose timer, but how would I know the commands to send it? The hose timer seems like a one-off device so I doubt any of the existing commands will work with it

Looking for basic advice as to if I am on the right track here, or if there are other options I should try. Thinking that #1 is the only realistic option as I would need to capture the actual commands that trigger the timer.

TIA
Dave

I’ve been doing some sniffing using the CC2541 dongle and the TI capture tool on various channels. Trying to make sense of the data I’ve been capturing.

I see a ton of traffic on channel 0x19 - however I don’t think this is my traffic as when remove the batteries from all of my zigbee devices and unplugged the base station… I still see it going by.

So the question is… how can I differentiate my traffic from others. Can I use the MAC address printed on my devices?

Will/should I see the MAC address from my devices in the yellow “MAC payload” box above if/when the traffic is from my devices?

Why not just use the ZigBee binding? Or are these non-standard devices (in which case your other options may not work either).

I will try that out. I was assuming (perhaps incorrectly) that some work (code) would need to be added to the binding to support these

Good question. The smartthings forums seem to suggest there is something non-standard about these. But I know they are zigbee. Seems like it would be more effort for a manufacturer to build/design something non-standard vs standard.

Of course this is possible as the binding doesn’t support every feature of every cluster, but it would (IMHO) be better to start from this point than to try to reverse engineer the data starting with sniffer logs :wink:

Ok, took your advice and tried with the OH zigbee binding. It paired successfully:

And shows controls for on/off as well as some battery measurements.
But, on/off doesn’t control the value of the hose controller to start/stop the flow of water.

So, I checked the pairing logs in the zigbee log viewer:

I suspect that I need the Thermostat cluster to control it.
Full log of the pairing process: hose.log (586.6 KB)

Looking for advice on next step I should take… work on implementing the thermostat cluster to see if that will control the water valve OR go back to the sniffer since it looks like the hose timer is zigbee standard?

The thermostat channels are included in the binding already so I suspect that you might be running an old binding and libraries?

Ah, very nice. I ran the script to install the 1.1.10 version of the zigbee binding, but now that I look, it seems I have a mix of 2.5.0 and 1.1.10:

openhab>  bundle:list -s | grep -i zigbee
>
232 x Active   x  80 x 1.1.10                 x com.zsmartsystems.zigbee.dongle.cc2531
233 x Active   x  80 x 2.5.0.201902110612     x org.openhab.binding.zigbee
234 x Active   x  80 x 1.1.10                 x com.zsmartsystems.zigbee.dongle.xbee
235 x Active   x  80 x 1.1.10                 x com.zsmartsystems.zigbee.dongle.telegesis
236 x Active   x  80 x 1.1.10                 x com.zsmartsystems.zigbee.dongle.ember
237 x Active   x  80 x 1.1.10                 x com.zsmartsystems.zigbee
238 x Active   x  80 x 2.5.0.201902110612     x org.openhab.binding.zigbee.cc2531
239 x Active   x  80 x 2.5.0.201902110612     x org.openhab.binding.zigbee.ember
240 x Active   x  80 x 2.5.0.201902110612     x org.openhab.binding.zigbee.telegesis
241 x Active   x  80 x 2.5.0.201902110612     x org.openhab.binding.zigbee.xbee

Is this correct?
I see the namespaces are different (org.openhab vs org.zsmartsystems) between the two sets.

Yes.

The binding uses another library, so there are two namespaces (one for the ZigBee libraries, and one for the openHAB binding). This is correct though…

Ok good. Is there something specific I need to do to get the thermostat channel to show up in the UI?

At the moment, I only see battery and switch channels:

It’s possible they are not in the version you have. I think it was only merged in the past week, and the version you have is 1 week old.

Edit: I just checked - it was merged on the 12th, and the version you are running is from the 11th, so it won’t be included.

Right. I upgraded my bindings and paired another hose timer. I see the thermostat settings now, so that’s good.

Guess it’s trial and error at this point to see which item actually triggers the water timer on the device

@dbadia Are these things still on sale in the US or have they stopped already? Can you point me at a website that shows what it is?

It’s still on the Lowes Home Improvement website even thought it’s no longer for sale:
Orbit Iris Hose Timer

In the Iris app, you can choose a device, then select how many minutes it should open the valve for (water the lawn, etc). The hub sends a command to the device, the device opens the water valve, and then starts a countdown timer. I tried unplugging the hub after the timer started and the device still closed the valve as expected after the timer was up.

So it looks like the hub sends a command to the timer saying “open the water value for X number of minutes”. I was thinking that they may have hijacked the thermostat fan function or similar to communicate the number of minutes the timer should run for.

@chris
Been doing some trial and error with various commands, but I have not been able to get the hose value to activate yet.

Can you take a look at my log to see if the basic communication is working with the device? I took at look at this in your log viewer (very nice BTW), but I don’t know enough about the zigbee protocol to tell if the device is processing the commands or not.

I tried sending a few of switch, thermostatrunningmode, and thermostatsystemmode

FYI, I am using the latest 2.5.0.201903042328 bindings. I deleted the old thing and repaired. That should be in the log too

Thanks!

Hi Dave,
Are you able to run the console in the ZSS library? If so, I think it might be a good idea to run this up and see what this device supports…

It seems that it’s using the thermostat cluster, but I don’t really know what for. The binding reads the list of supported attributes, and the device says it doesn’t support any! If you can run up the console, then it would be good to see what commands it supports (if it supports the command to tell you what commands it supports :wink: ).

I see you sent a few ON / OFF commands and these seem to time out within the dongle. The thermostat mode commands aren’t resulting in a command being sent so probably something in the binding is preventing that - probably due to something the device “said” previously… Yes - I can see there is an exception and I think this is caused by the binding requesting the list of supported attributes, and the device reporting that it doesn’t support any of them.

So, I would recommend if you can get the console running, then you can try to send commands directly - ie without the complexity, and invalid assumptions that the binding is making about this device as it’s not really a thermostat (I’ve no idea why they implemented a hose timer as a thermostat!).

I’m happy to help talk you through this once you can get the console running.

For my reference, the exception caused when a device reports no supported attributes is resolved here -:

Thanks for the advice Chris. I was able to grab the latest zss from github console to compile and run in eclipse.
I am running the console with the following commands for my Telegensis stick:

-dongle TELEGESIS -port /dev/ttyUSB0 -baud 115200 -flow software -channel 11 -pan 0x2000 -epan 987654321 -nwkkey AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -reset

But I’m getting timeouts in the output:
maybe I have the wrong args? or wrong gihub branch - am running master

Initialising ZigBee console...
08:10:20.070  DEBUG  Broadcast: Set profile to ZigBeeTransactionProfile [maxOutstandingTransactions=3, interTransactionDelay=1200, maxRetries=0]
08:10:20.074  DEBUG  Multicast: Set profile to ZigBeeTransactionProfile [maxOutstandingTransactions=3, interTransactionDelay=1200, maxRetries=0]
08:10:20.094  DEBUG  Adding supported cluster 1280
08:10:20.098  DEBUG  ClusterMatcher starting
08:10:20.167  DEBUG  ClusterMatcher adding cluster IAS_ZONE
08:10:20.170  DEBUG  Adding supported cluster 25
08:10:20.170  DEBUG  ClusterMatcher adding cluster OTA_UPGRADE
08:10:20.264  INFO   Loading network state...
08:10:21.050  INFO   Loading network state complete.
08:10:21.050  DEBUG  Telegesis dongle initialize.
08:10:21.050  DEBUG  Network state is updated to INITIALISING
08:10:21.051  DEBUG  Opening port /dev/ttyUSB0 at 115200 baud with FLOWCONTROL_OUT_XONOFF.

ZigBee network state updated to INITIALISING
08:10:21.123  DEBUG  TelegesisFrameHandler thread started
08:10:21.140  DEBUG  TX Telegesis queue: 1
08:10:21.144  DEBUG  TX Telegesis: TelegesisSetRegisterBitCommand [register=18, bit=4, state=true, password=null]
08:10:21.159  DEBUG  TX Telegesis Data:ATS124=1

08:10:24.163  DEBUG  TELEGESIS Timer: Timeout 0
08:10:25.123  DEBUG  TX Telegesis queue: 1
08:10:25.123  DEBUG  TX Telegesis: TelegesisDisplayNetworkInformationCommand [device=null, channel=null, power=null, panId=null, epanId=null]
08:10:25.125  DEBUG  TX Telegesis Data:AT+N?

08:10:28.125  DEBUG  TELEGESIS Timer: Timeout 1
08:10:29.122  DEBUG  TX Telegesis queue: 1
08:10:29.126  DEBUG  TX Telegesis: TelegesisDisplayNetworkInformationCommand [device=null, channel=null, power=null, panId=null, epanId=null]
08:10:29.129  DEBUG  TX Telegesis Data:AT+N?

08:10:29.140  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=18, bit=4, state=true, password=null]
08:10:29.147  DEBUG  TX Telegesis queue: 1
08:10:32.131  DEBUG  TELEGESIS Timer: Timeout 2
08:10:32.131  DEBUG  Error: number of retries exceeded [3].
08:10:37.147  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=14, bit=1, state=false, password=null]
08:10:37.148  DEBUG  TX Telegesis queue: 2
08:10:45.148  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=14, bit=0, state=false, password=null]
08:10:45.150  DEBUG  TX Telegesis queue: 3
08:10:53.150  DEBUG  Telegesis interrupted in sendRequest TelegesisSoftwareResetCommand []
08:10:53.151  DEBUG  TX Telegesis queue: 4
08:11:01.151  DEBUG  Telegesis interrupted in sendRequest TelegesisSoftwareResetCommand []
08:11:01.152  DEBUG  TX Telegesis queue: 5
08:11:09.152  DEBUG  Telegesis interrupted in sendRequest TelegesisSoftwareResetCommand []
08:11:09.153  DEBUG  TX Telegesis queue: 6
08:11:17.153  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=18, bit=4, state=true, password=null]
08:11:17.154  DEBUG  TX Telegesis queue: 7
08:11:25.154  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=14, bit=1, state=false, password=null]
08:11:25.154  DEBUG  TX Telegesis queue: 8
08:11:33.154  DEBUG  Telegesis interrupted in sendRequest TelegesisSetRegisterBitCommand [register=14, bit=0, state=false, password=null]
08:11:33.159  DEBUG  TX Telegesis queue: 9
08:11:41.157  DEBUG  Telegesis interrupted in sendRequest TelegesisSetPromptEnable1Command [configuration=8804]
08:11:41.158  DEBUG  Error setting Telegesis Prompt 1 register
08:11:41.158  ERROR  Unable to configure Telegesis dongle
networkManager.initialize returned FAILURE
ZigBee API starting up...
ZigBee console ready.
08:11:41.159  DEBUG  Network state is updated to OFFLINE

PAN ID          = 0

Extended PAN ID = null

Channel         = null

> 
ZigBee network state updated to OFFLINE

Are you sure the baud rate is correct? If you’ve changed it to 115k, then fine, but by default the Telegesis runs at 19200.

Thanks, that was the problem. I can see the console app is communicating with the zigbee stick now.
What would the next steps be?