[TUTO] Piloter une vanne Eurotronic Spirit Z-wave depuis une sonde de température externe

PREAMBULE

Ce tutoriel fait suite à ce post.

Les vannes Spirit d’Eurotronic permettent d’utiliser une sonde de température externe comme référence pour le pourcentage d’ouverture de la vanne.
Problème, en l’état actuel, seuls le capteur ad hoc d’Eurotronic et la sonde AërQ de chez Aeotec ont réussi à établir avec succès une communication en association directe avec cette vanne.
Le premier est très difficile à trouver, le deuxième ne fait de rapport au mieux que toutes les 15 minutes (car sur batterie seulement), ce qui peut être rapidement un problème pour ce genre d’utilisation.

Par contre, il est tout à fait possible de se servir de la passerelle Z-wave et de Jeedom pour communiquer la température voulue à la vanne, et ce, par le biais de n’importe quel capteur de température intégré à Jeedom.

Après une lecture exhaustive de la documentation de ZwaveJS UI et de son API, ainsi que les forums des concurrents, je pense être arrivé à une solution efficace sur Jeedom.

SETUP

  • Conteneur ZwaveJS UI (indépendant de Jeedom)
  • Conteneur Mosquitto (indépendant de Jeedom)
  • Conteneur Jeedom

Jeedom se contente de se connecter au broker externe via le plugin jMQTT pour récupérer mes équipements.
A confirmer, mais je pense que si vous utilisez Mosquitto et/ou ZwaveJS UI via les plugins Jeedom (en beta pour ZwaveJS UI), rien ne devrait être fondamentalement différent.

EDIT 26/01/2023 : Confirmation grâce à @Rom8515 que c’est possible, voir son message ici pour ceux qui utilisent les plugins natifs de Jeedom

PROCEDURE

I/ ZwaveJS UI

  1. Paramétrage de la vanne

Nous allons dans un premier temps régler le paramètre 8 de la vanne sur -128 qui permet à la vanne de recevoir une lecture de température extérieure :

2. Nom de la passerelle Z-wave

On va également récupérer le nom de la passerelle, car on s’en servira dans nos commandes MQTT :



II/ Jeedom

On va dans les commandes de notre vanne, et si ce n’est déjà fait, on ajoute une commande info permettant de récupérer le numéro du nœud :

Maintenant, on va ajouter une commande action Send qui va permettre d’envoyer à la vanne la consigne de température lue par le capteur de notre choix :

On notera que :

  • dans :
zwave/_CLIENTS/ZWAVE_GATEWAY-Zwavejs2Mqtt/api/sendCommand/set

Zwavejs2Mqtt correspond au nom de la passerelle relevé en I/

On se sert donc ici de l’API de ZwaveJS (consultable ici) pour communiquer avec la vanne.

  • On a activé la publication automatique, ce qui signifie que lorsqu’un des paramètres de la commande varie (voir payload), il exécutera cette action, c’est important car c’est ce qui permettra de notifier la vanne automatiquement sans passer par un scenario (merci à @Bad pour la remarque)

On entre le payload au format JSON dans le cadre à droite de la commande MQTT :

{
  "args": [
    {
      "nodeId": #[Salon][Vanne][NodeID]#,
      "commandClass": 49,
      "endpoint": 0
    },
    "sendReport",
    [
      1,
      0,
      #[Salon][Multisensor 7][Température]#
    ]
  ]
}

Tout peut être écrit à la ligne, j’ai mis en forme pour la lisibilité. :slight_smile:

Ce qu’il est important de noter :

  • On utilise l’info du numéro de nœud récupérée dans la commande NodeID ajoutée précédemment
  • 49 : c’est la Command Class associée à la lecture de la température par la vanne :

  • sendReport : c’est le call API à utiliser qui va permettre le formatage attendu par la vanne, pour rappel dans la doc de la vanne :

On veut formater au comme le demande le report incoming :

  • 1 correspond au sensor type
  • 0 à Celsius
  • La valeur de température est directement lue depuis mon capteur de température

Voilà, pour tester vous pouvez exécuter la commande Send et vérifier dans les logs, si le message est correctement formaté voici ce que vous devriez obtenir au moment de l’envoi :

~ > tail -fn 150 /opt/z2m/config/logs/zwavejs_2022-11-12.log | grep -A 12 "Node 041"

2022-11-12T15:17:31.616Z DRIVER » [Node 041] [REQ] [SendDataBridge]
                                  │ source node id:   1
                                  │ transmit options: 0x25
                                  │ callback id:      157
                                  └─[Security2CCMessageEncapsulation]
                                    │ sequence number: 217
                                    └─[SupervisionCCGet]
                                      │ session id:      15
                                      │ request updates: true
                                      └─[MultilevelSensorCCReport]
                                          type:  Air temperature
                                          scale: Celsius
                                          value: 20.7

Suivant les réglages de votre vanne, le pourcentage d’ouverture s’ajustera dans la foulée ou lorsque la vanne atteindra un seuil entrainant l’émission d’un rapport.



Mes compétences sur Jeedom étant très limitées vu que jeune utilisateur, il y a sûrement moyen d’améliorer tout ça, je suis ouverte à toutes vos suggestions.

Pour les sources :

Mis à jour : 26/01/2023

4 « J'aime »

Hello @shadowking,

Super tuto !
Encore un beau cas d’usage de Jeedom pour palier aux incompatibilités d’équipemens et gérr leur automatisation :wink:

Juste une petite remarque : le scénario n’est pas forcément utile, il suffit de cocher la case « Pub. Auto » (publication automatique) de la commande action « Send » et lors du changement de #[Salon][Vanne][NodeID]# (invariant) ou #[Salon][Multisensor 7][Température]# le payload sera envoyé automatiquement.

Bad

2 « J'aime »

@Bad Merci beaucoup ! Je débute donc beaucoup à apprendre, super pour la publication automatique je ne m’étais pas trop posé la question de ce que c’était.

Je vais tester et modifierai le tutoriel en conséquence. :slight_smile:

1 « J'aime »

Et bien ça fonctionne parfaitement comme tu l’avais annoncé. :wink:
Mise à jour du tutoriel dans la soirée du coup.

Bonjour

merci pour ce tuto

je viens d’installer le nouveau plugin ZWAVEJS, je me retrouve donc avec MQTT

je vais essayer de faire cette opération pour envoyer la température vers mes vannes

je ne vois pas comment récupérer l’info : Nom de la passerelle Z-wave

ce serait l’info « zwave » dans la conf du plugin zwavejs ?

je bloque aussi sur la récupération du NodeID, j’ai essayé plusieurs choses mais sans succès

je me suis inspiré du nodeStatus

en faisant ca, mais ca ne remonte pas le NodeID

et pour la commande action SEND, j’ai pas du tout comme dans votre copie écran

merci

J’utilise ZwaveJS en externe via Z-Wave JS · GitHub, et les réglages que je décris sont réalisés dans jMQTT.

Je n’ai pas installé le plugin ZwaveJS pour Jeedom, mais ça doit être transposable.

Il n’y a pas d’autre écran de configuration ?

C’est possible que l’API ZwaveJS telle que je l’utilise doive être jointe autrement que comme je le fais dans le tutoriel.

Bonjour

je sais pas, j’ai essayé de transposer mais ca dépasse mes compétences :slight_smile:

voici l’arbre des valeurs de la commande, le NodeIr y apparait bien, 149, mais pour le faire remonter dans une commande info, j’ai pas trouvé

{
"id" : 149,
"name" : "",
"loc" : "",
"values" : {
"38-0-currentValue" : {
"id" : "149-38-0-currentValue",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "currentValue",
"propertyName" : "currentValue",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Current value",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 99,
"list" : false,
"value" : 0,
"isCurrentValue" : true,
"targetValue" : "38-0-targetValue",
"lastUpdate" : 1669285526633
},
"38-0-Up" : {
"id" : "149-38-0-Up",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "Up",
"propertyName" : "Up",
"type" : "boolean",
"readable" : false,
"writeable" : true,
"label" : "Perform a level change (Up)",
"ccSpecific" : {
"switchType" : 2
},
"stateless" : false,
"commandClassVersion" : 1,
"list" : false,
"lastUpdate" : 1669285526634
},
"38-0-Down" : {
"id" : "149-38-0-Down",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "Down",
"propertyName" : "Down",
"type" : "boolean",
"readable" : false,
"writeable" : true,
"label" : "Perform a level change (Down)",
"ccSpecific" : {
"switchType" : 2
},
"stateless" : false,
"commandClassVersion" : 1,
"list" : false,
"lastUpdate" : 1669285526634
},
"38-0-targetValue" : {
"id" : "149-38-0-targetValue",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "targetValue",
"propertyName" : "targetValue",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Target value",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 99,
"list" : false,
"lastUpdate" : 1669285526669
},
"38-0-duration" : {
"id" : "149-38-0-duration",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "duration",
"propertyName" : "duration",
"type" : "duration",
"readable" : true,
"writeable" : false,
"label" : "Remaining duration",
"stateless" : false,
"commandClassVersion" : 1,
"list" : false,
"value" : {
"unit" : "seconds"
},
"lastUpdate" : 1669285526670
},
"38-0-restorePrevious" : {
"id" : "149-38-0-restorePrevious",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 38,
"commandClassName" : "Multilevel Switch",
"endpoint" : 0,
"property" : "restorePrevious",
"propertyName" : "restorePrevious",
"type" : "boolean",
"readable" : false,
"writeable" : true,
"label" : "Restore previous value",
"stateless" : false,
"commandClassVersion" : 1,
"list" : false,
"lastUpdate" : 1669285526670
},
"49-0-Air temperature" : {
"id" : "149-49-0-Air temperature",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 49,
"commandClassName" : "Multilevel Sensor",
"endpoint" : 0,
"property" : "Air temperature",
"propertyName" : "Air temperature",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Air temperature",
"ccSpecific" : {
"sensorType" : 1,
"scale" : 0
},
"stateless" : false,
"commandClassVersion" : 5,
"unit" : "°C",
"list" : false,
"value" : 20.02,
"lastUpdate" : 1669285526671
},
"64-0-mode" : {
"id" : "149-64-0-mode",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 64,
"commandClassName" : "Thermostat Mode",
"endpoint" : 0,
"property" : "mode",
"propertyName" : "mode",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Thermostat mode",
"stateless" : false,
"commandClassVersion" : 3,
"min" : 0,
"max" : 255,
"list" : true,
"states" : [
{
"text" : "Off",
"value" : 0
},
{
"text" : "Heat",
"value" : 1
},
{
"text" : "Energy heat",
"value" : 11
},
{
"text" : "Full power",
"value" : 15
}
],
"value" : 1,
"lastUpdate" : 1669285526671
},
"64-0-manufacturerData" : {
"id" : "149-64-0-manufacturerData",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 64,
"commandClassName" : "Thermostat Mode",
"endpoint" : 0,
"property" : "manufacturerData",
"propertyName" : "manufacturerData",
"type" : "buffer",
"readable" : true,
"writeable" : false,
"label" : "Manufacturer data",
"stateless" : false,
"commandClassVersion" : 3,
"list" : false,
"lastUpdate" : 1669285526671
},
"67-0-setpoint-1" : {
"id" : "149-67-0-setpoint-1",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 67,
"commandClassName" : "Thermostat Setpoint",
"endpoint" : 0,
"property" : "setpoint",
"propertyName" : "setpoint",
"propertyKey" : 1,
"propertyKeyName" : "Heating",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Setpoint (Heating)",
"ccSpecific" : {
"setpointType" : 1
},
"stateless" : false,
"commandClassVersion" : 3,
"min" : 8,
"max" : 28,
"unit" : "°C",
"list" : false,
"value" : 19,
"lastUpdate" : 1669285526671
},
"67-0-setpoint-11" : {
"id" : "149-67-0-setpoint-11",
"nodeId" : 149,
"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" : 17,
"lastUpdate" : 1669285526672
},
"112-0-1" : {
"id" : "149-112-0-1",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 1,
"propertyName" : "LCD Invert",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "LCD Invert",
"default" : 0,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 1,
"list" : true,
"allowManualEntry" : false,
"states" : [
{
"text" : "LCD-content normal",
"value" : 0
},
{
"text" : "LCD-content inverted (UK Edition)",
"value" : 1
}
],
"value" : 0,
"lastUpdate" : 1669285526672
},
"112-0-2" : {
"id" : "149-112-0-2",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 2,
"propertyName" : "LCD Timeout",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "LCD Timeout",
"default" : 0,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 30,
"unit" : "seconds",
"list" : true,
"allowManualEntry" : true,
"states" : [
{
"text" : "No Timeout LCD always on",
"value" : 0
}
],
"value" : 5,
"lastUpdate" : 1669285526672
},
"112-0-3" : {
"id" : "149-112-0-3",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 3,
"propertyName" : "Backlight",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Backlight",
"default" : 1,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 1,
"list" : true,
"allowManualEntry" : false,
"states" : [
{
"text" : "Backlight disabled",
"value" : 0
},
{
"text" : "Backlight enabled",
"value" : 1
}
],
"value" : 0,
"lastUpdate" : 1669285526673
},
"112-0-4" : {
"id" : "149-112-0-4",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 4,
"propertyName" : "Battery report",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Battery report",
"default" : 1,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 1,
"list" : true,
"allowManualEntry" : false,
"states" : [
{
"text" : "system notification",
"value" : 0
},
{
"text" : "Send battery status unsolicited once a day.",
"value" : 1
}
],
"value" : 1,
"lastUpdate" : 1669285526673
},
"112-0-5" : {
"id" : "149-112-0-5",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 5,
"propertyName" : "Temperature Report Threshold",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Temperature Report Threshold",
"default" : 5,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 50,
"unit" : "0.1 °C",
"list" : false,
"value" : 5,
"lastUpdate" : 1669285526673
},
"112-0-6" : {
"id" : "149-112-0-6",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 6,
"propertyName" : "Valve opening percentage report",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Valve opening percentage report",
"default" : 0,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 100,
"unit" : "%",
"list" : false,
"value" : 5,
"lastUpdate" : 1669285526673
},
"112-0-7" : {
"id" : "149-112-0-7",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 7,
"propertyName" : "Window open detection",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Window open detection",
"default" : 2,
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 3,
"list" : true,
"allowManualEntry" : false,
"states" : [
{
"text" : "Disabled",
"value" : 0
},
{
"text" : "Sensitivity low",
"value" : 1
},
{
"text" : "Sensitivity medium",
"value" : 2
},
{
"text" : "Sensitivity high",
"value" : 3
}
],
"value" : 0,
"lastUpdate" : 1669285526674
},
"112-0-8" : {
"id" : "149-112-0-8",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 112,
"commandClassName" : "Configuration",
"endpoint" : 0,
"property" : 8,
"propertyName" : "Temperature Offset",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Temperature Offset",
"default" : 0,
"stateless" : false,
"commandClassVersion" : 1,
"min" : -128,
"max" : 50,
"unit" : "0.1 °C",
"list" : true,
"allowManualEntry" : true,
"states" : [
{
"text" : "Ext temp sensor be used for regul",
"value" : -128
}
],
"value" : 10,
"lastUpdate" : 1669285526674
},
"113-0-Power Management-Battery maintenance status" : {
"id" : "149-113-0-Power Management-Battery maintenance status",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 113,
"commandClassName" : "Notification",
"endpoint" : 0,
"property" : "Power Management",
"propertyName" : "Power Management",
"propertyKey" : "Battery maintenance status",
"propertyKeyName" : "Battery maintenance status",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Battery maintenance status",
"ccSpecific" : {
"notificationType" : 8
},
"stateless" : false,
"commandClassVersion" : 8,
"min" : 0,
"max" : 255,
"list" : true,
"states" : [
{
"text" : "idle",
"value" : 0
},
{
"text" : "Replace battery soon",
"value" : 10
},
{
"text" : "Replace battery now",
"value" : 11
}
],
"value" : 0,
"lastUpdate" : 1669285526674
},
"113-0-System-Hardware status" : {
"id" : "149-113-0-System-Hardware status",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 113,
"commandClassName" : "Notification",
"endpoint" : 0,
"property" : "System",
"propertyName" : "System",
"propertyKey" : "Hardware status",
"propertyKeyName" : "Hardware status",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Hardware status",
"ccSpecific" : {
"notificationType" : 9
},
"stateless" : false,
"commandClassVersion" : 8,
"min" : 0,
"max" : 255,
"list" : true,
"states" : [
{
"text" : "idle",
"value" : 0
},
{
"text" : "System hardware failure (with failure code)",
"value" : 3
}
],
"value" : 0,
"lastUpdate" : 1669285526674
},
"113-0-alarmType" : {
"id" : "149-113-0-alarmType",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 113,
"commandClassName" : "Notification",
"endpoint" : 0,
"property" : "alarmType",
"propertyName" : "alarmType",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Alarm Type",
"stateless" : false,
"commandClassVersion" : 8,
"min" : 0,
"max" : 255,
"list" : false,
"lastUpdate" : 1669285526674
},
"113-0-alarmLevel" : {
"id" : "149-113-0-alarmLevel",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 113,
"commandClassName" : "Notification",
"endpoint" : 0,
"property" : "alarmLevel",
"propertyName" : "alarmLevel",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Alarm Level",
"stateless" : false,
"commandClassVersion" : 8,
"min" : 0,
"max" : 255,
"list" : false,
"lastUpdate" : 1669285526674
},
"114-0-manufacturerId" : {
"id" : "149-114-0-manufacturerId",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 114,
"commandClassName" : "Manufacturer Specific",
"endpoint" : 0,
"property" : "manufacturerId",
"propertyName" : "manufacturerId",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Manufacturer ID",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 65535,
"list" : false,
"value" : 328,
"lastUpdate" : 1669285526675
},
"114-0-productType" : {
"id" : "149-114-0-productType",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 114,
"commandClassName" : "Manufacturer Specific",
"endpoint" : 0,
"property" : "productType",
"propertyName" : "productType",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Product type",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 65535,
"list" : false,
"value" : 3,
"lastUpdate" : 1669285526675
},
"114-0-productId" : {
"id" : "149-114-0-productId",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 114,
"commandClassName" : "Manufacturer Specific",
"endpoint" : 0,
"property" : "productId",
"propertyName" : "productId",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Product ID",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 65535,
"list" : false,
"value" : 1,
"lastUpdate" : 1669285526675
},
"117-0-local" : {
"id" : "149-117-0-local",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 117,
"commandClassName" : "Protection",
"endpoint" : 0,
"property" : "local",
"propertyName" : "local",
"type" : "number",
"readable" : true,
"writeable" : true,
"label" : "Local protection state",
"stateless" : false,
"commandClassVersion" : 1,
"list" : true,
"states" : [
{
"text" : "Unprotected",
"value" : 0
},
{
"text" : "ProtectedBySequence",
"value" : 1
},
{
"text" : "NoOperationPossible",
"value" : 2
}
],
"value" : 0,
"lastUpdate" : 1669285526675
},
"128-0-level" : {
"id" : "149-128-0-level",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 128,
"commandClassName" : "Battery",
"endpoint" : 0,
"property" : "level",
"propertyName" : "level",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Battery level",
"stateless" : false,
"commandClassVersion" : 1,
"min" : 0,
"max" : 100,
"unit" : "%",
"list" : false,
"value" : 90,
"lastUpdate" : 1669285526675
},
"128-0-isLow" : {
"id" : "149-128-0-isLow",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 128,
"commandClassName" : "Battery",
"endpoint" : 0,
"property" : "isLow",
"propertyName" : "isLow",
"type" : "boolean",
"readable" : true,
"writeable" : false,
"label" : "Low battery level",
"stateless" : false,
"commandClassVersion" : 1,
"list" : false,
"value" : false,
"lastUpdate" : 1669285526675
},
"134-0-libraryType" : {
"id" : "149-134-0-libraryType",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 134,
"commandClassName" : "Version",
"endpoint" : 0,
"property" : "libraryType",
"propertyName" : "libraryType",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Library type",
"stateless" : false,
"commandClassVersion" : 2,
"list" : true,
"states" : [
{
"text" : "Unknown",
"value" : 0
},
{
"text" : "Static Controller",
"value" : 1
},
{
"text" : "Controller",
"value" : 2
},
{
"text" : "Enhanced Slave",
"value" : 3
},
{
"text" : "Slave",
"value" : 4
},
{
"text" : "Installer",
"value" : 5
},
{
"text" : "Routing Slave",
"value" : 6
},
{
"text" : "Bridge Controller",
"value" : 7
},
{
"text" : "Device under Test",
"value" : 8
},
{
"text" : "N/A",
"value" : 9
},
{
"text" : "AV Remote",
"value" : 10
},
{
"text" : "AV Device",
"value" : 11
}
],
"value" : 3,
"lastUpdate" : 1669285526676
},
"134-0-protocolVersion" : {
"id" : "149-134-0-protocolVersion",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 134,
"commandClassName" : "Version",
"endpoint" : 0,
"property" : "protocolVersion",
"propertyName" : "protocolVersion",
"type" : "string",
"readable" : true,
"writeable" : false,
"label" : "Z-Wave protocol version",
"stateless" : false,
"commandClassVersion" : 2,
"list" : false,
"value" : "4.61",
"lastUpdate" : 1669285526676
},
"134-0-firmwareVersions" : {
"id" : "149-134-0-firmwareVersions",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 134,
"commandClassName" : "Version",
"endpoint" : 0,
"property" : "firmwareVersions",
"propertyName" : "firmwareVersions",
"type" : "string[]",
"readable" : true,
"writeable" : false,
"label" : "Z-Wave chip firmware versions",
"stateless" : false,
"commandClassVersion" : 2,
"list" : false,
"value" : [
"0.16",
"0.2"
],
"lastUpdate" : 1669285526676
},
"134-0-hardwareVersion" : {
"id" : "149-134-0-hardwareVersion",
"nodeId" : 149,
"toUpdate" : false,
"commandClass" : 134,
"commandClassName" : "Version",
"endpoint" : 0,
"property" : "hardwareVersion",
"propertyName" : "hardwareVersion",
"type" : "number",
"readable" : true,
"writeable" : false,
"label" : "Z-Wave chip hardware version",
"stateless" : false,
"commandClassVersion" : 2,
"list" : false,
"value" : 49,
"lastUpdate" : 1669285526676
}
},
"groups" : [
{
"text" : "Lifeline",
"endpoint" : 0,
"value" : 1,
"maxNodes" : 1,
"isLifeline" : true,
"multiChannel" : false
}
],
"neighbors" : "",
"ready" : true,
"available" : true,
"hassDevices" : [
],
"failed" : false,
"inited" : true,
"eventsQueue" : [
{
"time" : "2022-11-24T10:25:26.491Z",
"event" : "alive",
"args" : [
0
]
},
{
"time" : "2022-11-24T10:25:26.717Z",
"event" : "ready",
"args" : [
]
}
],
"status" : "Alive",
"interviewStage" : "Complete",
"hexId" : "0x0148-0x0003-0x0001",
"dbLink" : "https://devices.zwave-js.io/?jumpTo=0x0148:0x0003:0x0001:0.16",
"manufacturerId" : 328,
"productId" : 1,
"productType" : 3,
"deviceConfig" : {
"filename" : "/var/www/html/plugins/zwavejs/resources/zwave-js-ui/node_modules/@zwave-js/config/config/devices/0x0148/spirit.json",
"isEmbedded" : true,
"manufacturer" : "Eurotronics",
"manufacturerId" : 328,
"label" : "Spirit",
"description" : "Thermostatic Valve",
"devices" : [
{
"productType" : 3,
"productId" : 1
},
{
"productType" : 3,
"productId" : 3
}
],
"firmwareVersion" : {
"min" : "0.0",
"max" : "255.255"
},
"paramInformation" : {
"_map" : [
]
},
"metadata" : {
"comments" : {
"level" : "warning",
"text" : "The thermostat is missing "Manufacturer Specific" from its list of supported modes, although the mode is supported. Application-specific workarounds may be necessary to switch to "Manufacturer Specific" mode."
}
}
},
"productLabel" : "Spirit",
"productDescription" : "Thermostatic Valve",
"manufacturer" : "Eurotronics",
"firmwareVersion" : "0.16",
"protocolVersion" : 3,
"zwavePlusVersion" : 1,
"zwavePlusNodeType" : 0,
"zwavePlusRoleType" : 7,
"nodeType" : 1,
"endpointsCount" : 0,
"endpointIndizes" : [
],
"isSecure" : false,
"security" : "None",
"supportsSecurity" : false,
"supportsBeaming" : true,
"isControllerNode" : false,
"isListening" : false,
"isFrequentListening" : "1000ms",
"isRouting" : true,
"keepAwake" : false,
"maxDataRate" : 100000,
"deviceClass" : {
"basic" : 4,
"generic" : 8,
"specific" : 6
},
"firmwareCapabilities" : {
"firmwareUpgradable" : true,
"firmwareTargets" : [
0,
2
],
"continuesToFunction" : "unknown",
"supportsActivation" : "unknown"
},
"deviceId" : "328-1-3",
"statistics" : {
"commandsTX" : 1,
"commandsRX" : 0,
"commandsDroppedRX" : 0,
"commandsDroppedTX" : 0,
"timeoutResponse" : 0,
"rtt" : 1287.9
},
"lastActive" : 1669285526784,
"minBatteryLevel" : 90,
"batteryLevels" : [
90
],
"filename" : "spirit.json (Zwave-Js)",
"numberGroups" : 1,
"classBasic" : 4,
"classGeneric" : 8,
"classSpecific" : 6,
"deviceIdNew" : "328-3-1",
"confJeedom" : "eurotronic_328/eur.spiritz.wall.radiator.thermostat.json",
"confType" : "Configuration Jeedom <br>Commands : <br> - Commande Consigne Eco<br> - Consigne Eco<br> - Commande Consigne Chauffe<br> - Consigne Chauffe<br> - Position valve<br> - Etat valve (en manuel)<br> - Température<br> - Mode Actuel<br> - Eteindre<br> - Manuel<br> - Chauffage<br> - Pleine Chauffe<br> - Eco<br> - Batterie<br>",
"lastWakeup" : "N/A",
"nextWakeup" : "N/A",
"configWakeup" : "N/A"
}

Non ça c’est le topic racine, ce qu’on voit ici avec MQTT Explorer :

mqtt_explorer_1

Il doit y avoir une section MQTT dans le plugin, où on retrouve le nom de la passerelle.

Sinon si vous avez MQTT Explorer, il y a un topic _CLIENTS normalement, quand on le déroule on voit le nom de la passerelle :

mqtt_explorer_2

Sinon je pense qu’il vous faudra attendre quelqu’un qui a le plugin en main pour vous aider. :frowning:

Il n’y a aucun équipement de créé dans le MQTT manager, il est vide

et rien dans la partie configuration du plugin

merci quand même :slight_smile:

Si tu veux un équipement qui reprent les info c’est a toi de le créer.

Avec les 2 commandes NODEID et SEND ? je pensais que ces commandes étaient à créer dans l’équipement du plugin zwaveJS

j’ai fait un équipement dans MQTT pour voir, mais je sais pas quoi mettre dedans :slight_smile:

Pour la commande info, vous reproduisez ce que je fais dans cette impression d’écran :

Sachant RDC est la location (emplacement) de mon nœud, et TRV-RUE son nom, il faut remplacer par vos propres valeurs.
Voyez déjà si ça fonctionne avant de vous attaquer à la commande action Send.

1 « J'aime »

ok, je test

ca donnerait ca ?
mais ca remonde inconnu

Bonjour à tous, et merci à @shadowking pour ce tuto, j’ai enfin réussi à paramétrer une sonde extérieure pour les Tête Spirit

Je vais compléter ce tuto étant utilisateur du plugin zwaveJS

Je précise que j’utilise le plugin JMQTT en plus du plugin Zwavejs et Mqtt manager

Dans le plugin JMQTT :
On ajoute un nouvel équipement
Inscrit au Topic : zwave/ID/# (ID c’est le numéro de l’équipement sur le réseau Zwave)

Ensuite on créer une commande :
Nom : send
Topic = zwave/_CLIENTS/ZWAVE_GATEWAY-Jeedom/api/sendCommand/set
RAPPEL : bien vérifier votre nom de passerelle, moi elle s’appelle « Jeedom »
valeur : {"args":[{"nodeId":ID,"commandClass":49,"endpoint":0},"sendReport",[1,0,#[Rez de chaussée][Sonde salon][Température]#]]}

ID = Id du nœud Z-Wave c’est toujours le numéro de l’équipement
#[Rez de chaussée][Sonde salon][Température]# : c’est le chemin de la sonde, je vous conseille d’utiliser le testeur d’expression pour avoir directement la bonne syntaxe

Bien penser à mettre le paramètre -128 sur la Spirit comme indiqué dans le tuto.

Et la par contre j’ai galéré un peu parce que la température affichée sur la tuile est tjs celle la sonde interne, mais elle prend bien en compte une sonde extérieur pour son fonctionnement.

Vous pouvez tester en mettant directement une valeur dans :
{"args":[{"nodeId":80,"commandClass":49,"endpoint":0},"sendReport",[1,0,28]]}
et la normalement elle devrait se fermer, sauf s’il fait 28° chez vous :smiley: .

Voila j’espère que cela aidera

3 « J'aime »

Cool, donc c’est une solution facilement reproductible sur une installation native, c’est une bonne nouvelle. Je mettrai un lien vers ton post dans le post de tête pour faciliter la recherche de tes instructions.

Oui elle continue d’afficher la température qu’elle lit directement, c’est trompeur, mais effectivement quelques tests rapides permettent de vérifier qu’elle n’en tient plus compte.

Salut et merci pour cette solution ça à l’air de pas mal répondre à ce que je recherche.
Mais je me pose des questions quant à son implémentation. J’ai essayé mais ça ne marche pas.
Tout d’abord je n’avais pas JMQTT d’installé, juste MQTT avec ZWAVE-JS. J’ai donc installé JMQTT mais il ne m’a pas installé de broker car il a vu celui installé avec MQTT.
J’ai donc ajouté un broket, et je l’ai fait pointer vers celui qui est utilisé par Zwave-JS. Est ce que c’est la bonne chose à faire?
Ensuite dans la configuration j’ai mis ceci:


La connexion fonctionne, mais j’ai laissé les parametres par defaut, je ne suis pas sur que ce soit bon…

Merci

Salut,

Historiquement, est-ce que c’est Jeedom qui t’a installé Mosquitto ou tu l’as installé sur une autre machine ?
J’aurais bien essayé d’installer MQTT, mais quand j’ai essayé il se lance automatiquement dans la découverte automatique des équipements, et ça fait suer mon serveur. Apparemment il y a moyen de désactiver ça sur la page de configuration du plugin, mais rien trouvé pour ma part.

Bref, si tu as toujours utilisé le Mosquitto installé par défaut par Jeedom je pense que c’est ok ainsi.
Il faudrait demander à @Rom8515 où il a exactement vu le nom de sa passerelle, je présume que c’est dans les réglages de Zwave-JS.

Si tu utilises MQTT Explorer depuis un PC par exemple, et que tu te connectes au broker, tu devrais avoir quelque chose du style :

mqtt_explorer_2

Où Zwavejs2Mqtt est le nom de la passerelle, possible que ce soit Jeedom chez toi comme chez @Rom8515

J’ai pas mal progressé depuis mon dernier message. Tout d’abord j’ai coché les cases « Topic des interactions de Jeedom » et « Topic de l’API de Jeedom ».
Dans mon cas je ne cherche pas à envoyer la temperature à une vanne Eurotronic mais à un thermostat Stelpro. Ça fonctionne sur Home Assistant et c’est pas loin de ce que je vois ici:

J’ai donc créé une commande « Send »

Lorsque je clic sur « Tester » et que je regarde le log de debug dans MQTT je peux voir que l’info est reçu

Mais pas de changement au niveau du thermostat. Il ne manque pas grand chose…

Quelques remarques :

  • à la place du NodeID « 9 » en dur, j’utiliserais l’équipement associé.

  • j’essaierais si j’étais toi d’enlever le paramètre property, tout simplement car c’est ce que le 1 après le crochet ouvrant est sensé définir, qu’on souhaite écrire sur la température.

  • essaie dans un premier temps avant d’envoyer la température extérieure d’envoyer une valeur fixe sans décimale, d’après le commentaire de LKroeke dans le sujet que tu as mis en lien, le thermostat ne renvoie que les demi-degrés, ça pourrait avoir une influence.

  • le message de freshcoast est identique à ce que j’utilise pour les vannes (modulo la syntaxe en yaml de HA), et ça a l’air de fonctionner d’après drkrool, ce qui renforce l’idée de se concentrer sur les indications de freshcoast plutôt que LKroeker (vérifie pour les demi-degrés quand même, car s’il fait son arrondi au moment de l’envoi de la commande, c’est potentiellement que le thermostat n’est lui, pas capable de le faire en recevant la température par ce biais).

Merci pour tes conseils, malheureusement ça ne change rien. C’est ce que j’avais essayé initialement, pas de property, et une valeur fixe pour la temperature.
J’essaye de debuguer, est ce qu’il est possible d’envoyer un message directement depuis l’interface de Z-WAVE JS UI?