Pass device options to HA discovery overrides#32379
Merged
Merged
Conversation
This was referenced Jun 23, 2026
Nerivec
reviewed
Jun 23, 2026
| if (entity.isDevice()) { | ||
| try { | ||
| entity.definition?.meta?.overrideHaDiscoveryPayload?.(payload); | ||
| const overrideHaDiscoveryPayload = entity.definition?.meta?.overrideHaDiscoveryPayload as |
Collaborator
There was a problem hiding this comment.
Should not be type-asserting this.
f412da9 to
79c5928
Compare
Nerivec
reviewed
Jun 23, 2026
| entity.definition?.meta?.overrideHaDiscoveryPayload?.(payload); | ||
| const overrideHaDiscoveryPayload = entity.definition?.meta?.overrideHaDiscoveryPayload; | ||
| if (overrideHaDiscoveryPayload) { | ||
| Reflect.apply(overrideHaDiscoveryPayload, undefined, [payload, entity.options]); |
79c5928 to
128bda0
Compare
Nerivec
reviewed
Jun 23, 2026
Comment on lines
+1853
to
+1854
| const overrideHaDiscoveryPayload: HaDiscoveryPayloadOverride | undefined = entity.definition?.meta?.overrideHaDiscoveryPayload; | ||
| overrideHaDiscoveryPayload?.(payload, entity.options); |
Collaborator
There was a problem hiding this comment.
Why all this stuff? It should not override or redeclare types from ZHC at all.
Suggested change
| const overrideHaDiscoveryPayload: HaDiscoveryPayloadOverride | undefined = entity.definition?.meta?.overrideHaDiscoveryPayload; | |
| overrideHaDiscoveryPayload?.(payload, entity.options); | |
| entity.definition?.meta?.overrideHaDiscoveryPayload?.(payload, entity.options); |
(Of course, this requires update on ZHC side)
128bda0 to
cfaed8e
Compare
cfaed8e to
919905e
Compare
Nerivec
reviewed
Jun 23, 2026
| if (entity.isDevice()) { | ||
| try { | ||
| entity.definition?.meta?.overrideHaDiscoveryPayload?.(payload); | ||
| // @ts-expect-error Keep the type owned by ZHC; see Koenkk/zigbee-herdsman-converters#12526. |
Collaborator
There was a problem hiding this comment.
Remove this. This is expected to fail, ZHC will need to be updated for CI to pass.
Contributor
Author
There was a problem hiding this comment.
I know, thats why the PR currently is still marked as draft
919905e to
4ce6f93
Compare
Owner
|
thanks! |
ajgon
pushed a commit
to deedee-ops/home-ops
that referenced
this pull request
Jul 1, 2026
…2.1) (#200) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/koenkk/zigbee2mqtt](https://github.com/Koenkk/zigbee2mqtt) | patch | `2.12.0` → `2.12.1` | --- ### Release Notes <details> <summary>Koenkk/zigbee2mqtt (ghcr.io/koenkk/zigbee2mqtt)</summary> ### [`v2.12.1`](https://github.com/Koenkk/zigbee2mqtt/blob/HEAD/CHANGELOG.md#2121-2026-06-30) [Compare Source](Koenkk/zigbee2mqtt@2.12.0...2.12.1) ##### Bug Fixes - Add `mqtt.server_name` option to override TLS SNI ([#​32417](Koenkk/zigbee2mqtt#32417)) ([2f26083](Koenkk/zigbee2mqtt@2f26083)) - Docker: bump alpine from 3.23 to 3.24 ([#​32311](Koenkk/zigbee2mqtt#32311)) ([758a80b](Koenkk/zigbee2mqtt@758a80b)) - Home Assistant: add conductivity discovery for soil\_fertility ([#​32356](Koenkk/zigbee2mqtt#32356)) ([29ee3a7](Koenkk/zigbee2mqtt@29ee3a7)) - Home Assistant: allow discovery user overrides to win over converter ([#​32361](Koenkk/zigbee2mqtt#32361)) ([20ab0a2](Koenkk/zigbee2mqtt@20ab0a2)) - Home Assistant: apply expose-level Home Assistant discovery metadata ([#​32380](Koenkk/zigbee2mqtt#32380)) ([0140708](Koenkk/zigbee2mqtt@0140708)) - Home Assistant: mark device settings as config ([#​32439](Koenkk/zigbee2mqtt#32439)) ([e8a7e6f](Koenkk/zigbee2mqtt@e8a7e6f)) - Home Assistant: mark legacy action sensors diagnostic ([#​32377](Koenkk/zigbee2mqtt#32377)) ([72be1d7](Koenkk/zigbee2mqtt@72be1d7)) - Home Assistant: mark thermostat configuration switches as config ([#​32378](Koenkk/zigbee2mqtt#32378)) ([98a0f94](Koenkk/zigbee2mqtt@98a0f94)) - Home Assistant: pass device options to HA discovery overrides ([#​32379](Koenkk/zigbee2mqtt#32379)) ([814552a](Koenkk/zigbee2mqtt@814552a)) - Home Assistant: support cooling setpoint in climate discovery ([#​32411](Koenkk/zigbee2mqtt#32411)) ([0018ca8](Koenkk/zigbee2mqtt@0018ca8)) - Home Assistant: unit conversion for derived weather sensors by restoring device\_class with name preservation ([#​32392](Koenkk/zigbee2mqtt#32392)) ([7775ac5](Koenkk/zigbee2mqtt@7775ac5)) - **ignore:** bump actions/cache from 5 to 6 ([#​32394](Koenkk/zigbee2mqtt#32394)) ([280442b](Koenkk/zigbee2mqtt@280442b)) - **ignore:** bump actions/checkout from 6 to 7 ([#​32368](Koenkk/zigbee2mqtt#32368)) ([679436e](Koenkk/zigbee2mqtt@679436e)) - **ignore:** bump js-yaml from 4.2.0 to 5.0.0 ([#​32371](Koenkk/zigbee2mqtt#32371)) ([262139a](Koenkk/zigbee2mqtt@262139a)) - **ignore:** bump semver from 7.8.4 to 7.8.5 in the minor-patch group ([#​32369](Koenkk/zigbee2mqtt#32369)) ([9a7cac1](Koenkk/zigbee2mqtt@9a7cac1)) - **ignore:** bump the minor-patch group with 3 updates ([#​32312](Koenkk/zigbee2mqtt#32312)) ([719de7a](Koenkk/zigbee2mqtt@719de7a)) - **ignore:** update zigbee-herdsman to 10.4.1 ([#​32333](Koenkk/zigbee2mqtt#32333)) ([2f44449](Koenkk/zigbee2mqtt@2f44449)) - **ignore:** update zigbee-herdsman to 10.4.2 ([#​32388](Koenkk/zigbee2mqtt#32388)) ([628f97f](Koenkk/zigbee2mqtt@628f97f)) - **ignore:** update zigbee-herdsman to 10.5.0 ([#​32406](Koenkk/zigbee2mqtt#32406)) ([6ab52df](Koenkk/zigbee2mqtt@6ab52df)) - **ignore:** update zigbee-herdsman to 10.6.0 ([#​32422](Koenkk/zigbee2mqtt#32422)) ([dcb16b8](Koenkk/zigbee2mqtt@dcb16b8)) - **ignore:** update zigbee-herdsman to 10.6.1 ([#​32442](Koenkk/zigbee2mqtt#32442)) ([f867694](Koenkk/zigbee2mqtt@f867694)) - **ignore:** update zigbee-herdsman-converters to 26.64.0 ([#​32282](Koenkk/zigbee2mqtt#32282)) ([a68419f](Koenkk/zigbee2mqtt@a68419f)) - **ignore:** update zigbee-herdsman-converters to 26.65.0 ([#​32298](Koenkk/zigbee2mqtt#32298)) ([f4f97d1](Koenkk/zigbee2mqtt@f4f97d1)) - **ignore:** update zigbee-herdsman-converters to 26.66.0 ([#​32315](Koenkk/zigbee2mqtt#32315)) ([299b9e6](Koenkk/zigbee2mqtt@299b9e6)) - **ignore:** update zigbee-herdsman-converters to 26.67.0 ([#​32334](Koenkk/zigbee2mqtt#32334)) ([95c67c0](Koenkk/zigbee2mqtt@95c67c0)) - **ignore:** update zigbee-herdsman-converters to 26.68.0 ([#​32340](Koenkk/zigbee2mqtt#32340)) ([1de8609](Koenkk/zigbee2mqtt@1de8609)) - **ignore:** update zigbee-herdsman-converters to 26.69.0 ([#​32350](Koenkk/zigbee2mqtt#32350)) ([0377f96](Koenkk/zigbee2mqtt@0377f96)) - **ignore:** update zigbee-herdsman-converters to 26.70.0 ([#​32357](Koenkk/zigbee2mqtt#32357)) ([c6e7d2d](Koenkk/zigbee2mqtt@c6e7d2d)) - **ignore:** update zigbee-herdsman-converters to 26.71.0 ([#​32375](Koenkk/zigbee2mqtt#32375)) ([8768952](Koenkk/zigbee2mqtt@8768952)) - **ignore:** update zigbee-herdsman-converters to 26.72.0 ([#​32387](Koenkk/zigbee2mqtt#32387)) ([b58503b](Koenkk/zigbee2mqtt@b58503b)) - **ignore:** update zigbee-herdsman-converters to 26.73.0 ([#​32407](Koenkk/zigbee2mqtt#32407)) ([8d5fdad](Koenkk/zigbee2mqtt@8d5fdad)) - **ignore:** update zigbee-herdsman-converters to 26.74.0 ([#​32420](Koenkk/zigbee2mqtt#32420)) ([31fb3a6](Koenkk/zigbee2mqtt@31fb3a6)) - **ignore:** update zigbee-herdsman-converters to 26.75.0 ([#​32431](Koenkk/zigbee2mqtt#32431)) ([3760e63](Koenkk/zigbee2mqtt@3760e63)) - **ignore:** update zigbee-herdsman-converters to 26.76.0 ([#​32441](Koenkk/zigbee2mqtt#32441)) ([740de2d](Koenkk/zigbee2mqtt@740de2d)) - improve zigbee2mqtt maintenance path ([#​32255](Koenkk/zigbee2mqtt#32255)) ([ced6d93](Koenkk/zigbee2mqtt@ced6d93)) - Republish bridge/state online when HA comes online ([#​32258](Koenkk/zigbee2mqtt#32258)) ([a81e90b](Koenkk/zigbee2mqtt@a81e90b)) </details> --- ### Configuration 📅 **Schedule**: (in timezone Europe/Warsaw) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNDkuMyIsInVwZGF0ZWRJblZlciI6IjQzLjI0OS4zIiwidGFyZ2V0QnJhbmNoIjoibWFzdGVyIiwibGFiZWxzIjpbInJlbm92YXRlL2NvbnRhaW5lciIsInR5cGUvcGF0Y2giXX0=--> Reviewed-on: https://git.ajgon.casa/deedee/mark13/pulls/200
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
entity.definition?.meta?.overrideHaDiscoveryPayload?.(payload, entity.options)directly when publishing Home Assistant discoveryWhy
Some converter-level HA discovery overrides need to be configurable per device. For example, Koenkk/zigbee-herdsman-converters#12498 adds a Bosch RM230Z option that defaults HA climate discovery to heating-only but can explicitly expose
coolorheat_coolwhere an installation really supports cooling.The hook signature itself belongs in zigbee-herdsman-converters, not Zigbee2MQTT. The matching converter type update is split into Koenkk/zigbee-herdsman-converters#12526.
Dependency
optionsargument.Validation
node --run buildnode --run checkvitest run test/extensions/homeassistant.test.ts --config ./test/vitest.config.mts -t "passes device options"git diff --checkLive validation
On my Home Assistant instance, the running Zigbee2MQTT override already had this option-passing hook. I temporarily changed
Arbeitszimmer Thermostatfromhomeassistant_climate_modes: heattoheat_coolthroughzigbee2mqtt/bridge/request/device/optionsand verified retained HA discovery changed frommodes: ["off", "heat", "auto"]tomodes: ["off", "heat", "cool", "auto"]withactive_modes = ['heat','cool']. I then reverted the option toheatand verified retained discovery returned tomodes: ["off", "heat", "auto"].