Alors plusieurs choses :
-
On a ici la preuve que ce que tu veux faire fonctionne : https://github.com/zwave-js/zwave-js-ui/issues/336, on remarquera qu’il y a la propriété « Air temperature » ET que la valeur qu’il a envoyée est à 1 décimale. Je pense que mon intuition se confirme. 55.0 aurait sûrement fonctionné également.
-
Concernant ton autre question reçue en MP, à savoir comment envoyer une commande setpoint via l’API, je te remercie car ça m’a permis de bien parcourir la doc et de comprendre enfin le fonctionnement de tout ça.
L’erreur est d’utiliser une commande « sendReport » pour une action de type « setpoint ».
C’est ça qui m’a mis sur la piste : Z-Wave JS UI
Tu as deux méthodes pour envoyer des valeurs ou commandes sur des périphériques du réseau :
- Topic :
zwave/_CLIENTS/ZWAVE_GATEWAY-Zwavejs2Mqtt/broadcast/set
- Payload :
{
"commandClass": 67,
"endpoint": 0,
"property": "setpoint",
"propertyKey": 11,
"value": 20
}
Tous mes équipements qui ont une command class 67, lié au controlleur 0, avec une property « setpoint » (ce qu’on retrouve bien dans les topics MQTT classiques sans passer par l’API), de clé 11 (je dois préciser la clé car j’ai 1 ou 11, 1 étant le mode chauffe, 11 le mode éco) doivent recevoir la valeur 20.
Je me permets de ne pas ajouter de décimale à 20 car ma vanne accepte les précisions 0,1 et 2 (ou alors j’aurais écrit 20.0 ou 20.00) ce qui je le rappelle je ne pense pas être le cas de ton thermostat de précision a priori 1 uniquement.
Sauf cas particulier (gérable par scénario) où on souhaite changer la consigne de TOUS les équipements concernés, nous on va plutôt utiliser le multicast, valable pour un ensemble de noeuds (qui peut être unique).
- Topic :
zwave/_CLIENTS/ZWAVE_GATEWAY-Zwavejs2Mqtt/multicast/set
- Payload :
{
"commandClass": 67,
"endpoint": 0,
"property": "setpoint",
"propertyKey": 11,
"nodes": [17],
"value": 20
}
C’est très ressemblant mais ici j’ai défini une liste de noeuds (attention, ce n’est plus nodeId mais nodes, au pluriel même s’il y a un seul noeud).
Testé chez moi, ça fonctionne parfaitement.
Maintenant, la question, comment j’ai compris ce que je devais envoyer ? ben j’ai simplement regardé le dump json que tu m’as envoyé et les miens, exemple :
{
"id": "27-67-0-setpoint-11",
"nodeId": 27,
"toUpdate": false,
"commandClass": 67,
"commandClassName": "Thermostat Setpoint",
"endpoint": 0,
"property": "setpoint",
"propertyName": "setpoint",
"propertyKey": 11,
"propertyKeyName": "Energy Save Heating",
"type": "number",
"readable": true,
"writeable": true,
"label": "Setpoint (Energy Save Heating)",
"ccSpecific": {
"setpointType": 11
},
"stateless": false,
"commandClassVersion": 3,
"min": 8,
"max": 28,
"unit": "°C",
"list": false,
"value": 18,
"lastUpdate": 1675725811990,
"newValue": 18
},
Voilà ce que j’ai pour une de mes vannes, j’ai juste cherché les paramètres dont j’ai besoin pour caractériser la commande que je veux envoyer.
En utilisant MQTT Explorer, j’ai pu voir qu’à partir du moment où j’ai caractérisé la property, la command class, le noeud, etc… il a juste besoin d’une valeur :
{"time":1675725809000,"value":20}
A priori le temps est juste un timestamp pour le logging et l’historisation.