[Device Support Request] Danfoss Ally eTRV0100 - other features than just temperature and setpoint
Is your feature request related to a problem? Please describe. Currently, the Danfoss Ally integration supports a temperature sensor (what's the current temperature at the valve?) and a temperature control (setpoint).
Describe the solution you'd like According to https://zigbee.blakadder.com/Danfoss_014G2461.html the device supports
- % opening
- child lock
- external temperature sensor
- local temperature battery
- open window detection
- ota
- thermostat
...of which only "local temperature battery" (I suppose) and "thermostat" are currently supported in ZHA. The other parameters seem to be available by creating template sensors, but I believe these ought to be directly available.
EDIT: Also, the current implementation allows to change HVAC mode between "Heat" and "Off", which actually isn't supported by the device. So I believe this should be removed.
Device signature
{
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4678, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0301",
"in_clusters": [
"0x0000",
"0x0001",
"0x0003",
"0x000a",
"0x0020",
"0x0201",
"0x0204",
"0x0b05"
],
"out_clusters": [
"0x0000",
"0x0019"
]
}
},
"manufacturer": "Danfoss",
"model": "eTRV0100",
"class": "zhaquirks.danfoss.thermostat.DanfossThermostat"
}
Diagnostic information
{
"home_assistant": {
"installation_type": "Home Assistant OS",
"version": "2022.8.7",
"dev": false,
"hassio": true,
"virtualenv": false,
"python_version": "3.10.5",
"docker": true,
"arch": "aarch64",
"timezone": "Europe/Copenhagen",
"os_name": "Linux",
"os_version": "5.15.32-v8",
"supervisor": "2022.08.5",
"host_os": "Home Assistant OS 8.5",
"docker_version": "20.10.14",
"chassis": "embedded",
"run_as_root": true
},
"custom_components": {
"hacs": {
"version": "1.26.2",
"requirements": [
"aiogithubapi>=22.2.4"
]
},
"danfoss_ally": {
"version": "v1.0.7",
"requirements": [
"pydanfossally==0.0.26"
]
}
},
"integration_manifest": {
"domain": "zha",
"name": "Zigbee Home Automation",
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/zha",
"requirements": [
"bellows==0.33.1",
"pyserial==3.5",
"pyserial-asyncio==0.6",
"zha-quirks==0.0.78",
"zigpy-deconz==0.18.0",
"zigpy==0.50.2",
"zigpy-xbee==0.15.0",
"zigpy-zigate==0.9.2",
"zigpy-znp==0.8.2"
],
"usb": [
{
"vid": "10C4",
"pid": "EA60",
"description": "*2652*",
"known_devices": [
"slae.sh cc2652rb stick"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*sonoff*plus*",
"known_devices": [
"sonoff zigbee dongle plus"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*tubeszb*",
"known_devices": [
"TubesZB Coordinator"
]
},
{
"vid": "1A86",
"pid": "7523",
"description": "*tubeszb*",
"known_devices": [
"TubesZB Coordinator"
]
},
{
"vid": "1A86",
"pid": "7523",
"description": "*zigstar*",
"known_devices": [
"ZigStar Coordinators"
]
},
{
"vid": "1CF1",
"pid": "0030",
"description": "*conbee*",
"known_devices": [
"Conbee II"
]
},
{
"vid": "10C4",
"pid": "8A2A",
"description": "*zigbee*",
"known_devices": [
"Nortek HUSBZB-1"
]
},
{
"vid": "0403",
"pid": "6015",
"description": "*zigate*",
"known_devices": [
"ZiGate+"
]
},
{
"vid": "10C4",
"pid": "EA60",
"description": "*zigate*",
"known_devices": [
"ZiGate"
]
},
{
"vid": "10C4",
"pid": "8B34",
"description": "*bv 2010/10*",
"known_devices": [
"Bitron Video AV2010/10"
]
}
],
"codeowners": [
"@dmulcahey",
"@adminiuga",
"@puddly"
],
"zeroconf": [
{
"type": "_esphomelib._tcp.local.",
"name": "tube*"
},
{
"type": "_zigate-zigbee-gateway._tcp.local.",
"name": "*zigate*"
}
],
"after_dependencies": [
"onboarding",
"usb",
"zeroconf"
],
"iot_class": "local_polling",
"loggers": [
"aiosqlite",
"bellows",
"crccheck",
"pure_pcapy3",
"zhaquirks",
"zigpy",
"zigpy_deconz",
"zigpy_xbee",
"zigpy_zigate",
"zigpy_znp"
],
"is_built_in": true
},
"data": {
"ieee": "**REDACTED**",
"nwk": 49386,
"manufacturer": "Danfoss",
"model": "eTRV0100",
"name": "Danfoss eTRV0100",
"quirk_applied": true,
"quirk_class": "zhaquirks.danfoss.thermostat.DanfossThermostat",
"manufacturer_code": 4678,
"power_source": "Battery or Unknown",
"lqi": 33,
"rssi": null,
"last_seen": "2022-08-30T23:01:51",
"available": true,
"device_type": "EndDevice",
"signature": {
"node_descriptor": "NodeDescriptor(logical_type=<LogicalType.EndDevice: 2>, complex_descriptor_available=0, user_descriptor_available=0, reserved=0, aps_flags=0, frequency_band=<FrequencyBand.Freq2400MHz: 8>, mac_capability_flags=<MACCapabilityFlags.AllocateAddress: 128>, manufacturer_code=4678, maximum_buffer_size=82, maximum_incoming_transfer_size=82, server_mask=11264, maximum_outgoing_transfer_size=82, descriptor_capability_field=<DescriptorCapability.NONE: 0>, *allocate_address=True, *is_alternate_pan_coordinator=False, *is_coordinator=False, *is_end_device=True, *is_full_function_device=False, *is_mains_powered=False, *is_receiver_on_when_idle=False, *is_router=False, *is_security_capable=False)",
"endpoints": {
"1": {
"profile_id": 260,
"device_type": "0x0301",
"in_clusters": [
"0x0000",
"0x0001",
"0x0003",
"0x000a",
"0x0020",
"0x0201",
"0x0204",
"0x0b05"
],
"out_clusters": [
"0x0000",
"0x0019"
]
}
}
},
"active_coordinator": false,
"entities": [
{
"entity_id": "button.danfoss_etrv0100_identifybutton",
"name": "Danfoss eTRV0100"
},
{
"entity_id": "climate.danfoss_etrv0100_thermostat",
"name": "Danfoss eTRV0100"
},
{
"entity_id": "sensor.danfoss_etrv0100_battery",
"name": "Danfoss eTRV0100"
},
{
"entity_id": "sensor.danfoss_etrv0100_thermostathvacaction",
"name": "Danfoss eTRV0100"
}
],
"neighbors": [],
"endpoint_names": [
{
"name": "THERMOSTAT"
}
],
"user_given_name": null,
"device_reg_id": "c74d0b34d3812a6db3b087d4600c2337",
"area_id": "badevaerelse_1_sal",
"cluster_details": {
"1": {
"device_type": {
"name": "THERMOSTAT",
"id": 769
},
"profile_id": 260,
"in_clusters": {
"0x0000": {
"endpoint_attribute": "basic",
"attributes": {
"0x0004": {
"attribute_name": "manufacturer",
"value": "Danfoss"
},
"0x0005": {
"attribute_name": "model",
"value": "eTRV0100"
}
},
"unsupported_attributes": {}
},
"0x0001": {
"endpoint_attribute": "power",
"attributes": {
"0x0020": {
"attribute_name": "battery_voltage",
"value": 32
},
"0x0021": {
"attribute_name": "battery_percentage_remaining",
"value": 192
}
},
"unsupported_attributes": {
"0x0031": {
"attribute_name": "battery_size"
},
"0x0033": {
"attribute_name": "battery_quantity"
}
}
},
"0x0003": {
"endpoint_attribute": "identify",
"attributes": {},
"unsupported_attributes": {}
},
"0x000a": {
"endpoint_attribute": "time",
"attributes": {},
"unsupported_attributes": {}
},
"0x0020": {
"endpoint_attribute": "poll_control",
"attributes": {
"0x0000": {
"attribute_name": "checkin_interval",
"value": 13200
}
},
"unsupported_attributes": {}
},
"0x0201": {
"endpoint_attribute": "thermostat",
"attributes": {
"0x0000": {
"attribute_name": "local_temperature",
"value": 2342
},
"0x0003": {
"attribute_name": "abs_min_heat_setpoint_limit",
"value": 500
},
"0x0004": {
"attribute_name": "abs_max_heat_setpoint_limit",
"value": 3500
},
"0x0008": {
"attribute_name": "pi_heating_demand",
"value": 0
},
"0x0012": {
"attribute_name": "occupied_heating_setpoint",
"value": 500
},
"0x0015": {
"attribute_name": "min_heat_setpoint_limit",
"value": 500
},
"0x0016": {
"attribute_name": "max_heat_setpoint_limit",
"value": 3500
},
"0x001b": {
"attribute_name": "ctrl_sequence_of_oper",
"value": 2
},
"0x001c": {
"attribute_name": "system_mode",
"value": 4
},
"0x0030": {
"attribute_name": "setpoint_change_source",
"value": 2
},
"0x4000": {
"attribute_name": "etrv_open_windows_detection",
"value": 0
},
"0x4031": {
"attribute_name": "heat_supply_request",
"value": 0
},
"0x404a": {
"attribute_name": "load_estimate_radiator",
"value": -1
},
"0x404d": {
"attribute_name": "adaptation_run_status",
"value": 0
}
},
"unsupported_attributes": {
"0x0002": {
"attribute_name": "occupancy"
},
"0x0005": {
"attribute_name": "abs_min_cool_setpoint_limit"
},
"0x0029": {
"attribute_name": "running_state"
},
"0x0007": {
"attribute_name": "pi_cooling_demand"
},
"0x0006": {
"attribute_name": "abs_max_cool_setpoint_limit"
},
"0x001e": {
"attribute_name": "running_mode"
},
"0x0011": {
"attribute_name": "occupied_cooling_setpoint"
},
"0x0013": {
"attribute_name": "unoccupied_cooling_setpoint"
},
"0x0014": {
"attribute_name": "unoccupied_heating_setpoint"
},
"0x0017": {
"attribute_name": "min_cool_setpoint_limit"
},
"0x0018": {
"attribute_name": "max_cool_setpoint_limit"
}
}
},
"0x0204": {
"endpoint_attribute": "thermostat_ui",
"attributes": {},
"unsupported_attributes": {}
},
"0x0b05": {
"endpoint_attribute": "diagnostic",
"attributes": {},
"unsupported_attributes": {}
}
},
"out_clusters": {
"0x0000": {
"endpoint_attribute": "basic",
"attributes": {},
"unsupported_attributes": {}
},
"0x0019": {
"endpoint_attribute": "ota",
"attributes": {},
"unsupported_attributes": {}
}
}
}
}
}
}
Additional logs
Paste any additional debug logs here.
Don't remove the extra line breaks outside the ``` marks.
N/A
Additional context
This is the device view. As can be seen, many of the supported parameters are not shown.

Would it be possible to map the non-functional "off" state to the lowest possible temperature instead?
That certainly sounds like a good idea.
If anyone would be interested in implementing these changes, here is the documentation. https://assets.danfoss.com/documents/202524/AU417130778872en-000101.pdf
I have implemented all attributes mentioned in the documentation and have opened pull requests in the relevant repositories: https://github.com/home-assistant/core/pull/86907 https://github.com/zigpy/zha-device-handlers/pull/2150 Note that just installing the quirk is not enough to get entities in home assistant.
There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.
#2150 is still not merged. I was testing #2150 over the winter by patching it into my HA instance together with https://github.com/home-assistant/core/pull/86907, and it seemed to work well.
There hasn't been any activity on this issue recently. Due to the high number of incoming GitHub notifications, we have to clean some of the old issues, as many of them have already been resolved with the latest updates. Please make sure to update to the latest version and check if that solves the issue. Let us know if that works for you by adding a comment 👍 This issue has now been marked as stale and will be closed if no further activity occurs. Thank you for your contributions.
Due to this issue, I switched from ZHA to Zigbee2MQTT a long time ago. If this has since been remedied in ZHA, please feel free to close this issue...
Still valid.