node-red-contrib-nhc2 1.19.4
Node-RED nodes for Niko Home Control 2 via MQTT
node-red-contrib-nhc2
Node-RED nodes for Niko Home Control 2 via MQTT (Hobby API). Control and monitor your NHC2 system directly from Node-RED.
Table of Contents
Features
- Automatic discovery of NHC2 controllers on your network
- Secure MQTT(S) communication with optional reconnect watchdog
- Real-time event listening (status, brightness, etc.)
- Control individual devices or multiple properties
- Integration-ready for Home Assistant and other home automation platforms
- Hue Mapping: Convert NHC2 values to HueMagic payloads for Philips Hue integration
Prerequisites
- Node.js ≥ 16.0.0
- Node-RED ≥ 3.1.0
- Niko Home Control 2 with the Hobby API enabled
Installation
cd ~/.node-red
npm install node-red-contrib-nhc2
Restart Node-RED to load the new nodes.
Usage
NHC2 Config Node
Configure your connection to the NHC2 controller.
Settings:
- Host: IP address of the controller (e.g.
192.168.0.202) - Port: MQTT port (
8884by default for MQTT(S)) - Auto Discover: Enable UDP-based discovery of controllers
- Select Controller (MAC): Choose from discovered controllers
- Username: MQTT topic prefix (default
hobby) - Password: Hobby API password from NHC2 programming software
- Debug: Enable verbose logging output
- Watchdog: Listen for a keep-alive message every 30 s to reset the reconnect timer
- Refresh Devices: Manually refresh the device list
Example secrets.json
If you'd like to use a secrets.json file instead of configuring credentials in the UI, create a file named secrets.json in your node-red-contrib-nhc2 directory with the following content:
{
"username": "hobby",
"port": 8884,
"password": ""
}
- username: Your MQTT username (UUID)
- port: MQTT port to use when secrets mode is enabled
- password: Leave blank; it will be automatically set to your controller’s serial number upon discovery
NHC2 Input Node
Listen for events emitted by your NHC2 devices.
- Inputs: None
- Outputs: 1
Configuration:
- Config: Select your NHC2 Config node
- Device Filter: Filter devices by name/model/type
- Device: Select a specific device (UUID)
- Property: Choose a property (
Status,Brightness, etc.) orAll
Output Message:
msg.topic // Device Name
msg.payload // Value of the selected property or object of all properties
msg.device // Full device object returned by the controller
NHC2 Output Node
Send control commands to your NHC2 devices.
- Inputs: 1
- Outputs: 0
Configuration:
- Config: Select your NHC2 Config node
- Device Filter: Filter and select devices
- Device: Choose a device to control
- Property: Property to set (e.g.
Status, leave blank for multiple)
Input Message Requirements:
- If Property is set:
msg.payloadmust be the value (e.g.true,"On", an integer) - If Property is blank:
msg.payloadmust be an object{ PropertyName: value }or an array of such objects
NHC2 Hue Mapping Node
Maps NHC2 / HA-like payloads to Hue-friendly objects.
Inputs / Outputs
- Inputs: 1
- Outputs: 1
Editor settings
- Number input maps to:
brightness|tunable white|color hue - Accept color-frames as input (default OFF) — accepts
{rgb:[r,g,b]},{r,g,b},{h,s,v}/{hue,sat,val},{kelvin},{mireds} - Color input may change brightness (default OFF) — when OFF, color never changes brightness
- Auto-include CT when in white mode (default ON) — always emits last CT so Hue leaves colour mode
- Map Kelvin range to full Hue CT span (153–500) (default ON) —
minKelvin → 500,maxKelvin → 153 - CT range (Kelvin):
minKelvin,maxKelvin - Listen ColorMode (default ON) — obey
{ ColorMode:"TunableWhite"|"Color" }or{ mode:"white"|"colour" } - Quiet status
Behavior
- On/Off: boolean,
{switch:true|false}, or{ Status:"On"|"Off" }→{ on:… } - Brightness:
{Brightness:"62"}/{brightness:62}→{ brightness:62 }(sticky until changed) - Tunable White:
{TunableWhite:"cwww(k, x)"}→colorTempfrom k; x is ignored for brightness{temperature: 0..100}→ mapped across[minKelvin..maxKelvin], then converted to Hue mireds{kelvin:k}/{mireds:m}(when color-frames enabled)- Output always uses
colorTemp(mireds), clamped 153–500 - If Map Kelvin range… is ON:
minKelvin → 500,maxKelvin → 153linearly
- Color:
{Color:"hsv(h,s,v)"}or{Color:"rgb(r,g,b)"}→{ rgb:[r,g,b] }- By default, no
brightnessincluded; turn on Color input may change brightness to let HSV/V set it
- By default, no
- Mode switching:
{ ColorMode:"TunableWhite" }(or{ mode:"white" }) → emits latestcolorTempso Hue leaves colour mode; brightness sticks
Single integer input (0–100)
Yes, still supported and selectable via Number input maps to:
- Brightness (default):
42→{ "brightness": 42, "on": true } - Tunable white:
42→colorTempmapped from 42% of[minKelvin..maxKelvin]→ mireds (clamped 153–500) - Color hue:
42→ hue≈42*3.6°, RGB fromHSV(h,100%,V=last_brightness)→{ "rgb":[r,g,b] }
Examples
// Sticky brightness
{ "Brightness":"37" } // → { "brightness": 37, "on": true }
{ "TunableWhite":"cwww(2700,100)" } // → { "colorTemp": 500, "on": true } // if map-to-full ON & minK=2700
// Percent temperature across your K-range
{ "temperature": 50 } // → colorTemp from 50% of [minK..maxK] → mireds (153–500)
// Explicit Kelvin
{ "kelvin": 6500 } // → { "colorTemp": 153 } // with map-to-full ON and maxK=6500
// Color
{ "Color": "hsv(241,100,100)" } // → { "rgb": [..,..,..], "on": true } // no brightness unless option enabled
ℹ️ Outputs never include a
coloralias orcolorTempKelvin; usergbandcolorTemponly.
CLI Discovery Utility
Discover NHC2 controllers via UDP broadcast on your local network:
node discover_nhc2.js [--timeout <ms>] [--multiple]
--timeout: Discovery window in milliseconds (default:5000)--multiple: Return all found controllers (default: enabled)
Example Output:
[
{
"mac": "00:11:22:33:44:55",
"ip": "192.168.0.202",
"submask": "255.255.255.0",
"version": "<firmware>",
"serial": "<serial-number>"
}
]
Examples
Import examples/usage_example.json into Node-RED to see a complete demo flow.
Changelog
For the full changelog, see CHANGELOG.md.
v1.19.4
Added
- Hue Mapping node (
nhc2-hue-mapping) now supports color-objects from Niko.
v1.18.0
Added
- Hue Mapping node (
nhc2-hue-mapping) to map NHC2 values to HueMagic payloads for brightness, color temperature, and RGB.
v1.17.0
Removed
- Use Secrets toggle removed from the Config node UI.
Changed
- Watchdog: listens for a keep-alive message every 30 s to reset the reconnect timer.
- Improved the save-restore on the nodes
- Improved filter, so it shows the first device while searching
Contributing
Contributions, issues, and feature requests are welcome! Please open an issue or submit a pull request on GitHub.
License
MIT © Peter Løbner — Niko Home Control 2