node-red-contrib-velbus-2026 — Development Changelog
Author: Stuart Hanlon, MDAR Limited (UK Velbus distributor)
GitHub: To be decided
npm: node-red-contrib-velbus-2026
Status: Active development — real hardware tested on live client installations
This palette is a ground-up rewrite for modern Node-RED (v3+/v5) with full
V2.0 (-20 series) module support. It replaces the abandoned node-red-contrib-velbus
palette (gertst, last updated 2020).
Testers welcome — particularly anyone with hardware not listed as confirmed below.
All feedback via GitHub issues, with examples and debug captures where possible.
v0.6.0 — 28/06/2026
Package rename and npm publication prep
- Package renamed from
node-red-contrib-velbus2 to node-red-contrib-velbus-2026
- Version bumped to 0.6.0 for first public release
package.json updated with full npm publication metadata:
keywords: node-red, velbus, building-automation, home-automation, smart-home, relay, dimmer
repository, bugs, homepage all pointing to GitHub
author: Stuart Hanlon, MDAR Limited
license: MIT
README.md added — module list, quick start, confirmed hardware, contributing guide
LICENSE added — MIT
- Disclaimer added to all 17 node HTML help sections:
“Generated with Claude.ai — in need of extensive field testing before commercial
deployment. Presented as-is, use beyond testing at your own risk. File issues on GitHub.”
Handover document
- Complete ground-up rewrite of
velbus2_master_handover.md
- Now 970 lines, supersedes all previous baseline files
- Added Appendix A: Virtual Module Kit (parked — new module set: VMB1RYS/VMB7IN,
VMB1RYNO, VMB4DC, VMB4AN)
- Added Appendix B: npm publication steps, GitHub repo creation walkthrough,
disclaimer text for help files
v0.5.8 — 27/06/2026
velbus-blind-20 (new node)
- V2 blind/shutter motor controller — VMB2BLE-20 (0x61)
- Full V2 redesign: CAN FD support, 8-byte 0xFF with properties byte,
firmware check on startup, channel name auto-retrieval
- 0xEC status packet completely restructured vs BLS/BLE series — both
channels packed into a single packet using nibble encoding rather than
separate per-channel packets. Status, position, lock state, and auto mode
are all dual-nibble fields.
- Channel identifier in commands: plain integer 1, 2, or 0xFF for all — not
a bit value as in BLS/BLE series
- Position 0-100%, full lock/force/inhibit set, auto modes, sunrise/sunset
- Additional commands vs BLS/BLE:
enable_program (0xB2), disable_program (0xB1)
- Note: 0xFFFFFF (permanent) NOT allowed for up/down timeout on this module —
maximum is 0xFFFFFE. Permanent allowed for lock/force/inhibit duration.
- Input commands:
stop, up, down, position, lock, unlock,
forced_up, cancel_forced_up, forced_down, cancel_forced_down,
inhibit, cancel_inhibit, inhibit_preset_up, inhibit_preset_down,
auto_mode, enable_program, disable_program, get_status, get_name
velbus-scan corrections (from official Velbus module ID list)
The following type byte assignments were wrong and have been corrected:
| Type |
Was |
Now |
| 0x0C |
VMBRSUSB |
VMB1TS (temperature sensor) |
| 0x18 |
VMBUSBIP |
VMB2PBN (2-button panel with night mode) |
| 0x1C |
VMB4PB |
REMOVED — 0x1C not in official list |
| 0x20 |
VMB6PB-20 |
VMBGP4 (4-button glass panel) — added to glass-panel-types.js |
| 0x40 |
(missing) |
VMBUSBIP (moved from 0x18) |
| 0x44 |
(missing) |
VMB4PB (added) |
| 0x4C |
(missing) |
VMB6PB-20 (added) |
velbus-button node suggestion updated: now covers 0x18 (VMB2PBN, 2ch),
0x44 (VMB4PB, 4ch), 0x4C (VMB6PB-20, 6ch). Previous incorrect 0x1C and
0x20 entries removed.
VMBGP4 (0x20) added as 26th type in lib/glass-panel-types.js.
lib/blind-types-20.js (new)
- Type registry for V2 blind series: VMB2BLE-20
v0.5.7 — 27/06/2026
velbus-blind (new node)
- Original series blind/shutter motor controllers — VMB1BL (0x03), VMB2BL (0x09)
- Early modules: 5-byte 0xFF response (no serial number), dip-switch timeout
setting, no position feedback, no lock/force/inhibit
- VMB1BL: 1 channel, fixed channel byte 0x03, local push button events mixed
into 0x00 bitmask alongside relay events
- VMB2BL: 2 channels, packed bitmask channel encoding (ch1=0x03, ch2=0x0C),
local push button events included in 0x00
- Stop/up/down commands only. Timeout 0=dip switch, 0xFFFFFF=permanent
- Input commands:
stop, up (with timeout), down (with timeout),
get_status, get_name
- Address dropdown filters to VMB1BL/VMB2BL types from scan results
velbus-blind-s (new node)
- Full-featured BLS/BLE series — VMB1BLS (0x2E), VMB2BLE (0x1D),
VMB2BLE-10 (0x4A)
- 7-byte 0xFF with serial number and memory map version
- Position feedback (0-100%): 0=fully up, 100=fully down
- Lock/unlock (0x1A/0x1B — unique command bytes to blind family)
- Forced up (0x12) / forced down (0x14) — note: same bytes as relay forced-off/on
but inverted direction semantics in blind context
- Full inhibit set:
inhibit, inhibit_preset_up, inhibit_preset_down,
cancel_inhibit
- Auto modes (1-3), sunrise/sunset, real-time clock
- VMB2BLE-10 confirmed protocol-identical to VMB2BLE — only structural difference
is 8-byte 0xFF (with terminator byte vs 7-byte). Handled by same node.
- No local push button events in 0x00 (relay events only, unlike VMB1BL/VMB2BL)
- Two outputs: relay events on output 1, full 0xEC status on output 2
- Input commands:
stop, up, down, position, lock, unlock,
forced_up, cancel_forced_up, forced_down, cancel_forced_down,
inhibit, cancel_inhibit, inhibit_preset_up, inhibit_preset_down,
auto_mode, get_status, get_name
lib/blind-types.js (new)
- Type registry for original series blind modules: VMB1BL, VMB2BL
- channelMasks: packed bitmask per channel for 0xEC and commands
lib/blind-types-s.js (new)
- Type registry for BLS/BLE series: VMB1BLS, VMB2BLE, VMB2BLE-10
- channelBits: clean bit encoding (ch1=0x01, ch2=0x02)
v0.5.6 — 27/06/2026
velbus-meteo (new node)
- Weather station node for VMBMETEO (0x31)
- Output 1: alarm events (0x00) and module status (0xED)
- Output 2: temperature (0xE6), rain/light/wind (0xA9), sensor text (0xAC)
- 8 configurable alarm outputs via bitmask — alarm conditions (wind speed,
rainfall, light levels) configured in VelbusLink, fired as 0x00 events
0xA9 carries rain (×0.1 mm/h), light (lux), wind (×0.1 km/h) as three
16-bit values in one packet — emitted with engineering units applied
0xAC sensor text: same command byte as OLED memo on glass panels but
completely different meaning — formatted sensor value string from module
0xF0/F1/F2 alarm channel names use bitmask in DB2 (not channel number)
- Auto-send interval: values 5-9 = percentage-change thresholds, not fixed seconds
- Input commands:
get_status, get_temp, get_meteo (sensor: rain/light/wind/all),
get_alarm_name (channel 1-8), test_on, test_off
velbus-sensor (new node)
- Original series configurable input node — VMB7IN (0x22), VMB4AN (0x32)
- Output 1: channel events (0x00) and module status (0xED)
- Output 2: pulse counter data (VMB7IN only — 0xBE)
- VMB7IN: 8 digital input channels + pulse counter on channels 1-4
- All 8 channels produce 0x00 press/release/long-press events regardless of
input type (contact closure, alarm threshold — configured in VelbusLink)
- Counter: 32-bit pulse count + period in ms between last two pulses
- Engineering units must be calculated in flow using pulsesPerUnit and periodMs
- Power (W) = 3,600,000,000 / (periodMs × pulsesPerUnit)
- VMB4AN: 16 logical channels across 3 groups (architecture defined; groups 2
and 3 deferred to follow-up session pending hardware availability)
- Channel names use bitmask in DB2 of 0xF0/F1/F2
- Lock/unlock use bitmask in DB2
- Input commands:
get_status, get_counter (channels bitmask + interval),
reset_counter (channel 1-4), load_counter (channel + value), get_name
- Note: VMB7IN 0xED PDF states DLC=5 but lists 7 fields — implementation
treats as 7 bytes. Verify against real hardware.
velbus-sensor-20 (new node)
- V2 series configurable input node — VMB8IN-20 (0x4E)
- Output 1: channel events (0x00) and module status (0xED)
- Output 2: energy counter data (0xA4)
- Up to 32 digital input channels: 8 on primary address, 24 via 3 subaddresses
(channels 9-16, 17-24, 25-32). Bridge routes subaddress packets to primary
node listener transparently.
- 0x00 channel event payload includes
sourceAddress field to distinguish
primary from subaddress events
- 0xED from primary (8 bytes): full status including normal/inverted, auto-send
- 0xED from subaddress (5 bytes): alarm status, enabled, locked, prog-disabled
0xA4 energy counter: 20-bit power in Watts + 32-bit energy in Wh/litres/ml
(counter type set in VelbusLink — same packet format for all)
- Firmware check on startup (3-stage: type → map version → pass)
- Module name auto-retrieved from VelbusLink on startup
- Lock/unlock use channel number (1-32, 0xFF for all) — V2 style
- Channel names use channel number in DB2
- Input commands:
get_status, get_counter (channels bitmask + interval),
load_counter (channel + value), lock, unlock, get_name
velbus-scan corrections
- VMB7IN (0x22) added to ALL_TYPES, NODE_SUGGESTION (velbus-sensor), MODULE_CHANNELS (8ch)
- VMB8IN-20 (0x4E) added — type byte was previously unknown
- VMBMETEO (0x31) now has node suggestion: velbus-meteo
- VMB4AN (0x32) node suggestion updated: velbus-sensor
- VMB2BLE (0x1D), VMB2BLE-10 (0x4A), VMB2BLE-20 (0x61) relabelled from
incorrect ‘BLE (Bluetooth)’ to ‘blind (motor controller)’ — these are
single/dual channel reversible AC motor controllers for roller shutters
and blinds. VMB = Velbus Motor Blind. No Bluetooth involved.
lib/sensor-types.js (new)
- Type registry for original series sensor modules: VMB7IN, VMB4AN
- Flags: hasCounter, hasAnalogue, lockStyle, nameStyle, counterCh
lib/sensor-types-20.js (new)
- Type registry for V2 sensor modules: VMB8IN-20
- Flags: hasCounter, lockStyle, nameStyle, alarmCh (subaddress alarm channels)
v0.5.5 — 27/06/2026
velbus-pir (new node)
- Original and -10 series PIR modules — VMBPIRM (0x2A), VMBPIRC (0x2B),
VMBPIRO (0x2C), VMBPIRO-10 (0x23)
- Output 1: channel events, module status, light value
- Output 2: temperature and settings — VMBPIRO and VMBPIRO-10 only
- Channel bitmask model: bits 0-5 = dark/light/motion1/ldMotion1/motion2/ldMotion2.
VMBPIRM and VMBPIRC add bit6=absence. VMBPIRO and VMBPIRO-10 add
bit6=lowTempAlarm / bit7=highTempAlarm instead.
- Lock/unlock/enable/disable program commands use channel bitmask in DB2
0xE8 temperature settings: compact 7-byte format (calibration offset, gain,
low alarm, high alarm, zone, auto-send interval)
- Input commands:
get_status, get_light (with optional auto-send interval),
get_temp, get_temp_settings, test_on, test_off
- Address dropdown filters to PIR original/-10 types from scan results
- Note: VMBPIRM has a light sensor (required for dark/light output logic) but
its PDF does not list raw lux value as bus-accessible. Node handles 0xA9
if received; get_light command sent regardless.
velbus-pir-20 (new node)
- V2 series PIR modules — VMBPIR-20 (0x4D), VMBPIRO-20 (0x59)
- Output 1: channel events, module status, light value
- Output 2: temperature and settings — VMBPIRO-20 only
- VMBPIR-20: 7 channels (dark/light/motion1/ldMotion1/motion2/ldMotion2/absence)
- VMBPIRO-20: 6 lockable channels + bits 6-7 = lowTempAlarm/highTempAlarm
(temperature alarm bits appear in 0x00 and 0xED but are not lockable)
- Lock/unlock commands use channel number (1-N, 0xFF for all) — not bitmask
- Firmware check on startup (3-stage: type → map version → pass)
- Module name auto-retrieved from VelbusLink on startup
- CAN FD flag decoded from 0xFF properties byte
0xE8 on VMBPIRO-20: multi-part glass-panel-style format inherited from
thermostat firmware; only calibration and alarm fields in part 1 are meaningful
- Input commands:
get_status, get_light, get_temp, get_temp_settings,
lock (channel + duration), unlock (channel), test_on, test_off
velbus-scan
- VMBPIRM (0x2A), VMBPIRC (0x2B), VMBPIRO (0x2C), VMBPIRO-10 (0x23) added
to ALL_TYPES, NODE_SUGGESTION, and MODULE_CHANNELS
velbus-pir suggested for all four original/-10 types
lib/pir-types.js (new)
- Type registry for original/-10 PIR series: hasTempSensor, lockStyle,
channel name arrays, minMapVer, series
lib/pir-types-20.js (new)
- Type registry for V2 PIR series: hasTempSensor, lockStyle, channel maps,
bitmask arrays (for 0x00/0xED parsing), minMapVer, series
v0.5.4 — 27/06/2026
Protocol parser corrections (velbus-glass-panel, velbus-thermostat)
A systematic body-indexing error was present in all glass-panel and thermostat
packet handlers. parsePkt() returns body[] where body[0] is DATABYTE1 —
the command byte — and data starts at body[1]. All handlers have been
corrected.
- 0xEA thermostat status — format was incorrectly implemented as 16-bit
integers divided by 100. Correct format per protocol PDFs: signed single bytes
at 0.5° resolution for temperature values, with operating mode, output status,
and sleep timer as separate fields. Mode (comfort/day/night/safe), heater/cooler
direction, and active outputs (heating, cooling, boost) now correctly decoded.
- 0xE6 current temperature — format corrected to 16-bit signed value divided
by 16 (0.0625° resolution), not divided by 100.
- 0xE8 temperature settings — format corrected to signed single bytes at 0.5°
resolution. Payload now includes current, comfort, day, night, safe
heating presets.
- 0xED module status — full structured parse implemented. DATABYTE4 correctly
decoded: open collector on/off, OC locked, OC program disabled, temperature
sensor program disabled, edge colour inhibited. Locked and programme-disabled
channel bitmasks now correctly extracted from DATABYTE5 and DATABYTE6.
- 0xF0/F1/F2 name parts — command and channel-number bytes now stripped before
storing; 0xFF padding filtered in name assembly alongside null bytes.
- 0xA9, 0xAC, 0xBE — body indices corrected.
Open collector output
output_timer command fixed — duration is 24-bit (3 bytes), not 16-bit.
Supports up to ~194 days; 0xFFFFFF = permanently on.
0xED handler now emits OC state in the status payload for modules with a
confirmed open collector output:{ "type": "status", ..., "output": { "on": true, "locked": false, "programDisabled": false } }
hasOc flag added to all 25 types in lib/glass-panel-types.js. OC confirmed
from PDF for the full VMBEL family (original and -20) and VMBGPO/-20. OC
absent from VMBGP1-2/2-2/4-2 per protocol PDF. Remaining GP types pending
hardware verification (UK, post July 2026).
velbus-glass-panel
- Button output payload now includes
on boolean — true when any channel is
pressed or long-pressed.
velbus-thermostat
- Spurious
on field removed from 0xEA, 0xE6, 0xE8 and 0xED payloads.
thermostatOn in the thermostat payload is the correct state field.
- Temperature and settings payloads do not carry an
on field.
v0.5.3 — 27/06/2026
Payload and type table cleanup
- Button output
on boolean added to velbus-glass-panel 0x00 handler (was
present in velbus-button but missing from glass panel).
- Config dialog address dropdowns fixed across all three affected nodes
(velbus-glass-panel, velbus-thermostat, velbus-button) — endpoint returns
{ modules: [...], count: N } and dialogs were operating on the wrapper object
instead of modules.
lib/glass-panel-types.js: VMBGP1 (0x1E, 1ch) and VMBGP2 (0x1F, 2ch) added
— 23 → 25 types.
velbus-scan NODE_SUGGESTION and MODULE_CHANNELS updated for 0x1E and 0x1F.
v0.5.2 — 27/06/2026
velbus-button (new node)
- Pure button/input node — press, release, long-press events on 0x00
- Supports VMB8PB, VMB8PBU, VMB6PBN, VMB4PB (original series) and VMB6PB-20 (V2)
- Also suitable for glass panel sub-addresses when button events need separate wiring
- Address dropdown filters to button module types; channel count auto-populated from scan
- Output:
{ type: "button", on: true, pressed: [1,3], released: [], longPressed: [] }
on is true when any channel is pressed or long-pressed
velbus-glass-panel improvements
heat_mode and cool_mode commands added (0xE0 / 0xDF)
- Name auto-retrieval on startup — module name from VelbusLink populates status bar automatically
velbus-thermostat improvements
- Name auto-retrieval on startup — same as glass-panel
velbus-scan
- Button module types added to NODE_SUGGESTION
v0.5.1 — 27/06/2026
velbus-thermostat (new node)
- Dedicated thermostat node — clean separation from glass panel button events
- Targets primary module address — all commands go to base address, not thermostat sub-address
- Commands:
comfort, day, night, safe (mode switch with optional sleepTime), set_temp, get_thermostat
set_temp: pointer (0=comfort/1=day/2=night/3=safe) + temp (float °C)
- Output 1:
{ type, currentTemp, targetTemp, mode, heaterMode, heating, cooling, boostMode, thermostatOn }
- Output 2:
{ type, current, min, max }
- Can coexist on same address as
velbus-glass-panel — bridge fans out to all registered listeners
Palette groups
Velbus (inputs) — teal #3A8C8C: velbus-scan, velbus-glass-panel, velbus-thermostat
Velbus (outputs) — blue #4A90D9: velbus-relay, velbus-relay-20, velbus-dimmer, velbus-dimmer-20
v0.5.0 — 27/06/2026
velbus-glass-panel (new node)
- Single node covers entire VMBEL / VMBGP glass panel family — 23 module types, original and V2
- Output 1 — Buttons: press, release, long-press per channel
- Output 2 — Status/thermostat: module status (0xED), thermostat (0xEA), temperature (0xE6)
- Output 3 — Name parts: VelbusLink module name on request
- OLED extras (memo text, counter, display page) emitted on OLED-capable types only
- PIR channel semantic labels (button1-4, virtual, dark, light, motion) on PIR variants
- Thermostat rx/tx included — velbus-thermostat node also available for dedicated thermostat wiring
- LED control:
led_set, led_clear, led_slow, led_fast, led_vfast
- Open collector:
output_on, output_off, output_timer
- Config dialog: dropdown filters to glass panel types, channel count auto-populated
lib/glass-panel-types.js — standalone type registry (hasOled, hasPir, hasOc, pirChannels, channels, minMapVer)
velbus-scan corrections
0x55 corrected from VMB8IN-20 to VMBGP2-20 (collision resolved from protocol PDFs)
0x3A/3B/3C corrected to VMBGP1/2/4-2 original series (not -20)
0x21 corrected to VMBGPO
- All 23 glass panel types added to NODE_SUGGESTION and MODULE_CHANNELS
v0.4.3 — 27/06/2026
Address dropdowns in all config dialogs
velbus-relay, velbus-relay-20, velbus-dimmer, velbus-dimmer-20 config
dialogs now show a dropdown of discovered modules from the most recent scan
- Dropdown filters by node type — relay dialog shows only relay modules, dimmer
dialog shows only dimmer modules, etc.
- Each option shows: address, module type, build number, map version
- Falls back to plain text input if no scan has been run yet
- Manual entry always available at the bottom of the dropdown
- Run a
velbus-scan node once — all subsequent config dialogs benefit automatically
velbus-bridge
storeScanResults() / getScanResults() API added
RED.httpAdmin endpoint registered: GET /velbus/scan-results?bridge={nodeId}
— serves scan results as JSON to config dialog dropdowns
velbus-scan
- Calls
bridge.storeScanResults() on scan completion
v0.4.2 — 27/06/2026
velbus-scan bugfix
- Duplicate
0x2D key in ALL_TYPES registry — VMBIN was silently overwritten
by VMBPIRO. Fixed as VMBIN/VMBPIRO pending PDF confirmation of whether they
share a type byte or are distinct.
v0.4.1 — 27/06/2026
velbus-relay payload correction
mode field removed from relay_status payload — was an unnecessary duplicate of state
on boolean added to relay_status payload (was missing from original series node)
on: true when state is on, timer_running or forced_on
on: false for all other states
v0.4.0 — 27/06/2026
New nodes
Notes
- VMB2DC-20 and VMB8DC-20 output a 0-10V control voltage — they do not carry
mains load. They drive third-party dimmer packs, actuators, or any 0-10V
compatible device. VMB4LEDPWM-20 outputs PWM for direct LED control.
- DALI references in VMB2DC-20/VMB8DC-20/VMB4LEDPWM-20 PDFs are documentation
bleed-over from the shared VMBDALI codebase and are not implemented.
v0.3.10 — 26/06/2026
velbus-scan improvements
- Scan order reversed (0xFE→0x01) — higher addresses confirmed present first
- Recursive
setTimeout replaces flat loop — more reliable on constrained hardware
- Collect window extended to 8000ms
- Output 2 fires
module_found immediately on each discovery
0x4D correctly identified as VMBPIR-20 (confirmed on Toulouse hardware)
NODE_SUGGESTION extended to cover PIR and glass panel module types
velbus-bridge improvements
- Scan lock mechanism:
lockScan() / unlockScan()
- Interpreter node startup RTRs queued during active scan, flushed 1/second after
velbus-relay / velbus-relay-20
- Startup RTR passed with
startup=true flag — correctly queued during scan
v0.3.0 — 25/06/2026
New nodes
velbus-bridge improvements
- Passive 0xB0 subaddress handler
- Subaddress packets transparently routed to primary node
- Commands always sent to primary address only
velbus-relay improvements
- VMB4RYLD-20 and VMB4RYNO-20 removed from original series registry
- 3-stage firmware check on 0xFF
- Module name auto-retrieval via 0xEF/0xF0/0xF1/0xF2
- Status bar: VelbusLink name + address
- Hard block on firmware incompatibility or unknown type
v0.2.0 — 25/06/2026
New nodes
Confirmed hardware (live testing)
All testing on real installations via TCP gateway (velbus-tcp snap, port 6000).
| Module |
Type |
Site |
Status |
| VMB1RYS |
0x41 |
Toulouse FR |
✓ map v0, build 3654 |
| VMBEL1 |
0x34 |
Toulouse FR |
✓ map v2, build 3433 |
| VMBEL4 |
0x36 |
Toulouse FR |
✓ map v2, build 3433 (×5 units) |
| VMBELO |
0x37 |
Toulouse FR |
✓ map v4, build 3821, CAN FD |
| VMBELPIR |
0x38 |
Toulouse FR |
✓ map v2, build 3433 |
| VMBPIR-20 |
0x4D |
Toulouse FR |
✓ map v1, build 3640, CAN FD (×2 units) |
| VMB8DC-20 |
0x4B |
Toulouse FR |
✓ live tested, multiple channels confirmed |
| VMB4RYNO-20 |
0x27 |
Toulouse FR |
✓ present on site (address TBC) |
Not yet tested (hardware available, nodes not yet built):
VMBELO thermostat, VMB4AN, VMBGP series, VMBIN, VMB2BLE
Payload standards
All nodes follow consistent payload conventions:
Relay:
{ "state": "on", "on": true, "timerRemaining": 0, "ledState": "off" }
Dimmer:
{ "state": "on", "on": true, "level": 187, "percent": 73.6 }
Button / glass panel buttons:
{ "type": "button", "on": true, "pressed": [1, 3], "released": [], "longPressed": [] }
Thermostat status:
{ "type": "thermostat", "currentTemp": 21.5, "targetTemp": 22.0, "mode": "comfort",
"heaterMode": true, "heating": false, "cooling": false, "boostMode": false, "thermostatOn": true }
Temperature:
{ "type": "temperature", "current": 21.5, "min": 15.0, "max": 30.0 }
Glass panel module status:
{ "type": "status", "locked": [], "thermostatProgram": "manual",
"alarms": { "alarm1Active": false, "alarm2Active": false, "selected": 0 },
"output": { "on": false, "locked": false, "programDisabled": false } }
output field only present on modules with a confirmed open collector output.
on is always a boolean where present. state is always a human-readable string.
Numbers are always numbers — never strings of numbers.
Temperature and settings payloads do not carry an on field.
Roadmap
Planned (PDFs needed):
velbus-energy — VMBPSUMNGR-20 (0x04). PDF needed.
Pending hardware verification (UK, post July 2026):
- Open collector presence on VMBGP1/2/4 original and VMBGP-20 series
- VMBPIRM raw light value bus accessibility (0xA9 / 0xAA)
- VMB7IN 0xED actual byte count (PDF lists 7 fields but states DLC=5)
The Cunning Plan — VelbusLink as ground truth:
Build a Node-RED flow that responds to a VelbusLink bus scan with all
unknown module type bytes simultaneously, using address = type byte.
VelbusLink displays correct names and writes them to the VLP project file.
Run on return to UK (Northampton, post July 2026).
Unknown type bytes to sweep (sample): 0x03 VMB1BL (old), 0x05 VMB6IN,
0x07 VMB1DM, 0x09 VMB2BL (old), 0x0A VMB8IR, 0x0B VMB4PD, 0x0C VMB1TS,
0x0E VMB1TC, 0x0F VMB1LED, 0x14 VMBDME, 0x25 VMBGPTC, 0x28 VMBGPOD,
0x53 (VMBBEL1PIR-20?), 0x5C (VMBBEL2PIR-20 / VMBEL4PIR-20 conflict),
and others.
Not planned:
- velbus-dali — out of scope
Installation (pre-npm-publish)
cd /mnt/dietpi_userdata/node-red # or ~/.node-red
npm install /path/to/node-red-contrib-velbus2
dietpi-services restart node-red # or: node-red-restart
Tested on Node-RED v5.0, Node.js 18+, DietPi (Odroid C4).
Gateway: velbus-tcp snap (port 6000) or python-velbustcp (port 27015).
Workflow: Drop velbus-scan node → run once → all config dialogs show
address dropdowns populated with discovered modules.
s scan with all
unknown module type bytes simultaneously, using address = type byte.
VelbusLink displays correct names and writes them to the VLP project file.
Run on return to UK (Northampton, post July 2026).
Unknown type bytes to sweep (sample): 0x03 VMB1BL (old), 0x05 VMB6IN,
0x07 VMB1DM, 0x09 VMB2BL (old), 0x0A VMB8IR, 0x0B VMB4PD, 0x0C VMB1TS,
0x0E VMB1TC, 0x0F VMB1LED, 0x14 VMBDME, 0x25 VMBGPTC, 0x28 VMBGPOD,
0x53 (VMBBEL1PIR-20?), 0x5C (VMBBEL2PIR-20 / VMBEL4PIR-20 conflict),
and others.
Not planned:
- velbus-dali — out of scope
Installation (pre-npm-publish)
cd /mnt/dietpi_userdat