@haydendonald/node-red-contrib-hass-stuff 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ Copyright 2026 Hayden Donald
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
4
+
5
+ THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE
package/README.md ADDED
@@ -0,0 +1,544 @@
1
+ # node-red-contrib-hass-stuff
2
+ A collection of stuff I use on my Node Red + Home Assistant server. This could be of use for others, i don't know..
3
+
4
+ # Nodes
5
+ ## Connections
6
+
7
+ This node is required by other nodes in this project. It provides the connections required to communicate to HomeAssistant and other stuff.
8
+
9
+ The following can be imported into NodeRED to provide these:
10
+ <details>
11
+ <summary>Add connections Node to NodeRED</summary>
12
+
13
+ ```json
14
+ [
15
+ {
16
+ "id": "80cbc1c2e93f49fa",
17
+ "type": "ha-api",
18
+ "z": "f028d32cd5f8196d",
19
+ "name": "",
20
+ "server": "",
21
+ "version": 1,
22
+ "debugenabled": true,
23
+ "protocol": "websocket",
24
+ "method": "get",
25
+ "path": "",
26
+ "data": "",
27
+ "dataType": "jsonata",
28
+ "responseType": "json",
29
+ "outputProperties": [
30
+ {
31
+ "property": "payload",
32
+ "propertyType": "msg",
33
+ "value": "",
34
+ "valueType": "results"
35
+ }
36
+ ],
37
+ "x": 530,
38
+ "y": 700,
39
+ "wires": [
40
+ [
41
+ "3b2abe9fd6ef7ffd"
42
+ ]
43
+ ]
44
+ },
45
+ {
46
+ "id": "3b2abe9fd6ef7ffd",
47
+ "type": "change",
48
+ "z": "f028d32cd5f8196d",
49
+ "name": "",
50
+ "rules": [
51
+ {
52
+ "t": "set",
53
+ "p": "topic",
54
+ "pt": "msg",
55
+ "to": "api",
56
+ "tot": "str"
57
+ }
58
+ ],
59
+ "action": "",
60
+ "property": "",
61
+ "from": "",
62
+ "to": "",
63
+ "reg": false,
64
+ "x": 675,
65
+ "y": 700,
66
+ "wires": [
67
+ [
68
+ "78f07ee4763a6b14"
69
+ ]
70
+ ],
71
+ "l": false
72
+ },
73
+ {
74
+ "id": "934e731820c17347",
75
+ "type": "api-call-service",
76
+ "z": "f028d32cd5f8196d",
77
+ "name": "",
78
+ "server": "",
79
+ "version": 7,
80
+ "debugenabled": false,
81
+ "action": "",
82
+ "floorId": [],
83
+ "areaId": [],
84
+ "deviceId": [],
85
+ "entityId": [],
86
+ "labelId": [],
87
+ "data": "",
88
+ "dataType": "jsonata",
89
+ "mergeContext": "",
90
+ "mustacheAltTags": false,
91
+ "outputProperties": [],
92
+ "queue": "none",
93
+ "blockInputOverrides": false,
94
+ "domain": "",
95
+ "service": "",
96
+ "x": 530,
97
+ "y": 820,
98
+ "wires": [
99
+ [
100
+ "885080cdde7fec06"
101
+ ]
102
+ ]
103
+ },
104
+ {
105
+ "id": "388d419ff40adeae",
106
+ "type": "api-current-state",
107
+ "z": "f028d32cd5f8196d",
108
+ "name": "",
109
+ "server": "",
110
+ "version": 3,
111
+ "outputs": 1,
112
+ "halt_if": "",
113
+ "halt_if_type": "str",
114
+ "halt_if_compare": "is",
115
+ "entity_id": "",
116
+ "state_type": "str",
117
+ "blockInputOverrides": false,
118
+ "outputProperties": [
119
+ {
120
+ "property": "payload",
121
+ "propertyType": "msg",
122
+ "value": "string",
123
+ "valueType": "entityState"
124
+ },
125
+ {
126
+ "property": "data",
127
+ "propertyType": "msg",
128
+ "value": "",
129
+ "valueType": "entity"
130
+ }
131
+ ],
132
+ "for": "0",
133
+ "forType": "num",
134
+ "forUnits": "minutes",
135
+ "override_topic": false,
136
+ "state_location": "payload",
137
+ "override_payload": "msg",
138
+ "entity_location": "data",
139
+ "override_data": "msg",
140
+ "x": 560,
141
+ "y": 740,
142
+ "wires": [
143
+ [
144
+ "a60dbdb2a080de5e"
145
+ ]
146
+ ]
147
+ },
148
+ {
149
+ "id": "1b2a505996e8dd0b",
150
+ "type": "server-events",
151
+ "z": "f028d32cd5f8196d",
152
+ "name": "",
153
+ "server": "",
154
+ "version": 3,
155
+ "exposeAsEntityConfig": "",
156
+ "eventType": "",
157
+ "eventData": "",
158
+ "waitForRunning": true,
159
+ "outputProperties": [
160
+ {
161
+ "property": "payload",
162
+ "propertyType": "msg",
163
+ "value": "",
164
+ "valueType": "eventData"
165
+ },
166
+ {
167
+ "property": "topic",
168
+ "propertyType": "msg",
169
+ "value": "$outputData(\"eventData\").event_type",
170
+ "valueType": "jsonata"
171
+ }
172
+ ],
173
+ "x": 540,
174
+ "y": 660,
175
+ "wires": [
176
+ [
177
+ "194985fca2779f3b"
178
+ ]
179
+ ]
180
+ },
181
+ {
182
+ "id": "170d8627f4d745b0",
183
+ "type": "ha-get-entities",
184
+ "z": "f028d32cd5f8196d",
185
+ "name": "",
186
+ "server": "",
187
+ "version": 1,
188
+ "rules": [
189
+ {
190
+ "condition": "state_object",
191
+ "property": "",
192
+ "logic": "is",
193
+ "value": "",
194
+ "valueType": "str"
195
+ }
196
+ ],
197
+ "outputType": "array",
198
+ "outputEmptyResults": true,
199
+ "outputLocationType": "msg",
200
+ "outputLocation": "payload",
201
+ "outputResultsCount": 1,
202
+ "x": 550,
203
+ "y": 780,
204
+ "wires": [
205
+ [
206
+ "204f99728a048c5f"
207
+ ]
208
+ ]
209
+ },
210
+ {
211
+ "id": "a60dbdb2a080de5e",
212
+ "type": "change",
213
+ "z": "f028d32cd5f8196d",
214
+ "name": "",
215
+ "rules": [
216
+ {
217
+ "t": "set",
218
+ "p": "topic",
219
+ "pt": "msg",
220
+ "to": "state",
221
+ "tot": "str"
222
+ }
223
+ ],
224
+ "action": "",
225
+ "property": "",
226
+ "from": "",
227
+ "to": "",
228
+ "reg": false,
229
+ "x": 675,
230
+ "y": 740,
231
+ "wires": [
232
+ [
233
+ "78f07ee4763a6b14"
234
+ ]
235
+ ],
236
+ "l": false
237
+ },
238
+ {
239
+ "id": "204f99728a048c5f",
240
+ "type": "change",
241
+ "z": "f028d32cd5f8196d",
242
+ "name": "",
243
+ "rules": [
244
+ {
245
+ "t": "set",
246
+ "p": "topic",
247
+ "pt": "msg",
248
+ "to": "get_entities",
249
+ "tot": "str"
250
+ }
251
+ ],
252
+ "action": "",
253
+ "property": "",
254
+ "from": "",
255
+ "to": "",
256
+ "reg": false,
257
+ "x": 675,
258
+ "y": 780,
259
+ "wires": [
260
+ [
261
+ "78f07ee4763a6b14"
262
+ ]
263
+ ],
264
+ "l": false
265
+ },
266
+ {
267
+ "id": "885080cdde7fec06",
268
+ "type": "change",
269
+ "z": "f028d32cd5f8196d",
270
+ "name": "",
271
+ "rules": [
272
+ {
273
+ "t": "set",
274
+ "p": "topic",
275
+ "pt": "msg",
276
+ "to": "action",
277
+ "tot": "str"
278
+ }
279
+ ],
280
+ "action": "",
281
+ "property": "",
282
+ "from": "",
283
+ "to": "",
284
+ "reg": false,
285
+ "x": 675,
286
+ "y": 820,
287
+ "wires": [
288
+ [
289
+ "78f07ee4763a6b14"
290
+ ]
291
+ ],
292
+ "l": false
293
+ },
294
+ {
295
+ "id": "194985fca2779f3b",
296
+ "type": "change",
297
+ "z": "f028d32cd5f8196d",
298
+ "name": "",
299
+ "rules": [
300
+ {
301
+ "t": "set",
302
+ "p": "topic",
303
+ "pt": "msg",
304
+ "to": "event",
305
+ "tot": "str"
306
+ }
307
+ ],
308
+ "action": "",
309
+ "property": "",
310
+ "from": "",
311
+ "to": "",
312
+ "reg": false,
313
+ "x": 675,
314
+ "y": 660,
315
+ "wires": [
316
+ [
317
+ "78f07ee4763a6b14"
318
+ ]
319
+ ],
320
+ "l": false
321
+ },
322
+ {
323
+ "id": "6b0c6c859f8180ff",
324
+ "type": "switch",
325
+ "z": "f028d32cd5f8196d",
326
+ "name": "",
327
+ "property": "topic",
328
+ "propertyType": "msg",
329
+ "rules": [
330
+ {
331
+ "t": "eq",
332
+ "v": "api",
333
+ "vt": "str"
334
+ }
335
+ ],
336
+ "checkall": "true",
337
+ "repair": false,
338
+ "outputs": 1,
339
+ "x": 445,
340
+ "y": 700,
341
+ "wires": [
342
+ [
343
+ "80cbc1c2e93f49fa"
344
+ ]
345
+ ],
346
+ "l": false
347
+ },
348
+ {
349
+ "id": "cb6a81f143b93c08",
350
+ "type": "switch",
351
+ "z": "f028d32cd5f8196d",
352
+ "name": "",
353
+ "property": "topic",
354
+ "propertyType": "msg",
355
+ "rules": [
356
+ {
357
+ "t": "eq",
358
+ "v": "state",
359
+ "vt": "str"
360
+ }
361
+ ],
362
+ "checkall": "true",
363
+ "repair": false,
364
+ "outputs": 1,
365
+ "x": 445,
366
+ "y": 740,
367
+ "wires": [
368
+ [
369
+ "388d419ff40adeae"
370
+ ]
371
+ ],
372
+ "l": false
373
+ },
374
+ {
375
+ "id": "a3de07378d809f30",
376
+ "type": "switch",
377
+ "z": "f028d32cd5f8196d",
378
+ "name": "",
379
+ "property": "topic",
380
+ "propertyType": "msg",
381
+ "rules": [
382
+ {
383
+ "t": "eq",
384
+ "v": "get_entities",
385
+ "vt": "str"
386
+ }
387
+ ],
388
+ "checkall": "true",
389
+ "repair": false,
390
+ "outputs": 1,
391
+ "x": 445,
392
+ "y": 780,
393
+ "wires": [
394
+ [
395
+ "170d8627f4d745b0"
396
+ ]
397
+ ],
398
+ "l": false
399
+ },
400
+ {
401
+ "id": "e335241f272835a4",
402
+ "type": "switch",
403
+ "z": "f028d32cd5f8196d",
404
+ "name": "",
405
+ "property": "topic",
406
+ "propertyType": "msg",
407
+ "rules": [
408
+ {
409
+ "t": "eq",
410
+ "v": "action",
411
+ "vt": "str"
412
+ }
413
+ ],
414
+ "checkall": "true",
415
+ "repair": false,
416
+ "outputs": 1,
417
+ "x": 445,
418
+ "y": 820,
419
+ "wires": [
420
+ [
421
+ "934e731820c17347"
422
+ ]
423
+ ],
424
+ "l": false
425
+ },
426
+ {
427
+ "id": "25925d7eacdca45f",
428
+ "type": "connections-node",
429
+ "z": "f028d32cd5f8196d",
430
+ "name": "HASS Stuff Connections",
431
+ "connectionsConfigNode": "ea84f05a857bde72",
432
+ "x": 570,
433
+ "y": 620,
434
+ "wires": [
435
+ [
436
+ "f6240b1dab1143e3"
437
+ ]
438
+ ]
439
+ },
440
+ {
441
+ "id": "5448ec0ff29169e2",
442
+ "type": "comment",
443
+ "z": "f028d32cd5f8196d",
444
+ "name": "Provide connections to HASS stuff",
445
+ "info": "",
446
+ "x": 560,
447
+ "y": 580,
448
+ "wires": []
449
+ },
450
+ {
451
+ "id": "f6240b1dab1143e3",
452
+ "type": "junction",
453
+ "z": "f028d32cd5f8196d",
454
+ "x": 380,
455
+ "y": 660,
456
+ "wires": [
457
+ [
458
+ "6b0c6c859f8180ff",
459
+ "e335241f272835a4",
460
+ "cb6a81f143b93c08",
461
+ "a3de07378d809f30"
462
+ ]
463
+ ]
464
+ },
465
+ {
466
+ "id": "78f07ee4763a6b14",
467
+ "type": "junction",
468
+ "z": "f028d32cd5f8196d",
469
+ "x": 750,
470
+ "y": 640,
471
+ "wires": [
472
+ [
473
+ "25925d7eacdca45f"
474
+ ]
475
+ ]
476
+ },
477
+ {
478
+ "id": "ea84f05a857bde72",
479
+ "type": "connections-config-node",
480
+ "name": "HASS Stuff Connections Config"
481
+ },
482
+ {
483
+ "id": "f947b66dc55502ce",
484
+ "type": "global-config",
485
+ "env": [],
486
+ "modules": {
487
+ "node-red-contrib-home-assistant-websocket": "0.80.3",
488
+ "node-red-contrib-hass-stuff": "0.0.1"
489
+ }
490
+ }
491
+ ]
492
+ ```
493
+ </details>
494
+
495
+ ### Dependencies
496
+ It has the following dependencies
497
+ 1. [HomeAssistant](https://flows.nodered.org/node/node-red-contrib-home-assistant-websocket)
498
+
499
+ ## Light Control
500
+
501
+ A node that controls lights with general scenes that adjust throughout the day with sleep mode and other features.
502
+
503
+ ### Features
504
+ * Adaptive scenes depending on what time of the day it is
505
+ * Adaptive scenes depending on luminance sensor *TODO*
506
+ * Night mode entity to force the adaptive scene to be in "night mode"
507
+ * Ability to turn off entities in night mode
508
+
509
+ ### Dependencies
510
+ 1. [Adaptive Lighting](https://github.com/basnijholt/adaptive-lighting)
511
+ 2. [HASS Sun](https://www.home-assistant.io/integrations/sun/)
512
+
513
+ ## PIR
514
+ *TODO*
515
+
516
+ A node that simplifies control of a PIR
517
+
518
+ ### Features
519
+ * Entity to enable/disable the PIR
520
+ * Disable the PIR with luminance sensor value
521
+ * Set timeout before the PIR is triggered to be on/off
522
+
523
+ ## Door Sensor
524
+ *TODO*
525
+
526
+ A node that simplifies control of a door sensor
527
+
528
+ ### Features
529
+ * Entity to enable/disable the sensor
530
+ * Disable the sensor with luminance sensor value
531
+ * Set timeout before the PIR is triggered to be on/off
532
+
533
+ ## Curtain Control
534
+ *TODO*
535
+
536
+ A node that provides control of a cover
537
+
538
+ ### Features
539
+ * Adds buttons to set the curtain to open/half/closed
540
+ * Have the curtain close on luminance sensor value
541
+ * Have curtain be closed at certain hours
542
+ * Have curtain be half at certain hours
543
+
544
+ // MIMO //
@@ -0,0 +1,21 @@
1
+ <script type="text/javascript" id="node-connections-config-node">
2
+ RED.nodes.registerType("connections-config-node", {
3
+ category: "config",
4
+ defaults: {
5
+ name: { value: "" }
6
+ },
7
+ label: function () {
8
+ return this.name || "Connections Node Config"
9
+ }
10
+ });
11
+ </script>
12
+
13
+ <script type="text/html" data-template-name="connections-config-node">
14
+ <div class="form-row">
15
+ <label for="node-config-input-name"><i class="fa fa-tag"></i> Name</label>
16
+ <input type="text" id="node-config-input-name" placeholder="Name">
17
+ </div>
18
+ </script>
19
+
20
+ <script type="text/html" data-help-name="connections-config-node">
21
+ </script>