Repository navigation
WWST: add Zemismart ZM25Z window treatment support - #3280
Open
zemismart-dev wants to merge 2 commits into
Open
zemismart-dev wants to merge 2 commits into
zemismart-dev wants to merge 2 commits into
Conversation
Use the standard profile without battery and confirm position feedback before allowing motion after startup or inconsistent reports. Preserve step targets and invalidate stale callbacks safely across device removal.
Match the stock step helper minimum API 15 for the thirteen tests that exercise named-argument command injection. Retain API 14 coverage for non-step removal callbacks, pure preset and zero-step behavior. No production driver, profile, fingerprint or installed package changes.
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.
Type of Change
Checklist
Description of Change
Add support for the externally powered Zemismart ZM25Z roller shade motor in
zigbee-window-treatment. Its advertised Power Configuration support otherwise selects a battery profile, despite this tested product having no battery. Map_TZE200_cirjrpxe/TS0301to the existingwindow-treatment-profile, retaining window shade control, position, preset, relative step, firmware update, and refresh capabilities.The new sub-driver applies only to this fingerprint with a profile without battery. It suppresses unsolicited BatteryVoltage/BatteryPercentageRemaining events in that configuration and uses standard Window Covering commands and position reads. It does not rewrite the device's reported power source. The device advertises manufacturer-specific cluster
0xEF00; this implementation does not use it. Please review that distinction against the custom-cluster submission criterion.The implementation also:
refreshin the parent driver's supported capabilities, fixing rejection of the existing profile during driver switching.unknown. An unconfirmed device rejects movement requests and performs reads instead; rejected movement is never queued or replayed. Pause remains available. During an authorized movement, strictly directional progress can renew a 30-second progress-silence budget; repeated commands or duplicate values cannot. Target feedback requires static confirmation before publishing completion.Fingerprint scope requiring review: a separate historical unit recorded as ZM15B uses the same manufacturer/model and firmware value (
00000049). No reliable product-variant discriminator has been established. This exact fingerprint therefore also selects the profile without battery when another matching unit is newly paired. Tests preserving an already assigned battery profile do not protect fresh pairing of such units. This request covers ZM25Z only; the mapping's effect on other matching products needs an agreed resolution before merge/catalog release. We do not claim that the fingerprint uniquely identifies the tested power variant.Summary of Completed Tests
XXEUAAMJBV, 2026-10-16: 23/23 passed; zero failures, skips, user exclusions, or errors. Duration: 00:14:15. Tested production revision:8d4f448895ab89f53610cf650e0d5da3fe5db2c2; installed package version:2026-10-16T03:24:03.230350782. Fresh onboarding selectedwindow-treatment-profilewithout battery. Control, 0/50/100 positions, relative steps, preset, the required refresh-capability presence check, firmware checks, Unknown, and formal offboarding completed. Functional refresh/read behavior was additionally exercised in the separate real protocol and power-cut checks below.unknown; two subsequent position reads of 43 restoredpartially open. This case did not include a power cut.unknownwhile retaining 43%. After power was restored, unsolicited 0/43 reports did not produce a false 0%, closed, or moving state. Two successful reads of 43 restored the static state. This recovery check sent no motion commands; sampled camera evidence showed the output remaining stationary.Too many args for Mode.setMode), also reproduced on unmodified upstream. The final 49 feedback tests pass on both SDKs, including the strengthened realremoved→ SDKdeletedcallback case. That final test-only strengthening was rerun as the 49-case focused suite; production source was unchanged from the full-suite run. Lua 5.3 syntax, Luacheck, and whitespace checks passed.min_api_version = 15as upstream step tests. The unfiltered API 14 harness reports 57/70 because it ignores this metadata; its 13 failures match those 13 API-15-only cases exactly. All 57 applicable cases pass. Additional independent preset, zero-step and non-step removal cases preserve API 14 coverage. Production driver, configuration, profiles, fingerprints and the installed/tested package are unchanged; only test applicability and coverage changed after the full integration run.Physical testing used an unloaded sample with temporary travel limits. It does not establish rated-load endurance or full production travel coverage. The two-read policy provides bounded consistency checking, not proof of radio freshness or mechanical truth; repeated identical incorrect responses remain a protocol limitation. Passing these tests is evidence for review, not a claim of completed WWST certification.