Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Proposed change
This PR adds a quirk for the ubisys H1 thermostatic radiator valve.
The device has a few quirks:
This PR adds the manufacturer-specific attributes and implements a mechanism to rewrite attribute IDs during attribute read and write. I am not sure if the proposed implementation is optimal, see my discussion #4587.
The Zigbee interface of the ubisys H1 is documented here: ubisys H1 Reference Manual.
Additional information
This PR does not expose attributes related to the scheduling feature of the thermostat.
As stated by the reference manual, the device needs at least application firmware 1.6.0 for some attributes to be available. To update the device using Home Assistant, add the following lines to the
configuration.yaml:The firmware changelog can be found here: ubisys H1 Firmware Change Logs. Firmware updates can also be manually obtained from the manufacturer: Firmware for Zigbee products by ubisys.
Device diagnostics
Details
{ "home_assistant": { "installation_type": "Home Assistant OS", "version": "2025.12.4", "dev": false, "hassio": true, "virtualenv": false, "python_version": "3.13.9", "docker": true, "arch": "aarch64", "timezone": "Europe/Berlin", "os_name": "Linux", "os_version": "6.12.47-haos-raspi", "container_arch": "aarch64", "supervisor": "2025.12.3", "host_os": "Home Assistant OS 16.3", "docker_version": "28.3.3", "chassis": "embedded", "run_as_root": true }, "custom_components": { "myskoda": { "documentation": "https://github.com/skodaconnect/homeassistant-myskoda/blob/main/README.md", "version": "1.29.2", "requirements": [ "myskoda==2.5.1" ] }, "hacs": { "documentation": "https://hacs.xyz/docs/use/", "version": "2.0.5", "requirements": [ "aiogithubapi>=22.10.1" ] }, "dreame_vacuum": { "documentation": "https://github.com/Tasshack/dreame-vacuum/tree/dev?tab=readme-ov-file#features", "version": "v2.0.0b19", "requirements": [ "pillow", "numpy", "pybase64", "requests", "pycryptodome", "python-miio", "py-mini-racer", "paho-mqtt" ] } }, "integration_manifest": { "domain": "zha", "name": "Zigbee Home Automation", "after_dependencies": [ "hassio", "onboarding", "usb" ], "codeowners": [ "dmulcahey", "adminiuga", "puddly", "TheJulianJES" ], "config_flow": true, "dependencies": [ "file_upload", "homeassistant_hardware" ], "documentation": "https://www.home-assistant.io/integrations/zha", "integration_type": "hub", "iot_class": "local_polling", "loggers": [ "aiosqlite", "bellows", "crccheck", "pure_pcapy3", "zhaquirks", "zigpy", "zigpy_deconz", "zigpy_xbee", "zigpy_zigate", "zigpy_znp", "zha", "universal_silabs_flasher" ], "requirements": [ "zha==0.0.81" ], "usb": [ { "description": "*2652*", "known_devices": [ "slae.sh cc2652rb stick" ], "pid": "EA60", "vid": "10C4" }, { "description": "*slzb-07*", "known_devices": [ "smlight slzb-07" ], "pid": "EA60", "vid": "10C4" }, { "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus v2" ], "pid": "55D4", "vid": "1A86" }, { "description": "*sonoff*plus*", "known_devices": [ "sonoff zigbee dongle plus" ], "pid": "EA60", "vid": "10C4" }, { "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ], "pid": "EA60", "vid": "10C4" }, { "description": "*tubeszb*", "known_devices": [ "TubesZB Coordinator" ], "pid": "7523", "vid": "1A86" }, { "description": "*zigstar*", "known_devices": [ "ZigStar Coordinators" ], "pid": "7523", "vid": "1A86" }, { "description": "*conbee*", "known_devices": [ "Conbee II" ], "pid": "0030", "vid": "1CF1" }, { "description": "*conbee*", "known_devices": [ "Conbee III" ], "pid": "6015", "vid": "0403" }, { "description": "*zigbee*", "known_devices": [ "Nortek HUSBZB-1" ], "pid": "8A2A", "vid": "10C4" }, { "description": "*zigate*", "known_devices": [ "ZiGate+" ], "pid": "6015", "vid": "0403" }, { "description": "*zigate*", "known_devices": [ "ZiGate" ], "pid": "EA60", "vid": "10C4" }, { "description": "*bv 2010/10*", "known_devices": [ "Bitron Video AV2010/10" ], "pid": "8B34", "vid": "10C4" }, { "description": "*sonoff*max*", "known_devices": [ "SONOFF Dongle Max MG24" ], "pid": "EA60", "vid": "10C4" }, { "description": "*sonoff*lite*mg21*", "known_devices": [ "sonoff zigbee dongle lite mg21" ], "pid": "EA60", "vid": "10C4" } ], "zeroconf": [ { "name": "tube*", "type": "_esphomelib._tcp.local." }, { "name": "*zigate*", "type": "_zigate-zigbee-gateway._tcp.local." }, { "name": "*zigstar*", "type": "_zigstar_gw._tcp.local." }, { "name": "uzg-01*", "type": "_uzg-01._tcp.local." }, { "name": "slzb-06*", "type": "_slzb-06._tcp.local." }, { "name": "xzg*", "type": "_xzg._tcp.local." }, { "name": "czc*", "type": "_czc._tcp.local." }, { "name": "*", "type": "_zigbee-coordinator._tcp.local." } ], "is_built_in": true, "overwrites_built_in": false }, "setup_times": { "null": { "setup": 9.03330510482192e-05 }, "01JEDWNW42RSX0G8XY1EQPRR00": { "wait_import_platforms": -0.01799302303697914, "wait_base_component": -0.0005492060445249081, "config_entry_setup": 5.663394168950617 } }, "data": { "version": 1, "ieee": "**REDACTED**", "nwk": "0xD8DC", "manufacturer": "ubisys", "model": "H1", "friendly_manufacturer": "ubisys", "friendly_model": "H1", "name": "ubisys H1", "quirk_applied": true, "quirk_class": "zigpy.quirks.v2.CustomDeviceV2", "exposes_features": [], "manufacturer_code": 4338, "power_source": "Battery or Unknown", "lqi": null, "rssi": null, "last_seen": "2025-12-22T18:49:41.479549+00:00", "available": true, "device_type": "EndDevice", "active_coordinator": false, "node_descriptor": { "logical_type": "EndDevice", "complex_descriptor_available": false, "user_descriptor_available": false, "reserved": 0, "aps_flags": 0, "frequency_band": 8, "mac_capability_flags": 128, "manufacturer_code": 4338, "maximum_buffer_size": 127, "maximum_incoming_transfer_size": 242, "server_mask": 11264, "maximum_outgoing_transfer_size": 242, "descriptor_capability_field": 0 }, "endpoints": { "1": { "profile_id": 260, "device_type": { "name": "THERMOSTAT", "id": 769 }, "in_clusters": [ { "cluster_id": "0x0000", "endpoint_attribute": "basic", "attributes": [ { "id": "0x0004", "name": "manufacturer", "zcl_type": "string", "value": "ubisys" }, { "id": "0x0005", "name": "model", "zcl_type": "string", "value": "H1" } ] }, { "cluster_id": "0x0001", "endpoint_attribute": "power", "attributes": [ { "id": "0x0021", "name": "battery_percentage_remaining", "zcl_type": "uint8", "value": 200 }, { "id": "0x0033", "name": "battery_quantity", "zcl_type": "uint8", "value": 2 }, { "id": "0x0031", "name": "battery_size", "zcl_type": "enum8", "value": 3 }, { "id": "0x0020", "name": "battery_voltage", "zcl_type": "uint8", "value": 34 } ] }, { "cluster_id": "0x0003", "endpoint_attribute": "identify", "attributes": [] }, { "cluster_id": "0x0004", "endpoint_attribute": "groups", "attributes": [] }, { "cluster_id": "0x0005", "endpoint_attribute": "scenes", "attributes": [] }, { "cluster_id": "0x000a", "endpoint_attribute": "time", "attributes": [] }, { "cluster_id": "0x0020", "endpoint_attribute": "poll_control", "attributes": [ { "id": "0x0003", "name": "fast_poll_timeout", "zcl_type": "uint16", "value": 120 } ] }, { "cluster_id": "0x0201", "endpoint_attribute": "thermostat", "attributes": [ { "id": "0x0006", "name": "abs_max_cool_setpoint_limit", "zcl_type": "int16", "unsupported": true }, { "id": "0x0004", "name": "abs_max_heat_setpoint_limit", "zcl_type": "int16", "value": 3000 }, { "id": "0x0005", "name": "abs_min_cool_setpoint_limit", "zcl_type": "int16", "unsupported": true }, { "id": "0x0003", "name": "abs_min_heat_setpoint_limit", "zcl_type": "int16", "value": 700 }, { "id": "0x401e", "name": "alternate_backup_heating_demand", "zcl_type": "uint8", "value": 0 }, { "id": "0x401d", "name": "backup_heating_demand", "zcl_type": "uint8", "value": 25 }, { "id": "0x001b", "name": "ctrl_sequence_of_oper", "zcl_type": "enum8", "value": 2 }, { "id": "0x4015", "name": "detect_open_window", "zcl_type": "map8", "value": 0 }, { "id": "0x4022", "name": "integral_factor", "zcl_type": "int16", "value": 500 }, { "id": "0x0000", "name": "local_temperature", "zcl_type": "int16", "value": 2150 }, { "id": "0x0010", "name": "local_temperature_calibration", "zcl_type": "int8", "value": 2 }, { "id": "0x0018", "name": "max_cool_setpoint_limit", "zcl_type": "int16", "unsupported": true }, { "id": "0x0016", "name": "max_heat_setpoint_limit", "zcl_type": "int16", "unsupported": true }, { "id": "0x0017", "name": "min_cool_setpoint_limit", "zcl_type": "int16", "unsupported": true }, { "id": "0x0015", "name": "min_heat_setpoint_limit", "zcl_type": "int16", "value": 0 }, { "id": "0x0002", "name": "occupancy", "zcl_type": "map8", "value": 1 }, { "id": "0x0011", "name": "occupied_cooling_setpoint", "zcl_type": "int16", "unsupported": true }, { "id": "0x0012", "name": "occupied_heating_setpoint", "zcl_type": "int16", "value": 2200 }, { "id": "0x4018", "name": "open_window_detection_period", "zcl_type": "uint16", "value": 5 }, { "id": "0x4017", "name": "open_window_sensitivity", "zcl_type": "uint16", "value": 150 }, { "id": "0x4016", "name": "open_window_state", "zcl_type": "map8", "value": 0 }, { "id": "0x4019", "name": "open_window_timeout", "zcl_type": "uint16", "value": 1800 }, { "id": "0x0007", "name": "pi_cooling_demand", "zcl_type": "uint8", "unsupported": true }, { "id": "0x0008", "name": "pi_heating_demand", "zcl_type": "uint8", "value": 31 }, { "id": "0x4020", "name": "proportional_gain", "zcl_type": "int16", "value": 2 }, { "id": "0x4021", "name": "proportional_shift", "zcl_type": "int8", "value": 4 }, { "id": "0x4013", "name": "remote_temperature", "zcl_type": "int16", "value": -32768 }, { "id": "0x4014", "name": "remote_temperature_valid_duration", "zcl_type": "uint16", "value": 3600 }, { "id": "0x001e", "name": "running_mode", "zcl_type": "enum8", "value": 4 }, { "id": "0x0029", "name": "running_state", "zcl_type": "map16", "unsupported": true }, { "id": "0x401c", "name": "season", "zcl_type": "bool", "value": 0 }, { "id": "0x0030", "name": "setpoint_change_source", "zcl_type": "enum8", "unsupported": true }, { "id": "0x001c", "name": "system_mode", "zcl_type": "enum8", "value": 4 }, { "id": "0x4010", "name": "temperature_offset", "zcl_type": "int8", "value": 2 }, { "id": "0x0013", "name": "unoccupied_cooling_setpoint", "zcl_type": "int16", "unsupported": true }, { "id": "0x0014", "name": "unoccupied_heating_setpoint", "zcl_type": "int16", "value": 1600 } ] }, { "cluster_id": "0xfc57", "endpoint_attribute": "manufacturer_specific", "attributes": [] } ], "out_clusters": [ { "cluster_id": "0x0003", "endpoint_attribute": "identify", "attributes": [] }, { "cluster_id": "0x000a", "endpoint_attribute": "time", "attributes": [] }, { "cluster_id": "0x0019", "endpoint_attribute": "ota", "attributes": [ { "id": "0x0002", "name": "current_file_version", "zcl_type": "uint32", "value": 25166944 } ] }, { "cluster_id": "0x0201", "endpoint_attribute": "thermostat", "attributes": [] }, { "cluster_id": "0x0402", "endpoint_attribute": "temperature", "attributes": [] }, { "cluster_id": "0x0405", "endpoint_attribute": "humidity", "attributes": [] }, { "cluster_id": "0x0406", "endpoint_attribute": "occupancy", "attributes": [] } ] } }, "original_signature": {}, "zha_lib_entities": { "binary_sensor": [ { "info_object": { "fallback_name": "Open window detection status", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "binary_sensor", "class_name": "BinarySensor", "translation_key": "open_window_detection_status", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "attribute_name": "open_window_state" }, "state": { "class_name": "BinarySensor", "available": true, "state": false } } ], "button": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "button", "class_name": "IdentifyButton", "translation_key": null, "translation_placeholders": null, "device_class": "identify", "state_class": null, "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "IdentifyClusterHandler", "generic_id": "cluster_handler_0x0003", "endpoint_id": 1, "cluster": { "id": 3, "name": "Identify", "type": "server" }, "id": "1:0x0003", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "command": "identify", "args": [ 5 ], "kwargs": {} }, "state": { "class_name": "IdentifyButton", "available": true } } ], "climate": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "climate", "class_name": "Thermostat", "translation_key": "thermostat", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": null, "entity_registry_enabled_default": true, "enabled": true, "primary": true, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "max_temp": 30.0, "min_temp": 0.0, "supported_features": 385, "fan_modes": null, "preset_modes": [], "hvac_modes": [ "off", "heat" ] }, "state": { "class_name": "Thermostat", "available": true, "current_temperature": 21.5, "outdoor_temperature": null, "target_temperature": 22.0, "target_temperature_high": null, "target_temperature_low": null, "hvac_action": "heating", "hvac_mode": "heat", "preset_mode": "none", "fan_mode": "auto", "system_mode": "[4]/heat", "occupancy": 1, "occupied_cooling_setpoint": null, "occupied_heating_setpoint": 2200, "pi_heating_demand": 31, "pi_cooling_demand": null, "unoccupied_cooling_setpoint": null, "unoccupied_heating_setpoint": 1600 }, "extra_state_attributes": [ "occupancy", "occupied_cooling_setpoint", "occupied_heating_setpoint", "pi_cooling_demand", "pi_heating_demand", "system_mode", "unoccupied_cooling_setpoint", "unoccupied_heating_setpoint" ] } ], "number": [ { "info_object": { "fallback_name": "Alternate Backup Heating Demand", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "alternate_backup_heating_demand", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100, "native_min_value": 0, "native_step": 1.0, "native_unit_of_measurement": "%" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 0 } }, { "info_object": { "fallback_name": "Backup Heating Demand", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "backup_heating_demand", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100, "native_min_value": 0, "native_step": 1.0, "native_unit_of_measurement": "%" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 25 } }, { "info_object": { "fallback_name": "Integral Factor", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "integral_factor", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": null }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 500 } }, { "info_object": { "fallback_name": "Open window event duration", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "open_window_event_duration", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": "min" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 5 } }, { "info_object": { "fallback_name": "Open window detection threshold", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "open_window_detection_threshold", "translation_placeholders": null, "device_class": "temperature", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": "\u00b0C" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 1.5 } }, { "info_object": { "fallback_name": "Open window detection guard period", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "open_window_detection_guard_period", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": "min" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 30.0 } }, { "info_object": { "fallback_name": "Proportional Gain (Kp)", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "proportional_gain", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": null }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 2 } }, { "info_object": { "fallback_name": "Proportional Shift (N)", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "proportional_shift", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": null }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 4 } }, { "info_object": { "fallback_name": "External temperature sensor value", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "external_temperature_sensor_value", "translation_placeholders": null, "device_class": "temperature", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": "\u00b0C" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": -32768 } }, { "info_object": { "fallback_name": "External temperature sensor valid duration", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "external_temperature_sensor_valid_duration", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 100.0, "native_min_value": 0.0, "native_step": 1.0, "native_unit_of_measurement": "min" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 60.0 } }, { "info_object": { "fallback_name": "Temperature offset", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "number", "class_name": "NumberConfigurationEntity", "translation_key": "temperature_offset", "translation_placeholders": null, "device_class": "temperature", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "mode": "auto", "native_max_value": 10, "native_min_value": -10, "native_step": 1, "native_unit_of_measurement": "\u00b0C" }, "state": { "class_name": "NumberConfigurationEntity", "available": true, "state": 2 } } ], "sensor": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "LQISensor", "translation_key": "lqi", "translation_placeholders": null, "device_class": null, "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", "endpoint_id": 1, "cluster": { "id": 0, "name": "Basic", "type": "server" }, "id": "1:0x0000", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": null }, "state": { "class_name": "LQISensor", "available": true, "state": null } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "RSSISensor", "translation_key": "rssi", "translation_placeholders": null, "device_class": "signal_strength", "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "BasicClusterHandler", "generic_id": "cluster_handler_0x0000", "endpoint_id": 1, "cluster": { "id": 0, "name": "Basic", "type": "server" }, "id": "1:0x0000", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": "dBm" }, "state": { "class_name": "RSSISensor", "available": true, "state": null } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "Battery", "translation_key": null, "translation_placeholders": null, "device_class": "battery", "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "PowerConfigurationClusterHandler", "generic_id": "cluster_handler_0x0001", "endpoint_id": 1, "cluster": { "id": 1, "name": "Power Configuration", "type": "server" }, "id": "1:0x0001", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "battery_voltage" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": 0, "unit": "%" }, "state": { "class_name": "Battery", "available": true, "state": 100.0, "battery_size": "AA", "battery_quantity": 2, "battery_voltage": 3.4 }, "extra_state_attributes": [ "battery_quantity", "battery_size", "battery_voltage" ] }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "ThermostatHVACAction", "translation_key": "hvac_action", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": null, "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": null }, "state": { "class_name": "ThermostatHVACAction", "available": true, "state": "heating" } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "PiHeatingDemand", "translation_key": "pi_heating_demand", "translation_placeholders": null, "device_class": null, "state_class": "measurement", "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": 0, "unit": "%" }, "state": { "class_name": "PiHeatingDemand", "available": true, "state": 31 } }, { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "sensor", "class_name": "SetpointChangeSourceTimestamp", "translation_key": "setpoint_change_source_timestamp", "translation_placeholders": null, "device_class": "timestamp", "state_class": null, "entity_category": "diagnostic", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "suggested_display_precision": null, "unit": null }, "state": { "class_name": "SetpointChangeSourceTimestamp", "available": true, "state": null } } ], "switch": [ { "info_object": { "fallback_name": "Open window detection", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "switch", "class_name": "ConfigurableAttributeSwitch", "translation_key": "window_detection", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "attribute_name": "detect_open_window", "invert_attribute_name": null, "force_inverted": false, "off_value": 0, "on_value": 1 }, "state": { "class_name": "ConfigurableAttributeSwitch", "available": true, "state": false, "inverted": false } }, { "info_object": { "fallback_name": "Summer Mode", "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "switch", "class_name": "ConfigurableAttributeSwitch", "translation_key": "summer_mode", "translation_placeholders": null, "device_class": null, "state_class": null, "entity_category": "config", "entity_registry_enabled_default": false, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "ThermostatClusterHandler", "generic_id": "cluster_handler_0x0201", "endpoint_id": 1, "cluster": { "id": 513, "name": "ThermostatCluster", "type": "server" }, "id": "1:0x0201", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": "local_temperature" } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "attribute_name": "season", "invert_attribute_name": null, "force_inverted": false, "off_value": 0, "on_value": 1 }, "state": { "class_name": "ConfigurableAttributeSwitch", "available": true, "state": false, "inverted": false } } ], "update": [ { "info_object": { "fallback_name": null, "unique_id": "**REDACTED**", "migrate_unique_ids": [], "platform": "update", "class_name": "FirmwareUpdateEntity", "translation_key": null, "translation_placeholders": null, "device_class": "firmware", "state_class": null, "entity_category": "config", "entity_registry_enabled_default": true, "enabled": true, "primary": false, "cluster_handlers": [ { "class_name": "OtaClientClusterHandler", "generic_id": "cluster_handler_0x0019_client", "endpoint_id": 1, "cluster": { "id": 25, "name": "Ota", "type": "client" }, "id": "1:0x0019_client", "unique_id": "**REDACTED**", "status": "INITIALIZED", "value_attribute": null } ], "device_ieee": "**REDACTED**", "endpoint_id": 1, "available": true, "group_id": null, "supported_features": 7 }, "state": { "class_name": "FirmwareUpdateEntity", "available": true, "installed_version": "0x01800460", "in_progress": false, "update_percentage": null, "latest_version": null, "release_summary": null, "release_notes": null, "release_url": null } } ] }, "neighbors": [], "routes": [] }, "issues": [] }Checklist
pre-commitchecks pass / the code has been formatted using Black