node-red-contrib-dmx-for-ha 0.6.27 → 0.6.30

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.
@@ -313,7 +313,7 @@
313
313
  </div>
314
314
 
315
315
  <div style="margin-top:16px; padding-top:8px; border-top:1px solid #444; color:#666; font-size:0.8em; text-align:right;">
316
- node-red-contrib-dmx-for-ha &nbsp;v0.6.27
316
+ node-red-contrib-dmx-for-ha &nbsp;v0.6.30
317
317
  </div>
318
318
 
319
319
  </script>
@@ -137,7 +137,7 @@ module.exports = function (RED) {
137
137
  if (S.debugMode) {
138
138
  setStatus('red', 'dot', `ha-mqtt-button "${_debugId}" ⚠ DEBUG MODE ON`);
139
139
  node.warn(`[DEBUG] ha-mqtt-button "${_debugId}" — debug mode is enabled. Disable in production.`);
140
- setTimeout(function () {
140
+ S._debugTimer = setTimeout(function () {
141
141
  if (S.debugMode) {
142
142
  S.debugMode = false;
143
143
  node.warn(`[DEBUG] ha-mqtt-button "${_debugId}" — debug mode auto-disabled after 12 hours`);
@@ -315,6 +315,7 @@ module.exports = function (RED) {
315
315
 
316
316
  // ── Cleanup ───────────────────────────────────────────────
317
317
  node.on('close', function (done) {
318
+ if (S._debugTimer) clearTimeout(S._debugTimer);
318
319
  broker.unsubscribe(S._activeBtnTopic || S.subscribeTopic, node.id);
319
320
  broker.unsubscribe(uiBtnCmdTopic, node.id);
320
321
  broker.deregister(node, done);
@@ -317,7 +317,7 @@
317
317
  </div>
318
318
 
319
319
  <div style="margin-top:16px; padding-top:8px; border-top:1px solid #444; color:#666; font-size:0.8em; text-align:right;">
320
- node-red-contrib-dmx-for-ha &nbsp;v0.6.27
320
+ node-red-contrib-dmx-for-ha &nbsp;v0.6.30
321
321
  </div>
322
322
 
323
323
  </script>
@@ -142,7 +142,7 @@ module.exports = function (RED) {
142
142
  if (S.debugMode) {
143
143
  setStatus('red', 'dot', `ha-mqtt-dmx-group "${_debugId}" ⚠ DEBUG MODE ON`);
144
144
  node.warn(`[DEBUG] ha-mqtt-dmx-group "${_debugId}" — debug mode is enabled. Disable in production.`);
145
- setTimeout(function () {
145
+ S._debugTimer = setTimeout(function () {
146
146
  if (S.debugMode) {
147
147
  S.debugMode = false;
148
148
  node.warn(`[DEBUG] ha-mqtt-dmx-group "${_debugId}" — debug mode auto-disabled after 12 hours`);
@@ -417,6 +417,7 @@ module.exports = function (RED) {
417
417
 
418
418
  // ── Cleanup ───────────────────────────────────────────────
419
419
  node.on('close', function (done) {
420
+ if (S._debugTimer) clearTimeout(S._debugTimer);
420
421
  if (diskTimer) clearTimeout(diskTimer);
421
422
  broker.unsubscribe(cmdTopic, node.id);
422
423
  broker.deregister(node, done);
@@ -169,6 +169,7 @@
169
169
  defaultState: { value: 'OFF' },
170
170
  // Advanced
171
171
  dmxLimiter: { value: '255' },
172
+ dmxFloor: { value: '' },
172
173
  minOutput: { value: '1' },
173
174
  brightBump: { value: '50' },
174
175
  ticksPerSec: { value: '31' },
@@ -177,11 +178,13 @@
177
178
 
178
179
  label: function () {
179
180
  if (this.name) return this.name;
180
- const id = `${this.uidPrefix || 'L'}-${this.uid || '?'}${this.uidPostfix || ''}`;
181
- const type = this.deviceType || '';
182
- const sit = this.situation || 'in';
183
- const area = this.area || '';
184
- return `${id} · ${type} ${sit} ${area}`.trim();
181
+ const id = `${this.uidPrefix || 'L'}-${this.uid || '?'}${this.uidPostfix || ''}`;
182
+ const type = this.deviceType || '';
183
+ const sit = this.situation || 'in';
184
+ const area = this.area || '';
185
+ const sub = this.subLocation || '';
186
+ const loc = sub ? `${area} - ${sub}` : area;
187
+ return `(${id}) - ${type} ${sit} the ${loc}`.trim();
185
188
  },
186
189
 
187
190
  labelStyle: function () {
@@ -544,6 +547,15 @@
544
547
  <span style="margin-left:8px; color:#999; font-size:0.85em;">Caps all DMX channel values (0–255)</span>
545
548
  </div>
546
549
 
550
+ <div class="form-row">
551
+ <label for="node-input-dmxFloor">
552
+ <i class="fa fa-arrow-up"></i> DMX floor
553
+ </label>
554
+ <input type="number" id="node-input-dmxFloor"
555
+ min="0" max="20" step="1" style="width:70px" placeholder="config default" />
556
+ <span style="margin-left:8px; color:#999; font-size:0.85em;">Override config floor for this fixture (blank = use config default)</span>
557
+ </div>
558
+
547
559
  <div class="form-row">
548
560
  <label for="node-input-minOutput">
549
561
  <i class="fa fa-sort-numeric-asc"></i> Min output when ON
@@ -584,7 +596,7 @@
584
596
  </div>
585
597
 
586
598
  <div style="margin-top:16px; padding-top:8px; border-top:1px solid #444; color:#666; font-size:0.8em; text-align:right;">
587
- node-red-contrib-dmx-for-ha &nbsp;v0.6.27
599
+ node-red-contrib-dmx-for-ha &nbsp;v0.6.30
588
600
  </div>
589
601
 
590
602
  </script>
@@ -164,7 +164,7 @@ module.exports = function (RED) {
164
164
  flashShort: cfg.flashShort,
165
165
  flashLong: cfg.flashLong,
166
166
  diskDelay: cfg.diskDelay,
167
- dmxFloor: cfg.dmxFloor !== undefined ? cfg.dmxFloor : 3,
167
+ dmxFloor: config.dmxFloor !== '' && config.dmxFloor !== undefined && config.dmxFloor !== null ? parseInt(config.dmxFloor) : (cfg.dmxFloor !== undefined ? cfg.dmxFloor : 3),
168
168
  };
169
169
 
170
170
  // ── Debug mode safeguards ─────────────────────────────────────────
@@ -172,7 +172,7 @@ module.exports = function (RED) {
172
172
  if (S.debugMode) {
173
173
  setStatus('red', 'dot', `ha-mqtt-dmx "${_debugId}" ⚠ DEBUG MODE ON`);
174
174
  node.warn(`[DEBUG] ha-mqtt-dmx "${_debugId}" — debug mode is enabled. Disable in production.`);
175
- setTimeout(function () {
175
+ S._debugTimer = setTimeout(function () {
176
176
  if (S.debugMode) {
177
177
  S.debugMode = false;
178
178
  node.warn(`[DEBUG] ha-mqtt-dmx "${_debugId}" — debug mode auto-disabled after 12 hours`);
@@ -881,6 +881,7 @@ module.exports = function (RED) {
881
881
 
882
882
  // ── Cleanup ───────────────────────────────────────────────
883
883
  node.on('close', function (done) {
884
+ if (S._debugTimer) clearTimeout(S._debugTimer);
884
885
  clearChannelRegistry();
885
886
  stopEffect();
886
887
  if (diskTimer) clearTimeout(diskTimer);
@@ -318,7 +318,7 @@
318
318
  </div>
319
319
 
320
320
  <div style="margin-top:16px; padding-top:8px; border-top:1px solid #444; color:#666; font-size:0.8em; text-align:right;">
321
- node-red-contrib-dmx-for-ha &nbsp;v0.6.27
321
+ node-red-contrib-dmx-for-ha &nbsp;v0.6.30
322
322
  </div>
323
323
 
324
324
  </script>
@@ -135,7 +135,7 @@ module.exports = function (RED) {
135
135
  if (S.debugMode) {
136
136
  setStatus('red', 'dot', `ha-mqtt-pir "${_debugId}" ⚠ DEBUG MODE ON`);
137
137
  node.warn(`[DEBUG] ha-mqtt-pir "${_debugId}" — debug mode is enabled. Disable in production.`);
138
- setTimeout(function () {
138
+ S._debugTimer = setTimeout(function () {
139
139
  if (S.debugMode) {
140
140
  S.debugMode = false;
141
141
  node.warn(`[DEBUG] ha-mqtt-pir "${_debugId}" — debug mode auto-disabled after 12 hours`);
@@ -349,6 +349,7 @@ module.exports = function (RED) {
349
349
 
350
350
  // ── Cleanup ───────────────────────────────────────────────
351
351
  node.on('close', function (done) {
352
+ if (S._debugTimer) clearTimeout(S._debugTimer);
352
353
  cancelWarmup();
353
354
  broker.unsubscribe(S._activePirTopic || S.subscribeTopic, node.id);
354
355
  broker.deregister(node, done);
@@ -301,7 +301,7 @@
301
301
  </div>
302
302
 
303
303
  <div style="margin-top:16px; padding-top:8px; border-top:1px solid #444; color:#666; font-size:0.8em; text-align:right;">
304
- node-red-contrib-dmx-for-ha &nbsp;v0.6.27
304
+ node-red-contrib-dmx-for-ha &nbsp;v0.6.30
305
305
  </div>
306
306
 
307
307
  </script>
@@ -159,7 +159,7 @@ module.exports = function (RED) {
159
159
  if (S.debugMode) {
160
160
  setStatus('red', 'dot', `ha-mqtt-relay "${_debugId}" ⚠ DEBUG MODE ON`);
161
161
  node.warn(`[DEBUG] ha-mqtt-relay "${_debugId}" — debug mode is enabled. Disable in production.`);
162
- setTimeout(function () {
162
+ S._debugTimer = setTimeout(function () {
163
163
  if (S.debugMode) {
164
164
  S.debugMode = false;
165
165
  node.warn(`[DEBUG] ha-mqtt-relay "${_debugId}" — debug mode auto-disabled after 12 hours`);
@@ -453,6 +453,7 @@ module.exports = function (RED) {
453
453
 
454
454
  // ── Cleanup ───────────────────────────────────────────────
455
455
  node.on('close', function (done) {
456
+ if (S._debugTimer) clearTimeout(S._debugTimer);
456
457
  stopEffect();
457
458
  if (diskTimer) clearTimeout(diskTimer);
458
459
  broker.unsubscribe(cmdTopic, node.id);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-red-contrib-dmx-for-ha",
3
- "version": "0.6.27",
3
+ "version": "0.6.30",
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",