• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

zwave-js / zwave-js-ui / 27677727548
12%

Build:
DEFAULT BRANCH: master
Ran 17 Jun 2026 09:00AM UTC
Jobs 1
Files 71
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Jun 2026 08:59AM UTC coverage: 19.006% (-0.6%) from 19.652%
27677727548

push

github

web-flow
feat: support for multicast/broadcast groups (#4382)

## Summary

Adds support for multicast/broadcast groups, allowing users to create
groups of nodes and send commands to all of them simultaneously.

Fixes #4381.

## Backend Changes

### Group Management (`api/lib/ZwaveClient.ts`)
- **CRUD APIs** for groups (`_createGroup`, `_updateGroup`,
`_deleteGroup`, `_getGroups`) stored in `groups.json`
- Group IDs are auto-assigned above `0xfff` (4096+) to avoid collision
with physical node IDs
- Backend validation: group name required, minimum 2 nodes
- `groups.json` included in backup files

### Virtual Node Architecture
- **Multicast groups**: Created via
`driver.controller.getMulticastGroup(nodeIds)`, stored in
`_multicastGroups` map
- **Broadcast nodes**: Standard broadcast (`NODE_ID_BROADCAST=255`) and
Long Range (`NODE_ID_BROADCAST_LR=4095`, only when controller supports
LR)
- Virtual nodes stored in `_nodes` map alongside physical nodes,
distinguished by `virtual: true` property
- `getVirtualNode(nodeId)` returns the driver instance for virtual nodes
- `isVirtualNode(nodeId)` checks membership in `_multicastGroups` map

### Virtual Node Values
- Values populated from `VirtualNode.getDefinedValueIDs()` which returns
the **union** of all writeable actuator CCs across member nodes, plus
Basic CC (always added so heterogeneous groups can be controlled
together). Nodes that don't support a CC simply ignore the command.
- Shared `_buildVirtualValueId()` helper mirrors
`_updateValueMetadata()` for physical nodes, ensuring identical
`ZUIValueId` structure (list, states, allowManualEntry,
commandClassVersion, etc.)
- Shared `_applyValueMetadataFields()` extracts type-specific metadata
mapping (numeric, string, boolean, states, destructive) used by both
physical and virtual value creation — no duplicated logic
- **Multicast value aggregation**: If all supporting member nodes have
the same value, it is shown; otherwise `undefined`
- **Broadcast values**: Always ... (continued)

410 of 537 branches covered (76.35%)

Branch coverage included in aggregate %.

4 of 909 new or added lines in 5 files covered. (0.44%)

976 existing lines in 5 files now uncovered.

4421 of 24881 relevant lines covered (17.77%)

1.12 hits per line

Uncovered Changes

Lines Coverage ∆ File
856
0.0
0.0% api/lib/ZwaveClient.ts
22
0.0
0.0% src/components/nodes-table/nodes-table.js
11
0.0
0.0% src/router/index.js
8
0.0
0.0% api/config/store.ts
8
18.63
-0.0% api/lib/Gateway.ts

Coverage Regressions

Lines Coverage ∆ File
794
0.0
0.0% api/lib/ZwaveClient.ts
141
18.63
-0.0% api/lib/Gateway.ts
22
0.0
0.0% src/components/nodes-table/nodes-table.js
11
0.0
0.0% src/router/index.js
8
0.0
0.0% api/config/store.ts
Jobs
ID Job ID Ran Files Coverage
1 27677727548.1 17 Jun 2026 09:00AM UTC 71
19.01
GitHub Action Run
Source Files on build 27677727548
  • Tree
  • List 71
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • edf18e9c on github
  • Prev Build on master (#27533209408)
  • Next Build on master (#27678199728)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc