matterbridge-zigbee2mqtt 3.0.8 → 3.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -26,6 +26,29 @@ If you like this project and find it useful, please consider giving it a star on
26
26
 
27
27
  <a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="120"></a>
28
28
 
29
+ ## [3.0.9] - 2026-03-21
30
+
31
+ ### Added
32
+
33
+ - [config]: Add titles to config.
34
+ - [package]: Require matterbridge v.3.7.0.
35
+ - [mqtt]: In debug mode, a file bridge-publish-payloads.txt is created in the plugin directory with the first 10000 commands.
36
+
37
+ ### Changed
38
+
39
+ - [package]: Update dependencies.
40
+ - [package]: Bump package to `automator` v.3.1.3.
41
+ - [devcontainer]: Update `Dev Container` configuration.
42
+ - [devcontainer]: Add postStartCommand to the `Dev Container` configuration.
43
+ - [package]: Refactor `build.yml` to use matterbridge dev branch for push and main for pull requests.
44
+ - [package]: Add `type checking` script for Jest tests.
45
+ - [package]: Update actions versions in workflows.
46
+ - [package]: Bump `eslint` to v.10.1.0.
47
+ - [package]: Add `CODE_OF_CONDUCT.md`.
48
+ - [package]: Bump `typescript-eslint` to v.8.57.1.
49
+
50
+ <a href="https://www.buymeacoffee.com/luligugithub"><img src="https://matterbridge.io/assets/bmc-button.svg" alt="Buy me a coffee" width="80"></a>
51
+
29
52
  ## [3.0.8] - 2026-02-28
30
53
 
31
54
  ### Dev Breaking Changes
package/dist/entity.js CHANGED
@@ -102,7 +102,7 @@ export class ZigbeeEntity extends EventEmitter {
102
102
  Object.entries(payload).forEach(([key, value]) => {
103
103
  if (value === undefined || value === null)
104
104
  return;
105
- if (this.bridgedDevice === undefined || this.noUpdate)
105
+ if (this.bridgedDevice === undefined)
106
106
  return;
107
107
  if (key === 'voltage' && this.isDevice && this.device?.power_source === 'Battery')
108
108
  key = 'battery_voltage';
package/dist/module.js CHANGED
@@ -41,8 +41,8 @@ export class ZigbeePlatform extends MatterbridgeDynamicPlatform {
41
41
  constructor(matterbridge, log, config) {
42
42
  super(matterbridge, log, config);
43
43
  this.config = config;
44
- if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('3.5.0')) {
45
- throw new Error(`This plugin requires Matterbridge version >= "3.5.0". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend."`);
44
+ if (this.verifyMatterbridgeVersion === undefined || typeof this.verifyMatterbridgeVersion !== 'function' || !this.verifyMatterbridgeVersion('3.7.0')) {
45
+ throw new Error(`This plugin requires Matterbridge version >= "3.7.0". Please update Matterbridge from ${this.matterbridge.matterbridgeVersion} to the latest version in the frontend."`);
46
46
  }
47
47
  this.shouldStart = false;
48
48
  this.shouldConfigure = false;
@@ -5,73 +5,88 @@
5
5
  "required": ["host", "port", "topic"],
6
6
  "properties": {
7
7
  "name": {
8
+ "title": "Plugin Name",
8
9
  "description": "Plugin name",
9
10
  "type": "string",
10
11
  "readOnly": true,
11
12
  "ui:widget": "hidden"
12
13
  },
13
14
  "type": {
15
+ "title": "Plugin Type",
14
16
  "description": "Plugin type",
15
17
  "type": "string",
16
18
  "readOnly": true,
17
19
  "ui:widget": "hidden"
18
20
  },
19
21
  "host": {
22
+ "title": "MQTT Host",
20
23
  "description": "MQTT server host (IP address or hostname with mqtt:// or mqtts:// or ws:// or wss:// prefix) or mqtt+unix://<SOCKET_PATH> for Unix socket on Linux (e.g. mqtt+unix:///var/run/mosquitto/mqtt.sock). For secure connections, use the mqtts:// or wss:// prefix and ensure your certificates are configured. If you use a hostname, make sure that the hostname is resolvable by the system running matterbridge.",
21
24
  "type": "string",
22
25
  "default": "mqtt://localhost"
23
26
  },
24
27
  "port": {
28
+ "title": "MQTT Port",
25
29
  "description": "MQTT server port (i.e. 1883 for mqtt://, 8883 for mqtts://, 9001 for ws:// or 9443 for wss://). For Unix socket, this value is ignored.",
26
30
  "type": "number",
27
31
  "default": 1883
28
32
  },
29
33
  "protocolVersion": {
34
+ "title": "MQTT Protocol Version",
30
35
  "description": "MQTT server protocol version 3, 4 or 5 (default 5). Version 5 is recommended for most modern MQTT brokers.",
31
36
  "type": "number",
32
37
  "default": 5
33
38
  },
34
39
  "username": {
40
+ "title": "MQTT Username",
35
41
  "description": "MQTT server authentication user. Only required if the MQTT server requires authentication (i.e allow_anonymous false)",
36
42
  "type": "string"
37
43
  },
38
44
  "password": {
45
+ "title": "MQTT Password",
39
46
  "description": "MQTT server authentication password. Only required if the MQTT server requires authentication (i.e allow_anonymous false)",
40
47
  "type": "string",
41
48
  "ui:widget": "password"
42
49
  },
43
50
  "clientId": {
51
+ "title": "MQTT Client ID",
44
52
  "description": "MQTT clientId identifier. If not set, a random clientId will be generated.",
45
53
  "type": "string"
46
54
  },
47
55
  "ca": {
56
+ "title": "MQTT CA Certificate",
48
57
  "description": "Absolute path to the SSL/TLS CA certificate used to sign both the server and client certificates (PEM format). Required for secure connections (i.e. mqtts://) with self-signed certificates.",
49
58
  "type": "string"
50
59
  },
51
60
  "rejectUnauthorized": {
61
+ "title": "MQTT Reject Unauthorized",
52
62
  "description": "Reject unauthorized MQTT server. Only used for secure connections (i.e. mqtts://).",
53
63
  "type": "boolean",
54
64
  "default": true
55
65
  },
56
66
  "cert": {
67
+ "title": "MQTT Client Certificate",
57
68
  "description": "Absolute path to the SSL/TLS MQTT client certificate (PEM format). Only required if the MQTT server requires a client certificate for authentication (i.e. require_certificate true).",
58
69
  "type": "string"
59
70
  },
60
71
  "key": {
72
+ "title": "MQTT Client Private Key",
61
73
  "description": "Absolute path to the SSL/TLS MQTT client private key (PEM format). Only required if the MQTT server requires a client certificate for authentication (i.e. require_certificate true).",
62
74
  "type": "string"
63
75
  },
64
76
  "topic": {
77
+ "title": "MQTT Topic",
65
78
  "description": "MQTT base topic for Zigbee2MQTT MQTT messages. This should match the base_topic in your Zigbee2MQTT configuration.yaml file.",
66
79
  "type": "string",
67
80
  "default": "zigbee2mqtt"
68
81
  },
69
82
  "zigbeeFrontend": {
83
+ "title": "Zigbee Frontend",
70
84
  "description": "Zigbee frontend host to prefix the configUrl from matterbridge frontend (i.e. http://192.168.1.100:8080)",
71
85
  "type": "string",
72
86
  "default": "http://localhost:8080"
73
87
  },
74
88
  "whiteList": {
89
+ "title": "White List",
75
90
  "description": "Only the devices in the list will be exposed. If the list is empty, all the devices will be exposed.",
76
91
  "type": "array",
77
92
  "items": {
@@ -81,6 +96,7 @@
81
96
  "selectFrom": "name"
82
97
  },
83
98
  "blackList": {
99
+ "title": "Black List",
84
100
  "description": "The devices in the list will not be exposed. If the list is empty, no devices will be excluded.",
85
101
  "type": "array",
86
102
  "items": {
@@ -90,6 +106,7 @@
90
106
  "selectFrom": "name"
91
107
  },
92
108
  "switchList": {
109
+ "title": "Switch List",
93
110
  "description": "The devices in the list will be exposed like switches (don't use it for Alexa, use lightList or outletList instead).",
94
111
  "type": "array",
95
112
  "items": {
@@ -99,6 +116,7 @@
99
116
  "selectFrom": "name"
100
117
  },
101
118
  "lightList": {
119
+ "title": "Light List",
102
120
  "description": "The devices in the list will be exposed like lights.",
103
121
  "type": "array",
104
122
  "items": {
@@ -108,6 +126,7 @@
108
126
  "selectFrom": "name"
109
127
  },
110
128
  "outletList": {
129
+ "title": "Outlet List",
111
130
  "description": "The devices in the list will be exposed like outlets.",
112
131
  "type": "array",
113
132
  "items": {
@@ -117,6 +136,7 @@
117
136
  "selectFrom": "name"
118
137
  },
119
138
  "featureBlackList": {
139
+ "title": "Feature Black List",
120
140
  "description": "The features in the list will not be exposed for all devices.",
121
141
  "type": "array",
122
142
  "items": {
@@ -126,6 +146,7 @@
126
146
  "selectEntityFrom": "name"
127
147
  },
128
148
  "deviceFeatureBlackList": {
149
+ "title": "Device Feature Black List",
129
150
  "description": "List of features not to be exposed for a single device. Enter in the first field the name of the device and in the list add all the features to exclude.",
130
151
  "type": "object",
131
152
  "uniqueItems": true,
@@ -141,6 +162,7 @@
141
162
  }
142
163
  },
143
164
  "scenesType": {
165
+ "title": "Scenes Device Type",
144
166
  "description": "Device type to use to expose scenes",
145
167
  "type": "string",
146
168
  "oneOf": [
@@ -164,21 +186,25 @@
164
186
  "default": "outlet"
165
187
  },
166
188
  "scenesPrefix": {
189
+ "title": "Scenes Prefix",
167
190
  "description": "Add the device/group friendly name before the scene name.",
168
191
  "type": "boolean",
169
192
  "default": true
170
193
  },
171
194
  "postfix": {
195
+ "title": "Device Postfix",
172
196
  "description": "Add this unique postfix (3 characters max) to each device serial to avoid collision with other instances (you may loose the configuration of the devices in your controller when changing this value).",
173
197
  "type": "string",
174
198
  "default": ""
175
199
  },
176
200
  "debug": {
201
+ "title": "Enable Debug",
177
202
  "description": "Enable the debug for the plugin (development only)",
178
203
  "type": "boolean",
179
204
  "default": false
180
205
  },
181
206
  "unregisterOnShutdown": {
207
+ "title": "Unregister On Shutdown",
182
208
  "description": "Unregister all devices on shutdown (development only)",
183
209
  "type": "boolean",
184
210
  "default": false,
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "matterbridge-zigbee2mqtt",
3
- "version": "3.0.8",
3
+ "version": "3.0.9",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "matterbridge-zigbee2mqtt",
9
- "version": "3.0.8",
9
+ "version": "3.0.9",
10
10
  "license": "Apache-2.0",
11
11
  "dependencies": {
12
12
  "moment": "2.30.1",
@@ -23,18 +23,18 @@
23
23
  }
24
24
  },
25
25
  "node_modules/@babel/runtime": {
26
- "version": "7.28.6",
27
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
28
- "integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
26
+ "version": "7.29.2",
27
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
28
+ "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
29
29
  "license": "MIT",
30
30
  "engines": {
31
31
  "node": ">=6.9.0"
32
32
  }
33
33
  },
34
34
  "node_modules/@types/node": {
35
- "version": "25.3.2",
36
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.2.tgz",
37
- "integrity": "sha512-RpV6r/ij22zRRdyBPcxDeKAzH43phWVKEjL2iksqo1Vz3CuBUrgmPpPhALKiRfU7OMCmeeO9vECBMsV0hMTG8Q==",
35
+ "version": "25.5.0",
36
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
37
+ "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
38
38
  "license": "MIT",
39
39
  "dependencies": {
40
40
  "undici-types": "~7.18.0"
@@ -103,15 +103,15 @@
103
103
  }
104
104
  },
105
105
  "node_modules/broker-factory": {
106
- "version": "3.1.13",
107
- "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.13.tgz",
108
- "integrity": "sha512-H2VALe31mEtO/SRcNp4cUU5BAm1biwhc/JaF77AigUuni/1YT0FLCJfbUxwIEs9y6Kssjk2fmXgf+Y9ALvmKlw==",
106
+ "version": "3.1.14",
107
+ "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.14.tgz",
108
+ "integrity": "sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==",
109
109
  "license": "MIT",
110
110
  "dependencies": {
111
- "@babel/runtime": "^7.28.6",
112
- "fast-unique-numbers": "^9.0.26",
111
+ "@babel/runtime": "^7.29.2",
112
+ "fast-unique-numbers": "^9.0.27",
113
113
  "tslib": "^2.8.1",
114
- "worker-factory": "^7.0.48"
114
+ "worker-factory": "^7.0.49"
115
115
  }
116
116
  },
117
117
  "node_modules/buffer": {
@@ -215,12 +215,12 @@
215
215
  }
216
216
  },
217
217
  "node_modules/fast-unique-numbers": {
218
- "version": "9.0.26",
219
- "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.26.tgz",
220
- "integrity": "sha512-3Mtq8p1zQinjGyWfKeuBunbuFoixG72AUkk4VvzbX4ykCW9Q4FzRaNyIlfQhUjnKw2ARVP+/CKnoyr6wfHftig==",
218
+ "version": "9.0.27",
219
+ "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz",
220
+ "integrity": "sha512-nDA9ADeINN8SA2u2wCtU+siWFTTDqQR37XvgPIDDmboWQeExz7X0mImxuaN+kJddliIqy2FpVRmnvRZ+j8i1/A==",
221
221
  "license": "MIT",
222
222
  "dependencies": {
223
- "@babel/runtime": "^7.28.6",
223
+ "@babel/runtime": "^7.29.2",
224
224
  "tslib": "^2.8.1"
225
225
  },
226
226
  "engines": {
@@ -555,50 +555,50 @@
555
555
  "license": "MIT"
556
556
  },
557
557
  "node_modules/worker-factory": {
558
- "version": "7.0.48",
559
- "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.48.tgz",
560
- "integrity": "sha512-CGmBy3tJvpBPjUvb0t4PrpKubUsfkI1Ohg0/GGFU2RvA9j/tiVYwKU8O7yu7gH06YtzbeJLzdUR29lmZKn5pag==",
558
+ "version": "7.0.49",
559
+ "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.49.tgz",
560
+ "integrity": "sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==",
561
561
  "license": "MIT",
562
562
  "dependencies": {
563
- "@babel/runtime": "^7.28.6",
564
- "fast-unique-numbers": "^9.0.26",
563
+ "@babel/runtime": "^7.29.2",
564
+ "fast-unique-numbers": "^9.0.27",
565
565
  "tslib": "^2.8.1"
566
566
  }
567
567
  },
568
568
  "node_modules/worker-timers": {
569
- "version": "8.0.30",
570
- "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.30.tgz",
571
- "integrity": "sha512-8P7YoMHWN0Tz7mg+9oEhuZdjBIn2z6gfjlJqFcHiDd9no/oLnMGCARCDkV1LR3ccQus62ZdtIp7t3aTKrMLHOg==",
569
+ "version": "8.0.31",
570
+ "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-8.0.31.tgz",
571
+ "integrity": "sha512-ngkq5S6JuZyztom8tDgBzorLo9byhBMko/sXfgiUD945AuzKGg1GCgDMCC3NaYkicLpGKXutONM36wEX8UbBCA==",
572
572
  "license": "MIT",
573
573
  "dependencies": {
574
- "@babel/runtime": "^7.28.6",
574
+ "@babel/runtime": "^7.29.2",
575
575
  "tslib": "^2.8.1",
576
- "worker-timers-broker": "^8.0.15",
577
- "worker-timers-worker": "^9.0.13"
576
+ "worker-timers-broker": "^8.0.16",
577
+ "worker-timers-worker": "^9.0.14"
578
578
  }
579
579
  },
580
580
  "node_modules/worker-timers-broker": {
581
- "version": "8.0.15",
582
- "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-8.0.15.tgz",
583
- "integrity": "sha512-Te+EiVUMzG5TtHdmaBZvBrZSFNauym6ImDaCAnzQUxvjnw+oGjMT2idmAOgDy30vOZMLejd0bcsc90Axu6XPWA==",
581
+ "version": "8.0.16",
582
+ "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-8.0.16.tgz",
583
+ "integrity": "sha512-JyP3AvUGyPGbBGW7XiUewm2+0pN/aYo1QpVf5kdXAfkDZcN3p7NbWrG6XnyDEpDIvfHk/+LCnOW/NsuiU9riYA==",
584
584
  "license": "MIT",
585
585
  "dependencies": {
586
- "@babel/runtime": "^7.28.6",
587
- "broker-factory": "^3.1.13",
588
- "fast-unique-numbers": "^9.0.26",
586
+ "@babel/runtime": "^7.29.2",
587
+ "broker-factory": "^3.1.14",
588
+ "fast-unique-numbers": "^9.0.27",
589
589
  "tslib": "^2.8.1",
590
- "worker-timers-worker": "^9.0.13"
590
+ "worker-timers-worker": "^9.0.14"
591
591
  }
592
592
  },
593
593
  "node_modules/worker-timers-worker": {
594
- "version": "9.0.13",
595
- "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-9.0.13.tgz",
596
- "integrity": "sha512-qjn18szGb1kjcmh2traAdki1eiIS5ikFo+L90nfMOvSRpuDw1hAcR1nzkP2+Hkdqz5thIRnfuWx7QSpsEUsA6Q==",
594
+ "version": "9.0.14",
595
+ "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-9.0.14.tgz",
596
+ "integrity": "sha512-/qF06C60sXmSLfUl7WglvrDIbspmPOM8UrG63Dnn4bi2x4/DfqHS/+dxF5B+MdHnYO5tVuZYLHdAodrKdabTIg==",
597
597
  "license": "MIT",
598
598
  "dependencies": {
599
- "@babel/runtime": "^7.28.6",
599
+ "@babel/runtime": "^7.29.2",
600
600
  "tslib": "^2.8.1",
601
- "worker-factory": "^7.0.48"
601
+ "worker-factory": "^7.0.49"
602
602
  }
603
603
  },
604
604
  "node_modules/ws": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-zigbee2mqtt",
3
- "version": "3.0.8",
3
+ "version": "3.0.9",
4
4
  "description": "Matterbridge zigbee2mqtt plugin",
5
5
  "author": "https://github.com/Luligu",
6
6
  "license": "Apache-2.0",
@@ -71,7 +71,7 @@
71
71
  "node-persist-manager": "2.0.1"
72
72
  },
73
73
  "overrides": {
74
- "eslint": "10.0.2",
74
+ "eslint": "10.1.0",
75
75
  "@eslint/js": "10.0.1"
76
76
  }
77
77
  }