Best Zigbee approach to onboard Lowes Iris Devices?

Tags: #<Tag:0x00007f51df7c1658> #<Tag:0x00007f51df7c1518> #<Tag:0x00007f51df7c12c0>

(Chris Jackson) #21

Try using the cmdsupported and attsupported commands to get a list of what the clusters support. Once you know what attributes are supported, you can try reading/writing them with the read/write commands to see if you can make it do something.

(dbadia) #22

Could use some help getting cmdsupported and attsupported working. I see the args are ENDPOINT and CLUSTER, not sure where to get those from.

Output of nodes:

0  0000  000D6F000AEC331C   COORDINATOR      1  C091                           
16678  4126  4467550000004ADC   END_DEVICE       1  ZIGBEE_HOME_AUTOMATION     ON_OFF_SWITCH

Output of node 4467550000004ADC:

Network  Addr  IEEE Address       Logical Type   EP   Profile                    Device Type      Manufacturer     Model
>> node 4467550000004ADC
IEEE Address     : 4467550000004ADC
Network Address  : 57441
Node Descriptor  : NodeDescriptor [apsFlags=0, bufferSize=61, complexDescriptorAvailable=false, manufacturerCode=22811, logicalType=END_DEVICE, serverCapabilities=[], incomingTransferSize=0, outgoingTransferSize=0, userDescriptorAvailable=true, frequencyBands=[FREQ_2400_MHZ], macCapabilities=[REDUCED_FUNCTION_DEVICE], extendedEndpointListAvailable=false, extendedSimpleDescriptorListAvailable=false, stackCompliance=30]
Associations     : []
Endpoints        :
           1    : Profile     0104 ZIGBEE_HOME_AUTOMATION
          : Device Type 0000 ON_OFF_SWITCH
               -> BASIC
               -> POLL_CONTROL
               -> POWER_CONFIGURATION
               -> THERMOSTAT
               -> IDENTIFY
               -> ON_OFF
               <- OTA_UPGRADE
               <- TIME


(Chris Jackson) #23

Based on the nodes list the endpoint would be 16678/1 and the cluster is the thermostat cluster (I forget the number).

However, I’m a bit confused since the NWK address in the node summary seems to be different to that displayed in the nodes list and I’m not sure how that’s possible unless these were taken at different times (since NWK address can change).

If you now do a endpoint 16678/1 (or whatever the address really is) you will get a detailed list of attributes etc, and also the cluster numbers so you will see the thermostat cluster ID.

(dbadia) #24

Yeah, I think they were from different times. The NWK address seems to be changing a lot, like multiple times a minute. Many times, by the time I type my command in, it’s already changed. Does that seem normal?

Yep, I got it:

IEEE Address      : 4467550000004ADC
Network Address  : 25229
Endpoint            : 1
Device Profile    : 0x0104, ZIGBEE_HOME_AUTOMATION
Device Type        : 0x0000, ON_OFF_SWITCH
Device Version    : 0
Input Clusters    : (Server)
0000 Basic
      S         0 r-- UNSIGNED_8_BIT_INTEGER     ZCLVersion
      S         1 r-- UNSIGNED_8_BIT_INTEGER     ApplicationVersion
      S         2 r-- UNSIGNED_8_BIT_INTEGER     StackVersion
      S         3 r-- UNSIGNED_8_BIT_INTEGER     HWVersion
      S         4 r-- CHARACTER_STRING             ManufacturerName
      S         5 r-- CHARACTER_STRING             ModelIdentifier
      S         6 r-- CHARACTER_STRING             DateCode
      S         7 r-- ENUMERATION_8_BIT            PowerSource
      S        16 rw- CHARACTER_STRING             LocationDescription
      S        17 rw- ENUMERATION_8_BIT            PhysicalEnvironment
      S        18 rw- BOOLEAN                         DeviceEnabled
      S        19 rw- BITMAP_8_BIT                  AlarmMask
      S        20 rw- BITMAP_8_BIT                  DisableLocalConfig
      S    16384 r-- CHARACTER_STRING             SWBuildID
0001 Power configuration
      S         0 r-- UNSIGNED_16_BIT_INTEGER    MainsVoltage
      S         1 r-- UNSIGNED_16_BIT_INTEGER    MainsFrequency
      S        16 rw- BITMAP_8_BIT                  MainsAlarmMask
      S        17 rw- UNSIGNED_16_BIT_INTEGER    MainsVoltageMinThreshold
      S        18 rw- UNSIGNED_16_BIT_INTEGER    MainsVoltageMaxThreshold
      S        19 rw- UNSIGNED_16_BIT_INTEGER    MainsVoltageDwellTripPoint
      S        32 r-- UNSIGNED_8_BIT_INTEGER     BatteryVoltage
      S        33 r-s UNSIGNED_8_BIT_INTEGER     BatteryPercentageRemaining
      S        48 rw- CHARACTER_STRING             BatteryManufacturer
      S        49 rw- ENUMERATION_8_BIT            BatterySize
      S        50 rw- UNSIGNED_16_BIT_INTEGER    BatteryAHrRating
      S        51 rw- UNSIGNED_8_BIT_INTEGER     BatteryQuantity
      S        52 rw- UNSIGNED_8_BIT_INTEGER     BatteryRatedVoltage
      S        53 rw- BITMAP_8_BIT                  BatteryAlarmMask
      S        54 rw- UNSIGNED_8_BIT_INTEGER     BatteryVoltageMinThreshold
      S        55 rw- UNSIGNED_8_BIT_INTEGER     BatteryVoltageThreshold1
      S        56 rw- UNSIGNED_8_BIT_INTEGER     BatteryVoltageThreshold2
      S        57 rw- UNSIGNED_8_BIT_INTEGER     BatteryVoltageThreshold3
      S        58 rw- UNSIGNED_8_BIT_INTEGER     BatteryPercentageMinThreshold
      S        59 rw- UNSIGNED_8_BIT_INTEGER     BatteryPercentageThreshold1
      S        60 rw- UNSIGNED_8_BIT_INTEGER     BatteryPercentageThreshold2
      S        61 rw- UNSIGNED_8_BIT_INTEGER     BatteryPercentageThreshold3
      S        62 r-- BITMAP_32_BIT                 BatteryAlarmState
0003 Identify
      S         0 rw- UNSIGNED_16_BIT_INTEGER    IdentifyTime
0006 On/Off
      S         0 r-s BOOLEAN                         OnOff
      S    16384 r-- BOOLEAN                         GlobalSceneControl
      S    16385 rw- UNSIGNED_16_BIT_INTEGER    OffTime
      S    16386 rw- UNSIGNED_16_BIT_INTEGER    OffWaitTime
0020 Poll Control
      S         0 rws UNSIGNED_32_BIT_INTEGER    CheckinInterval
      S         1 r-s UNSIGNED_32_BIT_INTEGER    LongPollInterval
      S         2 r-s UNSIGNED_16_BIT_INTEGER    ShortPollInterval
      S         3 r-s UNSIGNED_16_BIT_INTEGER    FastPollTimeout
      S         4 r-- UNSIGNED_32_BIT_INTEGER    CheckinIntervalMin
      S         5 r-- UNSIGNED_32_BIT_INTEGER    LongPollIntervalMin
      S         6 r-- UNSIGNED_32_BIT_INTEGER    FastPollTimeoutMin
0201 Thermostat
      S         0 r-s UNSIGNED_16_BIT_INTEGER    LocalTemperature
      S         1 r-- UNSIGNED_16_BIT_INTEGER    OutdoorTemperature
      S         2 r-- BITMAP_8_BIT                  Occupancy
      S         3 r-- UNSIGNED_16_BIT_INTEGER    AbsMinHeatSetpointLimit
      S         4 r-- UNSIGNED_16_BIT_INTEGER    AbsMaxHeatSetpointLimit
      S         5 r-- UNSIGNED_16_BIT_INTEGER    AbsMinCoolSetpointLimit
      S         6 r-- UNSIGNED_16_BIT_INTEGER    AbsMaxCoolSetpointLimit
      S         7 r-s UNSIGNED_8_BIT_INTEGER     PICoolingDemand
      S         8 r-s UNSIGNED_8_BIT_INTEGER     PIHeatingDemand
      S         9 r-- BITMAP_8_BIT                  HVACSystemTypeConfiguration
      S        16 r-- UNSIGNED_8_BIT_INTEGER     LocalTemperatureCalibration
      S        17 r-- UNSIGNED_16_BIT_INTEGER    OccupiedCoolingSetpoint
      S        18 r-- UNSIGNED_16_BIT_INTEGER    OccupiedHeatingSetpoint
      S        19 r-- UNSIGNED_16_BIT_INTEGER    UnoccupiedCoolingSetpoint
      S        20 r-- UNSIGNED_16_BIT_INTEGER    UnoccupiedHeatingSetpoint
      S        21 r-- UNSIGNED_16_BIT_INTEGER    MinHeatSetpointLimit
      S        22 r-- UNSIGNED_16_BIT_INTEGER    MaxHeatSetpointLimit
      S        23 r-- UNSIGNED_16_BIT_INTEGER    MinCoolSetpointLimit
      S        24 r-- UNSIGNED_16_BIT_INTEGER    MaxCoolSetpointLimit
      S        25 r-- UNSIGNED_8_BIT_INTEGER     MinSetpointDeadBand
      S        26 r-- BITMAP_8_BIT                  RemoteSensing
      S        27 r-- ENUMERATION_8_BIT            ControlSequenceOfOperation
      S        28 r-- ENUMERATION_8_BIT            SystemMode
      S        29 r-- ENUMERATION_8_BIT            AlarmMask
      S        30 r-- ENUMERATION_8_BIT            ThermostatRunningMode
      S        68 r-- BITMAP_32_BIT                 ACErrorCode
Output Clusters  : (Client)
000A Time
      S         0 rw- UTCTIME                         Time
      S         1 rw- UNSIGNED_16_BIT_INTEGER    TimeStatus
      S         2 rw- SIGNED_32_BIT_INTEGER      TimeZone
      S         3 rw- UNSIGNED_32_BIT_INTEGER    DstStart
      S         4 rw- UNSIGNED_32_BIT_INTEGER    DstEnd
      S         5 rw- SIGNED_32_BIT_INTEGER      DstShift
      S         6 r-- SIGNED_32_BIT_INTEGER      StandardTime
      S         7 r-- SIGNED_32_BIT_INTEGER      LocalTime
0019 OTA Upgrade
      S         0 r-- IEEE_ADDRESS                  UpgradeServerID
      S         1 r-- UNSIGNED_32_BIT_INTEGER    FileOffset
      S         2 r-- UNSIGNED_32_BIT_INTEGER    CurrentFileVersion
      S         3 r-- UNSIGNED_16_BIT_INTEGER    CurrentZigBeeStackVersion
      S         4 r-- UNSIGNED_32_BIT_INTEGER    DownloadedFileVersion
      S         5 r-- UNSIGNED_16_BIT_INTEGER    DownloadedZigBeeStackVersion
      S         6 r-- UNSIGNED_8_BIT_INTEGER     ImageUpgradeStatus
      S         7 r-- UNSIGNED_16_BIT_INTEGER    ManufacturerID
      S         8 r-- UNSIGNED_16_BIT_INTEGER    ImageTypeID
      S         9 r-- UNSIGNED_16_BIT_INTEGER    MinimumBlockRequestDelay
      S        10 r-- UNSIGNED_32_BIT_INTEGER    ImageStamp

The On/Off cluster looks promising for the timer, especially OffTime and OffWaitTime

I’ve been running read tests like this:

On/Off -> OnOff
read 13501/1 0006 0

Off Wait Time
read 13501/1 0006 16386

A few gave good responses and returned data, but most fail with a TIMEOUT. I see TIMEOUTs even if I run a duplicate read for the same cluster/attribute right after a successful read.

Also tried a few writes:

write 19314/1 0006 16386 1

but those are timing out too.

Here is my nodes output:

Network  Addr  IEEE Address       Logical Type   EP   Profile                    Device Type      Manufacturer     Model
      0  0000  000D6F000AEC331C   COORDINATOR      1  C091                       0000
  13501  34BD  4467550000004ADC   END_DEVICE       1  ZIGBEE_HOME_AUTOMATION     ON_OFF_SWITCH
  22248  56E8  4467550000004E65   END_DEVICE       1  ZIGBEE_HOME_AUTOMATION     ON_OFF_SWITCH
  25928  6548  804467550000004E   UNKNOWN
  56544  DCE0  804467550000004A   UNKNOWN

I have 2 hose timers paired to the stick from when I was experimenting with the OH zigbee binding. Maybe I should remove them and repair them?

Here is my log file in case it’s helpful


(Chris Jackson) #25

No - it should only normally change it it leaves and rejoins the network, or changes parents.

Probably, this is an issue with battery devices. By default, ZigBee end devices are required to poll their parents every 7.6 seconds to check for messages. Many end devices don’t do this, and this is the result. I note that this device supports the poll control cluster, so it may be possible to control this, but at the moment application support for this is only partly implemented.

Did the attsupported and cmdsupported commands work?

(dbadia) #26

In an attempt to make this easier to troubelshoot, I unplugged/removed the batteries from all of my zigbee devices except for one host timer. Also put fresh batteries in it just in case.

Makes sense. I suspect another reason for the timeouts is due to the network address changing after I issue the command. I see these entries in the console, which seem to coincide with the network change (realize I am likely stating the obvious to you :slight_smile: ):

Node Updated ZigBeeNode [state=ONLINE, IEEE=4467550000004E65, NWK=2A70, Type=END_DEVICE]
Node Updated ZigBeeNode [state=ONLINE, IEEE=4467550000004E65, NWK=2A70, Type=END_DEVICE]

They always seem to come in pairs.

Got distracted by the other stuff and forgot to execute these last time
attsupported worked for some clusters, but not others:

attsupported 3806/1 0000
Supported attributes for server cluster Basic (0000)
AttrId  Data Type                  Name
     0  UNSIGNED_8_BIT_INTEGER     ZCLVersion
     1  UNSIGNED_8_BIT_INTEGER     ApplicationVersion
     2  UNSIGNED_8_BIT_INTEGER     StackVersion
     3  UNSIGNED_8_BIT_INTEGER     HWVersion
     4  CHARACTER_STRING           ManufacturerName
     5  CHARACTER_STRING           ModelIdentifier
     6  CHARACTER_STRING           DateCode
     7  ENUMERATION_8_BIT          PowerSource

attsupported 18410/1 0001
Supported attributes for server cluster Power configuration (0001)
AttrId  Data Type                  Name
    32  UNSIGNED_8_BIT_INTEGER     BatteryVoltage
    52  UNSIGNED_8_BIT_INTEGER     BatteryRatedVoltage
    53  BITMAP_8_BIT               BatteryAlarmMask
    54  UNSIGNED_8_BIT_INTEGER     BatteryVoltageMinThreshold

I was a little suprised to see BatteryPercentageRemaining missing from this list, as I seem to remember the Lowes Iris hub showing battery %. I’ll will bring it up sometime this weekend and verify.

attsupported 30375/1 0006
Supported attributes for server cluster On/Off (0006)
AttrId  Data Type                  Name
     0  BOOLEAN                    OnOff

attsupported 40050/1 0020
Error executing command: A cluster specified by 0020 is not found for endpoint 1

attsupported 40262/1 0201
Error executing command: A cluster specified by 0201 is not found for endpoint 1

The not found for endpoint 1 messages come back very quickly, so it appears that the library is throwing those errors directly as opposed to sending a message to the device. The endpoint command output only showed Endpoint : 1 so I’m not sure what else to do for those clusters.

I assume the library caches the results of attsupported? I ask because once I got good output, the command worked every single time I tried it. I haven’t seen that type of consistency with the read commands.

cmdsupported failed for all clusters with the following
cmdsupported 63030/1 0000
Failed to retrieve supported generated commands
~10 second pause
Failed to retrieve supported generated commands

I’ll keep trying to see if I can get a good result back

Since OnOff showed as supported by attsupported , I tried doing some writes. Most timed out but one came back with

write 46795/1 0006 0 1
Attribute value write error: UNKNOWN

Is there anything I should check for in the logs on this one?