dresden-elektronik / deconz-rest-plugin

deCONZ REST-API plugin to control ZigBee devices
BSD 3-Clause "New" or "Revised" License
1.89k stars 496 forks source link

Stelpro Maestro(TM) SMT402AD Thermostat #5502

Closed nicksterz closed 2 years ago

nicksterz commented 2 years ago

Device

Screenshots

image

Basic

image

Identify

image

Thermostat

image image image image image image image image image

Thermostat User Interface Configuration

image

Groups

image image

Relative humidity measurement

image

Mimiix commented 2 years ago

Can you please also forum post?

nicksterz commented 2 years ago

Done, sorry.

github-actions[bot] commented 2 years ago

As there has not been any response in 21 days, this issue has been automatically marked as stale. At OP: Please either close this issue or keep it active It will be closed in 7 days if no further activity occurs.

nicksterz commented 2 years ago

keep active

github-actions[bot] commented 2 years ago

As there has not been any response in 21 days, this issue has been automatically marked as stale. At OP: Please either close this issue or keep it active It will be closed in 7 days if no further activity occurs.

nicksterz commented 2 years ago

Bump

github-actions[bot] commented 2 years ago

As there has not been any response in 21 days, this issue has been automatically marked as stale. At OP: Please either close this issue or keep it active It will be closed in 7 days if no further activity occurs.

nicksterz commented 2 years ago

:(

github-actions[bot] commented 2 years ago

As there has not been any response in 21 days, this issue has been automatically marked as stale. At OP: Please either close this issue or keep it active It will be closed in 7 days if no further activity occurs.

github-actions[bot] commented 2 years ago

As there has not been any response in 28 days, this issue will be closed. @ OP: If this issue is solved post what fixed it for you. If it is not solved, request to get this opened again.

BabaIsYou commented 2 years ago

Wanted to buy this thermostat soon. Is it supported ? Just add DDF is sufficient ?

SwoopX commented 2 years ago

It's not supported, but creating a DDF for it is sufficient to make it work with the common/generic thermostat capabilities. If there's anything very specific to the device (which I don't see here) that might be a bit more challenging.

BabaIsYou commented 2 years ago

Hi. Seems difficult to have full support of Sinope and Stelpro thermostats even if they are two of the leaders in 240V baseboard smart thermostats domain in North America. At around 100 bucks each, that's not a cheap try. Those more or less fully supported are already discontinued by manufacturer (that's North American market ! ;-)

Hope DDF will permit soon native writing on specific attributs/cluster like recently for Tuya.

BabaIsYou commented 2 years ago

Device Description File. The still in progress future for deConz support of new devices using json in place of code.

Le 26 mars 2022 à 16:58, Nick @.***> a écrit :



I renewed this a bunch of times and let it go dead. What is DDF?

— Reply to this email directly, view it on GitHubhttps://github.com/dresden-elektronik/deconz-rest-plugin/issues/5502#issuecomment-1079773441, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AUKZIKJTFQBTVAWLN4MSCX3VB525VANCNFSM5IOH5JJA. You are receiving this because you commented.Message ID: @.***>

nicksterz commented 2 years ago

Device Description File. The still in progress future for deConz support of new devices using json in place of code. Le 26 mars 2022 à 16:58, Nick @.> a écrit :  I renewed this a bunch of times and let it go dead. What is DDF? — Reply to this email directly, view it on GitHub<#5502 (comment)>, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AUKZIKJTFQBTVAWLN4MSCX3VB525VANCNFSM5IOH5JJA. You are receiving this because you commented.Message ID: @.>

Apologies @BabaIsYou I have a novice level of expertise hence my device request. I have since noticed the DDF editor thanks to you and have been trying to make sense of it.

nicksterz commented 2 years ago

@BabaIsYou I can report that I am able to at the very least set temperature and view temperature/humidity.

image

Can't get the humidity sensor to pass through to HA:

image

And I need to see an example DDF for a thermostat if I'm going to stand any chance of figuring out MODES and ON/OFF. As @SwoopX stated it is probably sufficient for people who know what they are doing lol

nicksterz commented 2 years ago

Despite figuring that out as well, it appears as though mode selection doesn't turn off thermostat. As much as I now can turn it off in HA, if the requested temperature is higher than actual it will still stay on. This leads me to believe that mode selection doesn't actually do anything. As my thermostat is in the garage I need to physically turn off the breaker in winter as the temperature drops below device minimum of 5C. Regret my purchase

BabaIsYou commented 2 years ago

It could be easier with an template of DDF. The other smart thermostats I use Z-Wave instead of Zigbee and the other one is partially supported to but the off function is working (it’s from Sinope).

I’m quite sure this Stelpro one is a good thermostat too and other plateform seems to be able to integrate it, but I don’t know if it’s partially or not.

If you can read the actual temp in HA may be you can send an off command to the thermostat rather than relying on mode ?

I don’t know HA at all, using Domoticz.

May be someone will have time to integrate this one … I hope.

Le 26 mars 2022 à 22:34, Nick @.***> a écrit :



Despite figuring that out as well, it appears as though mode selection doesn't turn off thermostat. As much as I now can turn it off in HA, if the requested temperature is higher than actual it will still stay on. This leads me to believe that mode selection doesn't actually do anything. As my thermostat is in the garage I need to physically turn off the breaker in winter as the temperature drops below device minimum of 5C. Regret my purchase

— Reply to this email directly, view it on GitHubhttps://github.com/dresden-elektronik/deconz-rest-plugin/issues/5502#issuecomment-1079820313, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AUKZIKJIPBCZAYABYRMCDJLVB7CKTANCNFSM5IOH5JJA. You are receiving this because you were mentioned.Message ID: @.***>

nicksterz commented 2 years ago

Home Assistant aside direct setting of mode to off within deconz does not turn off the thermostat.

image

In most basic scenarios this is fine as one would never allow their home to drop below 5C however in a garage that is simply not the case. Also there is no changing the minimum heat setpoint limit as it appears hardcoded to the device.

image

Smanar commented 2 years ago

IDK if thermostat can work only using DDF. He is making one here https://github.com/dresden-elektronik/deconz-rest-plugin/pull/5793 and I think there is some code edition needed for that.

Here you have the @BabaIsYou one https://github.com/dresden-elektronik/deconz-rest-plugin/issues/5848#issuecomment-1074403206 extract from his own thermostat, but his thermostat is realy more advanced than yours, so much thing to remove, I think it will be faster starting from scratch.

Just start the DDF and show the result you have, I will edit the text file.

BabaIsYou commented 2 years ago

I think that it’s normal not to be able to overwrite minimum setpoint. May be the thermostat accuracy has it’s proper limit as this point to !

On my Sinope thermostat I can put it off using Mode modification and it turns off.

Le 27 mars 2022 à 12:37, Smanar @.***> a écrit :



IDK if thermostat can work only using DDF. He is making one here #5793https://github.com/dresden-elektronik/deconz-rest-plugin/pull/5793 and I think there is some code edition needed for that.

— Reply to this email directly, view it on GitHubhttps://github.com/dresden-elektronik/deconz-rest-plugin/issues/5502#issuecomment-1079966613, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AUKZIKNOC3VWPXEAVGKX4A3VCCMEZANCNFSM5IOH5JJA. You are receiving this because you were mentioned.Message ID: @.***>

Smanar commented 2 years ago

Probably nothing to see with the error message you have , but for information, the attribute 0x0017 "min cool set point limit"


The MinCoolSetpointLimit attribute specifies the minimum level that the cooling setpoint MAY be set to.
The value is calculated as described in the LocalTemperature attribute. It must be greater than or equal to
AbsMinCoolSetpointLimit. If this attribute is not present, it SHALL be taken as equal to
AbsMinCoolSetpointLimit.

AbsMinCoolSetpointLimit is the attribute 0x0005

nicksterz commented 2 years ago

I believe what he is trying to solve here is schedules which is more advanced

IDK if thermostat can work only using DDF. He is making one here #5793 and I think there is some code edition needed for that.

Here you have the @BabaIsYou one #5848 (comment) extract from his own thermostat, but his thermostat is realy more advanced than yours, so much thing to remove, I think it will be faster starting from scratch.

Just start the DDF and show the result you have, I will edit the text file.

nicksterz commented 2 years ago

The reason for modifying the minHEATsetpoint is to try to set the temperature lower than anticipated temperature as a way to turn off the thermostat. My suspicion is that there isnt a way to turn the thermostat off as a mode setting. Therefore with 5 C as a minimum, the thermostat would be hitting that low of a temperature in a garage setting in winter. As the thermostat controls a fan heater on the ceiling below bedrooms, and that it is rather loud, I dont want it to cycle through the night.

Probably nothing to see with the error message you have , but for information, the attribute 0x0017 "min cool set point limit"


The MinCoolSetpointLimit attribute specifies the minimum level that the cooling setpoint MAY be set to.
The value is calculated as described in the LocalTemperature attribute. It must be greater than or equal to
AbsMinCoolSetpointLimit. If this attribute is not present, it SHALL be taken as equal to
AbsMinCoolSetpointLimit.

AbsMinCoolSetpointLimit is the attribute 0x0005

Smanar commented 2 years ago

Ha ? you mean the attribute 0x001C don't work for you ? It's rare, I know only the "Super TR" that do that.

nicksterz commented 2 years ago

t do that.

Correct, I can set it to off, read to confirm change, heater still runs

Smanar commented 2 years ago

Strange, I m looking on Z2M and they are doing same, have you wait a little after sending the request, some TRV are realy lazy.

BabaIsYou commented 2 years ago

I seems that Zigbee2MQTT are effectiveley most advanced on managing this sort of thermostat Stelpro SMT402AD. I'm looking at giving this a try as it could allow me to have more native control, even on Sinopé thermostat for setting outdoor temp or baclklight option.

BabaIsYou commented 2 years ago

t do that.

Correct, I can set it to off, read to confirm change, heater still runs

Strange, as I can see here SystemMode is implemented but I couldn't find a document giving the possible values.

BabaIsYou commented 2 years ago

I believe what he is trying to solve here is schedules which is more advanced

Absolutely not ... I'm not at this point ;-) The DDF file is straight from Phoscon DDF editor interface without modifications.

BabaIsYou commented 2 years ago

Well, I got one off this thermostat and can have it connected to my Zigbee network and visible in deConz exactly as @nicksterz described it in the beginning of this thread. But it's clearly not recognized in Phoscon App.

The DDF file is quite empty { "schema": "devcap1.schema.json", "manufacturername": "Stelpro", "modelid": "SMT402AD", "product": "SMT402AD", "sleeper": false, "status": "Draft", "subdevices": [] }

@Smanar, regarding the manufacturer documentation I found above, and a template from other Stelpro DDF that are perhaps supported, would it be easy to build one for this thermostat ?

BabaIsYou commented 2 years ago

Ha ? you mean the attribute 0x001C don't work for you ? It's rare, I know only the "Super TR" that do that.

I can confirm that it doesn't work at all.

nicksterz commented 2 years ago

Ha ? you mean the attribute 0x001C don't work for you ? It's rare, I know only the "Super TR" that do that.

I can confirm that it doesn't work at all.

Thanks for checking, feel better knowing I'm not missing something obvious but I'm still forced to use this darn thermostat.

BabaIsYou commented 2 years ago

You're welcome. However, it seems an issue that's not shared by other software : https://github.com/Koenkk/zigbee-herdsman-converters/blob/master/devices/stelpro.js.

I guess we could find an solution soon for accessing the features of this thermostat. And for Sinope thermostat too. If not, may be I'll change of tool.

BabaIsYou commented 2 years ago

@BabaIsYou I can report that I am able to at the very least set temperature and view temperature/humidity.

image

Did you get this in Phoscon App (web) ? Cause I couldn't get it that way. I could just address the thermostat using deConz GUI.

BabaIsYou commented 2 years ago

It's not supported, but creating a DDF for it is sufficient to make it work with the common/generic thermostat capabilities. If there's anything very specific to the device (which I don't see here) that might be a bit more challenging.

@SwoopX : May be adressing Outdoor temp attribute from API as a /config ?

nicksterz commented 2 years ago

@BabaIsYou I can report that I am able to at the very least set temperature and view temperature/humidity. image

Did you get this in Phoscon App (web) ? Cause I couldn't get it that way. I could just address the thermostat using deConz GUI.

Once I switched the revision it just popped up in Phoscon App.

BabaIsYou commented 2 years ago

@nicksterz, waiting for some PR about Sinope to be reviewed I begin to have some read about Stelpro thermostats. It seems that Stelpro uses a specific "system mode" , "setpoint mode" or "CustomThermostatMode" (depending on litteracy) attribute (0x401c in Thermostat cluster) to manage its modes between "heat", "off" or "eco" (ref. May be it's not the case for SMT402AD but I'll give it a try in a few days. I have to plug mine again (may be in a few days) to test that with just a valid DDF.

BabaIsYou commented 2 years ago

Well, afer nearly a month I retry to connect my SMT402AD but I can't have it appearing in Phoscon like yours.

Smanar commented 2 years ago

But it still working ?

BabaIsYou commented 2 years ago

I'm still testing, some functionnalities seems working using Deconz GUI, even setting output temp on attribute 0x4001 cluster Thermsotat. But :

image

I began a DDF file but I still have trouble with bindings. May be someone can help a bit ;-) { "schema": "devcap1.schema.json", "manufacturername": "Stelpro", "modelid": "SMT402AD", "product": "SMT402AD", "sleeper": false, "status": "Silver", "path": "/devices/smt402ad.json", "subdevices": [ { "type": "$TYPE_THERMOSTAT", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0201" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/externalsensortemp", "description": "External sensor temperature used as Outdoor temperature on display.", "refresh.interval": 300, "read": { "at": "0x4001", "cl": "0x0201", "ep": 0, "fn": "zcl", "mf": "0x1185" }, "parse": { "at": "0x4001", "cl": "0x0201", "eval": "Item.val = Attr.val;", "fn": "zcl", "mf": "0x1185" }, "write": { "at": "0x4001", "cl": "0x0201", "dt": "0x29", "ep": 1, "eval": "Item.val", "fn": "zcl", "mf": "0x1185" }, "default": -32768 }, { "name": "config/heatsetpoint", "description": "Target temperature of a thermostat.", "default": 0 }, { "name": "config/mode" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "config/unoccupiedheatsetpoint", "refresh.interval": 300, "default": 17 }, { "name": "state/lastupdated" }, { "name": "state/on", "description": "True when device is on; false when off.", "refresh.interval": 5 }, { "name": "state/temperature", "description": "The current temperature in °C &times; 100.", "default": 0 }, { "name": "state/valve", "description": "The open percentage of the thermostat valve.", "default": 0 } ] }, { "type": "$TYPE_TEMPERATURE_SENSOR", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0402" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "state/lastupdated" }, { "name": "state/temperature", "description": "The current temperature in °C &times; 100.", "default": 0 } ] }, { "type": "$TYPE_HUMIDITY_SENSOR", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0405" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "state/humidity", "description": "The current relative humidity in percent.", "default": 0 }, { "name": "state/lastupdated" } ] } ] }

BabaIsYou commented 2 years ago

After making a little change in general.xml I can write in Stelpro specific system mode. I'll see this evening (back home) if it has some incidence on the thermostat ;-)

And the device appears in deConz wirth a name and Domoticz want to create new devices according to ZHATemperature, ZHAThermostat and ZHAHumidity (yes this thermostat has this sort of sensor). image

image

That sounds good ! But surely some bindings in the DDF will help because values are all zero in deCONZ Rest API

Smanar commented 2 years ago

I began a DDF file but I still have trouble with bindings

But there is no binding at all on your DDF ?

Ha, I m looking the one for the Sinope thermostat, and it seem this device don't need them, you are using only one for the cluster 0x0006. So better take this one for idea https://github.com/dresden-elektronik/deconz-rest-plugin/blob/master/devices/danfoss/etrv0100_thermostat.json

For me you miss at least thoses one, check the value you need in the API

    {
      "bind": "unicast",
      "src.ep": 1,
      "dst.ep": 1,
      "cl": "0x0201",
      "report": [
        {
          "at": "0x0000",
          "dt": "0x29",
          "min": 300,
          "max": 3600,
          "change": "0x00000032"
        },
        {
          "at": "0x0012",
          "dt": "0x29",
          "min": 1,
          "max": 3600,
          "change": "0x00000001"
        }
      ]
    },

On cluster 0x0201, attribute 0x0000 (local temperature), 0x0012 (heatpoint). I m not sure for the mode, generaly we use the 0x001C from the same cluster, but I f I have understand you are using 0x041C ?

BabaIsYou commented 2 years ago

You're right, there was no binding in my DDF, that's why I needed some help ;-) I added some bindings as you suggested but that doesn't change anything for the values to be reported by the REST API. The only thing I can do is to change the heatsetpoint but no humidity or temperature are reported. When I try to update externalsensortemp (using curl, like I do for my Sinope thermostat) I got a success return value, but the value is not updated on the thermostat and deCONZ GUI. If I change it in deCONZ GUI the value is displayed on thermostat display. Here is my DDF :

{ "schema": "devcap1.schema.json", "manufacturername": "Stelpro", "modelid": "SMT402AD", "product": "SMT402AD", "sleeper": false, "status": "Silver", "path": "/devices/smt402ad.json", "subdevices": [ { "type": "$TYPE_THERMOSTAT", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0201" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/externalsensortemp", "description": "External sensor temperature used as Outdoor temperature on display.", "refresh.interval": 300, "read": { "at": "0x4001", "cl": "0x0201", "ep": 1, "fn": "zcl", "mf": "0x1185" }, "write": { "at": "0x4001", "cl": "0x0201", "dt": "0x29", "ep": 1, "eval": "Item.val", "fn": "zcl", "mf": "0x1185" }, "parse": { "at": "0x4001", "cl": "0x0201", "eval": "Item.val = Attr.val;", "fn": "zcl", "mf": "0x1185" }, "default": 0 }, { "name": "config/heatsetpoint", "description": "Target temperature of a thermostat.", "default": 0 }, { "name": "config/mode" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "config/unoccupiedheatsetpoint", "refresh.interval": 300, "default": 17 }, { "name": "state/lastupdated" }, { "name": "state/on", "description": "True when device is on; false when off.", "refresh.interval": 5 }, { "name": "state/temperature", "description": "The current temperature in °C × 100.", "default": 0 }, { "name": "state/valve", "description": "The open percentage of the thermostat valve.", "default": 0 } ] }, { "type": "$TYPE_HUMIDITY_SENSOR", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0405" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "state/humidity", "description": "The current relative humidity in percent.", "default": 0 }, { "name": "state/lastupdated" } ] } ], "bindings": [ { "bind": "unicast", "src.ep": 1, "dst.ep": 1, "cl": "0x0204" }, { "bind": "unicast", "src.ep": 1, "dst.ep": 1, "cl": "0x0405", "report": [ { "at": "0x0000", "dt": "0x21", "min": 1, "max": 300, "change": "0x00000001" } ] }, { "bind": "unicast", "src.ep": 1, "dst.ep": 1, "cl": "0x0201", "report": [ { "at": "0x0000", "dt": "0x29", "min": 300, "max": 3600, "change": "0x00000001" }, { "at": "0x0012", "dt": "0x29", "min": 1, "max": 300, "change": "0x00000001" }, { "at": "0x4001", "dt": "0x29", "min": 300, "max": 3600, "change": "0x00000001" } ] } ] }

Regarding System mode, I tried using 0x0401C in addition to 0x001C because it seems that it's the way it is implemented in another Stelpro Thermostat (Ki model), and it was defined in general.xml before my changes, but unfortunately none of these attributes seems to be able to cut the thermostat Off.

BabaIsYou commented 2 years ago

Complement ... Here is sensors view from Phoscon, it seems that externalsensortemp and heatsetpoint are updated, but even if the second goes to the device, the first clearly not ... And humidity and tempratures (from ZHAThermostat or ZHATemperature) are still 0 or null (because never announced) ` "20": { "config": { "offset": 0, "on": true, "reachable": true }, "etag": "3cd244b2373983196eacc63512ebd94a", "lastannounced": "2022-06-02T22:27:16Z", "lastseen": "2022-06-03T20:44Z", "manufacturername": "Stelpro", "modelid": "SMT402AD", "name": "Temperature CdM", "state": { "lastupdated": "none", "temperature": null }, "type": "ZHATemperature", "uniqueid": "f8:f0:05:ff:ff:70:7e:95-ff-0402" }, "21": { "config": { "externalsensortemp": 2330, "heatsetpoint": 2200, "mode": "heat", "offset": 0, "on": true, "reachable": true, "unoccupiedheatsetpoint": null }, "etag": "f29048b1e61c4e7443c09f4e4f065a67", "lastannounced": null, "lastseen": "2022-06-03T20:44Z", "manufacturername": "Stelpro", "modelid": "SMT402AD", "name": "Thermostat CdM", "state": { "lastupdated": "none", "on": null, "temperature": 0, "valve": 0 }, "type": "ZHAThermostat", "uniqueid": "f8:f0:05:ff:ff:70:7e:95-01-0201" }, "22": { "config": { "offset": 0, "on": true, "reachable": true }, "etag": "ed692eab47baa29c4a3156c06accfbe7", "lastannounced": null, "lastseen": "2022-06-03T20:44Z", "manufacturername": "Stelpro", "modelid": "SMT402AD", "name": "Humidité CdM", "state": { "humidity": 0, "lastupdated": "none" }, "type": "ZHAHumidity", "uniqueid": "f8:f0:05:ff:ff:70:7e:95-01-0405" } }

`

BabaIsYou commented 2 years ago

Looking to solve my issue I found some weird things for me

"fingerprint": { "profile": "0x0104", "endpoint": "0x01", "in": [ "0x0000", "0x0003", "0x0201", "0x0204", "0x0405" ] that changed nothing ...

Smanar commented 2 years ago

Ha yes, this device use the cluster 0x19, not the 0x01

image

I don't think fingerprint is usefull for thermostat (but I can be wrong)

But using the good endpoint will change lot of thing, so much corrective to do on the DDF.

BabaIsYou commented 2 years ago

Hi,

I'm trying to modify the DDF but just to be sure :

Another question, why is heatsetpoint updated event if endpoint is wrong ?

Smanar commented 2 years ago
{
"name": "config/heatsetpoint",
"description": "Target temperature of a thermostat.",
"default": 0
},

There is no endpoint specified here, so it s the legacy code that handle it.

"name": "config/externalsensortemp",
"description": "External sensor temperature used as Outdoor temperature on display.",
"refresh.interval": 300,
"read": {
"at": "0x4001",
"cl": "0x0201",
"ep": 1,
"fn": "zcl",
"mf": "0x1185"
},

Here you need to use 0x19

"uuid": [
"$address.ext",
"0x01",
"0x0405"
],

Here it's just cosmetic, but will be logic to use the good one too.

And ofc need to chnage all "src.ep" in binds.

And BTW it 's probably 25 and not 0x19 (not sure it can handle hexa value)

BabaIsYou commented 2 years ago

I'm progressing. Modfiying DDF file I got :

                {
"config": {
    "offset": 0,
    "on": true,
    "reachable": true
},
"etag": "d09312e7ae5977cf4c4d2625430cecc9",
"lastannounced": null,
"lastseen": "2022-06-06T14:36Z",
"manufacturername": "Stelpro",
"modelid": "SMT402AD",
"name": "Humidité CdM",
"state": {
    "humidity": 4500,
    "lastupdated": "2022-06-06T14:36:38.235"
},
"type": "ZHAHumidity",
"uniqueid": "f8:f0:05:ff:ff:70:7e:95-01-0405"

}

10:36:50:080 SC tick --> StateRead 10:36:50:151 f8:f0:05:ff:ff:70:7e:95-01-0201/config/externalsensortemp expression: Item.val = Attr.val; --> 1950 10:36:50:152 No thermostat sensor found for 0xF8F005FFFF707E95, endpoint: 0x19 10:36:50:173 SC config/externalsensortemp: synced 10:36:50:174 SC --> StateFinished 10:36:50:175 SC state change finished: f8:f0:05:ff:ff:70:7e:95-01-0201

My DDF become :

{ "schema": "devcap1.schema.json", "manufacturername": "Stelpro", "modelid": "SMT402AD", "product": "SMT402AD", "sleeper": false, "status": "Silver", "path": "/devices/smt402ad.json", "subdevices": [ { "type": "$TYPE_THERMOSTAT", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0201" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/externalsensortemp", "description": "External sensor temperature used as Outdoor temperature on display.", "refresh.interval": 300, "read": { "at": "0x4001", "cl": "0x0201", "ep": 25, "fn": "zcl", "mf": "0x1185" }, "write": { "at": "0x4001", "cl": "0x0201", "dt": "0x29", "ep": 25, "eval": "Item.val", "fn": "zcl", "mf": "0x1185" }, "parse": { "at": "0x4001", "cl": "0x0201", "ep": 25, "eval": "Item.val = Attr.val;", "fn": "zcl", "mf": "0x1185" }, "default": 0 }, { "name": "config/heatsetpoint", "default": 0 }, { "name": "config/mode" }, { "name": "config/offset", "description": "Relative offset to the main measured value.", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "config/unoccupiedheatsetpoint", "refresh.interval": 300, "read": { "at": "0x0014", "cl": "0x0201", "ep": 25, "fn": "zcl" }, "write": { "at": "0x0014", "cl": "0x0201", "dt": "0x29", "ep": 25, "eval": "Item.val", "fn": "zcl", "mf": "0x1185" }, "parse": { "at": "0x0014", "cl": "0x0201", "ep": 25, "eval": "Item.val = Attr.val;", "fn": "zcl" }, "default": 17 }, { "name": "state/lastupdated" }, { "name": "state/on", "description": "True when device is on; false when off.", "refresh.interval": 5 }, { "name": "state/temperature", "description": "The current temperature in °C (100).", "parse": { "at": "0x0000", "cl": "0x0402", "ep": 25, "eval": "Item.val = Attr.val + R.item('config/offset').val", "fn": "zcl" }, "default": 0 }, { "name": "state/valve", "description": "PI Heating Demand", "refresh.interval": 300, "read": { "at": "0x0008", "cl": "0x0201", "ep": 25, "fn": "zcl" }, "parse": { "at": "0x0008", "cl": "0x0201", "ep": 25, "eval": "Item.val = Attr.val;", "fn": "zcl" }, "default": 0 } ] }, { "type": "$TYPE_HUMIDITY_SENSOR", "restapi": "/sensors", "uuid": [ "$address.ext", "0x01", "0x0405" ], "items": [ { "name": "attr/id" }, { "name": "attr/lastannounced" }, { "name": "attr/lastseen" }, { "name": "attr/manufacturername" }, { "name": "attr/modelid" }, { "name": "attr/name" }, { "name": "attr/swversion" }, { "name": "attr/type" }, { "name": "attr/uniqueid" }, { "name": "config/offset", "default": 0 }, { "name": "config/on" }, { "name": "config/reachable" }, { "name": "state/humidity", "description": "The current relative humidity in percent (100).", "refresh.interval": 300, "read": { "at": "0x0000", "cl": "0x0405", "ep": 25, "fn": "zcl" }, "parse": { "at": "0x0000", "cl": "0x0405", "ep": 25, "eval": "Item.val = Attr.val + R.item('config/offset').val", "fn": "zcl" }, "default": 0 }, { "name": "state/lastupdated" } ] } ], "bindings": [ { "bind": "unicast", "src.ep": 25, "cl": "0x0405" }, { "bind": "unicast", "src.ep": 25, "cl": "0x0204" }, { "bind": "unicast", "src.ep": 25, "cl": "0x0201" } ] }