Open JohnConnett opened 9 months ago
Had a closer look at the file pics/HA_clusters.xml
in the Compliance Document. I assume that the entries that end with TRUE</attribute>
are the attributes supported by the Icon2.
Wrote this Python program to dig them out:
import json
file=open("pics/HA_clusters.xml","r")
xml_string=file.read()
python_dict=xmltodict.parse(xml_string)
homeAutomationPICs = python_dict['homeAutomationPICs']
cluster = homeAutomationPICs['cluster']
for item in cluster:
print(item['name'])
for attribute in item['attribute']:
if attribute['#text'] == 'TRUE':
print(f" name=\"{attribute['@name']}\", code={attribute['@code']}, {attribute['#text']}")
for attribute in item['attribute']:
if attribute['#text'] == 'FALSE':
print(f" name=\"{attribute['@name']}\", code={attribute['@code']}, {attribute['#text']}")
file.close()
This was the output:
Relative Humidity Measurement
name="measured value", code=0x0000, TRUE
name="min measured value", code=0x0001, TRUE
name="max measured value", code=0x0002, TRUE
name="tolerance", code=0x0003, TRUE
Thermostat
name="local temperature", code=0x0000, TRUE
name="occupied heating setpoint", code=0x0012, TRUE
name="min heat setpoint limit", code=0x0015, TRUE
name="max heat setpoint limit", code=0x0016, TRUE
name="control sequence of operation", code=0x001B, TRUE
name="system mode", code=0x001C, TRUE
name="outdoor temperature", code=0x0001, FALSE
name="occupancy", code=0x0002, FALSE
name="abs min heat setpoint limit", code=0x0003, FALSE
name="abs max heat setpoint limit", code=0x0004, FALSE
name="abs min cool setpoint limit", code=0x0005, FALSE
name="abs max cool setpoint limit", code=0x0006, FALSE
name="pi cooling demand", code=0x0007, FALSE
name="pi heating demand", code=0x0008, FALSE
name="HVAC system type configuration", code=0x0009, FALSE
name="local temperature calibration", code=0x0010, FALSE
name="occupied cooling setpoint", code=0x0011, FALSE
name="unoccupied cooling setpoint", code=0x0013, FALSE
name="unoccupied heating setpoint", code=0x0014, FALSE
name="min cool setpoint limit", code=0x0017, FALSE
name="max cool setpoint limit", code=0x0018, FALSE
name="min setpoint dead band", code=0x0019, FALSE
name="remote sensing", code=0x001A, FALSE
name="alarm mask", code=0x001D, FALSE
name="thermostat running mode", code=0x001E, FALSE
name="start of week", code=0x0020, FALSE
name="number of weekly transitions", code=0x0021, FALSE
name="number of daily transitions", code=0x0022, FALSE
name="temperature setpoint hold", code=0x0023, FALSE
name="temperature setpoint hold duration", code=0x0024, FALSE
name="thermostat programming operation mode", code=0x0025, FALSE
name="hvac relay state", code=0x0029, FALSE
name="setpoint change source", code=0x0030, FALSE
name="setpoint change amount", code=0x0031, FALSE
name="setpoint change source timestamp", code=0x0032, FALSE
name="occupied setback", code=0x0034, FALSE
name="occupied setback min", code=0x0035, FALSE
name="occupied setback max", code=0x0036, FALSE
name="unoccupied setback", code=0x0037, FALSE
name="unoccupied setback min", code=0x0038, FALSE
name="unoccupied setback max", code=0x0039, FALSE
name="emergency heat delta", code=0x003A, FALSE
name="ac type", code=0x0040, FALSE
name="ac capacity", code=0x0041, FALSE
name="ac refrigerant type", code=0x0042, FALSE
name="ac compressor", code=0x0043, FALSE
name="ac error code", code=0x0044, FALSE
name="ac louver position", code=0x0045, FALSE
name="ac coil temperature", code=0x0046, FALSE
name="ac capacity format", code=0x0047, FALSE
Note that "hvac relay state", code=0x0029 is FALSE. This would seem to correspond with this line:
runningState: { ID: 41, type: dataType_1.default.bitmap16 },
from node_modules/zigbee-herdsman/dist/zcl/definition/cluster.js
.
This might be the 'UNSUPPORTED_ATTRIBUTE' that is causing the failure.
Looking at the database entry inClusterList
and outClusterList
:
"inClusterList":[0,1,3,32,513,516,1026,1029,2821]
ID: 0 genBasic
ID: 1 genPowerCfg
ID: 3 genIdentify
ID: 32 genPollCtrl
ID: 513 hvacThermostat
ID: 516 hvacUserInterfaceCfg
ID: 1026 msTemperatureMeasurement
ID: 1029 msRelativeHumidity
ID: 2821 haDiagnostic
"outClusterList":[3,25]
ID: 3 genIdentify
ID: 25 genOta
Should more of these clusters appear in the bind
? Currently it just has genPowerCfg
and hvacThermostat
.
For reference, the Home Assistant SkyConnect is running Zigbee (EZSP) 7.3.2.0 build 212 (with SDK 4.3.2).
Hi @JohnConnett Thanks for reviving this earlier issue.
I also still do not have them supported in Zigbee2MQTT. hope there is someone who can help out in this last piece?
I will take another look when time allows. My house has nine Danfoss 014G2461 Ally radiator valves. I'm interested in using Icon2 Room Sensors with a few of them. Given that they share the same heritage it is possible I will learn something useful from looking at the radiator valve code.
I will take another look when time allows. My house has nine Danfoss 014G2461 Ally radiator valves. I'm interested in using Icon2 Room Sensors with a few of them. Given that they share the same heritage it is possible I will learn something useful from looking at the radiator valve code.
I hope so, my knowledge about this backend things is zero. So i am sorry i cannot help with this. I have 12 pieces of the ally thermostats in my home. These are working great.
About the reports of the icon2 thermostat. It is creating an error in the logs. But is it reporting the right temp? And setpoint to HA? And can you change the setpoint or are these things not possible due to errors?
Also the Humidy is not reporting in my HAos system.
All the other things seems to work, execept the configuration errors
Decided to try a different approach. Working from Support new devices. Here is my current external converter:
jrc@topaz:~$ cat /opt/zigbee2mqtt/data/088U2121.js
const {batteryPercentage, temperature, humidity, identify} = require('zigbee-herdsman-converters/lib/modernExtend');
const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const extend = require('zigbee-herdsman-converters/lib/extend');
const ota = require('zigbee-herdsman-converters/lib/ota');
const utils = require('zigbee-herdsman-converters/lib/utils');
const globalStore = require('zigbee-herdsman-converters/lib/store');
const e = exposes.presets;
const ea = exposes.access;
const definition = {
zigbeeModel: ['0x8040'],
model: '0x8040',
vendor: 'Danfoss',
description: 'Icon2™ RT Room Thermostat',
extend: [batteryPercentage(), temperature(), humidity(), identify()],
fromZigbee: [fz.linkquality_from_basic, fz.power_source, fz.battery, ifz.identify, fz.checkin_presence, fz.danfoss_thermostat, fz.hvac_user_interface, fz.temperature, fz.humidity, fz.danfoss_icon_regulator],
toZigbee: [],
exposes: [e.battery(), e.temperature(), e.humidity()],
};
module.exports = definition;
jrc@topaz:~$
For the fromZigbee:
I took the "inClusterList":
from the database entry and looked in zigbee-herdsman-converters/src/converters/fromZigbee.ts
for items that appeared to match. If there was a Danfoss specific item I chose that in preference to the standard one as follows:
0 0x0000 genBasic fz.linkquality_from_basic
fz.power_source
1 0x0001 genPowerCfg fz.battery
3 0x0003 genIdentify fz.identify
32 0x0020 genPollCtrl fz.checkin_presence
513 0x0201 hvacThermostat fz.danfoss_thermostat
516 0x0204 hvacUserInterfaceCfg fz.hvac_user_interface
1026 0x0402 msTemperatureMeasurement fz.temperature
1029 0x0405 msRelativeHumidity fz.humidity
2821 0x0B05 haDiagnostic fz.danfoss_icon_regulator
No errors in the log. Haven't tried using MQTT to get anything other than battery
, temperature
and humidity
which can be requested through the exposes page of the web UI.
The regular published messages are of the form:
info 2024-01-14 12:44:47: MQTT publish: topic 'zigbee2mqtt/0x8cf681fffe824a00', payload '{"battery":75,"humidity":30,"linkquality":255,"temperature":-327.68}'
battery
, humidity
and linkquality
look reasonable (humidity
matches the value on the display). However, temperature
is wildly wrong (below absolute zero!).
Would appreciate any comments on this approach!
Next steps are to understand why the temperature
is wrong and to add the toZigbee:
entries.
Not clear what should happen for the exposes:
and configure:
entries.
Was looking at this Danfoss Ally eTRV0100 - other features than just temperature and setpoint under zigpy / zha-device-handlers where a comment from stachjankowski has a link to Feature Catalogue Ally™ electronic Radiator Thermostat (eTRV).
A quick glance at the document suggests that it provides a theory-of-operation for the eTRV0100. If the equivalent was available for the Icon2 Room Sensor it would be extremely useful! I will try asking Danfoss if one exists.
For comparison, here is what Zigbee Home Automation: SkyConnect v1.0 reports from Home Assistant:
Device info 0x8040 by Danfoss Firmware: 0x0000010c IEEE: 8c:f6:81:ff:fe:82:4a:00 Nwk: 0xc938 Device Type: EndDevice LQI: 255 RSSI: -33 Last seen: 2024-01-15T16:33:34 Power source: Battery or Unknown Controls Thermostat Heat 21 °C Currently: 24.2 °C Sensors Humidity 26.0% HVAC action Unknown Temperature -327.7 °C Diagnostic Battery 100% Identity PRESS LQI RSSI Logbook January 15, 2024 Danfoss 0x8040 Identify changed to January 15, 2024 at 4:20 PM triggered by service Button: Press 4:20:48 PM - 25 minutes ago - John Connett
Note that the Thermostat temperature is correct (24.2 °C) but the Sensors temperature is wrong (-327.7 °C) much as with zigbee2mqtt.
Is this -327,7 not a value which is calculated to Currently: 24.2 °C ??
I will send this report to a co-worker ( i am working at Danfoss Netherlands, for another productline ).
Is this -327,7 not a value which is calculated to Currently: 24.2 °C ??
My best guess is that there are two temperatures reported, one from the hvacThermostat cluster and another from the msTemperatureMeasurement cluster. Seems likely that they both result from the same physical sensor within the device.
I note that -327.68 is -(2^15 / 100). I have not seen any other values. Might be significant?
I will send this report to a co-worker ( i am working at Danfoss Netherlands, for another productline ).
I have asked Danfoss about more documentation (case number 14816049). Will see what results.
Longer term, I'm not sure if I will be using zigbee2mqtt or ZHA with Home Assistant. I will also look into getting this device fully supported under ZHA.
Just had a small dicussion with my co-worker about this.
this is reporting out of the Icon2 sensor
"battery": 81,
"humidity": 54,
"linkquality": 87,
"local_temperature": 20.3,
"max_heat_setpoint_limit": 35,
"min_heat_setpoint_limit": 4,
"occupied_heating_setpoint": 16.5,
"temperature": -327.68,
"running_state": null,
"system_mode": "heat"
and this the ally
adaptation_run_control": "none",
"adaptation_run_settings": true,
"adaptation_run_status": "none",
"algorithm_scale_factor": 10,
"battery": 52,
"day_of_week": "tuesday",
"external_measured_room_sensor": -8000,
"heat_available": true,
"heat_required": true,
"keypad_lockout": "lock1",
"linkquality": 87,
"load_balancing_enable": true,
"load_estimate": -1,
"load_room_mean": -8000,
"local_temperature": 16.96,
"mounted_mode_active": false,
"mounted_mode_control": false,
"occupied_heating_setpoint": 19.5,
"occupied_heating_setpoint_scheduled": 19.5,
"pi_heating_demand": 100,
"preheat_status": false,
"radiator_covered": false,
"running_state": "heat",
"setpoint_change_source": "externally",
"system_mode": "heat",
"trigger_time": 660,
"update": {
"installed_version": 276,
"latest_version": 284,
"state": "available"
},
"window_open_external": false,
"window_open_feature": true,
"window_open_internal": "closed"
our guess is at the moment the "temperature": -327.68," is a fault error due to the missing link to external room sensor.
this is also with the ally "load_room_mean": -8000,"
Danfoss has also a roomsensor which can be coupled to an ally, but not jet to a Icon2 sensor. Maby the software is prepared for this.
The Danfoss gateway is not able to see the -327 temp also.
So it seems like an future function
I have raised a companion issue: Danfoss Icon2 Room Sensor (088U2121) #2914.
This appears in the Diagnostic information section:
"0x0402": {
"endpoint_attribute": "temperature",
"attributes": {
"0x0000": {
"attribute_name": "measured_value",
"value": -32768
}
},
"unsupported_attributes": {}
},
According to the Cluster Library Specification Document 07-5123 Revision 8 in section 4.4.2.2.1 MeasuredValue Attribute: A MeasuredValue of 0x8000 indicates that the temperature measurement is unknown.
So it appears to be a valid response when the temperature measurement is unknown. Perhaps there should be a test for that specific value rather than reporting -327.68 °C?
Danfoss has also a roomsensor which can be coupled to an ally, but not jet to a Icon2 sensor. Maby the software is prepared for this.
The Danfoss Ally™ Room Sensor (014G2480)? I suspect it is a badge-engineered version of the TuYa TS0201.
See Danfoss Ally Room Thermostat has wrong picture, vendor, model and description .
Danfoss has also a roomsensor which can be coupled to an ally, but not jet to a Icon2 sensor. Maby the software is prepared for this.
The Danfoss Ally™ Room Sensor (014G2480)? I suspect it is a badge-engineered version of the TuYa TS0201.
See Danfoss Ally Room Thermostat has wrong picture, vendor, model and description .
Yes thats the one. Seems to be a rebranded product indeed.
Danfoss had this product to have a good temp of the room when the radiator is covered. And this was before the icon 2 was there.
I was wondering if the Danfoss Icon2™ Featured Room Thermostat (088U2122) which has an infrared floor sensor reports that temperature using the msTemperatureMeasurement cluster?
It would make sense that the non-Featured variant would report the temperature as unknown.
I have asked Danfoss about more documentation (case number 14816049). Will see what results.
Received a reply: Sorry no. We cannot answer questions regarding API’s, developing or 3. Party apps/systems. Customers has to go to developer.danfoss.com, create an account, and place his question there.
Followed this advice and under the heading Support found: Questions or problems? Please check out our FAQ page for the answers to frequently asked questions about the Danfoss developer portal. For questions regarding specific APIs, please refer to the contacts listed on the API page.
As the answer isn't on the FAQ page and the question isn't regarding a specific API I seem to have arrived at a dead end.
I was wondering if the Danfoss Icon2™ Featured Room Thermostat (088U2122) which has an infrared floor sensor reports that temperature using the msTemperatureMeasurement cluster?
It would make sense that the non-Featured variant would report the temperature as unknown.
Hi,
I have also been doing some development on this same topic.
And i can confirm that: "local_temperature": 20.3 = The temperature of the sensor "temperature": -327.68 = The external temperature, ie. the infrared for the featured or then the external sensor for the 24V thermostat. And when no external sensor is connected or the thermostat doesnt support it it will report -327
Hi everyone. I just bought the icon2 controller and thermostat. Is it possible to pair them with z2m? Or any other way to make them visible to homeassistant? I have seen a long trail of issues but I could not understand the status.
I am happy to help and contribute.
I only have the Icon2™ RT 088U2121 wireless thermostat. Basic support for this (and probably its close wireless relatives) is possible. Only features not yet available are the Danfoss manufacturer specific options which will require information from Danfoss. They have provided similar detailed information for their Ally™ Radiator Thermostats so it's probably a case of finding the right person to ask. These are Zigbee devices and should work with Zigbee2MQTT or ZHA using any Home Assistant supported coordinator.
I don't have an Icon2™ Controller. However, I think it operates as the Zigbee coordinator for the wireless thermostats. For a LAN connection I think an Ally™ Gateway is required so a Danfoss API would be the route to a Home Assistant Integration. Not among the community integrations but there is Danfoss Ally in HACS. Hope that helps.
Dont bother with the Ally Gateway. The Icon2 can join Z2M directly. there is another thread for it 🙃
Dont bother with the Ally Gateway. The Icon2 can join Z2M directly. there is another thread for it 🙃
Sorry for the confusion. The Ally™ Gateway is mentioned after 3:38 in Installation guide - Icon2™ floor heating system and after 12:24 in Danfoss Icon2 Review underfloor heating cooling control system.
The second video mentions that the Icon2™ Main Controller has two connectors for optional external antennas, one for Icon2™ Wireless Room Thermostats and the other for an Ally™ Gateway. My guess is that it can support two Zigbee networks: one as coordinator for the room thermostats; and the other as an end device to an Ally™ Gateway, Zigbee2MQTT or ZHA. The second video also mentions that an Ally™ Gateway can control multiple Icon2™ Main Controllers which implies to me that they can act as end devices.
Couldn't find any mention of Icon2™ Main Controller being supported in Zigbee2MQTT Supported Devices; ZHA Device Handlers or Zigbee Device Compatibility Repository.
Again, apologies for the confusion. It would be interesting to know what information the Icon2™ Main Controller makes available as a Zigbee end device. However, that is drifting off topic for this thread.
Sorry for the confusion. The Ally™ Gateway
Again, apologies for the confusion. It would be interesting to know what information the Icon2™ Main Controller makes available as a Zigbee end device. However, that is drifting off topic for this thread.
So there is another thread, or a couple actually regarding support for the Icon2 system. Now at the computer i got the link: https://github.com/Koenkk/zigbee2mqtt/discussions/19982#discussioncomment-8178764
So you would need a Z2M coordinator, i suppose you have one? The Ally Gateway is used for the App and Danfoss AllyPro Web UI, but even it doesnt support everything. For example Humidity data is now shown on the Web.
At the moment we are experimenting on the Z2M integration using custom integration. Jump to the other discussion to find out more.
So there is another thread, or a couple actually regarding support for the Icon2 system. Now at the computer i got the link: #19982 (reply in thread)
Thanks for the link. It would be useful to raise a New device support issue for the Icon2™ Main Controller so that it is easier for others to find.
The information on install codes may be useful for another of my projects: Philips Hue Secure Floodlight Camera EU.
So you would need a Z2M coordinator, i suppose you have one?
I have three: Electrolama zzh Multiprotocol RF Stick; Home Assistant SkyConnect; nRF52840 Dongle. The zzh is live, the SkyConnect is for testing and the nRF52840 Dongle is currently configured as a Zigbee sniffer. Four if you count my Hue Bridge, v2.1 (I haven't tried rooting it).
The Ally Gateway is used for the App and Danfoss AllyPro Web UI, but even it doesnt support everything. For example Humidity data is now shown on the Web.
I suppose it might be possible to learn something about the Danfoss manufacturer specific options by observing what is available via the Ally™ Gateway?
I have recommissioned my Icon2™ RT 088U2121 to Home Assistant / Zigbee2MQTT. No external converter. It is now recognised as supported. However, the Model is Icon and the picture is of a framed Icon thermostat.
However, there now appear to be 15 of them, labelled L1 through L15, as if it is an Icon2™ Main Controller!
I have recommissioned my Icon2™ RT 088U2121 to Home Assistant / Zigbee2MQTT. No external converter. It is now recognised as supported. However, the Model is Icon and the picture is of a framed Icon thermostat.
However, there now appear to be 15 of them, labelled L1 through L15, as if it is an Icon2™ Main Controller!
So it is not recognized as: Zigbee Model 0x0210?
So it is not recognized as: Zigbee Model 0x0210?
It is Zigbee Model 0x8040. This is a line from the log:
info 2024-03-25 14:54:34: Icon2_Room_Sensor (0x8cf681fffe824a00): Icon - Danfoss Icon floor heating (regulator, Zigbee module & thermostats) (EndDevice)
I have generated a picture for the Icon2™ Room Sensor using the following:
$ # Grab the picture
$ curl https://www.danfoss.com/media/hy5fgdkz/danfoss-icon2-rt-fo-21-degrees-1120x747.jpg --output temp.jpg
$ # Use https://new.express.adobe.com/tools/remove-background
$ # Crop to square
$ convert temp.png -crop 2668x2668+666+0 +repage temp2.png
$ # Resize
$ convert temp2.png -resize 512x512 088U2121.png
$
It is rather flat! I was unable to find a high quality slightly turned clockwise image similar to public/images/devices/Icon.png
. Haven't submitted it as it is uncertain what filename would be used. Please feel free to use it or replace it with something better.
Link
https://assets.danfoss.com/documents/354092/AI380762595805en-010301.pdf
Database entry
{"id":2,"type":"EndDevice","ieeeAddr":"0x8cf681fffe824a00","nwkAddr":26671,"manufId":4678,"manufName":"Danfoss","powerSource":"Battery","modelId":"0x8040","epList":[1],"endpoints":{"1":{"profId":260,"epId":1,"devId":769,"inClusterList":[0,1,3,32,513,516,1026,1029,2821],"outClusterList":[3,25],"clusters":{"genBasic":{"attributes":{"modelId":"0x8040","manufacturerName":"Danfoss","powerSource":3,"zclVersion":8,"appVersion":12,"stackVersion":9,"hwVersion":1,"dateCode":"YYYYMMDD","swBuildId":"01.12\u0000"}},"genPollCtrl":{"attributes":{"checkinInterval":14400}},"hvacThermostat":{"attributes":{"localTemp":2156,"danfossRoomStatusCode":0}},"genPowerCfg":{"attributes":{"batteryPercentageRemaining":162}}},"binds":[{"cluster":32,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe0a8ce9","endpointID":1},{"cluster":1,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe0a8ce9","endpointID":1},{"cluster":513,"type":"endpoint","deviceIeeeAddress":"0xe0798dfffe0a8ce9","endpointID":1}],"configuredReportings":[{"cluster":513,"attrId":0,"minRepIntval":0,"maxRepIntval":3600,"repChange":10,"manufacturerCode":null}],"meta":{}}},"appVersion":12,"stackVersion":9,"hwVersion":1,"dateCode":"YYYYMMDD","swBuildId":"01.12\u0000","zclVersion":8,"interviewCompleted":true,"meta":{},"lastSeen":1702631450006,"defaultSendRequestWhen":"active","checkinInterval":3600}
Comments
This is a revival of #17958.
I have set up a standalone installation using just a Home Assistant SkyConnect and a single Icon2. The external converter (attached) is almost identical to that provided by Koenkk in the Jun 17 comment of #17958.
This appears to have been partially successful. The About entry is as follows:
The log contains messages like:
and
Which is promising.
However, the log also contains:
How can I identify the 'UNSUPPORTED_ATTRIBUTE' that is causing the failure?
I am keen for this device to be fully supported. Unfortunately, I am not yet fluent in TypeScript or the finer details of Zigbee devices.
Is there a way to query a Zigbee device to obtain a full set of its attributes?
Can anything useful be obtained from the Compliance Document in the entry for the Danfoss Icon2 Room Thermostat on the CSA website?
I am happy to provide further information and to test any suggested changes on the same configuration.
External converter
Supported color modes
No response
Color temperature range
No response