Sinope TH1300ZB Thermostat Time Format

Hi All,

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.

Hi @fretwire

You can have all configuration options for Sinope with ZHA here : GitHub - claudegel/sinope-zha: This is a custom quirks for sinope zigbee devices for testing before it is added to zha-device-handlers. It also explain how to setup those quirks in Home Assistant to use and test them before they are merged in zha-device-handlers

You can thanks @claudegel for that.

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


Then in the popup select manage zigbee device

on that view you select on the first line the cluster 0xff01
On the next line you select the attribute 0x0114 time_format
zigbee2
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

1 Like

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

template:
    - sensor:
        - name: "salle_a_diner_current_temperature"
          unit_of_measurement: '°C'
          device_class: temperature
          state_class: measurement
          state: >
            {% if state_attr('climate.salle_a_diner_thermostat', 'current_temperature') < 1 %}
              {{ states('sensor.salle_a_diner_current_temperature') }}
            {% else %}
              {{ state_attr('climate.salle_a_diner_thermostat', 'current_temperature') }}
            {% endif %}

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).

Thanks again!!

Are you in floor mode or air mode. On my TH1300ZB this is what I have

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.

with zha toolkit you can do this:

service: zha_toolkit.attr_read
data:
  ieee: climate.salle_de_bain_thermostat
  cluster: 0xff01
  attribute: 0x010d
  manf: 0x4508
  state_id: sensor.room_temperature
  state_attr: air_temperature
  allow_create: true
  force_update: true
  use_cache: true
  event_success: my_read_success_trigger_event
  event_fail: my_read_fail_trigger_event
  event_done: my_read_done_trigger_event

and the result will be a sensor.room_temperature with state attribute air_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

better

service: zha_toolkit.attr_read
data:
  ieee: climate.salle_de_bain_thermostat
  cluster: 0xff01
  attribute: 0x010d
  manf: 0x4508
  state_id: sensor.room_temperature
  allow_create: true
  force_update: true
  use_cache: true
  event_success: my_read_success_trigger_event
  event_fail: my_read_fail_trigger_event
  event_done: my_read_done_trigger_event


it directly populate the sensor state

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

template:
    - sensor:
        - name: "salle_a_diner_floor_temperature"
          unit_of_measurement: '°C'
          device_class: temperature
          state_class: measurement
          state: >
            {% if state_attr('climate.salle_a_diner_thermostat', 'current_temperature') < 1 %}
              {{ states('sensor.salle_a_diner_current_temperature') }}
            {% else %}
              {{ state_attr('climate.salle_a_diner_thermostat', 'current_temperature') }}
            {% endif %}

if you change FloorMode.floor to FloorMode.Air_by_floor then current_temperature will be reporting room temperature.

1 Like

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.

1 Like

thanks so much, I’ll try it out!

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.

Thank you for testing and reporting this

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%

1 Like

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.