Compare commits

..
16 Commits
Author SHA1 Message Date
Koen Kanters 672d2bf08a fix: Home Assistant: allow to override discovery type 2026-07-12 08:10:40 +02:00
luar123 a80c2db4c6 fix: Home Assistant: fix action published to wrong topic (#32544) 2026-07-12 07:52:32 +02:00
Koen Kanters e475de15c9 fix(ignore): update zigbee-herdsman-converters to 26.81.0 (#32543) 2026-07-11 19:37:24 +00:00
Andy 2ca80b8572 fix: experimental_event_entities and legacy_action_sensor require restart (#32535) 2026-07-11 21:13:46 +02:00
Koen Kanters 912fe4c250 fix(ignore): update zigbee-herdsman-converters to 26.80.0 (#32522) 2026-07-09 10:55:54 +00:00
dependabot[bot] 74478fd955 fix(ignore): bump the minor-patch group with 2 updates (#32514) 2026-07-08 19:30:55 +02:00
Koen Kanters 5591207dea fix: Support Node 26, remove Node 20 support (#32508) 2026-07-07 22:38:52 +02:00
dependabot[bot]dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Koen Kanters
83ca2746a7 fix(ignore): bump @types/node from 24.13.2 to 26.1.0 (#32453)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Koen Kanters <koenkanters94@gmail.com>
2026-07-07 22:31:18 +02:00
dependabot[bot]anddependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> 8f0d981765 fix(ignore): bump the minor-patch group with 2 updates (#32504)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 14:47:07 +02:00
Koen Kanters 6e557162cb fix(ignore): update zigbee-herdsman to 10.6.2 (#32500) 2026-07-06 18:57:40 +00:00
Koen Kanters a2973f21f6 fix(ignore): update zigbee-herdsman-converters to 26.79.0 (#32499) 2026-07-06 18:52:20 +00:00
Koen Kanters f88d99294b fix(ignore): update zigbee-herdsman-converters to 26.78.0 (#32489) 2026-07-05 10:06:58 +00:00
Maximilian Rink 344776b633 fix: Refresh exposes after manual device configure (#32486) 2026-07-05 08:50:33 +02:00
Koen Kanters 4b0c3067ff fix(ignore): update zigbee-herdsman-converters to 26.77.0 (#32462) 2026-07-02 05:40:32 +00:00
dependabot[bot] e8ba0b24f8 fix(ignore): bump the minor-patch group with 5 updates (#32452) 2026-07-01 19:35:51 +02:00
github-actions[bot] 2cfdd807ed chore: promote to dev 2026-07-01 06:13:56 +00:00
10 changed files with 213 additions and 198 deletions
+1 -1
View File
@@ -216,7 +216,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
node: [20, 22, 24]
node: [22, 24, 26]
runs-on: ${{ matrix.os }}
continue-on-error: true
steps:
+6 -5
View File
@@ -247,19 +247,20 @@ export default class EventBus {
this.callbacksByExtension.set(key.constructor.name, []);
}
const wrappedCallback = async (...args: never[]): Promise<void> => {
const typedCallback = callback as (...args: EventBusMap[K]) => Promise<void> | void;
const wrappedCallback = (async (...args: EventBusMap[K]): Promise<void> => {
try {
await callback(...args);
await typedCallback(...args);
} catch (error) {
logger.error(`EventBus error '${key.constructor.name}/${event}': ${(error as Error).message}`);
// biome-ignore lint/style/noNonNullAssertion: always Error
logger.debug((error as Error).stack!);
}
};
}) as EventBusListener<keyof EventBusMap>;
// biome-ignore lint/style/noNonNullAssertion: just created if wasn't valid
this.callbacksByExtension.get(key.constructor.name)!.push({event, callback: wrappedCallback});
this.emitter.on(event, wrappedCallback as EventBusListener<K>);
(this.emitter as events.EventEmitter).on(event, wrappedCallback);
}
public removeListeners(key: ListenerKey): void {
@@ -267,7 +268,7 @@ export default class EventBus {
if (callbacks) {
for (const cb of callbacks) {
this.emitter.removeListener(cb.event, cb.callback);
(this.emitter as events.EventEmitter).removeListener(cb.event, cb.callback);
}
}
}
+1 -1
View File
@@ -137,7 +137,7 @@ export default class Configure extends Extension {
logger.info(`Successfully configured '${device.name}' (definition v${definitionVersion})`);
device.zh.meta.configured = definitionVersion;
device.zh.save();
this.eventBus.emitDevicesChanged();
this.eventBus.emitExposesAndDevicesChanged(device);
} catch (error) {
const newAttempts = attempts + 1;
this.attempts.set(device.ieeeAddr, newAttempts);
+16 -13
View File
@@ -372,26 +372,29 @@ const featurePropertyWithoutEndpoint = (feature: zhc.Feature): string => {
return feature.property;
};
const applyHomeAssistantExposeMetadata = (payload: KeyValue, homeAssistant: zhc.Expose["homeassistant"]): void => {
const metadata = homeAssistant as KeyValue | undefined;
if (!metadata) {
const applyHomeAssistantExposeMetadata = (payload: DiscoveryEntry, homeAssistant: zhc.Expose["homeassistant"]): void => {
if (!homeAssistant) {
return;
}
if (typeof metadata.entityCategory === "string") {
payload.entity_category = metadata.entityCategory;
if (homeAssistant.type !== undefined) {
payload.type = homeAssistant.type;
}
if (typeof metadata.deviceClass === "string") {
payload.device_class = metadata.deviceClass;
if (homeAssistant.entityCategory !== undefined) {
payload.discovery_payload.entity_category = homeAssistant.entityCategory;
}
if (typeof metadata.enabledByDefault === "boolean") {
payload.enabled_by_default = metadata.enabledByDefault;
if (homeAssistant.deviceClass !== undefined) {
payload.discovery_payload.device_class = homeAssistant.deviceClass;
}
if (typeof metadata.icon === "string") {
payload.icon = metadata.icon;
if (homeAssistant.enabledByDefault !== undefined) {
payload.discovery_payload.enabled_by_default = homeAssistant.enabledByDefault;
}
if (homeAssistant.icon !== undefined) {
payload.discovery_payload.icon = homeAssistant.icon;
}
};
@@ -1407,7 +1410,7 @@ export class HomeAssistant extends Extension {
}
for (const entry of discoveryEntries) {
applyHomeAssistantExposeMetadata(entry.discovery_payload, firstExpose.homeassistant);
applyHomeAssistantExposeMetadata(entry, firstExpose.homeassistant);
// If a sensor has entity category `config`, then change
// it to `diagnostic`. Sensors have no input, so can't be configured.
@@ -1478,7 +1481,7 @@ export class HomeAssistant extends Extension {
if (match) {
const endpoint = match[1];
const endpointRegExp = new RegExp(`(.*)_${endpoint}`);
const endpointRegExp = new RegExp(`(.*)_${endpoint}$`);
const payload: KeyValue = {};
for (const key of Object.keys(data.message)) {
const keyMatch = endpointRegExp.exec(key);
-3
View File
@@ -1,8 +1,5 @@
// minimal required because of sub-deps in mqtt >= 5.14.0 to avoid requiring `dom` type
declare global {
// map to node, doesn't really matter, just needs to be there, and the right "type vs value" to avoid lib check problems
/** @deprecated DOM SHIM, DO NOT USE */
type MessagePort = import("node:worker_threads").MessagePort;
/** @deprecated DOM SHIM, DO NOT USE */
type Worker = import("node:worker_threads").Worker;
/** @deprecated DOM SHIM, DO NOT USE */
+1 -1
View File
@@ -6,7 +6,7 @@ declare module "zigbee2mqtt-frontend" {
export default frontend;
}
declare module "http" {
declare module "node:http" {
interface IncomingMessage {
originalUrl?: string;
path?: string;
+2
View File
@@ -33,12 +33,14 @@
"type": "boolean",
"title": "Home Assistant legacy action sensors",
"description": "Home Assistant legacy actions sensor, when enabled a action sensor will be discoverd and an empty `action` will be send after every published action.",
"requiresRestart": true,
"default": false
},
"experimental_event_entities": {
"type": "boolean",
"title": "Home Assistant experimental event entities",
"description": "Home Assistant experimental event entities, when enabled Zigbee2MQTT will add event entities for exposed actions. The events and attributes are currently deemed experimental and subject to change.",
"requiresRestart": true,
"default": false
}
},
+11 -11
View File
@@ -1,6 +1,6 @@
{
"name": "zigbee2mqtt",
"version": "2.12.1",
"version": "2.12.1-dev",
"description": "Zigbee to MQTT bridge using Zigbee-herdsman",
"main": "index.js",
"types": "dist/types/api.d.ts",
@@ -10,7 +10,7 @@
"url": "git+https://github.com/Koenkk/zigbee2mqtt.git"
},
"engines": {
"node": "^20.15.0 || ^22.2.0 || ^24"
"node": "^22.2.0 || ^24 || ^26"
},
"keywords": [
"xiaomi",
@@ -48,11 +48,11 @@
"express-static-gzip": "^3.0.1",
"fast-deep-equal": "^3.1.3",
"finalhandler": "^2.1.1",
"humanize-duration": "^3.33.2",
"js-yaml": "^5.0.0",
"humanize-duration": "^3.34.0",
"js-yaml": "^5.2.1",
"json-stable-stringify-without-jsonify": "^1.0.1",
"jszip": "^3.10.1",
"mqtt": "^5.15.1",
"mqtt": "^5.15.2",
"object-assign-deep": "^0.4.0",
"rimraf": "^6.1.3",
"semver": "^7.8.5",
@@ -62,19 +62,19 @@
"winston-syslog": "^2.7.1",
"winston-transport": "^4.9.0",
"ws": "^8.21.0",
"zigbee-herdsman": "10.6.1",
"zigbee-herdsman-converters": "26.76.0",
"zigbee-herdsman": "10.6.2",
"zigbee-herdsman-converters": "26.81.0",
"zigbee2mqtt-frontend": "0.9.21",
"zigbee2mqtt-windfront": "2.12.0"
"zigbee2mqtt-windfront": "2.12.1"
},
"devDependencies": {
"@biomejs/biome": "^2.5.0",
"@biomejs/biome": "^2.5.3",
"@types/finalhandler": "^1.2.3",
"@types/humanize-duration": "^3.27.4",
"@types/js-yaml": "^4.0.9",
"@types/node": "^24.13.2",
"@types/node": "^26.1.1",
"@types/object-assign-deep": "^0.4.3",
"@types/readable-stream": "4.0.23",
"@types/readable-stream": "4.0.24",
"@types/serve-static": "^2.2.0",
"@types/ws": "8.18.1",
"@vitest/coverage-v8": "^3.1.1",
+155 -155
View File
@@ -5,7 +5,7 @@ settings:
excludeLinksFromLockfile: false
overrides:
zigbee-herdsman: 10.6.1
zigbee-herdsman: 10.6.2
importers:
@@ -30,11 +30,11 @@ importers:
specifier: ^2.1.1
version: 2.1.1
humanize-duration:
specifier: ^3.33.2
version: 3.33.2
specifier: ^3.34.0
version: 3.34.0
js-yaml:
specifier: ^5.0.0
version: 5.0.0
specifier: ^5.2.1
version: 5.2.1
json-stable-stringify-without-jsonify:
specifier: ^1.0.1
version: 1.0.1
@@ -42,8 +42,8 @@ importers:
specifier: ^3.10.1
version: 3.10.1
mqtt:
specifier: ^5.15.1
version: 5.15.1
specifier: ^5.15.2
version: 5.15.2
object-assign-deep:
specifier: ^0.4.0
version: 0.4.0
@@ -72,21 +72,21 @@ importers:
specifier: ^8.21.0
version: 8.21.0
zigbee-herdsman:
specifier: 10.6.1
version: 10.6.1
specifier: 10.6.2
version: 10.6.2
zigbee-herdsman-converters:
specifier: 26.76.0
version: 26.76.0
specifier: 26.81.0
version: 26.81.0
zigbee2mqtt-frontend:
specifier: 0.9.21
version: 0.9.21
zigbee2mqtt-windfront:
specifier: 2.12.0
version: 2.12.0
specifier: 2.12.1
version: 2.12.1
devDependencies:
'@biomejs/biome':
specifier: ^2.5.0
version: 2.5.0
specifier: ^2.5.3
version: 2.5.3
'@types/finalhandler':
specifier: ^1.2.3
version: 1.2.4
@@ -97,14 +97,14 @@ importers:
specifier: ^4.0.9
version: 4.0.9
'@types/node':
specifier: ^24.13.2
version: 24.13.2
specifier: ^26.1.1
version: 26.1.1
'@types/object-assign-deep':
specifier: ^0.4.3
version: 0.4.3
'@types/readable-stream':
specifier: 4.0.23
version: 4.0.23
specifier: 4.0.24
version: 4.0.24
'@types/serve-static':
specifier: ^2.2.0
version: 2.2.0
@@ -113,7 +113,7 @@ importers:
version: 8.18.1
'@vitest/coverage-v8':
specifier: ^3.1.1
version: 3.2.4(vitest@3.2.4(@types/node@24.13.2))
version: 3.2.4(vitest@3.2.4(@types/node@26.1.1))
tmp:
specifier: ^0.2.7
version: 0.2.7
@@ -122,7 +122,7 @@ importers:
version: 6.0.3
vitest:
specifier: ^3.1.1
version: 3.2.4(@types/node@24.13.2)
version: 3.2.4(@types/node@26.1.1)
optionalDependencies:
unix-dgram:
specifier: ^2.0.7
@@ -147,8 +147,8 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
'@babel/runtime@7.29.2':
resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==}
'@babel/runtime@7.29.7':
resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==}
engines: {node: '>=6.9.0'}
'@babel/types@7.27.6':
@@ -159,55 +159,55 @@ packages:
resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==}
engines: {node: '>=18'}
'@biomejs/biome@2.5.0':
resolution: {integrity: sha512-4kURkd9hAPrdDM3C9n82ycYgx8hvQcW6MjKTEejruj8rK0N8P3OPpdy8BvI8kt3KWY4ycF5XtDOrktetEfhfuw==}
'@biomejs/biome@2.5.3':
resolution: {integrity: sha512-MrJswFdei9EfDwwUy2tQrPDpK0AO+RmMFvBoaaJ6ayBc3sUbHdCE+XG5N8vp+5So41ZupZJQm0roHFFhMGVD7A==}
engines: {node: '>=14.21.3'}
hasBin: true
'@biomejs/cli-darwin-arm64@2.5.0':
resolution: {integrity: sha512-Mn3Fwi3SA5fgmfCPqmzpWF2DLZnms3BVAhM088nTnGrTZmHS3wwIjcoZPqpXeNgd3DrrLH6xp8vTLIBuJoZiXw==}
'@biomejs/cli-darwin-arm64@2.5.3':
resolution: {integrity: sha512-QhYP9muVQ0nUO5zztFuPbEwi4+94sJWVjaZds9aMi1l/KNZBiUjdiSUrGHsTaMGDXrYl+r4AS2sUKfgH3w+V3g==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
'@biomejs/cli-darwin-x64@2.5.0':
resolution: {integrity: sha512-rg3VPL5P8mYro6pqlXYXuJWph21slVp3SZtAqWSrkZs40d2gTzYmHF8E/X1iTID25btmNKltNDJ926sqVBp7DQ==}
'@biomejs/cli-darwin-x64@2.5.3':
resolution: {integrity: sha512-NC1Ss13UaW7QZX+y8j44bF7AP0jSJdBl6iRhe0MAkvaSqZy+mWg3GaXsrb+eSoHoGDBtaXWEbMVV0iVN2cZ7cQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
'@biomejs/cli-linux-arm64-musl@2.5.0':
resolution: {integrity: sha512-vQdM4oSGaf7ZNeGO9w5+Y8SBtyser9M6znxYbm7Ec8wInxJu1WiKxFYZW5Auj2d80bcVvefuGGRxoFOE0eee8g==}
'@biomejs/cli-linux-arm64-musl@2.5.3':
resolution: {integrity: sha512-fccix0w6xp6csCXgxeC0dU/3ecgRQal0y+cv2SP9ajNlhe7Yrk2Ug7UDe2j9AT9ZDYitkXpvUKgZjjuoYeP4Vg==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
'@biomejs/cli-linux-arm64@2.5.0':
resolution: {integrity: sha512-tl+LW8fdD96/xdeWtWwc82LIOc5CoY7N2AsogLTp5R4ECErYt+8Jl/N68ezN9vzSiqPTxw6vjcihoLPYKZHrlw==}
'@biomejs/cli-linux-arm64@2.5.3':
resolution: {integrity: sha512-ksx1KWeyYW18ILL04msF/J4ZBtBDN33znYK8Z/aNv/vlBVxL9/g3mGP+omgHJKy4+KWbK87vcmmpmurfNjSgiA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
'@biomejs/cli-linux-x64-musl@2.5.0':
resolution: {integrity: sha512-+9hIcMngJ+yGUahXqZuZ8CoWKJE9SAZsFsM3QDvXpNsLbXZ9lqVzgBhOk/jTSYkOA0GLP9eu3teukqpLUojHMg==}
'@biomejs/cli-linux-x64-musl@2.5.3':
resolution: {integrity: sha512-O/yU9YKRUiHhmcjF2f38PSjseVk3G4VLWYc0G2HWpzdBVREV6G8IGWIVEFf7MFPfWIzNUIvPsEjeAZQIOgnLcQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
'@biomejs/cli-linux-x64@2.5.0':
resolution: {integrity: sha512-zpEGf4RQbFEh8Vt7OmavLyyOzRbtcE9osCqrS1kfvt8jDvxwhKXLSf7n0ebr/ov0RJ9ssP+lhs6C8a9WwFvrQA==}
'@biomejs/cli-linux-x64@2.5.3':
resolution: {integrity: sha512-yMkJtilsgvILDcVkh187aVLTb64xYsrxYajx5kym+r1ULkO5HUOfu9AYKLGQbOVLwJtT2utNw7hhFNg+17mUYA==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
'@biomejs/cli-win32-arm64@2.5.0':
resolution: {integrity: sha512-jB0wAvTLI4itx5VidqVUejPQFhRUxiZ9l9FvZ26D5fl6t3qme+ZB4PD3bTSeL1vZ8NI2Rx/zj6H9zcESuGHKGw==}
'@biomejs/cli-win32-arm64@2.5.3':
resolution: {integrity: sha512-cX5z+GYwRcqEok0AH3KSfQGgqYd0Nomfp6Fbe1uiTtELE38hdH2k842wQ9wLNaF/JJ7r4rjJQ4VR+ce+fRmQbw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
'@biomejs/cli-win32-x64@2.5.0':
resolution: {integrity: sha512-VT/lF+GId+67j8aDfLkxdxNoVApsPSTbyAtB3jJq0IWTrY77WXfbPfpngxq0bA6JCEv/7k8C9qWjDRKRznDlyw==}
'@biomejs/cli-win32-x64@2.5.3':
resolution: {integrity: sha512-ExSaJWi4/u6+GXCszlSKpWSjKNbDseAYqqkCznsCsZ/4uidZ/BEqsCc5/3ctlq6dfIubdIIRSVLC/PG9xPl70Q==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
@@ -553,14 +553,14 @@ packages:
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
'@types/node@24.13.2':
resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==}
'@types/node@26.1.1':
resolution: {integrity: sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==}
'@types/object-assign-deep@0.4.3':
resolution: {integrity: sha512-d9Gxaj5j1hzrxJ61EFEg13B4g4FgrT/DYtcDWFXPehR8DF2SUZbVMFtZIs8exkVRiqrqBpdTc/lUUZjncsPpMw==}
'@types/readable-stream@4.0.23':
resolution: {integrity: sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig==}
'@types/readable-stream@4.0.24':
resolution: {integrity: sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==}
'@types/serve-static@2.2.0':
resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
@@ -664,8 +664,8 @@ packages:
bl@6.1.6:
resolution: {integrity: sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg==}
bonjour-service@1.4.1:
resolution: {integrity: sha512-9KM4QMPKnaJqaja1v7gYO/+TXZGLtzPA05NmUTqDAJjcsWeVoOXKMvU9g0gfuuoYTQqJZ924hivICd5R/bCJbA==}
bonjour-service@1.4.2:
resolution: {integrity: sha512-lMskhnsW70yWHr4PhPeh2rvaIkLSaDpp+nmtbXBZaNKTXwxL73QOkW6HhbzqTImXjevn9TreGT4GACGBCGP9nQ==}
brace-expansion@2.1.0:
resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
@@ -674,8 +674,8 @@ packages:
resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==}
engines: {node: 18 || 20 || >=22}
broker-factory@3.1.14:
resolution: {integrity: sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==}
broker-factory@3.1.15:
resolution: {integrity: sha512-ko+aWvgNuP49meGrdjUu7rC+Y+Wai3cCPxP3xWwHsHfehFjOh5ZQM2yC4gEB2UddeZ/YXhm0K1eG/L6fxym2Og==}
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
@@ -889,11 +889,11 @@ packages:
resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
engines: {node: '>= 0.8'}
humanize-duration@3.33.2:
resolution: {integrity: sha512-K7Ny/ULO1hDm2nnhvAY+SJV1skxFb61fd073SG1IWJl+D44ULrruCuTyjHKjBVVcSuTlnY99DKtgEG39CM5QOQ==}
humanize-duration@3.34.0:
resolution: {integrity: sha512-NDxhYxiiRzsST6xULIHuYWRvsCtviJXRdjarhyWyh78S4Ou+MWhM2k4HQ+y7iegdrzreXe11isd0au1N2PB/pQ==}
iconv-lite@0.7.2:
resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
iconv-lite@0.7.3:
resolution: {integrity: sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==}
engines: {node: '>=0.10.0'}
ieee754@1.2.1:
@@ -905,8 +905,8 @@ packages:
inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
ip-address@10.1.0:
resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==}
ip-address@10.2.0:
resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==}
engines: {node: '>= 12'}
is-fullwidth-code-point@3.0.0:
@@ -952,8 +952,8 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
js-yaml@5.0.0:
resolution: {integrity: sha512-GSvaPUbk1U+FMZ7rJzF+F8e5YVtu7KnD40et/5rBXXRBv2jCO9L3qCewvIDDdudC0QycTFlf6EAA+h3kxBsuUw==}
js-yaml@5.2.1:
resolution: {integrity: sha512-zfLtNfQqxVqq3uaTqSkh4x4hZw3KHobGUA0fJUj4wawW8bsQLTVqpHdXSIzidh7o+4lEW36tANuAGdaFx6Zgnw==}
hasBin: true
json-schema-traverse@1.0.0:
@@ -981,8 +981,8 @@ packages:
lru-cache@10.4.3:
resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
lru-cache@11.2.7:
resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
lru-cache@11.5.1:
resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
engines: {node: 20 || >=22}
magic-string@0.30.17:
@@ -1021,8 +1021,8 @@ packages:
mqtt-packet@9.0.2:
resolution: {integrity: sha512-MvIY0B8/qjq7bKxdN1eD+nrljoeaai+qjLJgfRn3TiMuz0pamsIWY2bFODPZMSNmabsLANXsLl4EMoWvlaTZWA==}
mqtt@5.15.1:
resolution: {integrity: sha512-V1WnkGuJh3ec9QXzy5Iylw8OOBK+Xu1WhxcQ9mMpLThG+/JZIMV1PgLNRgIiqXhZnvnVLsuyxHl5A/3bHHbcAA==}
mqtt@5.15.2:
resolution: {integrity: sha512-VWZU2CSUY3U3oN0PSBRDE5SNsFi4zqqNeQ/uv3pZWqY3CrBXD/dhd0ZLjlsk5YnebGlrapi4lRVNJPUNQ5aZ3w==}
engines: {node: '>=16.0.0'}
hasBin: true
@@ -1196,8 +1196,8 @@ packages:
resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
socks@2.8.7:
resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==}
socks@2.8.9:
resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
source-map-js@1.2.1:
@@ -1316,8 +1316,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
undici-types@8.3.0:
resolution: {integrity: sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==}
unix-dgram@2.0.6:
resolution: {integrity: sha512-AURroAsb73BZ6CdAyMrTk/hYKNj3DuYYEuOaB8bYMOHGKupRNScw90Q5C71tWJc3uE7dIeXRyuwN0xLLq3vDTg==}
@@ -1427,17 +1427,17 @@ packages:
resolution: {integrity: sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==}
engines: {node: '>= 12.0.0'}
worker-factory@7.0.49:
resolution: {integrity: sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==}
worker-factory@7.0.50:
resolution: {integrity: sha512-hhwc0G+sFwM4qBuhJIUBn2p1Jf8v/FwmLUANBf/Q+Lt2uI8mfIZQhXaZQACodQD4R7Zp6cn/6702bIvNn2puJQ==}
worker-timers-broker@8.0.16:
resolution: {integrity: sha512-JyP3AvUGyPGbBGW7XiUewm2+0pN/aYo1QpVf5kdXAfkDZcN3p7NbWrG6XnyDEpDIvfHk/+LCnOW/NsuiU9riYA==}
worker-timers-broker@8.0.18:
resolution: {integrity: sha512-FrjzDVX1wKfZN0gRbCFqv8VHuTncG4sbI/WGEg4tSSQeIsnwqg4YBYWMAHYLJtUDEYYmiK65UKFrVMVk2irDSg==}
worker-timers-worker@9.0.14:
resolution: {integrity: sha512-/qF06C60sXmSLfUl7WglvrDIbspmPOM8UrG63Dnn4bi2x4/DfqHS/+dxF5B+MdHnYO5tVuZYLHdAodrKdabTIg==}
worker-timers-worker@9.0.15:
resolution: {integrity: sha512-KKUe7lZ/Aignr51H6hOUik8LwTnIgojH/1lwhli8A8qIEIyewogZTpNpMW5B6BF7nmwBOkUoTYgf1H3QShcjSA==}
worker-timers@8.0.31:
resolution: {integrity: sha512-ngkq5S6JuZyztom8tDgBzorLo9byhBMko/sXfgiUD945AuzKGg1GCgDMCC3NaYkicLpGKXutONM36wEX8UbBCA==}
worker-timers@8.0.33:
resolution: {integrity: sha512-RQVlKkek80v8M6SHvdMKiywaXFmX3XTpYTXTw0r62PdXB06t74XNxcTuG8wsQwnjorAQymNQyyQ0rzv7PykEMQ==}
wrap-ansi@7.0.0:
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
@@ -1459,12 +1459,12 @@ packages:
utf-8-validate:
optional: true
zigbee-herdsman-converters@26.76.0:
resolution: {integrity: sha512-JSgW/9Yn5xdfUHvyXunKSqoPk7w6wY+0OEzOiqBs/hr67o9YSXKc4joUr/dbRMXJcv7fNlDNDRvIDS41b2758Q==}
zigbee-herdsman-converters@26.81.0:
resolution: {integrity: sha512-jltBt3hlNMfI54RMnX/htM/BbOaXB6Ov0itgmyzxcnZpnMUFZT8Qic484g0INCkMYjUFSXKAXgOEZ/YxPimCCA==}
engines: {node: '>=20.15.0'}
zigbee-herdsman@10.6.1:
resolution: {integrity: sha512-BXy2jai1R6OkJ7gWFwS8J6vKJ7Mm+vfReDcuN+IPCmHdT65oiaZ6oZDY/thjG7ePMHD2m0YD8AZvi7o5LBNPpQ==}
zigbee-herdsman@10.6.2:
resolution: {integrity: sha512-Eiuf4zx833vU/PxiRbOD2yeFqesn3FUfTDOJ7dwqbvTUGgn1LujG+ZLF1GlIWX8S1jZXQTy336gkh7HaCQlTMA==}
zigbee-on-host@0.2.4:
resolution: {integrity: sha512-NIG6CWp+Yfn7PjqEIRvenHqpwT1U7rSkyimnFOUIFpnmxQOJKrmcwWDfn6WjbU/YIYYWSQPlj+g13icu1xwlyg==}
@@ -1474,8 +1474,8 @@ packages:
resolution: {integrity: sha512-ClHYlG7g0v/tnIsD6kycNCi1ZEKIbQuU7lGJR3WqYcDmuqEMVcHDGbRiRwYRQcZGMxkqCf7guxNsXiKnC10+kg==}
engines: {node: '>=20.11'}
zigbee2mqtt-windfront@2.12.0:
resolution: {integrity: sha512-sDwgEFlmKMj9Sl9FLhfZPkYEd7185v4spwxYXZl7gwQR3xrxeWmnLHtpQ3DfTJd2Ns6V6hzC80Sp8EmB2z8KKg==}
zigbee2mqtt-windfront@2.12.1:
resolution: {integrity: sha512-uZJdQpCafLyptH3n9/Unhwas/lWt4vXobv2ipzHBaZP89nmRXMoQ3DsYhtDp3U2vpX3wx2tHwDmHIukT7OEugA==}
engines: {node: '>=22.12.0'}
snapshots:
@@ -1493,7 +1493,7 @@ snapshots:
dependencies:
'@babel/types': 7.27.6
'@babel/runtime@7.29.2': {}
'@babel/runtime@7.29.7': {}
'@babel/types@7.27.6':
dependencies:
@@ -1502,39 +1502,39 @@ snapshots:
'@bcoe/v8-coverage@1.0.2': {}
'@biomejs/biome@2.5.0':
'@biomejs/biome@2.5.3':
optionalDependencies:
'@biomejs/cli-darwin-arm64': 2.5.0
'@biomejs/cli-darwin-x64': 2.5.0
'@biomejs/cli-linux-arm64': 2.5.0
'@biomejs/cli-linux-arm64-musl': 2.5.0
'@biomejs/cli-linux-x64': 2.5.0
'@biomejs/cli-linux-x64-musl': 2.5.0
'@biomejs/cli-win32-arm64': 2.5.0
'@biomejs/cli-win32-x64': 2.5.0
'@biomejs/cli-darwin-arm64': 2.5.3
'@biomejs/cli-darwin-x64': 2.5.3
'@biomejs/cli-linux-arm64': 2.5.3
'@biomejs/cli-linux-arm64-musl': 2.5.3
'@biomejs/cli-linux-x64': 2.5.3
'@biomejs/cli-linux-x64-musl': 2.5.3
'@biomejs/cli-win32-arm64': 2.5.3
'@biomejs/cli-win32-x64': 2.5.3
'@biomejs/cli-darwin-arm64@2.5.0':
'@biomejs/cli-darwin-arm64@2.5.3':
optional: true
'@biomejs/cli-darwin-x64@2.5.0':
'@biomejs/cli-darwin-x64@2.5.3':
optional: true
'@biomejs/cli-linux-arm64-musl@2.5.0':
'@biomejs/cli-linux-arm64-musl@2.5.3':
optional: true
'@biomejs/cli-linux-arm64@2.5.0':
'@biomejs/cli-linux-arm64@2.5.3':
optional: true
'@biomejs/cli-linux-x64-musl@2.5.0':
'@biomejs/cli-linux-x64-musl@2.5.3':
optional: true
'@biomejs/cli-linux-x64@2.5.0':
'@biomejs/cli-linux-x64@2.5.3':
optional: true
'@biomejs/cli-win32-arm64@2.5.0':
'@biomejs/cli-win32-arm64@2.5.3':
optional: true
'@biomejs/cli-win32-x64@2.5.0':
'@biomejs/cli-win32-x64@2.5.3':
optional: true
'@colors/colors@1.6.0': {}
@@ -1757,7 +1757,7 @@ snapshots:
'@types/finalhandler@1.2.4':
dependencies:
'@types/node': 24.13.2
'@types/node': 26.1.1
'@types/http-errors@2.0.5': {}
@@ -1765,28 +1765,28 @@ snapshots:
'@types/js-yaml@4.0.9': {}
'@types/node@24.13.2':
'@types/node@26.1.1':
dependencies:
undici-types: 7.18.2
undici-types: 8.3.0
'@types/object-assign-deep@0.4.3': {}
'@types/readable-stream@4.0.23':
'@types/readable-stream@4.0.24':
dependencies:
'@types/node': 24.13.2
'@types/node': 26.1.1
'@types/serve-static@2.2.0':
dependencies:
'@types/http-errors': 2.0.5
'@types/node': 24.13.2
'@types/node': 26.1.1
'@types/triple-beam@1.3.5': {}
'@types/ws@8.18.1':
dependencies:
'@types/node': 24.13.2
'@types/node': 26.1.1
'@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@24.13.2))':
'@vitest/coverage-v8@3.2.4(vitest@3.2.4(@types/node@26.1.1))':
dependencies:
'@ampproject/remapping': 2.3.0
'@bcoe/v8-coverage': 1.0.2
@@ -1801,7 +1801,7 @@ snapshots:
std-env: 3.9.0
test-exclude: 7.0.1
tinyrainbow: 2.0.0
vitest: 3.2.4(@types/node@24.13.2)
vitest: 3.2.4(@types/node@26.1.1)
transitivePeerDependencies:
- supports-color
@@ -1813,13 +1813,13 @@ snapshots:
chai: 5.2.0
tinyrainbow: 2.0.0
'@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.13.2))':
'@vitest/mocker@3.2.4(vite@6.3.5(@types/node@26.1.1))':
dependencies:
'@vitest/spy': 3.2.4
estree-walker: 3.0.3
magic-string: 0.30.17
optionalDependencies:
vite: 6.3.5(@types/node@24.13.2)
vite: 6.3.5(@types/node@26.1.1)
'@vitest/pretty-format@3.2.4':
dependencies:
@@ -1897,12 +1897,12 @@ snapshots:
bl@6.1.6:
dependencies:
'@types/readable-stream': 4.0.23
'@types/readable-stream': 4.0.24
buffer: 6.0.3
inherits: 2.0.4
readable-stream: 4.7.0
bonjour-service@1.4.1:
bonjour-service@1.4.2:
dependencies:
fast-deep-equal: 3.1.3
multicast-dns: 7.2.5
@@ -1915,12 +1915,12 @@ snapshots:
dependencies:
balanced-match: 4.0.2
broker-factory@3.1.14:
broker-factory@3.1.15:
dependencies:
'@babel/runtime': 7.29.2
'@babel/runtime': 7.29.7
fast-unique-numbers: 9.0.27
tslib: 2.8.1
worker-factory: 7.0.49
worker-factory: 7.0.50
buffer-from@1.1.2: {}
@@ -2065,7 +2065,7 @@ snapshots:
fast-unique-numbers@9.0.27:
dependencies:
'@babel/runtime': 7.29.2
'@babel/runtime': 7.29.7
tslib: 2.8.1
fast-uri@3.1.0: {}
@@ -2133,9 +2133,9 @@ snapshots:
statuses: 2.0.2
toidentifier: 1.0.1
humanize-duration@3.33.2: {}
humanize-duration@3.34.0: {}
iconv-lite@0.7.2:
iconv-lite@0.7.3:
dependencies:
safer-buffer: 2.1.2
@@ -2145,7 +2145,7 @@ snapshots:
inherits@2.0.4: {}
ip-address@10.1.0: {}
ip-address@10.2.0: {}
is-fullwidth-code-point@3.0.0: {}
@@ -2190,7 +2190,7 @@ snapshots:
js-tokens@9.0.1: {}
js-yaml@5.0.0:
js-yaml@5.2.1:
dependencies:
argparse: 2.0.1
@@ -2224,7 +2224,7 @@ snapshots:
lru-cache@10.4.3: {}
lru-cache@11.2.7: {}
lru-cache@11.5.1: {}
magic-string@0.30.17:
dependencies:
@@ -2266,9 +2266,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
mqtt@5.15.1:
mqtt@5.15.2:
dependencies:
'@types/readable-stream': 4.0.23
'@types/readable-stream': 4.0.24
'@types/ws': 8.18.1
commist: 3.2.0
concat-stream: 2.0.0
@@ -2280,9 +2280,9 @@ snapshots:
number-allocator: 1.0.14
readable-stream: 4.7.0
rfdc: 1.4.1
socks: 2.8.7
socks: 2.8.9
split2: 4.2.0
worker-timers: 8.0.31
worker-timers: 8.0.33
ws: 8.21.0
transitivePeerDependencies:
- bufferutil
@@ -2337,7 +2337,7 @@ snapshots:
path-scurry@2.0.1:
dependencies:
lru-cache: 11.2.7
lru-cache: 11.5.1
minipass: 7.1.2
pathe@2.0.3: {}
@@ -2472,9 +2472,9 @@ snapshots:
smart-buffer@4.2.0: {}
socks@2.8.7:
socks@2.8.9:
dependencies:
ip-address: 10.1.0
ip-address: 10.2.0
smart-buffer: 4.2.0
source-map-js@1.2.1: {}
@@ -2571,7 +2571,7 @@ snapshots:
typescript@6.0.3: {}
undici-types@7.18.2: {}
undici-types@8.3.0: {}
unix-dgram@2.0.6:
dependencies:
@@ -2587,13 +2587,13 @@ snapshots:
util-deprecate@1.0.2: {}
vite-node@3.2.4(@types/node@24.13.2):
vite-node@3.2.4(@types/node@26.1.1):
dependencies:
cac: 6.7.14
debug: 4.4.3
es-module-lexer: 1.7.0
pathe: 2.0.3
vite: 6.3.5(@types/node@24.13.2)
vite: 6.3.5(@types/node@26.1.1)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -2608,7 +2608,7 @@ snapshots:
- tsx
- yaml
vite@6.3.5(@types/node@24.13.2):
vite@6.3.5(@types/node@26.1.1):
dependencies:
esbuild: 0.25.5
fdir: 6.4.6(picomatch@4.0.2)
@@ -2617,14 +2617,14 @@ snapshots:
rollup: 4.44.0
tinyglobby: 0.2.14
optionalDependencies:
'@types/node': 24.13.2
'@types/node': 26.1.1
fsevents: 2.3.3
vitest@3.2.4(@types/node@24.13.2):
vitest@3.2.4(@types/node@26.1.1):
dependencies:
'@types/chai': 5.2.2
'@vitest/expect': 3.2.4
'@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.13.2))
'@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@26.1.1))
'@vitest/pretty-format': 3.2.4
'@vitest/runner': 3.2.4
'@vitest/snapshot': 3.2.4
@@ -2642,11 +2642,11 @@ snapshots:
tinyglobby: 0.2.14
tinypool: 1.1.1
tinyrainbow: 2.0.0
vite: 6.3.5(@types/node@24.13.2)
vite-node: 3.2.4(@types/node@24.13.2)
vite: 6.3.5(@types/node@26.1.1)
vite-node: 3.2.4(@types/node@26.1.1)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 24.13.2
'@types/node': 26.1.1
transitivePeerDependencies:
- jiti
- less
@@ -2699,32 +2699,32 @@ snapshots:
triple-beam: 1.4.1
winston-transport: 4.9.0
worker-factory@7.0.49:
worker-factory@7.0.50:
dependencies:
'@babel/runtime': 7.29.2
'@babel/runtime': 7.29.7
fast-unique-numbers: 9.0.27
tslib: 2.8.1
worker-timers-broker@8.0.16:
worker-timers-broker@8.0.18:
dependencies:
'@babel/runtime': 7.29.2
broker-factory: 3.1.14
'@babel/runtime': 7.29.7
broker-factory: 3.1.15
fast-unique-numbers: 9.0.27
tslib: 2.8.1
worker-timers-worker: 9.0.14
worker-timers-worker: 9.0.15
worker-timers-worker@9.0.14:
worker-timers-worker@9.0.15:
dependencies:
'@babel/runtime': 7.29.2
'@babel/runtime': 7.29.7
tslib: 2.8.1
worker-factory: 7.0.49
worker-factory: 7.0.50
worker-timers@8.0.31:
worker-timers@8.0.33:
dependencies:
'@babel/runtime': 7.29.2
'@babel/runtime': 7.29.7
tslib: 2.8.1
worker-timers-broker: 8.0.16
worker-timers-worker: 9.0.14
worker-timers-broker: 8.0.18
worker-timers-worker: 9.0.15
wrap-ansi@7.0.0:
dependencies:
@@ -2740,21 +2740,21 @@ snapshots:
ws@8.21.0: {}
zigbee-herdsman-converters@26.76.0:
zigbee-herdsman-converters@26.81.0:
dependencies:
iconv-lite: 0.7.2
iconv-lite: 0.7.3
semver: 7.8.5
zigbee-herdsman: 10.6.1
zigbee-herdsman: 10.6.2
transitivePeerDependencies:
- supports-color
zigbee-herdsman@10.6.1:
zigbee-herdsman@10.6.2:
dependencies:
'@date-fns/tz': 1.5.0
'@serialport/bindings-cpp': 13.0.1
'@serialport/parser-delimiter': 13.0.0
'@serialport/stream': 13.0.0
bonjour-service: 1.4.1
bonjour-service: 1.4.2
debounce: 3.0.0
fast-deep-equal: 3.1.3
slip: 1.0.2
@@ -2766,4 +2766,4 @@ snapshots:
zigbee2mqtt-frontend@0.9.21: {}
zigbee2mqtt-windfront@2.12.0: {}
zigbee2mqtt-windfront@2.12.1: {}
+20 -8
View File
@@ -193,16 +193,28 @@ describe("Extension: Configure", () => {
});
it("Should allow to configure via MQTT", async () => {
const emitDevicesChanged = vi.spyOn(controller.eventBus, "emitDevicesChanged");
const emitExposesChanged = vi.spyOn(controller.eventBus, "emitExposesChanged");
mockClear(devices.remote);
expectRemoteNotConfigured();
await mockMQTTEvents.message("zigbee2mqtt/bridge/request/device/configure", "remote");
await flushPromises();
expectRemoteConfigured();
expect(mockMQTTPublishAsync).toHaveBeenCalledWith(
"zigbee2mqtt/bridge/response/device/configure",
stringify({data: {id: "remote"}, status: "ok"}),
{},
);
try {
await mockMQTTEvents.message("zigbee2mqtt/bridge/request/device/configure", "remote");
await flushPromises();
expectRemoteConfigured();
expect(emitDevicesChanged).toHaveBeenCalledTimes(1);
expect(emitExposesChanged).toHaveBeenCalledWith({
device: controller.zigbee.resolveEntity(devices.remote),
});
expect(mockMQTTPublishAsync).toHaveBeenCalledWith(
"zigbee2mqtt/bridge/response/device/configure",
stringify({data: {id: "remote"}, status: "ok"}),
{},
);
} finally {
emitExposesChanged.mockRestore();
emitDevicesChanged.mockRestore();
}
});
it("Fail to configure via MQTT when device does not exist", async () => {