Sinope Zigbee Thermostat TH1123ZB

Hello again @chris
I know you are quite busy but wondering if you could have a peek at another zigbee thermostat.
These units are getting quite popular. The provincial power utility here subsidized them and quite literally hundreds or thousands are being installed locally.

My issue is minor but the screen backlight setting doesn’t appear to be available.
I have also tried sending a command to the unit with the outdoor temperature. The value of the outdoor temp channel changes but does not display on the screen. There may be a setting to choose what is shown on the secondary display.

Being able to turn the backlight off would be a big point in winning over my better half.

It looks like scoulombe79 on the hubitat board was able to get it running:

Device XML file in first reply below.

Again I really appreciate the work you have done for openhab and with answering my previous zigbee tstat question.

openhab> zigbee node 43799
IEEE Address     : 500B91400002A602
Network Address  : 43799
Node Descriptor  : NodeDescriptor [apsFlags=0, bufferSize=71, complexDescriptorAvailable=false, manufacturerCode=119C, logicalType=ROUTER, serverCapabilities=[], incomingTransferSize=43, outgoingTransferSize=43, userDescriptorAvailable=true, frequencyBands=[FREQ_2400_MHZ], macCapabilities=[FULL_FUNCTION_DEVICE, MAINS_POWER, RECEIVER_ON_WHEN_IDLE], extendedEndpointListAvailable=false, extendedSimpleDescriptorListAvailable=false, stackCompliance=21]
Power Descriptor : PowerDescriptor [currentPowerMode=RECEIVER_ON_IDLE, availablePowerSources=[DISPOSABLE_BATTERY, RECHARGABLE_BATTERY, MAINS], currentPowerSource=MAINS, powerLevel=FULL]
Associations     : []
Endpoints        :
            1    : Profile     ZIGBEE_HOME_AUTOMATION
                 : Device Type THERMOSTAT
                   -> BASIC
                   -> IDENTIFY
                   -> GROUPS
                   -> SCENES
                   -> THERMOSTAT
                   -> THERMOSTAT_USER_INTERFACE_CONFIGURATION
                   -> TEMPERATURE_MEASUREMENT
                   -> METERING
                   -> ELECTRICAL_MEASUREMENT
                   -> DIAGNOSTICS
                   -> 0xFF01
                   <- TIME
                   <- OTA_UPGRADE
                   <- 0xFF01
Neighbors        :
Routes           :
openhab> zigbee attsupported 43799/1 0x201
Supported attributes for server cluster Thermostat (0201)
AttrId  Data Type                  Name
     0  SIGNED_16_BIT_INTEGER      Local Temperature
     1  SIGNED_16_BIT_INTEGER      Outdoor Temperature
     2  BITMAP_8_BIT               Occupancy
     3  SIGNED_16_BIT_INTEGER      Abs Min Heat Setpoint Limit
     4  SIGNED_16_BIT_INTEGER      Abs Max Heat Setpoint Limit
     8  UNSIGNED_8_BIT_INTEGER     Pi Heating Demand
    16  SIGNED_8_BIT_INTEGER       Local Temperature Calibration
    18  SIGNED_16_BIT_INTEGER      Occupied Heating Setpoint
    20  SIGNED_16_BIT_INTEGER      Unoccupied Heating Setpoint
    21  SIGNED_16_BIT_INTEGER      Min Heat Setpoint Limit
    22  SIGNED_16_BIT_INTEGER      Max Heat Setpoint Limit
    27  ENUMERATION_8_BIT          Control Sequence Of Operation
    28  ENUMERATION_8_BIT          System Mode
    30  ENUMERATION_8_BIT          Thermostat Running Mode
    41  BITMAP_16_BIT              Thermostat Running State
  1024
  1025
  1026
  1057
  1058
  1059
  1060
  1061
  1062
  1063
  1064
  1065
  1072
  1073
  1074
  1075
  1076
  1077
  1078
  1079
  1080
 65533
openhab> zigbee fingerprint 43799
|>| Node Descriptor
| |> Logical Type               ROUTER
| |> MAC Capabilities           [FULL_FUNCTION_DEVICE, MAINS_POWER, RECEIVER_ON_                                    WHEN_IDLE]
| |> Stack Compliance           21
| |> Server Capabilities        []
| |> Buffer Size                71
| |> Incoming Transfer Size     43
| |> Outgoing Transfer Size     43
|
|>| Power Descriptor
| |> Available Power Sources    [DISPOSABLE_BATTERY, RECHARGABLE_BATTERY, MAINS]
| |> Current Power Source       MAINS
| |> Current Power Mode         RECEIVER_ON_IDLE
| |> Power Level                FULL
|
|>| ZDO
| |> ManagementBindRequest      SUCCESS
| |> IeeeAddressRequest         SUCCESS
| |> ManagementLqiRequest       SUCCESS
| |> ManagementRoutingRequest   SUCCESS
|
|>| Basic Information
| |> Generic Device Class
| |> Generic Device Type
| |> Manufacturer Name          Sinope Technologies
| |> Model Indentifier          TH1123ZB
| |> Product Code
| |> Product URL
| |> Date Code                  20200330
| |> Application Version        65
| |> Software Build ID          2051
| |> Hardware Version           2
| |> Zcl Version                2
| |> Stack Version              1
| |
| |>| Endpoint 1
| | |> Profile                  0104  ZIGBEE_HOME_AUTOMATION
| | |> Device Type              0301  THERMOSTAT
| | |> Device Version           1
| | |
| | |>| Input Clusters
| | | |
| | | |>| Cluster 0000 Basic
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |
| | | | |>| Commands Generated
| | | | |
| | | | |>| Commands Received
| | | | | |> 0000 ResetToFactoryDefaultsCommand
| | | | |
| | | | |>| Attributes Supported
| | | | | |> 0000 ZCL Version
| | | | | |> 0001 Application Version
| | | | | |> 0002 Stack Version
| | | | | |> 0003 HW Version
| | | | | |> 0004 Manufacturer Name
| | | | | |> 0005 Model Identifier
| | | | | |> 0006 Date Code
| | | | | |> 0007 Power Source
| | | | | |> 0010 Location Description
| | | | | |> 0011 Physical Environment
| | | | | |> 4000 SW Build ID
| | | | | |> FFFD Unknown
| | | |
| | | |>| Cluster 0003 Identify
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0004 Groups
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0005 Scenes
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |
| | | | |>| Commands Generated
| | | | | |> 0000 AddSceneCommand
| | | | | |> 0001 ViewSceneCommand
| | | | | |> 0002 RemoveSceneCommand
| | | | | |> 0003 RemoveAllScenesCommand
| | | | | |> 0004 StoreSceneCommand
| | | | | |> 0006 GetSceneMembershipCommand
| | | | | |> 0040 EnhancedAddSceneCommand
| | | | | |> 0041 EnhancedViewSceneCommand
| | | | | |> 0042 CopySceneCommand
| | | | |
| | | | |>| Commands Received
| | | | | |> 0000 AddSceneCommand
| | | | | |> 0001 ViewSceneCommand
| | | | | |> 0002 RemoveSceneCommand
| | | | | |> 0003 RemoveAllScenesCommand
| | | | | |> 0004 StoreSceneCommand
| | | | | |> 0005 RecallSceneCommand
| | | | | |> 0006 GetSceneMembershipCommand
| | | | | |> 0040 EnhancedAddSceneCommand
| | | | | |> 0041 EnhancedViewSceneCommand
| | | | | |> 0042 CopySceneCommand
| | | | |
| | | | |>| Attributes Supported
| | | | | |> 0000 Scene Count
| | | | | |> 0001 Current Scene
| | | | | |> 0002 Current Group
| | | | | |> 0003 Scene Valid
| | | | | |> 0004 Name Support
| | | | | |> FFFD Unknown
| | | |
| | | |>| Cluster 0201 Thermostat
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0204 Thermostat User Interface Configuration
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0402 Temperature Measurement
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |
| | | | |>| Commands Generated
| | | | |
| | | | |>| Commands Received
| | | | |
| | | | |>| Attributes Supported
| | | | | |> 0000 Measured Value
| | | | | |> 0001 Min Measured Value
| | | | | |> 0002 Max Measured Value
| | | | | |> 0003 Tolerance
| | | | | |> FFFD Unknown
| | | |
| | | |>| Cluster 0702 Metering
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0B04 Electrical Measurement
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0B05 Diagnostics
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster FF01
| | | | |> Type                 Server [Input]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | |
| | |>| Output Clusters
| | | |
| | | |>| Cluster 000A Time
| | | | |> Type                 Client [Output]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally
| | | |
| | | |>| Cluster 0019 Ota Upgrade
| | | | |> Type                 Client [Output]
| | | | |> Manufacturer Spec.   No
| | | | |
| | | | |>| Commands Generated
| | | | | |> 0001 QueryNextImageCommand
| | | | | |> 0003 ImageBlockCommand
| | | | | |> 0004 ImagePageCommand
| | | | | |> 0006 UpgradeEndCommand
| | | | |
| | | | |>| Commands Received
| | | | | |> 0000 Unknown
| | | | | |> 0002 Unknown
| | | | | |> 0005 Unknown
| | | | | |> 0007 Unknown
| | | | |
| | | | |>| Attributes Supported
| | | | | |> 0000 Upgrade Server ID
| | | | | |> 0006 Image Upgrade Status
| | | | | |> 0009 Minimum Block Request Period
| | | |
| | | |>| Cluster FF01
| | | | |> Type                 Client [Output]
| | | | |> Manufacturer Spec.   No
| | | | |> Unsupported locally

cmdsupported didn’t get me much:

openhab> zigbee cmdsupported 43799/1 0x201
Supported generated commands for server cluster Thermostat (0201)
CommandId  Command

Supported received commands for server cluster Thermostat (0201)
CommandId  Command
       0  SetpointRaiseLowerCommand

My mistake.
XML file attached.500B91400002A602.xml (774.0 KB)

I’m guessing this is a custom function as I don’t see this documented in the standard. Anyway, the hubitat script is promising. Can you try the following -:

zigbee write 43779/1 0x201 0x401 XX ENUMERATION_8_BIT

XX can be 0 or 1.

See what this does and if it solves your issue - at least for now. We could add this as a configuration if needed (and if it works :slight_smile: ).

No joy. Tried a few variations.

openhab> zigbee write 43799/1 0x201 0x401 0 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 00 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 1 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 01 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 11 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 ON ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "ON"
openhab> zigbee write 43799/1 0x201 0x401 OFF ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "OFF"
openhab> zigbee write 43799/1 0x201 0x401 HI ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "HI"
openhab> zigbee write 43799/1 0x201 0x401 2 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

openhab> zigbee write 43799/1 0x201 0x401 02 ENUMERATION_8_BIT
Attribute value write error: INVALID_DATA_TYPE

Also dug into the hubitat code a bit and found they used 0x402 with 0x0000 and 0x0001 for values but got nothing:

openhab> zigbee write 43799/1 0x201 0x401 0x0000 ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "0x0000"
openhab> zigbee write 43799/1 0x201 0x402 0x0000 ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "0x0000"
openhab> zigbee write 43799/1 0x201 0x402 0x0001 ENUMERATION_8_BIT
Error: Exception during command execution (NumberFormatException): For input string: "0x0001"

Dug into the zigbee standard a little, looked at the format of the read/write commands, looked at the attsupported results and tried this:

openhab> zigbee write 43799/1 0x201 28 0000 ENUMERATION_8_BIT
Attribute value write success.

But I did not think to try reading the default value first and now it won’t take 1, 0001, 0x0001, 01, etc as new write values.

Is it possible the backlight attribute is one of the attsupported items listed higher than 41? (1024, 1025, etc)

Will keep playing with it. I do have more of these thermostats that I have no installed yet. Worst case I can read the attribute value from them to reset it.

Small update, figured I’d try incrementing higher than 0 or 1 for the value with some success:

openhab> zigbee write 43799/1 0x201 28 2 ENUMERATION_8_BIT
Attribute value write error: INVALID_VALUE

openhab> zigbee write 43799/1 0x201 28 3 ENUMERATION_8_BIT
Attribute value write error: INVALID_VALUE

openhab> zigbee write 43799/1 0x201 28 4 ENUMERATION_8_BIT
Attribute value write success.

openhab> zigbee write 43799/1 0x201 28 5 ENUMERATION_8_BIT
Attribute value write success.

openhab> zigbee write 43799/1 0x201 28 6 ENUMERATION_8_BIT
Attribute value write error: INVALID_VALUE

Obviously it’s not the backlight setting that I’m going for but it feels like personal progress. lol

Further experiments show that writing “0” logically turns the Thing’s “System Mode” channel to off, writing either 4 & 5 both turn the channel to “Heat”.
Looking at the zigbee standard 4 and 5 correspond to “Heat” and “Emergency Heat” settings, while everything else would probably not apply to a heating thermostat.

So personal growth here but nothing on the backlight front.

Please can you try the following -:

zigbee read 43799/1 0x201 0x401
openhab> zigbee read 43799/1 0x201 0x401
Reading endpoint AB17/1, cluster server cluster Thermostat (0201), attributes Attribute 1025
Response for cluster 0x0201
Attribute 1025  UNKNOWN                                             UNSIGNED_16_BIT_INTEGER         15

And now -:

zigbee write 43779/1 0x201 0x401 XX UNSIGNED_16_BIT_INTEGER

With xx being 0 or 1.

Tried those below, default value was 15 so I’m guessing they might use random numbers to make our life difficult.
Will refrain from trying random numbers though.

openhab> zigbee write 43799/1 0x201 0x401 1 UNSIGNED_16_BIT_INTEGER
Attribute value write error: INVALID_VALUE

openhab> zigbee write 43799/1 0x201 0x401 01 UNSIGNED_16_BIT_INTEGER
Attribute value write error: INVALID_VALUE

openhab> zigbee write 43799/1 0x201 0x401 0 UNSIGNED_16_BIT_INTEGER
Attribute value write error: INVALID_VALUE

openhab> zigbee write 43799/1 0x201 0x401 00 UNSIGNED_16_BIT_INTEGER
Attribute value write error: INVALID_VALUE

Looping back to the hubitat code they used 0x402 for the backlight which is giving me:

Reading endpoint AB17/1, cluster server cluster Thermostat (0201), attributes Attribute 1026
Response for cluster 0x0201
Attribute 1026  UNKNOWN                                             ENUMERATION_8_BIT               1

Ah crap! My mistake - it’s not 0x401 - it’s 0x402 :roll_eyes:

Yep - I also just checked that - sorry about that. So does 0x402 work then?

Writing 0 to it worked.
Let me go check the backlight.

It worked!
The backlight comes on with button presses and turns off after 10s of inactivity.

Thanks for helping me through that. I’m guessing the attribute should stay 0 until changed again.

For future use is it possible to add that to the binding/OH UI?
I imagine being an non-standard feature there is a chance another manufacturer might use the same attribute for something else and mess things up.

Still learning OH but can I write a rule that will send that command?

:+1:

Exactly. We can’t just add this as a general attribute - as you point out, other manufacturers could use it.

What we can do is to generate a static thing definition. To do this I need to know all the channels information that is found by the device and we could add this as another channel (at the moment I don’t think there’s a way to define attributes as configuration items, but that could be added).

No - I don’t think you can use rules to interact with the console - at least not easily. I’m sure someone will find a way of scripting a telnet session or something, but that’s too dangerous for me :slight_smile:

Does the UI channel list work?

Maybe not. Am looking into thing definitions.

Yes, in general this probably has all the information on the channels. I probably also need to see the list of properties (nope - got what I need in the fingerprint command above).

So I think that does give me everything - let me have a look at this over the next few days…

Thank you. Any help appreciated.
Been looking into .thing file examples but most seem to be for coordinators.
So far have used the OH3 UI for setting up all my Things so the manual .things config is a whole other experience.

I’ve also taken a deep dive into all the clusters and attributes visible for this and the Stelpro thermostat.
Just running the “zigbee endpoint 43799/1” command shows tons of info. The Sinope unit has approximately 1000 times as many clusters/attributes as the Stelpro does, even though it does do power consumption somehow in their proprietary app. Must be completely outside the zigbee standards.
Oh well. Can’t always get what you want.

Thanks again

Just to be clear, what I’m talking about here is not the same as a .thing file. The static definition is something defined inside the binding itself - it’s not something you can define outside of the binding.

Note that this list will not necessarily show what the device supports. The clusters will be correct, but the list of attributes is the complete list as defined by the zigbee specification, and not (necessarily) the list supported by the device. The fingerprint command is typically better as it tried to get the real list from the device - but that only works if the device supports certain discovery commands to list the supported attributes and commands.