feat: add schema 47 zniffer, utility, and broadcast commands (4/4)#1514
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
This PR completes the schema 47 implementation by adding zniffer Long Range and file I/O commands, utility firmware commands, and broadcast node Long Range support. It is the final part (4/4) of a larger feature split from PR #1480, following PRs #1509, #1510, and #1513.
Changes:
- Added zniffer Long Range commands for region/channel configuration and file I/O operations (save/load captures)
- Added utility commands for firmware file format detection and ZIP extraction
- Added broadcast node Long Range support via
longRangeflag - Updated package dependencies (zwave-js ^15.21.0,
@types/node^25.2.2) - Enhanced CI/CD workflow with OIDC publishing support
- Updated documentation for all new commands
Reviewed changes
Copilot reviewed 38 out of 39 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/zniffer/command.ts | Added Long Range and file I/O command enums |
| src/lib/zniffer/incoming_message.ts | Added incoming message interfaces for new zniffer commands |
| src/lib/zniffer/outgoing_message.ts | Added result types for zniffer commands including Map serialization for channel configs |
| src/lib/zniffer/message_handler.ts | Implemented handlers for Long Range and file I/O commands with proper base64 encoding |
| src/lib/utils/command.ts | Added firmware utility command enums |
| src/lib/utils/incoming_message.ts | Added incoming message interfaces for firmware utility commands |
| src/lib/utils/outgoing_message.ts | Added result types for firmware utility commands |
| src/lib/utils/message_handler.ts | Implemented handlers for firmware format detection and ZIP extraction |
| src/lib/broadcast_node/incoming_message.ts | Added longRange optional flag to broadcast node base interface |
| src/lib/broadcast_node/message_handler.ts | Added logic to select Long Range broadcast node based on flag |
| src/lib/common.ts | Added parseFirmwareFile helper with automatic ZIP extraction and getFirmwareUpdateOptions helper |
| src/lib/state.ts | Added schema 47 state properties for driver, controller, and node with proper versioning |
| src/lib/node/message_handler.ts | Refactored firmware update to use shared helper and added link reliability check commands |
| src/lib/controller/message_handler.ts | Added event guards and refactored firmware updates |
| src/lib/driver/message_handler.ts | Added driver commands for bootloader, CC version, user agent, and RSSI monitoring |
| src/lib/forward.ts | Added driver and controller event forwarding with proper schema version guards |
| src/util/stringify.ts | Added Map to object conversion for JSON serialization |
| src/mock/index.ts | Added mock driver properties for schema 47 state |
| src/test/integration.ts | Updated integration test expectations for new driver state |
| package.json | Bumped version to 3.6.0 and updated dependencies |
| .github/workflows/npmpublish.yml | Updated to Node 22, npm latest, and OIDC publishing |
| README.md | Comprehensive documentation for all new commands and events |
| API_SCHEMA.md | Documented schema 47 changes |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
77d3649 to
6323685
Compare
0dde50c to
4a79aa4
Compare
6323685 to
5f4efa0
Compare
5f4efa0 to
e8790e5
Compare
91d4d2b to
bfaa2f2
Compare
Add zniffer Long Range and file I/O commands, utility firmware commands, and broadcast node Long Range support. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
bfaa2f2 to
8862a23
Compare
AlCalzone
reviewed
Mar 12, 2026
Remove save_capture_to_file and load_capture_from_file which take server-side file paths. The buffer-based alternatives (get_capture_as_zlf_buffer, load_capture_from_buffer) remain for transferring data over the WebSocket instead. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
AlCalzone
approved these changes
Mar 13, 2026
4 tasks
3 tasks
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.
Split from #1480 — this PR adds the remaining zniffer, utility, and broadcast commands.
Summary
load_capture_from_buffercommandDetails
Zniffer Long Range commands
zniffer.get_lr_regions- Get Long Range capable regionszniffer.get_current_lr_channel_config- Get current LR channel configzniffer.get_supported_lr_channel_configs- Get supported LR channel configszniffer.set_lr_channel_config- Set LR channel config (800 series)Zniffer capture commands
zniffer.load_capture_from_buffer- Load frames from base64 bufferUtility commands
utils.guess_firmware_file_format- Guess firmware file formatutils.try_unzip_firmware_file- Try to extract firmware from ZIPutils.extract_firmware- Extract firmware from fileBroadcast node
longRangeflag for broadcasting to Long Range nodesTest plan
npm test)🤖 Generated with Claude Code