mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Moderator: leecollings
-
hansdeh
- Posts: 7
- Joined: Friday 03 January 2025 23:05
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Hi,
I use a Tuya ZWT198/ZWT100-BH thermostate and for zigbee it uses TS0601 model
I want to use the value running_state' to act on idle of heat. The payload gives 'idle' of 'heat', while Domoticz expects 'idle' or 'heating' . This mismatch logs a error in the domoticz logfile
Error: mqtt: Climate device invalid/unknown action mode received!
The zigbee2mqtt log gives this payload
zigbee2mqtt/Thermostaat Vloerverwarming', payload '{"backlight_mode":"medium","child_lock":"UNLOCK","current_heating_setpoint":24.5,"deadzone_temperature":null,"factory_reset":null,"faultalarm":0,"frost_protection":"OFF","last_seen":"2025-11-20T06:33:52+01:00","linkquality":216,"local_temperature":19.9,"local_temperature_calibration":0,"max_temperature_limit":50,"preset":"manual","running_state":"heat","schedule_holiday":null,"schedule_weekday":null,"sensor":"external","system_mode":"heat","working_day":"disabled"}'
The device in Domoticz is a selector type
By 'idle' it gives 'idle' with level 10 and by 'heat' it gives 'undefined' with level -1. So I can uses this value but my errorlog is full of the error mentioned above.
Is anybody familiar with this bug and knows if it's solved in a beta release of else can someone puts this issue on the to do list?
Tnx
Hans
I use a Tuya ZWT198/ZWT100-BH thermostate and for zigbee it uses TS0601 model
I want to use the value running_state' to act on idle of heat. The payload gives 'idle' of 'heat', while Domoticz expects 'idle' or 'heating' . This mismatch logs a error in the domoticz logfile
Error: mqtt: Climate device invalid/unknown action mode received!
The zigbee2mqtt log gives this payload
zigbee2mqtt/Thermostaat Vloerverwarming', payload '{"backlight_mode":"medium","child_lock":"UNLOCK","current_heating_setpoint":24.5,"deadzone_temperature":null,"factory_reset":null,"faultalarm":0,"frost_protection":"OFF","last_seen":"2025-11-20T06:33:52+01:00","linkquality":216,"local_temperature":19.9,"local_temperature_calibration":0,"max_temperature_limit":50,"preset":"manual","running_state":"heat","schedule_holiday":null,"schedule_weekday":null,"sensor":"external","system_mode":"heat","working_day":"disabled"}'
The device in Domoticz is a selector type
By 'idle' it gives 'idle' with level 10 and by 'heat' it gives 'undefined' with level -1. So I can uses this value but my errorlog is full of the error mentioned above.
Is anybody familiar with this bug and knows if it's solved in a beta release of else can someone puts this issue on the to do list?
Tnx
Hans
- jvdz
- Posts: 2441
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
What options does the selector switch have?The device in Domoticz is a selector type
By 'idle' it gives 'idle' with level 10 and by 'heat' it gives 'undefined' with level -1. So I can use this value but my errorlog is full of the error mentioned above.
According to the Zigbee2Mqtt definitions, it should be "Idle" or "heat", so would expect that in both the Device Selector options and AutoDiscovery package content.
What is the discovery MQTT message content as that should contain the option for the AutoDiscovery of this Selector Switch?
-
TheHelma
- Posts: 8
- Joined: Tuesday 27 February 2024 20:19
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2025.2
- Location: Germany
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Hello together,
I have the same problem with a SONOFF TRVZB thermostat.
The error log is full of:
Error: zigbee2mqtt: Climate device invalid/unknown action mode received! (0x0cae5ffffeca00b2_climate_zigbee2mqtt: heating)
Payload shows that the running_state is "heat" instead of the, by Domoticz expected, "heating".
{
"battery": null,
"child_lock": null,
"closing_steps": null,
"external_temperature_input": null,
"frost_protection_temperature": null,
"idle_steps": null,
"last_seen": "2025-11-20T21:03:01.518Z",
"linkquality": 162,
"local_temperature": 20.1,
"local_temperature_calibration": null,
"occupied_heating_setpoint": 23,
"open_window": null,
"running_state": "heat", <----------
"system_mode": "heat",
"temperature_accuracy": null,
"temperature_sensor_select": null,
"update": {
"installed_version": 4864,
"latest_version": 5120,
"state": "available"
},
"valve_closing_degree": null,
"valve_closing_limit_voltage": null,
"valve_motor_running_voltage": 1160,
"valve_opening_degree": null,
"valve_opening_limit_voltage": null,
"weekly_schedule": null
}
I have the same problem with a SONOFF TRVZB thermostat.
The error log is full of:
Error: zigbee2mqtt: Climate device invalid/unknown action mode received! (0x0cae5ffffeca00b2_climate_zigbee2mqtt: heating)
Payload shows that the running_state is "heat" instead of the, by Domoticz expected, "heating".
{
"battery": null,
"child_lock": null,
"closing_steps": null,
"external_temperature_input": null,
"frost_protection_temperature": null,
"idle_steps": null,
"last_seen": "2025-11-20T21:03:01.518Z",
"linkquality": 162,
"local_temperature": 20.1,
"local_temperature_calibration": null,
"occupied_heating_setpoint": 23,
"open_window": null,
"running_state": "heat", <----------
"system_mode": "heat",
"temperature_accuracy": null,
"temperature_sensor_select": null,
"update": {
"installed_version": 4864,
"latest_version": 5120,
"state": "available"
},
"valve_closing_degree": null,
"valve_closing_limit_voltage": null,
"valve_motor_running_voltage": 1160,
"valve_opening_degree": null,
"valve_opening_limit_voltage": null,
"weekly_schedule": null
}
- jvdz
- Posts: 2441
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Again: please show the ad mqtt messages content for this device!
- waltervl
- Posts: 6677
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2025.1
- Location: NL
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
So the config topic is important here, that is the topic normally in the folder homeassistant and ending on config. See also the wiki for examples and instructions https://wiki.domoticz.com/MQTT_AD_Report_Problems
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
TheHelma
- Posts: 8
- Joined: Tuesday 27 February 2024 20:19
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2025.2
- Location: Germany
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
My Selector Switch has 3 options:
0 -off
10 -auto
20 -heat
The MQTT Explorer shows, that the selector changes the "system_mode" of the thermostat to "off", "auto" or "heat".
So my selector switch is connected to the "system_mode" of the thermostat and not to the running_state as in Hans case.
0 -off
10 -auto
20 -heat
The MQTT Explorer shows, that the selector changes the "system_mode" of the thermostat to "off", "auto" or "heat".
So my selector switch is connected to the "system_mode" of the thermostat and not to the running_state as in Hans case.
- waltervl
- Posts: 6677
- Joined: Monday 28 January 2019 18:48
- Target OS: Linux
- Domoticz version: 2025.1
- Location: NL
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
These discussions have no use of you do not give the contents of the config topic........
Domoticz running on Udoo X86 (on Ubuntu)
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
Devices/plugins: ZigbeeforDomoticz (with Xiaomi, Ikea, Tuya devices), Nefit Easy, Midea Airco, Omnik Solar, Goodwe Solar
-
TheHelma
- Posts: 8
- Joined: Tuesday 27 February 2024 20:19
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2025.2
- Location: Germany
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
I have no config topic for the devices in my zigbee2mqtt broker. Do I have to activate something specific to publish the config topic?
- Attachments
-
- Screenshot 2025-11-21 001252.png (27.91 KiB) Viewed 194 times
- jvdz
- Posts: 2441
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
The discovery topic is always broadcasted a startup of ZIGBEE2MQTT and isn't under "/zigbee2mqtt"!
Default topic is /homeassist unless you have changed it to something else. Just check either your ZIGBEE2MQTT config, or the MQTT AD HArdware in Domoticz for the appropriate topic.
Default topic is /homeassist unless you have changed it to something else. Just check either your ZIGBEE2MQTT config, or the MQTT AD HArdware in Domoticz for the appropriate topic.
-
TheHelma
- Posts: 8
- Joined: Tuesday 27 February 2024 20:19
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2025.2
- Location: Germany
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Thank u so much for the hint! I think I´ve found the config:
{
"action_template": "{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json.running_state] }}",
"action_topic": "zigbee2mqtt/Kitchen",
"availability": [
{
"topic": "zigbee2mqtt/bridge/state",
"value_template": "{{ value_json.state }}"
},
{
"topic": "zigbee2mqtt/Kitchen/availability",
"value_template": "{{ value_json.state }}"
}
],
"availability_mode": "all",
"current_temperature_template": "{{ value_json.local_temperature }}",
"current_temperature_topic": "zigbee2mqtt/Kitchen",
"default_entity_id": "climate.kitchen",
"device": {
"identifiers": [
"zigbee2mqtt_0x38398ffffe1b2042"
],
"manufacturer": "SONOFF",
"model": "Zigbee thermostatic radiator valve",
"model_id": "TRVZB",
"name": "Kitchen",
"sw_version": "1.3.0",
"via_device": "zigbee2mqtt_bridge_0x00124b002e1e10c0"
},
"max_temp": "35",
"min_temp": "4",
"mode_command_topic": "zigbee2mqtt/Kitchen/set/system_mode",
"mode_state_template": "{{ value_json.system_mode }}",
"mode_state_topic": "zigbee2mqtt/Kitchen",
"modes": [
"off",
"auto",
"heat"
],
"name": null,
"object_id": "kitchen",
"origin": {
"name": "Zigbee2MQTT",
"sw": "2.6.2",
"url": "https://www.zigbee2mqtt.io"
},
"temp_step": 0.5,
"temperature_command_topic": "zigbee2mqtt/Kitchen/set/occupied_heating_setpoint",
"temperature_state_template": "{{ value_json.occupied_heating_setpoint }}",
"temperature_state_topic": "zigbee2mqtt/Kitchen",
"temperature_unit": "C",
"unique_id": "0x38398ffffe1b2042_climate_zigbee2mqtt"
}
Is this the correct info needed?
{
"action_template": "{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json.running_state] }}",
"action_topic": "zigbee2mqtt/Kitchen",
"availability": [
{
"topic": "zigbee2mqtt/bridge/state",
"value_template": "{{ value_json.state }}"
},
{
"topic": "zigbee2mqtt/Kitchen/availability",
"value_template": "{{ value_json.state }}"
}
],
"availability_mode": "all",
"current_temperature_template": "{{ value_json.local_temperature }}",
"current_temperature_topic": "zigbee2mqtt/Kitchen",
"default_entity_id": "climate.kitchen",
"device": {
"identifiers": [
"zigbee2mqtt_0x38398ffffe1b2042"
],
"manufacturer": "SONOFF",
"model": "Zigbee thermostatic radiator valve",
"model_id": "TRVZB",
"name": "Kitchen",
"sw_version": "1.3.0",
"via_device": "zigbee2mqtt_bridge_0x00124b002e1e10c0"
},
"max_temp": "35",
"min_temp": "4",
"mode_command_topic": "zigbee2mqtt/Kitchen/set/system_mode",
"mode_state_template": "{{ value_json.system_mode }}",
"mode_state_topic": "zigbee2mqtt/Kitchen",
"modes": [
"off",
"auto",
"heat"
],
"name": null,
"object_id": "kitchen",
"origin": {
"name": "Zigbee2MQTT",
"sw": "2.6.2",
"url": "https://www.zigbee2mqtt.io"
},
"temp_step": 0.5,
"temperature_command_topic": "zigbee2mqtt/Kitchen/set/occupied_heating_setpoint",
"temperature_state_template": "{{ value_json.occupied_heating_setpoint }}",
"temperature_state_topic": "zigbee2mqtt/Kitchen",
"temperature_unit": "C",
"unique_id": "0x38398ffffe1b2042_climate_zigbee2mqtt"
}
Is this the correct info needed?
- jvdz
- Posts: 2441
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
This part:
Was the device created recently or in the past, and did this message start appearing after an update?
Does the device also contain the "wrong" heat option when it gets recreated?
EDIT:
Checking the sourcecode, It seems that the creation of the device doesn't use the "action_template" and simply loops through the option in:
...defines how to "translate" the incoming state into the selector state.{
"action_template": "{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json.running_state] }}",
"action_topic": "zigbee2mqtt/Kitchen",
Was the device created recently or in the past, and did this message start appearing after an update?
Does the device also contain the "wrong" heat option when it gets recreated?
EDIT:
Checking the sourcecode, It seems that the creation of the device doesn't use the "action_template" and simply loops through the option in:
This is something that @Gizmocuz needs to check if this another formatted discovery than supported."modes": ["off", "auto", "heat"],
-
hansdeh
- Posts: 7
- Joined: Friday 03 January 2025 23:05
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
What you described above is what I also see in MQTT Explorer.
The running_state is what shows if the heater is really on, the system_mode sets if the heater is swithed on when local temperature is below setpoint.
The running_state is recently added to domoticz. I found a topic which mentioned an update van zigbee2mqtt and the latest stable version of Domoticz to get the running_state in DOmoticz.
The zigbee device was already known in Domoticz and the selector device xxxxx Action Mode was added which the values :
0 None
10 idle
20 heating
30 cooling
40 fan
This looks like an air conditioner device instead of an thermostat device.
I'm a long time user of Domoticz, but recently switch from Deconz to zigbee2mqtt so not that experienced with zigbee, so my apologies if my question was not so documented as it should have been.
Hans
The running_state is what shows if the heater is really on, the system_mode sets if the heater is swithed on when local temperature is below setpoint.
The running_state is recently added to domoticz. I found a topic which mentioned an update van zigbee2mqtt and the latest stable version of Domoticz to get the running_state in DOmoticz.
The zigbee device was already known in Domoticz and the selector device xxxxx Action Mode was added which the values :
0 None
10 idle
20 heating
30 cooling
40 fan
This looks like an air conditioner device instead of an thermostat device.
I'm a long time user of Domoticz, but recently switch from Deconz to zigbee2mqtt so not that experienced with zigbee, so my apologies if my question was not so documented as it should have been.
Hans
-
TheHelma
- Posts: 8
- Joined: Tuesday 27 February 2024 20:19
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2025.2
- Location: Germany
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
The device was created in the past and the errors appeared after updating to 2025.2 stable. I haven´t tried to recreate the device yet.
- jvdz
- Posts: 2441
- Joined: Tuesday 30 December 2014 19:25
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 4.107
- Location: Netherlands
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
So it looks like we are talking 2 different cases here as the Domoticz Selector switch has different options, so are we really talking the same issue here?
@hansdeh:
We haven't seen your AD Config message yet so it remains hard to followup. The check things, it is always required to have the complete set of MQTT packages and Issue description.
@hansdeh:
We haven't seen your AD Config message yet so it remains hard to followup. The check things, it is always required to have the complete set of MQTT packages and Issue description.
-
hansdeh
- Posts: 7
- Joined: Friday 03 January 2025 23:05
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Hi,
Like I wrote earlier I'm not zo familiar with zigbee2mqtt so I don't no what the AD Config Message is and where to find. I googled AD Config message so hopefully this is where you're looking for to help me.
{
"action_template": "{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json.running_state] }}",
"action_topic": "zigbee2mqtt/0xa4c13886744ea629",
"availability": [
{
"topic": "zigbee2mqtt/bridge/state",
"value_template": "{{ value_json.state }}"
},
{
"topic": "zigbee2mqtt/0xa4c13886744ea629/availability",
"value_template": "{{ value_json.state }}"
}
],
"availability_mode": "all",
"current_temperature_template": "{{ value_json.local_temperature }}",
"current_temperature_topic": "zigbee2mqtt/0xa4c13886744ea629",
"default_entity_id": "climate.0xa4c13886744ea629",
"device": {
"hw_version": 1,
"identifiers": [
"zigbee2mqtt_0xa4c13886744ea629"
],
"manufacturer": "Tuya",
"model": "Wall thermostat",
"model_id": "ZWT198/ZWT100-BH",
"name": "0xa4c13886744ea629",
"via_device": "zigbee2mqtt_bridge_0xe0798dfffe71980c"
},
"max_temp": "35",
"min_temp": "5",
"mode_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/system_mode",
"mode_state_template": "{{ value_json.system_mode }}",
"mode_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"modes": [
"off",
"heat"
],
"name": null,
"object_id": "0xa4c13886744ea629",
"origin": {
"name": "Zigbee2MQTT",
"sw": "2.6.3",
"url": "https://www.zigbee2mqtt.io"
},
"preset_mode_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/preset",
"preset_mode_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"preset_mode_value_template": "{{ value_json.preset }}",
"preset_modes": [
"manual",
"auto",
"temporary_manual"
],
"temp_step": 0.5,
"temperature_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/current_heating_setpoint",
"temperature_state_template": "{{ value_json.current_heating_setpoint }}",
"temperature_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"temperature_unit": "C",
"unique_id": "0xa4c13886744ea629_climate_zigbee2mqtt"
}
If not please help me to get it
Hans
Like I wrote earlier I'm not zo familiar with zigbee2mqtt so I don't no what the AD Config Message is and where to find. I googled AD Config message so hopefully this is where you're looking for to help me.
{
"action_template": "{% set values = {None:None,'idle':'idle','heat':'heating','cool':'cooling','fan_only':'fan'} %}{{ values[value_json.running_state] }}",
"action_topic": "zigbee2mqtt/0xa4c13886744ea629",
"availability": [
{
"topic": "zigbee2mqtt/bridge/state",
"value_template": "{{ value_json.state }}"
},
{
"topic": "zigbee2mqtt/0xa4c13886744ea629/availability",
"value_template": "{{ value_json.state }}"
}
],
"availability_mode": "all",
"current_temperature_template": "{{ value_json.local_temperature }}",
"current_temperature_topic": "zigbee2mqtt/0xa4c13886744ea629",
"default_entity_id": "climate.0xa4c13886744ea629",
"device": {
"hw_version": 1,
"identifiers": [
"zigbee2mqtt_0xa4c13886744ea629"
],
"manufacturer": "Tuya",
"model": "Wall thermostat",
"model_id": "ZWT198/ZWT100-BH",
"name": "0xa4c13886744ea629",
"via_device": "zigbee2mqtt_bridge_0xe0798dfffe71980c"
},
"max_temp": "35",
"min_temp": "5",
"mode_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/system_mode",
"mode_state_template": "{{ value_json.system_mode }}",
"mode_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"modes": [
"off",
"heat"
],
"name": null,
"object_id": "0xa4c13886744ea629",
"origin": {
"name": "Zigbee2MQTT",
"sw": "2.6.3",
"url": "https://www.zigbee2mqtt.io"
},
"preset_mode_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/preset",
"preset_mode_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"preset_mode_value_template": "{{ value_json.preset }}",
"preset_modes": [
"manual",
"auto",
"temporary_manual"
],
"temp_step": 0.5,
"temperature_command_topic": "zigbee2mqtt/0xa4c13886744ea629/set/current_heating_setpoint",
"temperature_state_template": "{{ value_json.current_heating_setpoint }}",
"temperature_state_topic": "zigbee2mqtt/0xa4c13886744ea629",
"temperature_unit": "C",
"unique_id": "0xa4c13886744ea629_climate_zigbee2mqtt"
}
If not please help me to get it
Hans
-
hansdeh
- Posts: 7
- Joined: Friday 03 January 2025 23:05
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: mismatch with zigbee2mqtt (payload zigbee thermostate) and domoticz
Fixed in build 16929
Who is online
Users browsing this forum: No registered users and 1 guest