Skip to content

feat(schneider): Add custom converter for NHPB/DIMMER/1 strict ZCL compliance#11340

Merged
Koenkk merged 2 commits intoKoenkk:masterfrom
mchacher:feat/schneider-dimmer-custom-converter
Jan 21, 2026
Merged

feat(schneider): Add custom converter for NHPB/DIMMER/1 strict ZCL compliance#11340
Koenkk merged 2 commits intoKoenkk:masterfrom
mchacher:feat/schneider-dimmer-custom-converter

Conversation

@mchacher
Copy link
Copy Markdown
Contributor

@mchacher mchacher commented Jan 19, 2026

Schneider Electric NHPB/DIMMER/1 (WDE002386) implements strict ZCL v1 without optional optionsMask/optionsOverride parameters. Add custom converter schneider_strict_level_control that sends only mandatory parameters (level, transtime) to ensure device compatibility.

Requires zigbee-herdsman PR for MINIMUM_REMAINING_BUFFER_BYTES support.

Update Jan 21st 2026

Following review feedback from @Koenkk, this PR implements a meta option approach to avoid code duplication:

Changes

  • Added omitOptionalLevelParams?: boolean to DefinitionMeta in src/lib/types.ts
  • Modified light_onoff_brightness converter in src/converters/toZigbee.ts to conditionally omit optionsMask and optionsOverride parameters
  • Applied meta: {omitOptionalLevelParams: true} to the Schneider Electric NHPB/DIMMER/1 device definition

Implementation

Follows the same pattern as turnsOffAtBrightness1, making it reusable for any device with strict ZCL v1 compliance requirements.

Testing

Tested successfully with Schneider Electric WDE002386 (NHPB/DIMMER/1) - all brightness commands work correctly with both dimmers.

@mchacher
Copy link
Copy Markdown
Contributor Author

Fixes: Koenkk/zigbee2mqtt#30701
Requires: Koenkk/zigbee-herdsman#1619

Comment thread src/devices/schneider_electric.ts Outdated
* that are not explicitly supported, even with value 0.
* This converter sends only the mandatory level and transtime parameters.
*/
schneider_strict_level_control: {
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To prevent code duplication, please use a meta option for this, example:

@mchacher mchacher force-pushed the feat/schneider-dimmer-custom-converter branch from ca26588 to ee9ffab Compare January 21, 2026 15:16
…mpliance

Schneider Electric NHPB/DIMMER/1 (WDE002386) implements strict ZCL v1
without optional optionsMask/optionsOverride parameters. Add custom
converter schneider_strict_level_control that sends only mandatory
parameters (level, transtime) to ensure device compatibility.

Requires zigbee-herdsman PR for MINIMUM_REMAINING_BUFFER_BYTES support.
Use meta.omitOptionalLevelParams option in light_onoff_brightness converter
instead of creating a separate custom converter. This follows the established
pattern for device-specific behavior (like turnsOffAtBrightness1).

Changes:
- Add omitOptionalLevelParams support to tz.light_onoff_brightness
- Add omitOptionalLevelParams to DefinitionMeta type
- Set meta.omitOptionalLevelParams: true for NHPB/DIMMER/1

Addresses review comment from @Koenkk
@mchacher mchacher force-pushed the feat/schneider-dimmer-custom-converter branch from ee9ffab to b0adc76 Compare January 21, 2026 15:18
@mchacher
Copy link
Copy Markdown
Contributor Author

@Koenkk Thanks for the review!

I've refactored the implementation to use a meta option as suggested:

  • Removed the custom converter entirely
  • Added omitOptionalLevelParams meta option following the same pattern as turnsOffAtBrightness1
  • The device now simply uses m.light() with meta: {omitOptionalLevelParams: true}

Much cleaner approach! Tested successfully with WDE002386 - all brightness commands work correctly.

Ready for re-review when you have time.

@Koenkk Koenkk merged commit b7240cd into Koenkk:master Jan 21, 2026
3 checks passed
@Koenkk
Copy link
Copy Markdown
Owner

Koenkk commented Jan 21, 2026

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants