node-red-contrib-dmx-for-ha 0.2.2 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -130
- package/nodes/ha-mqtt-button.html +5 -3
- package/nodes/ha-mqtt-dmx-group.html +5 -3
- package/nodes/ha-mqtt-dmx.html +5 -4
- package/nodes/ha-mqtt-pir.html +5 -3
- package/nodes/ha-mqtt-relay.html +5 -4
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -12,7 +12,7 @@ No YAML. No custom MQTT discovery config. No external wiring inside Node-RED.
|
|
|
12
12
|
|
|
13
13
|
Bridges the gap between DMX lighting hardware and Home Assistant.
|
|
14
14
|
|
|
15
|
-
Most DMX implementations require either expensive proprietary hardware or complex custom integrations. This package gives you
|
|
15
|
+
Most DMX implementations require either expensive proprietary hardware or complex custom integrations. This package gives you drop-in Node-RED nodes that handle everything:
|
|
16
16
|
|
|
17
17
|
- Full Home Assistant MQTT discovery — entities appear automatically in HA
|
|
18
18
|
- RGBW, RGBWW, RGB, Colour Temperature, Brightness, and On/Off colour modes
|
|
@@ -20,6 +20,7 @@ Most DMX implementations require either expensive proprietary hardware or comple
|
|
|
20
20
|
- Transitions, effects, and group control
|
|
21
21
|
- State persistence across reboots
|
|
22
22
|
- Wall button and PIR motion sensor integration
|
|
23
|
+
- 230V relay switching
|
|
23
24
|
|
|
24
25
|
> **Note:** This is building automation DMX — fixtures, decoders, dimmers, relay switching. Not entertainment industry DMX (no movers, gobos, or fixture profiles). DMX is an open standard and this package works with any DMX controller that accepts MQTT payloads.
|
|
25
26
|
|
|
@@ -27,14 +28,16 @@ Most DMX implementations require either expensive proprietary hardware or comple
|
|
|
27
28
|
|
|
28
29
|
## Nodes included
|
|
29
30
|
|
|
30
|
-
| Node | Palette label | Purpose |
|
|
31
|
-
|
|
32
|
-
| `ha-mqtt-config` | *(config)* | Shared site config — broker, zone, HA settings |
|
|
33
|
-
| `ha-mqtt-dmx` | DMX | Single DMX fixture |
|
|
34
|
-
| `ha-mqtt-dmx-group` | DMX Group | Virtual group — fans commands to child nodes |
|
|
35
|
-
| `ha-mqtt-relay` | Relay | 230V relay switching
|
|
36
|
-
| `ha-mqtt-button` | Button | Wall button receiver |
|
|
37
|
-
| `ha-mqtt-pir` | PIR | Motion sensor receiver |
|
|
31
|
+
| Node | Palette label | Colour | Purpose |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| `ha-mqtt-config` | *(config)* | — | Shared site config — broker, zone, HA settings |
|
|
34
|
+
| `ha-mqtt-dmx` | DMX | Yellow | Single DMX fixture |
|
|
35
|
+
| `ha-mqtt-dmx-group` | DMX Group | Gold | Virtual group — fans commands to child nodes |
|
|
36
|
+
| `ha-mqtt-relay` | Relay | Red | 230V relay switching |
|
|
37
|
+
| `ha-mqtt-button` | Button | Green | Wall button receiver |
|
|
38
|
+
| `ha-mqtt-pir` | PIR | Purple | Motion sensor receiver |
|
|
39
|
+
|
|
40
|
+
Node colours match the cable colour convention used on electrical plans.
|
|
38
41
|
|
|
39
42
|
---
|
|
40
43
|
|
|
@@ -49,60 +52,52 @@ Most DMX implementations require either expensive proprietary hardware or comple
|
|
|
49
52
|
|
|
50
53
|
## Installation
|
|
51
54
|
|
|
55
|
+
### Via HA Node-RED Add-on config
|
|
56
|
+
|
|
57
|
+
In HA → Settings → Add-ons → Node-RED → Configuration, add to the packages list:
|
|
58
|
+
```
|
|
59
|
+
node-red-contrib-dmx-for-ha
|
|
60
|
+
```
|
|
61
|
+
Restart the add-on. Nodes appear in the palette under **DMX for HA**.
|
|
62
|
+
|
|
63
|
+
### Via Node-RED Palette Manager
|
|
64
|
+
|
|
65
|
+
Node-RED → Menu → Manage Palette → Install → search `node-red-contrib-dmx-for-ha`
|
|
66
|
+
|
|
67
|
+
### Via npm
|
|
68
|
+
|
|
52
69
|
```bash
|
|
53
70
|
cd ~/.node-red
|
|
54
71
|
npm install node-red-contrib-dmx-for-ha
|
|
55
72
|
```
|
|
56
73
|
|
|
57
|
-
Restart Node-RED. The nodes appear in the palette under **DMX for HA**.
|
|
58
|
-
|
|
59
74
|
---
|
|
60
75
|
|
|
61
76
|
## ⚠️ Required: Configure Node-RED context storage
|
|
62
77
|
|
|
63
|
-
This package stores fixture state
|
|
78
|
+
This package stores fixture state so it survives Node-RED restarts. A **disk context store** must be configured in Node-RED.
|
|
64
79
|
|
|
65
80
|
**Without this, fixture state resets to default every time Node-RED restarts.**
|
|
66
81
|
|
|
67
|
-
### What this means
|
|
68
|
-
|
|
69
|
-
Node-RED has a context store — a key/value store for saving data. By default it only stores in memory (lost on restart). To persist across restarts you need to add a disk-backed store.
|
|
70
|
-
|
|
71
82
|
### How to configure it
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
84
|
+
Find your Node-RED settings file:
|
|
85
|
+
- HA add-on: `/etc/node-red/config.js`
|
|
86
|
+
- Standard install: `~/.node-red/settings.js`
|
|
76
87
|
|
|
77
|
-
|
|
88
|
+
Add or update the `contextStorage` section:
|
|
78
89
|
|
|
79
90
|
```javascript
|
|
80
91
|
contextStorage: {
|
|
81
|
-
default:
|
|
82
|
-
|
|
83
|
-
},
|
|
84
|
-
disk: {
|
|
85
|
-
module: "localfilesystem"
|
|
86
|
-
}
|
|
92
|
+
default: { module: 'memory' },
|
|
93
|
+
disk_values: { module: 'localfilesystem' },
|
|
87
94
|
},
|
|
88
95
|
```
|
|
89
96
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
After restarting, open Node-RED → Menu → Context Data. You should see both `memory` and `disk` listed as available stores.
|
|
95
|
-
|
|
96
|
-
If you only see `default` or `memory`, the disk store is not configured correctly.
|
|
97
|
-
|
|
98
|
-
### What happens without it
|
|
99
|
-
|
|
100
|
-
The nodes will still work — they fall back to memory storage gracefully. But:
|
|
101
|
-
- All fixture states reset to their default (usually OFF) every time Node-RED restarts
|
|
102
|
-
- Physical relays may not be re-asserted correctly after a reboot
|
|
103
|
-
- DMX channels may not restore to their previous values
|
|
104
|
-
|
|
105
|
-
For a production deployment, disk context storage is essential.
|
|
97
|
+
Restart Node-RED. Verify in the startup log:
|
|
98
|
+
```
|
|
99
|
+
Context store : 'disk_values' [module=localfilesystem]
|
|
100
|
+
```
|
|
106
101
|
|
|
107
102
|
---
|
|
108
103
|
|
|
@@ -110,58 +105,65 @@ For a production deployment, disk context storage is essential.
|
|
|
110
105
|
|
|
111
106
|
### 1. Create a config node
|
|
112
107
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
1. Drag a **DMX** node onto the canvas
|
|
116
|
-
2. Open its editor and click the pencil icon next to **Config**
|
|
108
|
+
1. Drag a **DMX** node onto the canvas and open its editor
|
|
109
|
+
2. Click **Add new ha-mqtt-config...** next to the Config field
|
|
117
110
|
3. Fill in:
|
|
118
|
-
- **
|
|
119
|
-
- **Site ID** —
|
|
120
|
-
- **Zone** — e.g. `Master`
|
|
111
|
+
- **Config Label** — a friendly name e.g. "My House". Don't stress — this can be changed at any time.
|
|
112
|
+
- **Site ID** — short slug for MQTT topics e.g. `home` (no spaces)
|
|
113
|
+
- **Zone** — physical zone e.g. `Master`, `BnB`. Used in MQTT topics. This can be updated later if needed.
|
|
121
114
|
- **Broker** — select your existing MQTT broker config
|
|
122
|
-
4. Click **Add**
|
|
115
|
+
4. Click **Add**
|
|
123
116
|
|
|
124
117
|
### 2. Add a DMX fixture
|
|
125
118
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
Fill in the node editor:
|
|
120
|
+
1. **Fixture ID** — Prefix (`L`), Plan ID, optional channel letter e.g. `L` `992` `-A`
|
|
121
|
+
2. **Colour Mode** — RGBW, RGB, CCT etc.
|
|
122
|
+
3. **Device Type** — e.g. Downlight, Strip light
|
|
123
|
+
4. **Situation** — in, above, throughout etc.
|
|
124
|
+
5. **Config** — select your config node
|
|
125
|
+
6. **Area** and **Sub-Area** — location on the property
|
|
126
|
+
7. **DMX Channels** — channel numbers matching your fixture's DMX start address
|
|
127
|
+
8. **Controller** and **Universe** numbers
|
|
128
|
+
9. **Discovery Mode** — Enabled, Hidden, or Disabled
|
|
133
129
|
|
|
134
|
-
|
|
130
|
+
Deploy — the fixture appears in HA automatically.
|
|
135
131
|
|
|
136
|
-
### 3.
|
|
132
|
+
### 3. Auto-discovery
|
|
137
133
|
|
|
138
|
-
|
|
139
|
-
Wire an inject node (set to fire on deploy + every X seconds) with:
|
|
134
|
+
Nodes auto-discover when deployed if the MQTT broker is connected. No external inject nodes or SYSTEM node needed.
|
|
140
135
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## Discovery Modes
|
|
139
|
+
|
|
140
|
+
| Mode | Behaviour |
|
|
141
|
+
|---|---|
|
|
142
|
+
| **Enabled** | Discovered and visible in HA dashboard |
|
|
143
|
+
| **Hidden** | Discovered and usable in automations, not auto-placed in dashboard |
|
|
144
|
+
| **Disabled** | Not discovered — entity does not exist in HA |
|
|
144
145
|
|
|
145
|
-
|
|
146
|
+
Use **Disabled** for fixtures not yet installed or wired.
|
|
147
|
+
Use **Hidden** for fixtures installed but not ready for the homeowner.
|
|
146
148
|
|
|
147
149
|
---
|
|
148
150
|
|
|
149
|
-
##
|
|
151
|
+
## Canvas button
|
|
152
|
+
|
|
153
|
+
Each node has a clickable button on the right side of the canvas node. It toggles between `device:remove` and `device:add`:
|
|
150
154
|
|
|
151
|
-
|
|
155
|
+
- First press → `device:remove` — cleanly removes entity from HA
|
|
156
|
+
- Second press → `device:add` — re-announces to HA
|
|
152
157
|
|
|
153
|
-
|
|
154
|
-
- `Guest Wing` → Site ID: `home`, Zone: `GuestWing`
|
|
158
|
+
A toast notification confirms which action fired.
|
|
155
159
|
|
|
156
|
-
|
|
157
|
-
MQTT topics are built automatically: `{siteId}/{zone}/dmx/{universe}`.
|
|
160
|
+
Typical workflow: Remove → update node settings → Deploy → node auto-discovers with new settings.
|
|
158
161
|
|
|
159
162
|
---
|
|
160
163
|
|
|
161
164
|
## DMX Group Node
|
|
162
165
|
|
|
163
|
-
|
|
164
|
-
are forwarded to all nodes connected to its **Link** output.
|
|
166
|
+
Appears as a single light entity in HA. Commands fan out to all nodes on its **Link** output.
|
|
165
167
|
|
|
166
168
|
```
|
|
167
169
|
[DMX Group LG-992]
|
|
@@ -171,32 +173,38 @@ are forwarded to all nodes connected to its **Link** output.
|
|
|
171
173
|
└──→ [DMX L-992-C]
|
|
172
174
|
```
|
|
173
175
|
|
|
174
|
-
Wire
|
|
175
|
-
|
|
176
|
+
Wire **Link** to child DMX or Relay node inputs. Supports nested groups.
|
|
177
|
+
|
|
178
|
+
Naming: `L-992-A`, `L-992-B`, `L-992-C` group naturally under `LG-992`.
|
|
176
179
|
|
|
177
180
|
---
|
|
178
181
|
|
|
179
182
|
## Wall buttons
|
|
180
183
|
|
|
181
|
-
|
|
182
|
-
|
|
184
|
+
Creates two HA entities per button:
|
|
183
185
|
- `binary_sensor.s_10_a` — automation trigger, auto-clears after hold time
|
|
184
|
-
- `button.s_10_a_btn` — dashboard UI mirror
|
|
186
|
+
- `button.s_10_a_btn` — dashboard UI mirror
|
|
185
187
|
|
|
186
|
-
|
|
187
|
-
lets you test automations from the HA dashboard without physically pressing the wall button.
|
|
188
|
+
Letters `I` and `O` are never used as suffixes — they look too similar to `1` and `0`.
|
|
188
189
|
|
|
189
190
|
---
|
|
190
191
|
|
|
191
192
|
## PIR sensors
|
|
192
193
|
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
Goes **offline** in HA during a configurable warm-up period after NR starts — prevents false triggers during reboots. Default warm-up: 120s.
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Fixture ID conventions
|
|
195
199
|
|
|
196
|
-
|
|
197
|
-
|
|
200
|
+
| Prefix | Meaning | Example |
|
|
201
|
+
|---|---|---|
|
|
202
|
+
| `L` | Light (DMX) | `L-992-A` |
|
|
203
|
+
| `P` | Power (Relay) | `P-51` |
|
|
204
|
+
| `LG` | Light Group | `LG-992` |
|
|
205
|
+
| `S` | Sensor (Button/PIR) | `S-10-A` |
|
|
198
206
|
|
|
199
|
-
|
|
207
|
+
Entity IDs in HA are locked to the fixture ID and survive friendly name changes.
|
|
200
208
|
|
|
201
209
|
---
|
|
202
210
|
|
|
@@ -205,71 +213,55 @@ Set the warm-up time to match your PIR hardware's stabilisation period (default
|
|
|
205
213
|
| Node | Topic |
|
|
206
214
|
|---|---|
|
|
207
215
|
| DMX | `{siteId}/{zone}/dmx/{universe}` |
|
|
208
|
-
| Relay
|
|
216
|
+
| Relay | `{siteId}/{zone}/{controller}/relay/{relayNum}` |
|
|
209
217
|
| HA discovery | `homeassistant/light/{fixtureId}/config` |
|
|
210
|
-
|
|
211
|
-
|
|
218
|
+
|
|
219
|
+
DMX payload format: `"212255"` = channel 212, value 255 (3 digits each).
|
|
212
220
|
|
|
213
221
|
---
|
|
214
222
|
|
|
215
|
-
##
|
|
223
|
+
## Multi-zone deployments
|
|
216
224
|
|
|
217
|
-
|
|
225
|
+
Create one `ha-mqtt-config` per zone. Each node selects its zone via the Config dropdown.
|
|
218
226
|
|
|
219
227
|
```
|
|
220
|
-
|
|
221
|
-
|
|
228
|
+
Master Zone config → Zone: Master → topics: home/Master/dmx/1
|
|
229
|
+
Guest Wing config → Zone: GuestWing → topics: home/GuestWing/dmx/1
|
|
222
230
|
```
|
|
223
231
|
|
|
224
|
-
Three digits for channel, three digits for value. Your DMX controller firmware
|
|
225
|
-
must expect this format.
|
|
226
|
-
|
|
227
232
|
---
|
|
228
233
|
|
|
229
|
-
##
|
|
230
|
-
|
|
231
|
-
Fixture IDs match your electrical plan cable IDs:
|
|
232
|
-
|
|
233
|
-
| Prefix | Meaning | Example |
|
|
234
|
-
|---|---|---|
|
|
235
|
-
| `L` | Light (DMX) | `L-992-A` |
|
|
236
|
-
| `P` | Power (Relay) | `P-51` |
|
|
237
|
-
| `LG` | Light Group (DMX Group) | `LG-992` |
|
|
238
|
-
| `S` | Sensor (Button / PIR) | `S-10-A` |
|
|
234
|
+
## Troubleshooting
|
|
239
235
|
|
|
240
|
-
|
|
241
|
-
within a multi-channel cable. `L-992-A`, `L-992-B`, `L-992-C` are three
|
|
242
|
-
separate fixtures on cable 992, grouped under `LG-992`.
|
|
236
|
+
**Nodes don't appear in palette** — Restart Node-RED. Check log for errors.
|
|
243
237
|
|
|
244
|
-
|
|
238
|
+
**Fixture doesn't appear in HA** — Check broker connection. Check canvas status. Use canvas button to manually trigger `device:add`.
|
|
245
239
|
|
|
246
|
-
|
|
240
|
+
**State resets on restart** — Configure disk context storage. Check log for `disk_values` store confirmation.
|
|
247
241
|
|
|
248
|
-
**
|
|
249
|
-
Restart Node-RED. Check the NR log for install errors.
|
|
242
|
+
**Node shows "Broker disconnected"** — Check config node broker settings.
|
|
250
243
|
|
|
251
|
-
**
|
|
252
|
-
- Check the MQTT broker connection in the config node
|
|
253
|
-
- Confirm HA has the MQTT integration installed and configured
|
|
254
|
-
- Send a `device:add` message manually via an inject node
|
|
255
|
-
- Check Node-RED logs for error messages
|
|
244
|
+
**Node shows "Disabled — not discovered"** — Change Discovery Mode to Enabled or Hidden and deploy.
|
|
256
245
|
|
|
257
|
-
**
|
|
258
|
-
Configure disk context storage — see the [Required setup](#️-required-configure-node-red-context-storage) section above.
|
|
246
|
+
**PIR stuck offline** — Warm-up timer running. Wait for configured warm-up period.
|
|
259
247
|
|
|
260
|
-
|
|
261
|
-
The warm-up timer is running. Wait for the configured warm-up period.
|
|
262
|
-
Or send `msg.device = "avty"` with `msg.payload = "online"` to bring it online manually.
|
|
248
|
+
---
|
|
263
249
|
|
|
264
|
-
|
|
265
|
-
- Check the relay MQTT topic in the NR debug panel
|
|
266
|
-
- Confirm your relay controller subscribes to `{siteId}/{zone}/{controller}/relay/{relayNum}`
|
|
267
|
-
- Relay payload is `"1"` (ON) or `"0"` (OFF) as a string
|
|
250
|
+
## Version history
|
|
268
251
|
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
252
|
+
| Version | Changes |
|
|
253
|
+
|---|---|
|
|
254
|
+
| 0.2.2 | Group Node status updates, broker feedback, version in editor panel |
|
|
255
|
+
| 0.2.1 | Hidden mode — entity not auto-placed in dashboard |
|
|
256
|
+
| 0.2.0 | Canvas button toggles remove/add, auto-discovery on deploy |
|
|
257
|
+
| 0.1.9 | Correct disk store name, auto-discovery fallback, node ordering |
|
|
258
|
+
| 0.1.8 | Section reordering all nodes, Config picker position |
|
|
259
|
+
| 0.1.7 | Discovery Mode, broker already-connected fix |
|
|
260
|
+
| 0.1.6 | Canvas button fix |
|
|
261
|
+
| 0.1.5 | Context store error suppressed |
|
|
262
|
+
| 0.1.2 | Original subflow colours restored |
|
|
263
|
+
| 0.1.1 | UI fixes, postfix alphabet, Config Label, Discovery Mode |
|
|
264
|
+
| 0.1.0 | Initial release |
|
|
273
265
|
|
|
274
266
|
---
|
|
275
267
|
|
|
@@ -51,9 +51,11 @@
|
|
|
51
51
|
|
|
52
52
|
label: function () {
|
|
53
53
|
if (this.name) return this.name;
|
|
54
|
-
const id
|
|
55
|
-
const
|
|
56
|
-
|
|
54
|
+
const id = `S-${this.uid || '?'}${this.uidPostfix || ''}`;
|
|
55
|
+
const pos = this.buttonPosition || '';
|
|
56
|
+
const sit = this.situation || 'in';
|
|
57
|
+
const area = this.area || '';
|
|
58
|
+
return `${id} · ${pos} button ${sit} ${area}`.trim();
|
|
57
59
|
},
|
|
58
60
|
|
|
59
61
|
labelStyle: function () {
|
|
@@ -53,9 +53,11 @@
|
|
|
53
53
|
|
|
54
54
|
label: function () {
|
|
55
55
|
if (this.name) return this.name;
|
|
56
|
-
const id
|
|
57
|
-
const
|
|
58
|
-
|
|
56
|
+
const id = `LG-${this.uid || '?'}${this.uidPostfix || ''}`;
|
|
57
|
+
const type = this.deviceType || '';
|
|
58
|
+
const sit = this.situation || 'in';
|
|
59
|
+
const area = this.area || '';
|
|
60
|
+
return `${id} · ${type} Group ${sit} ${area}`.trim();
|
|
59
61
|
},
|
|
60
62
|
|
|
61
63
|
labelStyle: function () {
|
package/nodes/ha-mqtt-dmx.html
CHANGED
|
@@ -175,10 +175,11 @@
|
|
|
175
175
|
|
|
176
176
|
label: function () {
|
|
177
177
|
if (this.name) return this.name;
|
|
178
|
-
const
|
|
179
|
-
const
|
|
180
|
-
const
|
|
181
|
-
|
|
178
|
+
const id = `${this.uidPrefix || 'L'}-${this.uid || '?'}${this.uidPostfix || ''}`;
|
|
179
|
+
const type = this.deviceType || '';
|
|
180
|
+
const sit = this.situation || 'in';
|
|
181
|
+
const area = this.area || '';
|
|
182
|
+
return `${id} · ${type} ${sit} ${area}`.trim();
|
|
182
183
|
},
|
|
183
184
|
|
|
184
185
|
labelStyle: function () {
|
package/nodes/ha-mqtt-pir.html
CHANGED
|
@@ -52,9 +52,11 @@
|
|
|
52
52
|
|
|
53
53
|
label: function () {
|
|
54
54
|
if (this.name) return this.name;
|
|
55
|
-
const id
|
|
56
|
-
const
|
|
57
|
-
|
|
55
|
+
const id = `S-${this.uid || '?'}${this.uidPostfix || ''}`;
|
|
56
|
+
const type = this.pirType || 'PIR';
|
|
57
|
+
const sit = this.situation || 'in';
|
|
58
|
+
const area = this.area || '';
|
|
59
|
+
return `${id} · ${type} PIR ${sit} ${area}`.trim();
|
|
58
60
|
},
|
|
59
61
|
|
|
60
62
|
labelStyle: function () {
|
package/nodes/ha-mqtt-relay.html
CHANGED
|
@@ -53,10 +53,11 @@
|
|
|
53
53
|
|
|
54
54
|
label: function () {
|
|
55
55
|
if (this.name) return this.name;
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
|
|
56
|
+
const id = `${this.uidPrefix || 'P'}-${this.uid || '?'}${this.uidPostfix || ''}`;
|
|
57
|
+
const type = this.deviceType || '';
|
|
58
|
+
const sit = this.situation || 'in';
|
|
59
|
+
const area = this.area || '';
|
|
60
|
+
return `${id} · ${type} ${sit} ${area}`.trim();
|
|
60
61
|
},
|
|
61
62
|
|
|
62
63
|
labelStyle: function () {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "node-red-contrib-dmx-for-ha",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"description": "DMX lighting control for Home Assistant via Node-RED and MQTT. Place a node, fill in the settings, deploy. Full HA device registry integration with RGBW/RGBWW/CCT/brightness colour modes, transitions, effects, and group control.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"node-red",
|