Skip to content

Commit 89e9138

Browse files
committed
Merge remote-tracking branch 'upstream/master' into feat/blz-local-dev
# Conflicts: # .github/workflows/ci.yml # package.json # pnpm-lock.yaml
2 parents 4282327 + 2b485a9 commit 89e9138

19 files changed

Lines changed: 1109 additions & 761 deletions

.github/workflows/ci.yml

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
- uses: actions/checkout@v6
3333
if: ((github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push') == false
3434

35-
- uses: pnpm/action-setup@v4
35+
- uses: pnpm/action-setup@v5
3636

3737
- uses: actions/setup-node@v6
3838
with:
@@ -81,24 +81,31 @@ jobs:
8181
compare-cmd: npx vitest bench --run --config ./test/vitest.config.mts --compare bench.json
8282
base-result: bench.json
8383

84+
- name: Log in to the Docker container registry
85+
if: (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/feat/blz-local-dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
86+
uses: docker/login-action@v4
87+
with:
88+
username: koenkk
89+
password: ${{ secrets.DOCKER_KEY }}
90+
8491
- name: Log in to the GitHub container registry
8592
if: (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/feat/blz-local-dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
86-
uses: docker/login-action@v3
93+
uses: docker/login-action@v4
8794
with:
8895
registry: ghcr.io
8996
username: ${{ github.repository_owner }}
9097
password: ${{ secrets.GH_TOKEN }}
9198

9299
- name: Docker setup - QEMU
93100
if: (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/feat/blz-local-dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
94-
uses: docker/setup-qemu-action@v3
101+
uses: docker/setup-qemu-action@v4
95102
with:
96103
platforms: all
97104

98105
- name: Docker setup - Buildx
99106
if: (github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/feat/blz-local-dev' || startsWith(github.ref, 'refs/tags/')) && github.event_name == 'push'
100107
id: buildx
101-
uses: docker/setup-buildx-action@v3
108+
uses: docker/setup-buildx-action@v4
102109
with:
103110
version: latest
104111

@@ -118,7 +125,7 @@ jobs:
118125
119126
- name: dev - Docker build and push (standard)
120127
if: github.ref == 'refs/heads/dev' && github.event_name == 'push'
121-
uses: docker/build-push-action@v6
128+
uses: docker/build-push-action@v7
122129
with:
123130
context: .
124131
file: docker/Dockerfile
@@ -153,7 +160,7 @@ jobs:
153160
154161
- name: release - Docker meta
155162
if: startsWith(github.ref, 'refs/tags/') && github.event_name == 'push'
156-
uses: docker/metadata-action@v5
163+
uses: docker/metadata-action@v6
157164
id: meta
158165
with:
159166
images: |
@@ -166,7 +173,7 @@ jobs:
166173
167174
- name: release - Docker build and push
168175
if: startsWith(github.ref, 'refs/tags/') && github.event_name == 'push'
169-
uses: docker/build-push-action@v6
176+
uses: docker/build-push-action@v7
170177
with:
171178
context: .
172179
file: docker/Dockerfile
@@ -250,7 +257,7 @@ jobs:
250257
steps:
251258
- uses: actions/checkout@v6
252259

253-
- uses: pnpm/action-setup@v4
260+
- uses: pnpm/action-setup@v5
254261

255262
- uses: actions/setup-node@v6
256263
with:

.github/workflows/release-please.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
release_created: ${{ steps.release.outputs.release_created }}
1717
version: '${{steps.release.outputs.major}}.${{steps.release.outputs.minor}}.${{steps.release.outputs.patch}}'
1818
steps:
19-
- uses: pnpm/action-setup@v4
19+
- uses: pnpm/action-setup@v5
2020
with:
2121
version: 9
2222

.github/workflows/update-dependency.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
with:
1818
ref: dev
1919
token: ${{ secrets.GH_TOKEN }}
20-
- uses: pnpm/action-setup@v4
20+
- uses: pnpm/action-setup@v5
2121
- uses: actions/setup-node@v6
2222
with:
2323
node-version: 24

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "2.9.1"
2+
".": "2.9.2"
33
}

CHANGELOG.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,41 @@
11
# Changelog
22

3+
## [2.9.2](https://github.com/Koenkk/zigbee2mqtt/compare/2.9.1...2.9.2) (2026-03-31)
4+
5+
6+
### Bug Fixes
7+
8+
* Export definition version ([#31270](https://github.com/Koenkk/zigbee2mqtt/issues/31270)) ([9f1eb76](https://github.com/Koenkk/zigbee2mqtt/commit/9f1eb764a62b041a7d9782066a8ffcaa3562eaad))
9+
* Home Assistant: fix entity names for derived weather sensors by removing `device_class` ([#31234](https://github.com/Koenkk/zigbee2mqtt/issues/31234)) ([b7b4303](https://github.com/Koenkk/zigbee2mqtt/commit/b7b43030eb8aaa144dbb5477805638d860efdd38))
10+
* **ignore:** bump @biomejs/biome from 2.4.4 to 2.4.5 in the minor-patch group ([#31237](https://github.com/Koenkk/zigbee2mqtt/issues/31237)) ([aefbb8b](https://github.com/Koenkk/zigbee2mqtt/commit/aefbb8be14ae5d84495278cbe9a6ca9d750553cb))
11+
* **ignore:** bump the minor-patch group with 2 updates ([#31411](https://github.com/Koenkk/zigbee2mqtt/issues/31411)) ([67aa509](https://github.com/Koenkk/zigbee2mqtt/commit/67aa5099df2371eb9ee220be7a8821f0d4f8b38b))
12+
* **ignore:** bump the minor-patch group with 3 updates ([#31295](https://github.com/Koenkk/zigbee2mqtt/issues/31295)) ([b7f1cec](https://github.com/Koenkk/zigbee2mqtt/commit/b7f1cecb49f088b7fc79dcef068034ca1d012c1d))
13+
* **ignore:** bump the minor-patch group with 3 updates ([#31489](https://github.com/Koenkk/zigbee2mqtt/issues/31489)) ([52b063b](https://github.com/Koenkk/zigbee2mqtt/commit/52b063bb32429e14b30319c905e596b7632bd674))
14+
* **ignore:** bump the minor-patch group with 3 updates ([#31559](https://github.com/Koenkk/zigbee2mqtt/issues/31559)) ([73d8ae8](https://github.com/Koenkk/zigbee2mqtt/commit/73d8ae895613af0d77f0a684f7305d688af11146))
15+
* **ignore:** update zigbee-herdsman to 10.0.1 ([#31383](https://github.com/Koenkk/zigbee2mqtt/issues/31383)) ([6fca374](https://github.com/Koenkk/zigbee2mqtt/commit/6fca3744c9715dd4afb7fc777cf783c84bfb91fc))
16+
* **ignore:** update zigbee-herdsman to 10.0.2 ([#31413](https://github.com/Koenkk/zigbee2mqtt/issues/31413)) ([075f87c](https://github.com/Koenkk/zigbee2mqtt/commit/075f87c7822c29c74fc1c4031866aca8c445c9be))
17+
* **ignore:** update zigbee-herdsman to 10.0.3 ([#31450](https://github.com/Koenkk/zigbee2mqtt/issues/31450)) ([6fb9d56](https://github.com/Koenkk/zigbee2mqtt/commit/6fb9d563e69c2db3b31fd0f163e5f30924047e3f))
18+
* **ignore:** update zigbee-herdsman to 10.0.4 ([#31478](https://github.com/Koenkk/zigbee2mqtt/issues/31478)) ([867179c](https://github.com/Koenkk/zigbee2mqtt/commit/867179c430eacf9bd66ef359b9a7435f2299d944))
19+
* **ignore:** update zigbee-herdsman to 10.0.5 ([#31562](https://github.com/Koenkk/zigbee2mqtt/issues/31562)) ([fb3189b](https://github.com/Koenkk/zigbee2mqtt/commit/fb3189b7431cb203092bbe235bd35194e2b44a44))
20+
* **ignore:** update zigbee-herdsman to 9.0.10 ([#31245](https://github.com/Koenkk/zigbee2mqtt/issues/31245)) ([d632382](https://github.com/Koenkk/zigbee2mqtt/commit/d6323825e4ae3168d52a096e7647bc7174d3cdb1))
21+
* **ignore:** update zigbee-herdsman to 9.0.11 ([#31257](https://github.com/Koenkk/zigbee2mqtt/issues/31257)) ([1747618](https://github.com/Koenkk/zigbee2mqtt/commit/1747618afa3948ac9fb8899d94fba8456198e4b5))
22+
* **ignore:** update zigbee-herdsman-converters to 26.13.0 ([#31231](https://github.com/Koenkk/zigbee2mqtt/issues/31231)) ([fc3a196](https://github.com/Koenkk/zigbee2mqtt/commit/fc3a1968f6635d246ad2d68e5c6b79d495fd96bb))
23+
* **ignore:** update zigbee-herdsman-converters to 26.14.0 ([#31246](https://github.com/Koenkk/zigbee2mqtt/issues/31246)) ([284d86e](https://github.com/Koenkk/zigbee2mqtt/commit/284d86e93ba8cd83139d6dd0217519f67c01e565))
24+
* **ignore:** update zigbee-herdsman-converters to 26.16.1 ([#31268](https://github.com/Koenkk/zigbee2mqtt/issues/31268)) ([05946b5](https://github.com/Koenkk/zigbee2mqtt/commit/05946b59552608c6ae8a8b02098552fe611f027a))
25+
* **ignore:** update zigbee-herdsman-converters to 26.17.0 ([#31314](https://github.com/Koenkk/zigbee2mqtt/issues/31314)) ([9143924](https://github.com/Koenkk/zigbee2mqtt/commit/91439244823d9897998a57448321d2e8af9b083f))
26+
* **ignore:** update zigbee-herdsman-converters to 26.18.0 ([#31362](https://github.com/Koenkk/zigbee2mqtt/issues/31362)) ([f60db2d](https://github.com/Koenkk/zigbee2mqtt/commit/f60db2d7a641ab5fccbb3a7b6a0e1e73983559ef))
27+
* **ignore:** update zigbee-herdsman-converters to 26.19.1 ([#31384](https://github.com/Koenkk/zigbee2mqtt/issues/31384)) ([69641d5](https://github.com/Koenkk/zigbee2mqtt/commit/69641d5467ec5e3ddfebb4ff98142d0ff990c814))
28+
* **ignore:** update zigbee-herdsman-converters to 26.20.0 ([#31415](https://github.com/Koenkk/zigbee2mqtt/issues/31415)) ([9f49d0e](https://github.com/Koenkk/zigbee2mqtt/commit/9f49d0ec6738ebd1ea65a3bf1aae553548217f2e))
29+
* **ignore:** update zigbee-herdsman-converters to 26.21.0 ([#31427](https://github.com/Koenkk/zigbee2mqtt/issues/31427)) ([e054d71](https://github.com/Koenkk/zigbee2mqtt/commit/e054d7124bd4dc5bdb18c9de4a6923b06df6b929))
30+
* **ignore:** update zigbee-herdsman-converters to 26.22.0 ([#31451](https://github.com/Koenkk/zigbee2mqtt/issues/31451)) ([64286eb](https://github.com/Koenkk/zigbee2mqtt/commit/64286ebb3054bc15e020aab431c1d3af76e2c914))
31+
* **ignore:** update zigbee-herdsman-converters to 26.23.0 ([#31462](https://github.com/Koenkk/zigbee2mqtt/issues/31462)) ([2e5e362](https://github.com/Koenkk/zigbee2mqtt/commit/2e5e3628188765cddbd4116f41703eab491670df))
32+
* **ignore:** update zigbee-herdsman-converters to 26.24.0 ([#31479](https://github.com/Koenkk/zigbee2mqtt/issues/31479)) ([dde637a](https://github.com/Koenkk/zigbee2mqtt/commit/dde637af2f8449ae24684fa34a32bec106c24913))
33+
* **ignore:** update zigbee-herdsman-converters to 26.25.0 ([#31497](https://github.com/Koenkk/zigbee2mqtt/issues/31497)) ([66985a8](https://github.com/Koenkk/zigbee2mqtt/commit/66985a8ce8d4cefbc4ddacc754e182e0b5953cea))
34+
* **ignore:** update zigbee-herdsman-converters to 26.26.0 ([#31510](https://github.com/Koenkk/zigbee2mqtt/issues/31510)) ([969db9a](https://github.com/Koenkk/zigbee2mqtt/commit/969db9ae85838b955e07a80f5f72f655f6beffcf))
35+
* **ignore:** update zigbee-herdsman-converters to 26.27.0 ([#31563](https://github.com/Koenkk/zigbee2mqtt/issues/31563)) ([62ab814](https://github.com/Koenkk/zigbee2mqtt/commit/62ab814d73b7de957fb8b28679b9dea8ae087133))
36+
* Match new cluster-related typing from ZH ([#31298](https://github.com/Koenkk/zigbee2mqtt/issues/31298)) ([0f781ee](https://github.com/Koenkk/zigbee2mqtt/commit/0f781ee9c03ae502745841f4dd7d6f3775c620d4))
37+
* Reintroduce onboarding improvements ([#31273](https://github.com/Koenkk/zigbee2mqtt/issues/31273)) ([4a83692](https://github.com/Koenkk/zigbee2mqtt/commit/4a8369295c5d6c07ff1ac66f90a35b0e8b915296))
38+
339
## [2.9.1](https://github.com/Koenkk/zigbee2mqtt/compare/2.9.0...2.9.1) (2026-03-02)
440

541

biome.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"$schema": "https://biomejs.dev/schemas/2.4.1/schema.json",
2+
"$schema": "https://biomejs.dev/schemas/2.4.10/schema.json",
33
"vcs": {
44
"enabled": true,
55
"clientKind": "git",

lib/extension/bridge.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -900,6 +900,7 @@ export default class Bridge extends Extension {
900900
exposes: device.exposes(),
901901
supports_ota: !!device.definition.ota,
902902
options: device.definition.options ?? [],
903+
version: device.definition.version,
903904
icon,
904905
};
905906

lib/extension/configure.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export default class Configure extends Extension {
3838

3939
if (!device || !(device instanceof Device)) {
4040
error = `Device '${ID}' does not exist`;
41-
} else if (!device.definition || !device.definition.configure) {
41+
} else if (!device.definition?.configure) {
4242
error = `Device '${device.name}' cannot be configured`;
4343
} else {
4444
try {

lib/extension/groups.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export default class Groups extends Extension {
168168
endpointNames &&
169169
endpointNames.length >= member.ID &&
170170
device.definition?.meta?.multiEndpoint &&
171-
(!device.definition.meta.multiEndpointSkip || !device.definition.meta.multiEndpointSkip.includes("state"))
171+
!device.definition.meta.multiEndpointSkip?.includes("state")
172172
? `state_${endpointNames[member.ID - 1]}`
173173
: "state";
174174

lib/extension/homeassistant.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const NUMERIC_DISCOVERY_LOOKUP: {[s: string]: KeyValue} = {
119119
alarm_temperature_min: {device_class: "temperature", entity_category: "config", icon: "mdi:thermometer-low"},
120120
angle: {icon: "angle-acute"},
121121
angle_axis: {icon: "angle-acute"},
122-
apparent_temperature: {device_class: "temperature", icon: "mdi:thermometer-lines", state_class: "measurement"},
122+
apparent_temperature: {icon: "mdi:thermometer-lines", state_class: "measurement"},
123123
aqi: {device_class: "aqi", state_class: "measurement"},
124124
auto_relock_time: {entity_category: "config", icon: "mdi:timer"},
125125
away_preset_days: {entity_category: "config", icon: "mdi:timer"},
@@ -154,7 +154,7 @@ const NUMERIC_DISCOVERY_LOOKUP: {[s: string]: KeyValue} = {
154154
entity_category: "diagnostic",
155155
state_class: "measurement",
156156
},
157-
dew_point: {device_class: "temperature", icon: "mdi:thermometer-water", state_class: "measurement"},
157+
dew_point: {icon: "mdi:thermometer-water", state_class: "measurement"},
158158
distance: {device_class: "distance", state_class: "measurement"},
159159
duration: {entity_category: "config", icon: "mdi:timer"},
160160
eco2: {device_class: "volatile_organic_compounds_parts", state_class: "measurement"},
@@ -167,10 +167,10 @@ const NUMERIC_DISCOVERY_LOOKUP: {[s: string]: KeyValue} = {
167167
flow: {device_class: "volume_flow_rate", state_class: "measurement"},
168168
gas: {device_class: "gas", state_class: "total_increasing", icon: "mdi:meter-gas"},
169169
gas_density: {icon: "mdi:google-circles-communities", state_class: "measurement"},
170-
gust_speed: {device_class: "wind_speed", icon: "mdi:weather-windy-variant", state_class: "measurement"},
170+
gust_speed: {icon: "mdi:weather-windy-variant", state_class: "measurement"},
171171
hcho: {icon: "mdi:air-filter", state_class: "measurement"},
172172
heat_stress: {icon: "mdi:weather-sunny-alert", state_class: "measurement"},
173-
humidex: {device_class: "temperature", icon: "mdi:thermometer-alert", state_class: "measurement"},
173+
humidex: {icon: "mdi:thermometer-alert", state_class: "measurement"},
174174
humidity: {device_class: "humidity", state_class: "measurement"},
175175
humidity_calibration: {entity_category: "config", icon: "mdi:wrench-clock"},
176176
humidity_max: {entity_category: "config", icon: "mdi:water-percent"},
@@ -254,7 +254,7 @@ const NUMERIC_DISCOVERY_LOOKUP: {[s: string]: KeyValue} = {
254254
device_class: "water",
255255
state_class: "total_increasing",
256256
},
257-
wind_chill: {device_class: "temperature", icon: "mdi:snowflake-thermometer", state_class: "measurement"},
257+
wind_chill: {icon: "mdi:snowflake-thermometer", state_class: "measurement"},
258258
wind_direction: {icon: "mdi:compass-outline", state_class: "measurement"},
259259
wind_speed: {device_class: "wind_speed", icon: "mdi:weather-windy", state_class: "measurement"},
260260
x: {icon: "mdi:axis-x-arrow", state_class: "measurement"},
@@ -1867,11 +1867,11 @@ export class HomeAssistant extends Extension {
18671867
try {
18681868
message = JSON.parse(data.message);
18691869
const baseTopic = `${settings.get().mqtt.base_topic}/`;
1870-
if (isDeviceAutomation && (!message.topic || !message.topic.startsWith(baseTopic))) {
1870+
if (isDeviceAutomation && !message.topic?.startsWith(baseTopic)) {
18711871
return;
18721872
}
18731873

1874-
if (!isDeviceAutomation && (!message.availability || !message.availability[0].topic.startsWith(baseTopic))) {
1874+
if (!isDeviceAutomation && !message.availability?.[0].topic.startsWith(baseTopic)) {
18751875
return;
18761876
}
18771877
} catch {

0 commit comments

Comments
 (0)