Mqtt Discovery pour clavier Zipato (zwave)

Bonjour, j’essaye d’intégrer mon clavier Zipato zwave avec mqtt discovery.

Il est bien intégré, malheureusement , il n’y a pas toutes les commandes

Les commandes qui sont créées:

Batterie : zwave/Keypad/128/0/level
currentValue (alarm) : zwave/keypad/37/0/currentValue
Ouverture (Tamper): zwave/keypad/113/0/Home_Security/Cover_Status
plus toutes les commandes de la classe config 112

Je vois que zwave-js-ui déclare bien dans mqtt la commande cover-status:

homeassistant/binary_sensor/Keypad_1/cover_status/config
et elle est invoquée par
zwave/21/113/0/Home_Security/Cover_status

mais je ne trouve pas de discovery pour les commandes suivantes qu’il invoque ensuite:

zwave/21/113/0/Access_Control/Keypad_unlock_operation
zwave/21/113/0/Access_Control/Keypad_lock_operation

ça parait bien logique que mqtt discovery ne créer pas automatiquement une commande non déclarée…

est-ce qu’il y a un moyen de créer les commandes manuellement ?

evidemment j’imagine qu’en publiant ce qu’il faut mqtt discovery réagirait ,
mais sur homeassistant/binary_sensor/Keypad_1/cover_status/config il y a un gros payload

{"payload_on":3,"payload_off":0,"value_template":"{{ value_json.value }}","device_class":"opening","state_topic":"zwave/Keypad_1/113/0/Home_Security/Cover_status","availability":[{"payload_available":"true","payload_not_available":"false","topic":"zwave/Keypad_1/status","value_template":"{{'true' if value_json.value else 'false'}}"},{"topic":"zwave/_CLIENTS/ZWAVE_GATEWAY-Jeedom/status","value_template":"{{'online' if value_json.value else 'offline'}}"},{"payload_available":"true","payload_not_available":"false","topic":"zwave/driver/status"}],"availability_mode":"all","json_attributes_topic":"zwave/Keypad_1/113/0/Home_Security/Cover_status","device":{"identifiers":["zwavejs2mqtt_0xe300fa9c_node21"],"manufacturer":"Wintop","model":"Keypad with Alarm Activation RFID Tag (MINI KEYPAD RFID)","name":"Keypad 1","sw_version":"0.28"},"name":"Home Security","unique_id":"zwavejs2mqtt_0xe300fa9c_21-113-0-Home_Security-Cover_status"}

je veux bien un peu de conseil

Salut,

J’ai vu mais je dois rentrer dans les détails pour pouvoir répondre et pas sur d’avoir le temps demain ou après-demain donc je me note un premier rappel pour dans 3 jours.
C’est donc normal si je ne réponds pas avant

1 « J'aime »

Merci beaucoup!

j’ai bien essayé avec l’aide de perplexity de publier une découverte moi-même

{
  "name": "Keypad Unlock Operation",
  "uniq_id": "Keypad_1_Keypad_unlock_operation",
  "state_topic": "zwave/21/113/0/Access_Control/Keypad_unlock_operation",
  "payload_on": "1",               // on considère que userId >= 1 = unlocked
  "payload_off": "0",              // rien ou userId absent = locked
  "value_template": "{{ 1 if value_json.value.userId is defined else 0 }}",
  "device_class": "lock",
  "availability": [
    {
      "payload_available": "true",
      "payload_not_available": "false",
      "topic": "zwave/Keypad_1/status",
      "value_template": "{{ 'true' if value_json.value else 'false' }}"
    },
    {
      "topic": "zwave/_CLIENTS/ZWAVE_GATEWAY-Jeedom/status",
      "value_template": "{{ 'online' if value_json.value else 'offline' }}"
    },
    {
      "payload_available": "true",
      "payload_not_available": "false",
      "topic": "zwave/driver/status"
    }
  ],
  "availability_mode": "all",
  "device": {
    "identifiers": [
      "zwavejs2mqtt_0xe300fa9c_node21"
    ],
    "manufacturer": "Wintop",
    "model": "Keypad with Alarm Activation RFID Tag (MINI KEYPAD RFID)",
    "name": "Keypad 1",
    "sw_version": "0.28"
  }
}

mais j’atteins mon niveau d’incompétence :slight_smile:

[2026-04-06 20:26:45] DEBUG  new message:{"homeassistant":{"binary_sensor":{"Keypad_1":{"Keypad_unlock_operation":{"config":"{\n  \"name\": \"Keypad Unlock Operation\",\n  \"uniq_id\": \"Keypad_1_Keypad_unlock_operation\",\n  \"state_topic\": \"zwave\/21\/113\/0\/Access_Control\/Keypad_unlock_operation\",\n  \"payload_on\": \"1\",               \/\/ on consid\u00e8re que userId >= 1 = unlocked\n  \"payload_off\": \"0\",              \/\/ rien ou userId absent = locked\n  \"value_template\": \"{{ 1 if value_json.value.userId is defined else 0 }}\",\n  \"device_class\": \"lock\",\n  \"availability\": [\n    {\n      \"payload_available\": \"true\",\n      \"payload_not_available\": \"false\",\n      \"topic\": \"zwave\/Keypad_1\/status\",\n      \"value_template\": \"{{ 'true' if value_json.value else 'false' }}\"\n    },\n    {\n      \"topic\": \"zwave\/_CLIENTS\/ZWAVE_GATEWAY-Jeedom\/status\",\n      \"value_template\": \"{{ 'online' if value_json.value else 'offline' }}\"\n    },\n    {\n      \"payload_available\": \"true\",\n      \"payload_not_available\": \"false\",\n      \"topic\": \"zwave\/driver\/status\"\n    }\n  ],\n  \"availability_mode\": \"all\",\n  \"device\": {\n    \"identifiers\": [\n      \"zwavejs2mqtt_0xe300fa9c_node21\"\n    ],\n    \"manufacturer\": \"Wintop\",\n    \"model\": \"Keypad with Alarm Activation RFID Tag (MINI KEYPAD RFID)\",\n    \"name\": \"Keypad 1\",\n    \"sw_version\": \"0.28\"\n  }\n}"}}}}}
[2026-04-06 20:26:45] DEBUG  ==> type='binary_sensor' - content= {"Keypad_1":{"Keypad_unlock_operation":{"config":"{\n  \"name\": \"Keypad Unlock Operation\",\n  \"uniq_id\": \"Keypad_1_Keypad_unlock_operation\",\n  \"state_topic\": \"zwave\/21\/113\/0\/Access_Control\/Keypad_unlock_operation\",\n  \"payload_on\": \"1\",               \/\/ on consid\u00e8re que userId >= 1 = unlocked\n  \"payload_off\": \"0\",              \/\/ rien ou userId absent = locked\n  \"value_template\": \"{{ 1 if value_json.value.userId is defined else 0 }}\",\n  \"device_class\": \"lock\",\n  \"availability\": [\n    {\n      \"payload_available\": \"true\",\n      \"payload_not_available\": \"false\",\n      \"topic\": \"zwave\/Keypad_1\/status\",\n      \"value_template\": \"{{ 'true' if value_json.value else 'false' }}\"\n    },\n    {\n      \"topic\": \"zwave\/_CLIENTS\/ZWAVE_GATEWAY-Jeedom\/status\",\n      \"value_template\": \"{{ 'online' if value_json.value else 'offline' }}\"\n    },\n    {\n      \"payload_available\": \"true\",\n      \"payload_not_available\": \"false\",\n      \"topic\": \"zwave\/driver\/status\"\n    }\n  ],\n  \"availability_mode\": \"all\",\n  \"device\": {\n    \"identifiers\": [\n      \"zwavejs2mqtt_0xe300fa9c_node21\"\n    ],\n    \"manufacturer\": \"Wintop\",\n    \"model\": \"Keypad with Alarm Activation RFID Tag (MINI KEYPAD RFID)\",\n    \"name\": \"Keypad 1\",\n    \"sw_version\": \"0.28\"\n  }\n}"}}}
[2026-04-06 20:26:45] INFO  Nouvelle découverte, résumé des configuations:
[2026-04-06 20:26:45] INFO  - Importées:                 0
[2026-04-06 20:26:45] INFO  - Auto-création inactive:    0
[2026-04-06 20:26:45] INFO  - Topic ignoré:              0
[2026-04-06 20:26:45] INFO  - Erronées:                  1
[2026-04-06 20:26:45] INFO  - Non supportées:            0
[2026-04-06 20:26:45] INFO  - Total reçues:              1
[

Bon j’ai soumis une PR sur le repo zwave-js-ui pour traiter les event Notification dans Gateway.ts.

je déploierai ce week-end chez moi pour tester si ça marche avec ce device

2 « J'aime »

Bon alors, c’est plus compliqué que prévu, mais je commence à avoir des choses générées par zwave-js-ui:

Pour la commande

zwave/21/113/0/Access_Control/Keypad_unlock_operation
{"time":1775945790475,"value":{"userId":1}}

j’ai maintenant les déclarations suivantes:

homeassistant/sensor/nodeID_21/notification_access_control_keypad_unlock_operation/config
{"value_template":"{{ value_json.value | default('') }}","icon":"mdi:alarm-light","state_topic":"zwave/21/113/0/Access_Control/Keypad_unlock_operation","availability":[{"payload_available":"true","payload_not_available":"false","topic":"zwave/21/status","value_template":"{{'true' if value_json.value else 'false'}}"},{"topic":"zwave/_CLIENTS/ZWAVE_GATEWAY-Jeedom/status","value_template":"{{'online' if value_json.value else 'offline'}}"},{"payload_available":"true","payload_not_available":"false","topic":"zwave/driver/status"}],"availability_mode":"all","json_attributes_topic":"zwave/21/113/0/Access_Control/Keypad_unlock_operation","device":{"identifiers":["zwavejs2mqtt_0xe300fa9c_node21"],"manufacturer":"Wintop","model":"Keypad with Alarm Activation RFID Tag (MINI KEYPAD RFID)","name":"nodeID_21","sw_version":"0.28"},"name":"nodeID_21_notification_access_control_keypad_unlock_operation","unique_id":"zwavejs2mqtt_0xe300fa9c_21-113-0-Access_Control-Keypad_unlock_operation"}

et Mqtt Discovery le découvre bien: et crée la commande suivante:

Par contre j’ai besoin d’aide car je n’arrive pas à voir la commande « réagir » quand j’active le bouton sur le keypad:

[2026-04-12 00:42:10] DEBUG  new message:{"zwave":{"21":{"lastActive":{"time":1775947330418,"value":1775947330181},"113":[{"alarmType":{"time":1775947330168,"value":0},"alarmLevel":{"time":1775947330169,"value":0},"Access_Control":{"Keypad_unlock_operation":{"time":1775947330169,"value":{"userId":1}}}}],"status":{"time":1775947330181,"value":true,"status":"Awake","nodeId":21},"nodeinfo":{"id":21,"name":"","loc":"","neighbors":[],"ready":true,"available":true,"failed":false,"inited":true,"eventsQueue":[{"time":"2026-04-11T21:49:26.403Z","event":"sleep","args":[0]},{"time":"2026-04-11T21:49:26.661Z","event":"ready","args":[]},{"time":"2026-04-11T22:00:39.213Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:00:39.213Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":255,"prevValue":0,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:00:39.216Z","event":"notification","args":[113,{"type":6,"event":5,"label":"Access Control","eventLabel":"Keypad lock operation","parameters":{"userId":1}}]},{"time":"2026-04-11T22:00:39.229Z","event":"wake up","args":[1]},{"time":"2026-04-11T22:00:39.571Z","event":"sleep","args":[2]},{"time":"2026-04-11T22:12:01.674Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:12:01.674Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":0,"prevValue":255,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:12:01.675Z","event":"notification","args":[113,{"type":6,"event":6,"label":"Access Control","eventLabel":"Keypad unlock operation","parameters":{"userId":1}}]},{"time":"2026-04-11T22:12:01.689Z","event":"wake up","args":[1]},{"time":"2026-04-11T22:12:01.999Z","event":"sleep","args":[2]},{"time":"2026-04-11T22:12:05.943Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:12:05.943Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":255,"prevValue":0,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:12:05.944Z","event":"notification","args":[113,{"type":6,"event":5,"label":"Access Control","eventLabel":"Keypad lock operation","parameters":{"userId":1}}]},{"time":"2026-04-11T22:12:05.959Z","event":"wake up","args":[1]},{"time":"2026-04-11T22:12:06.269Z","event":"sleep","args":[2]},{"time":"2026-04-11T22:12:09.930Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:12:09.931Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":0,"prevValue":255,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:12:09.931Z","event":"notification","args":[113,{"type":6,"event":6,"label":"Access Control","eventLabel":"Keypad unlock operation","parameters":{"userId":1}}]},{"time":"2026-04-11T22:12:09.947Z","event":"wake up","args":[1]},{"time":"2026-04-11T22:12:10.257Z","event":"sleep","args":[2]},{"time":"2026-04-11T22:16:30.474Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:16:30.475Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":0,"prevValue":0,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:16:30.475Z","event":"notification","args":[113,{"type":6,"event":6,"label":"Access Control","eventLabel":"Keypad unlock operation","parameters":{"userId":1}}]},{"time":"2026-04-11T22:16:30.490Z","event":"wake up","args":[1]},{"time":"2026-04-11T22:16:30.800Z","event":"sleep","args":[2]},{"time":"2026-04-11T22:42:10.169Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmType","newValue":0,"prevValue":0,"propertyName":"alarmType"}]},{"time":"2026-04-11T22:42:10.169Z","event":"value updated","args":[{"commandClassName":"Notification","commandClass":113,"endpoint":0,"property":"alarmLevel","newValue":0,"prevValue":0,"propertyName":"alarmLevel"}]},{"time":"2026-04-11T22:42:10.169Z","event":"notification","args":[113,{"type":6,"event":6,"label":"Access Control","eventLabel":"Keypad unlock operation","parameters":{"userId":1}}]}],"status":"Awake","interviewStage":"Complete","priorityReturnRoute":[],"customReturnRoute":[],"prioritySUCReturnRoute":null,"customSUCReturnRoutes":[],"availableFirmwareUpdates":[],"firmwareUpdatesDismissed":[],"lastFirmwareUpdateCheck":1775933572781,"appliedTemplateContentHashes":[],"hexId":"0x0097 0x6131-0x4501","dbLink":"https:\/\/devices.zwave-js.io\/?jumpTo=0x0097:0x6131:0x4501:0.28","manufacturerId":151,"productId":17665,"productType":24881,"deviceConfig":{"filename":"\/opt\/zwave-js-ui\/store\/.config-db\/devices\/0x0097\/mini_keypad_rfid.json","isEmbedded":true,"manufacturer":"Wintop","manufacturerId":151,"label":"MINI KEYPAD RFID","description":"Keypad with Alarm Activation RFID Tag","devices":[{"productType":24881,"productId":16641},{"productType":24881,"productId":17665},{"productType":24881,"productId":21761}],"firmwareVersion":{"min":"0.0","max":"255.255"},"preferred":false,"associations":[],"paramInformation":{"_map":[]}},"productLabel":"MINI KEYPAD RFID","productDescription":"Keypad with Alarm Activation RFID Tag","manufacturer":"Wintop","firmwareVersion":"0.28","protocolVersion":3,"nodeType":1,"endpointsCount":0,"endpoints":[{"index":0,"label":"Root Endpoint","deviceClass":{"basic":4,"generic":64,"specific":0}}],"isSecure":false,"security":"None","supportsSecurity":false,"supportsBeaming":true,"isControllerNode":false,"isListening":false,"isFrequentListening":false,"isRouting":true,"keepAwake":false,"maxDataRate":40000,"deviceClass":{"basic":4,"generic":64,"specific":0},"lastActive":1775947330168,"firmwareCapabilities":{"firmwareUpgradable":false},"protocol":0,"deviceId":"151-17665-24881","hasDeviceConfigChanged":false,"batteryLevels":[39],"minBatteryLevel":39,"supportsTime":false,"statistics":{"commandsTX":5,"commandsRX":10,"commandsDroppedRX":0,"commandsDroppedTX":0,"timeoutResponse":0,"lastSeen":"2026-04-11T22:42:10.168Z","lwr":{"protocolDataRate":2,"repeaters":[],"repeaterRSSI":[]},"rtt":59.5}}}}}

D’où vient le discovery?
j’ai l’impression qu’il ne correspond pas à ce qui est reçu ensuite:

discovery

zwave/21/113/0/Access_Control/Keypad_unlock_operation

le topic reçu, si je simplifie:

"zwave"/"21"/"113": [
          "Access_Control": {
            "Keypad_unlock_operation": {
              "time": 1775947330169,
              "value": {
                "userId": 1
              }
            }
          }

y a pas de /0 : 113/0/Access_Control

Dans mqtt explorer je vois:

zwave/21/113/0/Access_Control/Keypad_unlock_operation
{
  "time":1775947330169,
  "value":{
    "userId":1
  }
}

et 
homeassistant/sensor/nodeID_21/notification_access_control_keypad_unlock_operation/config
{"value_template":"{{ value_json.value | default('') }}",
"icon":"mdi:alarm-light",
"state_topic":"zwave/21/113/0/Access_Control/Keypad_unlock_operation",
../..

le 0 correspond au endpoint.
Dans Gateway parameters j’ai choisi : topic type::ValueID topics

{
  "zwave": {
    "21": {
      "lastActive": {
        "time": 1775947330418,
        "value": 1775947330181
      },
      "113": [
        {
          "alarmType": { "time": 1775947330168, "value": 0 },
          "alarmLevel": { "time": 1775947330169, "value": 0 },
          "Access_Control": {
            "Keypad_unlock_operation": {
              "time": 1775947330169,
              "value": { "userId": 1 }
            }
          }
        }
      ],
      "status": {
        "time": 1775947330181,
        "value": true,
        "status": "Awake",
        "nodeId": 21
      },
      "nodeinfo": {
        "id": 21,
        "name": "",
        "loc": "",
        "neighbors": [],
        "ready": true,
        "available": true,
        "failed": false,
        "inited": true,
        "eventsQueue": [
          { "time": "2026-04-11T21:49:26.403Z", "event": "sleep", "args": [0] },
          { "time": "2026-04-11T21:49:26.661Z", "event": "ready", "args": [] },
          {
            "time": "2026-04-11T22:00:39.213Z",
            "event": "value updated",
            "args": [{
              "commandClassName": "Notification",
              "commandClass": 113,
              "endpoint": 0,
              "property": "alarmType",
              "newValue": 0,
              "prevValue": 0,
              "propertyName": "alarmType"
            }]
          },
          {
            "time": "2026-04-11T22:00:39.213Z",
            "event": "value updated",
            "args": [{
              "commandClassName": "Notification",
              "commandClass": 113,
              "endpoint": 0,
              "property": "alarmLevel",
              "newValue": 255,
              "prevValue": 0,
              "propertyName": "alarmLevel"
            }]
          },
          {
            "time": "2026-04-11T22:00:39.216Z",
            "event": "notification",
            "args": [113, {
              "type": 6,
              "event": 5,
              "label": "Access Control",
              "eventLabel": "Keypad lock operation",
              "parameters": { "userId": 1 }
            }]
          },
          { "time": "2026-04-11T22:00:39.229Z", "event": "wake up", "args": [1] },
          { "time": "2026-04-11T22:00:39.571Z", "event": "sleep", "args": [2] },
          {
            "time": "2026-04-11T22:12:01.674Z",
            "event": "value updated",
            "args": [{
              "commandClassName": "Notification",
              "commandClass": 113,
              "endpoint": 0,
              "property": "alarmType",
              "newValue": 0,
              "prevValue": 0,
              "propertyName": "alarmType"
            }]
          },
          {
            "time": "2026-04-11T22:12:01.674Z",
            "event": "value updated",
            "args": [{
              "commandClassName": "Notification",
              "commandClass": 113,
              "endpoint": 0,
              "property": "alarmLevel",
              "newValue": 0,
              "prevValue": 255,
              "propertyName": "alarmLevel"
            }]
          },
          {
            "time": "2026-04-11T22:12:01.675Z",
            "event": "notification",
            "args": [113, {
              "type": 6,
              "event": 6,
              "label": "Access Control",
              "eventLabel": "Keypad unlock operation",
              "parameters": { "userId": 1 }
            }]
          },
          { "time": "2026-04-11T22:12:01.689Z", "event": "wake up", "args": [1] },
          { "time": "2026-04-11T22:12:01.999Z", "event": "sleep", "args": [2] }
        ],
        "status": "Awake",
        "interviewStage": "Complete",
        "hexId": "0x0097 0x6131-0x4501",
        "dbLink": "https://devices.zwave-js.io/?jumpTo=0x0097:0x6131:0x4501:0.28",
        "manufacturerId": 151,
        "productId": 17665,
        "productType": 24881,
        "manufacturer": "Wintop",
        "productLabel": "MINI KEYPAD RFID",
        "productDescription": "Keypad with Alarm Activation RFID Tag",
        "firmwareVersion": "0.28",
        "isSecure": false,
        "security": "None",
        "deviceId": "151-17665-24881",
        "batteryLevels": [39],
        "minBatteryLevel": 39,
        "statistics": {
          "commandsTX": 5,
          "commandsRX": 10,
          "commandsDroppedRX": 0,
          "commandsDroppedTX": 0,
          "timeoutResponse": 0,
          "lastSeen": "2026-04-11T22:42:10.168Z",
          "lwr": {
            "protocolDataRate": 2,
            "repeaters": [],
            "repeaterRSSI": []
          },
          "rtt": 59.5
        }
      }
    }
  }
}

le discovery vient de zwave-js-ui comme ceci:

Access Control / Keypad unlock operation arrives via _onNotification, not _onValueChanged, because it’s a Z-Wave event (fire-and-forget), not a persistent value. It’s never in node.values at init time so normal discovery never sees it.

Fix: In _onNotification, on first occurrence we inject the valueId into node.values with stateless: true forced, call discoverValue, then remove it if discovery failed.

	private _onNotification(
		node: ZUINode,
		valueId: ZUIValueId,
		data: Record<string, any>,
	): void {
		// Check if this valueId is already discovered, if not discover it and then publish the notification on the value topic
	    if (this.config.hassDiscovery && !this.discovered[valueId.id]) {
    	    const vId = this._getIdWithoutNode(valueId)
        	node.values[vId] = { ...valueId, stateless: true }  // force stateless so discoverValue picks it up
        	this.discoverValue(node, vId)
        	if (!this.discovered[valueId.id]) {
            	delete node.values[vId]
        	}
    	}

et dans discoverValue()

                    } else if (
                        cmdClass === CommandClasses.Notification &&
                        valueId.stateless
                    ) {
                        cfg = utils.copy(hassCfg.sensor_generic)
                        cfg.object_id = utils.joinProps(
                            'notification',
                            valueId.property,
                            valueId.propertyKey,
                        )
                        cfg.discovery_payload.icon = 'mdi:alarm-light'

                        cfg.discovery_payload.value_template =
                            "{{ value_json.value | default('') }}"
					} else if (

et voici la trace de ce qui est reçu en entrée de zwave onNotification():

2026-04-11 23:49:26.656 WARN GATEWAY: discoverValue CC113 - nodeId: 21, full valueId: {
  id: '21-113-0-Home Security-unknown',
  nodeId: 21,
  toUpdate: false,
  commandClass: 113,
  commandClassName: 'Notification',
  endpoint: 0,
  property: 'Home Security',
  propertyName: 'Home Security',
  propertyKey: 'unknown',
  propertyKeyName: 'unknown',
  type: 'number',
  readable: true,
  writeable: false,
  description: undefined,
  label: 'Home Security: Unknown value',
  default: undefined,
  ccSpecific: { notificationType: 7 },
  stateless: false,
  commandClassVersion: 2,
  min: 0,
  max: 255,
  step: undefined,
  allowed: undefined,
  unit: undefined,
  list: false,
  value: 254,
  lastUpdate: 1775933553607
}
  allowed: undefined,
  unit: undefined,
  list: false,
  value: 0,
  lastUpdate: 1775941537914
}

Je pense que c’est parce que c’est une notification, commandClass 113 que ça ne marche pas bien.
zwave-js-ui n’envoyait pas de discovery pour les notifications, d’où ma modif sur _onNotification() pour faire un discovervalue().

ça marche très bien sur le reste:
Exemple sur volts pour une prise

homeassistant/sensor/nodeID_3/electric_v_value/config
{"value_template":"{{ value_json.value }}",
"unit_of_measurement":"V",
"state_class":"measurement",
"device_class":"voltage",
"state_topic":"zwave/3/50/0/value/66561",

zwave/3/50/0/value/66561
{"time":1775999266510,"value":236.44}

Tout marche impec pour les commandes à etat

Après, autre chose que je ne comprend pas, c’est que dans le plugin jeedom zwave, il crée d’autres commandes:

Nom                   Classe  Endpoint    Propriété
Alarm                    113      0       alarmLevel
Notification Type        113      0       notification-type
Notification Event       113      0       notification-event
Notification Label       113      0       notification-label
Notification Event Label 113      0       notification-eventLabel
User ID                  113      0       notification-parameters-userId

et je ne vois rien apparaître dans mqtt

Je pense que j’ai compris la correspondance entre:

  • ce que le broker zwave publie en json dans zwave/21/nodeinfo/eventQueue
  •       {
          "time": "2026-04-12T18:18:59.173Z",
          "event": "notification",
          "args": [
            113,
            {
              "type": 6,
              "event": 5,
              "label": "Access Control",
              "eventLabel": "Keypad lock operation",
              "parameters": {
                "userId": 2
              }
            }
          ]
        },
    

et ce que publie Gateway.ts dans

zwave/21/113/0/Access_Control/Keypad_lock_operation
{
  "time":1775947330169,
  "value":{
    "userId":1
  }

la conversion se fait dans ZwaveClient:_onNodeNotification()

		switch (ccId) {
			case CommandClasses.Notification:
				valueId.property = args.label
				valueId.propertyKey = args.eventLabel
				data = this._parseNotification(args.parameters)
				break

Je pense que j’ai plutôt un problème avec ma déclaration de discovery

je mets

value_template = {{ value_json.value | default('') }}

avec un payload qui arrive comme ça:

zwave/21/113/0/Access_Control/Keypad_unlock_operation
{"time":1775945790475,"value":{"userId":1}}

donc le state rendu ça va être {‹ userId ›: 1} ce qui déplait peut-être à la commande info dans mqtt-discovery ?

c’est moi qui décide du value_template dans Gateway.ts:discoverValue():

cfg.discovery_payload.value_template = "{{ value_json.value | default('') }}"

et tu veux récupérer quoi? le 1 de userId?

Oui, c’est ça; j’ai une modif sur le code de jwave-js-ui/Gateway.ts pour mieux positionner le value_template : feat(gateway): dynamically deduce value template for stateless notifi… · zwave-js/zwave-js-ui@94e4605 · GitHub

Je la testerai ce week-end