I recently bought a Sinope TH1300ZB thermostat after not having any luck finding a suitable Z-Wave thermostat for floor heating. I added a Zigbee stick to my setup and the TH1300ZB paired with ZHA effortlessly. The important functionality is there but no configuration options are available and I wanted to change the time format from 24h to 12h. I think zigbee2mqtt provides configuration options but I went with ZHA for ease-of-use because I’ve never used Zigbee before.
I did lots of searching and found a few people asking how to change the format but no answers so thought I’d share how I changed the format on my thermostat.
On Home Assistant go to “Developer Tools” then “Services”
Select “Zigbee Home Automation: Set zigbee cluster attribute” as the Service
Use the following values:
IEEE: Address of your device
Endpoint ID: 1
Cluster ID: 65281
Cluster Type: in
Attribute: 276
Value: 1
Manufacturer Code: Leave unchecked
Then hit CALL SERVICE and the time format on your thermostat should change to 12h with am/pm indicator. Using a value of 0 probably (untested) changes it back to 24h.
To change time format in ZHA it is manufacturer cluster 0xff01, attribute 0x0114 (276)
to change any attribute value for your thermostat just go to parameters / device and services, select Zigbee Home Automation tile click on xxx devices at the bottom. This will open the list of all ZHA devices. click on your device and you will see a page with three column. On the left there is reconfigure with three vertical dots
on that view you select on the first line the cluster 0xff01
On the next line you select the attribute 0x0114 time_format
At the bottom you have two button:
view attribute value (circled in black)
write attribute value ( circled in red)
first click on the read button to show the value which is TimeFormat.Format_24h
change the 24 for 12 like TimeFormat.Format_12h and click write attribute
that’s it
Thanks for getting this thermostat working so well under ZHA!
The next thing I’d like to do is get room_temperature populated into a sensor. Is there an equally easy way to do that or would I need to install zha-toolkit?
No need for that. Just create a template sensor like this. The value you need is exposed as current_temperature in the dev-tool state for your thermostat.
Just create a sensor for each thermostats
you can create a file template.yaml and load it in your configuration.yaml file like this template: !include template.yaml
In dev-tool/states you will find all attributes for your thermostat that you can access the same way.
In dev-tool states I only see floor_temperature, no current_temperature. Could be because this is a floor heating thermostat. If I look in “Manage Zigbee Device” I can pull room_temperature from cluster 0xff01 (id is 0x010d) but it doesn’t show up in any dev-tool states.
No matter, the main thing I was looking for was energy monitoring and that works flawlessly (thanks to your efforts, I’m guessing).
please check cluster 0xff01, attribute 0x0105 airFloorMode.
1 = air, 2=floor
Also can you go back to manage zigbee device to check the attribute 0x0105 and also on thirds section, signature what do you have at the bottom last line
“class”: “thermostat.SinopeTH1300ZB” ? if not your device is not properly detected
In floor mode current_temperature is floor temperature. But attribute 0x010d will give you room temperature. For example my floor is at 17.8oC but air is at 23.04oC
In ZHA it is possible to make a sensor that read air temperature. You can also show floor temperature on the thermostat and show room temperature at the place of outside temperature.
I just need to create an automation that will read this every x minutes
value 2304 is a raw value from the thermostat and should be divided by 100 to get 23.04oC
My mistake I do have a current_temperature in dev-tool states! I must have filtered badly or was temporarily blind.
If I check attribute 0x0105 I see FloorMode.floor but that’s actually what I want because the floor heating is secondary heat in a small area (mud room and powder room off my back door).
The current_temperature attribute in the climate entity matches the value of the sensor.xxx_floor_temperature entity and I do want to monitor the floor temperature because the floor heating isn’t always on in that area.
Seems like these thermostats have at least two sensors. One 10k wired sensor for the floor temperature and a second sensor in the thermostat that measures the room temperature.
Checking the signature the bottom last line reads:
“class”: “zhaquirks.sinope.thermostat.SinopeTH1300ZB”
I’m all stock on my Home Assistant setup. The only custom_component I have installed is rpio_gpio because I need it to pull a GPIO high for a UPS I have installed on my Pi. Other than that I try to leave things 100% stock.
Ok so if you are FloorMode.floor then current_temperature is the floor temperature.
Yes these thermostats have two temperature sensor. one in the floor that is a 10k or a 12k and one in the thermostat for room temperature. This one is reported in attribute 0x010d.
So if you want to monitor floor temperature it is
I have a question on the TH1123ZB-G2. I noticed this thermostat has several heating modes, which are cycled automatically. For example, if the room temperature is 15c, and I set it to 20c, it will use 4 “bars” of power, and use maximum power.
If the difference in temperature is quite small (let’s say room temperature is 19.5c and thermostat is set to 20c), then it only uses 1 “bar” of power.
Is there a way to limit the power usage on the thermostat to 1 or 2 bars? My reasoning is that I usually sit right in front of the baseboard, and would prefer it to provide a more “gentle” heating, even if it stays on for longer.
It’s not heating mode it is just heating intensity level. It goes from 0 to 100% and is shown on the thermostat as 25% barr, 50%, 75% and 100%
This is shown in your thermostat attribute as heat_level on neviweb130 and as pi_heating_demand attribute in ZHA.
In neviweb130 there is an attribute to limit this level but it is available only with Eco-Sinopé. I think it is called eco_power_absolute in neviweb130. eco_power_absolute: set to «off» during normal operation, used to limit the pi_heating_demand level between 1 to 100% during peak period.
In ZHA it is: eco_max_pi_heating_demand, cluster 0xff01, attribute 0x0072 (114 for Z2M). Values: 255:off, range: 0-99 Set pi_heating_demand percentage limit 0% to 99% (225 = 100%)
You can try to play with those parameters to see if it work for what you need.
Just to give an update on this, we are now approaching heating season, and I was able to test this out. It works beautifully, for example if I set 20 on a 1000W heater, it will only output 200W, and the temperature on the heater us much milder. For example, at 100%, with a thermal camera I can see the fins on the heater reach up to 150c. With 20%, they only reach around 60c.
I think aside from a gentler heating mode, this also is a bit safer if you have kids or pets in the house, who could accidentally touch the fins.
one more finding. I thought the eco_max_pi_heating_demand would be permanent, but after a while (maybe a couple hours, not sure), the eco icon stops flashing, and the thermostat goes back to full power. When I read the parameter, it still shows the value I set, but does not work. I wonder if there is another parameter controlling the duration of the eco setting?
I’m thinking as a workaround, I can probably just set an automation to detect the power output of the thermostat, and if it exceeds the eco expected output, it can reset eco, but curious to see if any other things I might be missing?
could be connected with a timer that revert to normal heating after 4 hours as peak period last only 3 or 4 hours.
Try to set eco_delta_setpoint, 0x0071, to 0. normally it is set to -128 (off). 0 is for no setpoint offset and the Eco logo will flash. This could prevent eco_max_pi_heating_demand to go back to 100%
tested this today. Setting eco_delta_setpoint to 0 will flash the eco symbol for a few hours, but it will stop flashing eventually. I read the attribute and it still shows 0. Tried looking at the logs but can’t really see anything that indicates why this is happening. I also re-checked my automations, and there is nothing currently associated with the thermostats.
could maybe be some internal logic on the thermostat itself?
It is possible that there is a limit to the max peak period time, 4 hours. This way the device revert to normal operation in case it didn’t catch the end signal from Neviweb Eco-Sinope . Possibly there is a counter in another attribute that we could desable.
When i was sending a remote temperature to my thermostat it was necessary to refresh it periodically or the device would fallback to the local reading, it would seem that this would make sense for most overrides.