homebridge-z2m: [Bug] Thermostat not detected yet exposes thermostat values

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

I have a TV02-Zigbee device I just added to the Zigbee network.

It appears successfully in Zigbee2MQTT and exposes the following (by checking state in Zigbee2MQTT app):

{
    "battery_low": false,
    "boost_timeset_countdown": 0,
    "child_lock": "UNLOCK",
    "comfort_temperature": 21,
    "current_heating_setpoint": 21.5,
    "eco_temperature": 17,
    "error_status": 0,
    "frost_protection": "OFF",
    "heating_stop": "OFF",
    "holiday_start_stop": "2021/01/01 01:01 | 2021/01/01 01:01",
    "holiday_temperature": 17,
    "linkquality": 78,
    "local_temperature": 23.5,
    "local_temperature_calibration": 0,
    "online": "ON",
    "open_window": "OFF",
    "open_window_temperature": 21,
    "preset": "auto",
    "schedule_friday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_monday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_saturday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_sunday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_thursday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_tuesday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "schedule_wednesday": "06:00/17 12:00/21 14:00/17 17:00/21 24:00/17",
    "system_mode": "heat",
    "working_day": "mon_sun"
}

According to your Thermostat documentation, if any of the following attributes are exposed, it should be detected as a thermostat:

  • local_temperature
  • current_heating_setpoint
  • system_mode
  • running_state

As you can see from above, the first three are exposed.

The only device that is exposed into Homebridge however is a battery and no Thermostat.

What is slightly confusing/contradictory is if I look at the docs for your Zigbee TV-02 device support, it states that only the following is exposed:

  • Battery
    • Battery Level
    • Charging State
    • Status Low Battery

Related devices

I have a Sonoff Zigbee coordinator connected to a Raspberry Pi. I do not believe the related devices are relevant in this instance.

Related Devices

No response

Steps To Reproduce

  1. Connect the TV02-Zigbee to the Zigbee network
  2. Ensure it appears in Zigbee2MQTT
  3. Go into Homebridge, and see that only the battery accessory has been added, and no thermostat

Expected behavior

Given the thermostat attributes are exposed, I expect a Thermostat to appear in Homebridge with the current_temperature, current_heating_setpoint and system_mode exposed.

In HomeKit I get this instead:

MO screenshot 2023-02-03 at 11 59 10

Device entry

[{"definition":null,"disabled":false,"endpoints":{"1":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"10":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"11":{"bindings":[],"clusters":{"input":["ssIasAce","genTime"],"output":["ssIasZone","ssIasWd"]},"configured_reportings":[],"scenes":[]},"110":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"12":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"13":{"bindings":[],"clusters":{"input":["genOta"],"output":[]},"configured_reportings":[],"scenes":[]},"2":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"3":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"4":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"47":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"5":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"6":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]},"8":{"bindings":[],"clusters":{"input":[],"output":[]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Coordinator","ieee_address":"0x00124b002a2e988d","interview_completed":true,"interviewing":false,"network_address":0,"supported":false,"type":"Coordinator"},{"date_code":"","definition":{"description":"Luminance motion sensor","exposes":[{"access":1,"description":"Indicates whether the device detected occupancy","name":"occupancy","property":"occupancy","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Raw measured illuminance","name":"illuminance","property":"illuminance","type":"numeric","unit":"lx"},{"access":1,"description":"Remaining battery in %","name":"battery","property":"battery","type":"numeric","unit":"%","value_max":100,"value_min":0},{"access":7,"description":"PIR sensor sensitivity (refresh and update only while active)","name":"sensitivity","property":"sensitivity","type":"enum","values":["low","medium","high"]},{"access":7,"description":"PIR keep time in seconds (refresh and update only while active)","name":"keep_time","property":"keep_time","type":"enum","values":["10","30","60","120"]},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"ZG-204ZL","options":[],"supports_ota":false,"vendor":"TuYa"},"disabled":false,"endpoints":{"1":{"bindings":[],"clusters":{"input":["genPowerCfg","ssIasZone","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Human Sensor","ieee_address":"0xa4c1381e1f1427db","interview_completed":true,"interviewing":false,"manufacturer":"_TZE200_3towulqd","model_id":"TS0601","network_address":35616,"power_source":"Battery","supported":true,"type":"EndDevice"},{"date_code":"","definition":{"description":"Smart plug (with power monitoring)","exposes":[{"features":[{"access":7,"description":"On/off state of the switch","name":"state","property":"state","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Recover state after power outage","name":"power_outage_memory","property":"power_outage_memory","type":"enum","values":["on","off","restore"]},{"access":7,"description":"LED indicator mode","name":"indicator_mode","property":"indicator_mode","type":"enum","values":["off","off/on","on/off","on"]},{"access":1,"description":"Instantaneous measured power","name":"power","property":"power","type":"numeric","unit":"W"},{"access":1,"description":"Instantaneous measured electrical current","name":"current","property":"current","type":"numeric","unit":"A"},{"access":1,"description":"Measured electrical potential value","name":"voltage","property":"voltage","type":"numeric","unit":"V"},{"access":1,"description":"Sum of consumed energy","name":"energy","property":"energy","type":"numeric","unit":"kWh"},{"features":[{"access":3,"description":"Enables/disables physical input on the device","name":"state","property":"child_lock","type":"binary","value_off":"UNLOCK","value_on":"LOCK"}],"type":"lock"},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"TS011F_plug_1","options":[{"access":2,"description":"Calibrates the power value (percentual offset), takes into effect on next report of device.","name":"power_calibration","property":"power_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for power, takes into effect on next report of device.","name":"power_precision","property":"power_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the current value (percentual offset), takes into effect on next report of device.","name":"current_calibration","property":"current_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for current, takes into effect on next report of device.","name":"current_precision","property":"current_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the voltage value (percentual offset), takes into effect on next report of device.","name":"voltage_calibration","property":"voltage_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for voltage, takes into effect on next report of device.","name":"voltage_precision","property":"voltage_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Number of digits after decimal point for energy, takes into effect on next report of device.","name":"energy_precision","property":"energy_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the energy value (percentual offset), takes into effect on next report of device.","name":"energy_calibration","property":"energy_calibration","type":"numeric"}],"supports_ota":true,"vendor":"TuYa"},"disabled":false,"endpoints":{"1":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"haElectricalMeasurement","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"seMetering","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}}],"clusters":{"input":["genIdentify","genGroups","genScenes","genOnOff","seMetering","haElectricalMeasurement","manuSpecificBosch","manuSpecificTuya_3","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[{"attribute":"rmsVoltage","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":5},{"attribute":"rmsCurrent","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":50},{"attribute":"activePower","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":10},{"attribute":"currentSummDelivered","cluster":"seMetering","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":[1,1]}],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":["greenPower"]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Office: Neon Light","ieee_address":"0xa4c13858680d7a89","interview_completed":true,"interviewing":false,"manufacturer":"_TZ3000_gvn91tmx","model_id":"TS011F","network_address":40994,"power_source":"Mains (single phase)","supported":true,"type":"Router"},{"date_code":"","definition":{"description":"Smart plug (with power monitoring)","exposes":[{"features":[{"access":7,"description":"On/off state of the switch","name":"state","property":"state","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Recover state after power outage","name":"power_outage_memory","property":"power_outage_memory","type":"enum","values":["on","off","restore"]},{"access":7,"description":"LED indicator mode","name":"indicator_mode","property":"indicator_mode","type":"enum","values":["off","off/on","on/off","on"]},{"access":1,"description":"Instantaneous measured power","name":"power","property":"power","type":"numeric","unit":"W"},{"access":1,"description":"Instantaneous measured electrical current","name":"current","property":"current","type":"numeric","unit":"A"},{"access":1,"description":"Measured electrical potential value","name":"voltage","property":"voltage","type":"numeric","unit":"V"},{"access":1,"description":"Sum of consumed energy","name":"energy","property":"energy","type":"numeric","unit":"kWh"},{"features":[{"access":3,"description":"Enables/disables physical input on the device","name":"state","property":"child_lock","type":"binary","value_off":"UNLOCK","value_on":"LOCK"}],"type":"lock"},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"TS011F_plug_1","options":[{"access":2,"description":"Calibrates the power value (percentual offset), takes into effect on next report of device.","name":"power_calibration","property":"power_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for power, takes into effect on next report of device.","name":"power_precision","property":"power_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the current value (percentual offset), takes into effect on next report of device.","name":"current_calibration","property":"current_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for current, takes into effect on next report of device.","name":"current_precision","property":"current_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the voltage value (percentual offset), takes into effect on next report of device.","name":"voltage_calibration","property":"voltage_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for voltage, takes into effect on next report of device.","name":"voltage_precision","property":"voltage_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Number of digits after decimal point for energy, takes into effect on next report of device.","name":"energy_precision","property":"energy_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the energy value (percentual offset), takes into effect on next report of device.","name":"energy_calibration","property":"energy_calibration","type":"numeric"}],"supports_ota":true,"vendor":"TuYa"},"disabled":false,"endpoints":{"1":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"haElectricalMeasurement","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"seMetering","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}}],"clusters":{"input":["genIdentify","genGroups","genScenes","genOnOff","seMetering","haElectricalMeasurement","manuSpecificBosch","manuSpecificTuya_3","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[{"attribute":"rmsVoltage","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":5},{"attribute":"rmsCurrent","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":50},{"attribute":"activePower","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":10},{"attribute":"currentSummDelivered","cluster":"seMetering","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":[1,1]}],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":["greenPower"]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Office: Oil Radiator Plug","ieee_address":"0xa4c13856385c6838","interview_completed":true,"interviewing":false,"manufacturer":"_TZ3000_gvn91tmx","model_id":"TS011F","network_address":1393,"power_source":"Mains (single phase)","supported":true,"type":"Router"},{"date_code":"","definition":{"description":"Water leak detector","exposes":[{"access":1,"description":"Indicates whether the device detected a water leak","name":"water_leak","property":"water_leak","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Indicates if the battery of this device is almost empty","name":"battery_low","property":"battery_low","type":"binary","value_off":false,"value_on":true},{"access":1,"description":"Remaining battery in %","name":"battery","property":"battery","type":"numeric","unit":"%","value_max":100,"value_min":0},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"TS0207_water_leak_detector","options":[],"supports_ota":false,"vendor":"TuYa"},"disabled":false,"endpoints":{"1":{"bindings":[{"cluster":"genPowerCfg","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}}],"clusters":{"input":["genPowerCfg","genIdentify","ssIasZone","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[{"attribute":"batteryPercentageRemaining","cluster":"genPowerCfg","maximum_report_interval":62000,"minimum_report_interval":3600,"reportable_change":0}],"scenes":[]}},"friendly_name":"Kitchen: Water Leak Detector","ieee_address":"0xa4c13810fe0eae2d","interview_completed":true,"interviewing":false,"manufacturer":"_TZ3000_kyb656no","model_id":"TS0207","network_address":16139,"power_source":"Battery","supported":true,"type":"EndDevice"},{"date_code":"","definition":{"description":"Smart plug (with power monitoring)","exposes":[{"features":[{"access":7,"description":"On/off state of the switch","name":"state","property":"state","type":"binary","value_off":"OFF","value_on":"ON","value_toggle":"TOGGLE"}],"type":"switch"},{"access":7,"description":"Recover state after power outage","name":"power_outage_memory","property":"power_outage_memory","type":"enum","values":["on","off","restore"]},{"access":7,"description":"LED indicator mode","name":"indicator_mode","property":"indicator_mode","type":"enum","values":["off","off/on","on/off","on"]},{"access":1,"description":"Instantaneous measured power","name":"power","property":"power","type":"numeric","unit":"W"},{"access":1,"description":"Instantaneous measured electrical current","name":"current","property":"current","type":"numeric","unit":"A"},{"access":1,"description":"Measured electrical potential value","name":"voltage","property":"voltage","type":"numeric","unit":"V"},{"access":1,"description":"Sum of consumed energy","name":"energy","property":"energy","type":"numeric","unit":"kWh"},{"features":[{"access":3,"description":"Enables/disables physical input on the device","name":"state","property":"child_lock","type":"binary","value_off":"UNLOCK","value_on":"LOCK"}],"type":"lock"},{"access":1,"description":"Link quality (signal strength)","name":"linkquality","property":"linkquality","type":"numeric","unit":"lqi","value_max":255,"value_min":0}],"model":"TS011F_plug_1","options":[{"access":2,"description":"Calibrates the power value (percentual offset), takes into effect on next report of device.","name":"power_calibration","property":"power_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for power, takes into effect on next report of device.","name":"power_precision","property":"power_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the current value (percentual offset), takes into effect on next report of device.","name":"current_calibration","property":"current_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for current, takes into effect on next report of device.","name":"current_precision","property":"current_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the voltage value (percentual offset), takes into effect on next report of device.","name":"voltage_calibration","property":"voltage_calibration","type":"numeric"},{"access":2,"description":"Number of digits after decimal point for voltage, takes into effect on next report of device.","name":"voltage_precision","property":"voltage_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Number of digits after decimal point for energy, takes into effect on next report of device.","name":"energy_precision","property":"energy_precision","type":"numeric","value_max":3,"value_min":0},{"access":2,"description":"Calibrates the energy value (percentual offset), takes into effect on next report of device.","name":"energy_calibration","property":"energy_calibration","type":"numeric"}],"supports_ota":true,"vendor":"TuYa"},"disabled":false,"endpoints":{"1":{"bindings":[{"cluster":"genOnOff","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"haElectricalMeasurement","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}},{"cluster":"seMetering","target":{"endpoint":1,"ieee_address":"0x00124b002a2e988d","type":"endpoint"}}],"clusters":{"input":["genIdentify","genGroups","genScenes","genOnOff","seMetering","haElectricalMeasurement","manuSpecificBosch","manuSpecificTuya_3","genBasic"],"output":["genOta","genTime"]},"configured_reportings":[{"attribute":"rmsVoltage","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":5},{"attribute":"rmsCurrent","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":50},{"attribute":"activePower","cluster":"haElectricalMeasurement","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":10},{"attribute":"currentSummDelivered","cluster":"seMetering","maximum_report_interval":3600,"minimum_report_interval":5,"reportable_change":[1,1]}],"scenes":[]},"242":{"bindings":[],"clusters":{"input":[],"output":["greenPower"]},"configured_reportings":[],"scenes":[]}},"friendly_name":"Front terrace: Winter lights","ieee_address":"0xa4c138a8f54fffee","interview_completed":true,"interviewing":false,"manufacturer":"_TZ3000_gvn91tmx","model_id":"TS011F","network_address":13359,"power_source":"Mains (single phase)","supported":true,"type":"Router"},{"definition":{"description":"Aqara temperature, humidity and pressure sensor","exposes":[{"access":1,"description":"Remaining battery in %","name":"battery","property":"battery","type":"numeric","unit":"%","value_max":100,"value_min":0},{"access":1,"description":"Measured temperature value","name":"temperature","property":"temperature","type":"numeric","unit":"°C"},{"access":1,"description":"Measured relative humidity","name":"humidity","property":"humidity","type":"numeric","unit":"%"},{"access":1,"description":"The measured atmospheric pressure","name":"pressure","property":"pressure","type":"numeric","unit":"hPa"},{"access":1,"description":"Voltage of the battery in millivolts","name":"voltage","property":"voltage","type":"numeric","unit":"mV"},{"access":1,"description":"Link quality (signal strength)","nam

Status update

{"state":"online"}

Messages from this plugin

No response

This plugin

1.9.2

Homebridge

1.6.0

Zigbee2MQTT

1.30.0

Homebridge Config UI X (if applicable)

4.50.2

About this issue

  • Original URL
  • State: closed
  • Created a year ago
  • Comments: 23 (10 by maintainers)

Commits related to this issue

Most upvoted comments

@itavero I thank you very much for your support. I manually updated the package.json on the zigbee2mqtt repo to point to the latest converters and restarted it and everything works. I have radiator thermostats in Apple Home now. Huge thanks !!!