Huge rework of Main Scenes Handler #3

Fixed logic where it attempted to notify a TV even in rooms with no TV.

Cut down on a LOT of nodes/connections using async msg sending.

Single node for setting nightlight vs not.
This commit is contained in:
2023-08-20 13:50:55 -04:00
parent 31aab348c2
commit 1a6608c40d

View File

@ -310,11 +310,11 @@
],
"out": [
{
"x": 720,
"x": 520,
"y": 40,
"wires": [
{
"id": "011c7df420cc7f1a",
"id": "78a60e2da212f6aa",
"port": 0
}
]
@ -483,16 +483,16 @@
"color": "#DDAA99",
"icon": "node-red-contrib-huemagic/hue-scene.svg",
"status": {
"x": 1560,
"y": 500,
"x": 680,
"y": 360,
"wires": [
{
"id": "6ae79d1701e78840",
"port": 0
"id": "4ab49b8485f1886f",
"port": 3
},
{
"id": "defe84d113029e8e",
"port": 0
"id": "9af9a2966a477b33",
"port": 3
}
]
}
@ -700,7 +700,9 @@
"37f1c11c59a6ce16"
],
"x": 94,
"y": 339
"y": 339,
"w": 1872,
"h": 622
},
{
"id": "39a7ac02f2727f1d",
@ -864,7 +866,9 @@
"51b11f9d5b8bfbb0"
],
"x": 34,
"y": 179
"y": 179,
"w": 1292,
"h": 382
},
{
"id": "477e752fcd2e2a19",
@ -952,7 +956,9 @@
"febc179b34c8cf71"
],
"x": 34,
"y": 39
"y": 39,
"w": 692,
"h": 682
},
{
"id": "46275dd0f9461013",
@ -970,7 +976,9 @@
"ca88f85ba00a6744"
],
"x": 34,
"y": 739
"y": 739,
"w": 472,
"h": 202
},
{
"id": "ff6d8150e8d5e606",
@ -1033,7 +1041,9 @@
"c0933fcc8737bc0b"
],
"x": 34,
"y": 239
"y": 239,
"w": 1032,
"h": 322
},
{
"id": "1ca205a84922c8c2",
@ -1171,7 +1181,9 @@
"b281061a4b08d2eb"
],
"x": 34,
"y": 759
"y": 759,
"w": 612,
"h": 202
},
{
"id": "550e5b2d99316b12",
@ -1196,7 +1208,9 @@
"2516c6e3146cc851"
],
"x": 34,
"y": 619
"y": 619,
"w": 1112,
"h": 282
},
{
"id": "f519aff597ece351",
@ -1315,7 +1329,9 @@
"51d05298561cfddb"
],
"x": 754,
"y": 39
"y": 39,
"w": 672,
"h": 262
},
{
"id": "b708cb6d93f40dee",
@ -1348,7 +1364,9 @@
"a8d7f5e5d4f549b0"
],
"x": 34,
"y": 579
"y": 579,
"w": 732,
"h": 162
},
{
"id": "4886967d0f8c0156",
@ -1389,7 +1407,9 @@
"5ba9cfc0194ef62a"
],
"x": 754,
"y": 319
"y": 319,
"w": 672,
"h": 622
},
{
"id": "931cc27100c9317e",
@ -1408,7 +1428,9 @@
"f9bc4d36a0df7947"
],
"x": 34,
"y": 759
"y": 759,
"w": 672,
"h": 222
},
{
"id": "6e83103b5c5311e9",
@ -1426,7 +1448,9 @@
"a75651492e779bfc"
],
"x": 34,
"y": 19
"y": 19,
"w": 912,
"h": 142
},
{
"id": "88f099618e56926d",
@ -1508,7 +1532,9 @@
"15f7382daddb4b3e"
],
"x": 34,
"y": 999
"y": 999,
"w": 632,
"h": 82
},
{
"id": "31767ffd6a647579",
@ -1537,7 +1563,9 @@
"e23e7b080ee3773f"
],
"x": 14,
"y": 399
"y": 399,
"w": 1532,
"h": 282
},
{
"id": "1cc8b382530c33d0",
@ -1589,7 +1617,9 @@
"6b5d3e550ad76528"
],
"x": 34,
"y": 39
"y": 39,
"w": 692,
"h": 82
},
{
"id": "4329e464360d0afa",
@ -1631,7 +1661,9 @@
"f260e2410571356a"
],
"x": 34,
"y": 139
"y": 139,
"w": 1592,
"h": 422
},
{
"id": "fba69dfc80829db7",
@ -3535,7 +3567,7 @@
"type": "function",
"z": "a062d9e6d44506dc",
"name": "Format",
"func": "const tpc = msg.topic\nconst pld = msg.payload\nvar dest = tpc.replaceAll(\"_\",\" \")\nvar scene = pld.replaceAll(\"_\",\" \")\n\nmsg.topic = dest\nmsg.payload = scene\n\nreturn msg;",
"func": "const tpc = msg.topic\nconst pld = msg.payload\nvar dest = tpc.replaceAll(\"_\",\" \")\nvar scene = pld.replaceAll(\"_\",\" \")\n\nmsg.topic = dest\nmsg.payload = scene\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
@ -3570,25 +3602,6 @@
"queue": "none",
"x": 370,
"y": 40,
"wires": [
[
"011c7df420cc7f1a"
]
]
},
{
"id": "011c7df420cc7f1a",
"type": "function",
"z": "a062d9e6d44506dc",
"name": "Notification",
"func": "const tpc = msg.topic\nvar dest = tpc.replaceAll(\" \",\"_\")\n\nscene = msg.payload\nmsg.dest = dest\n\nmsg.topic = \"Lights Changed\"\nmsg.payload = ('Lights changed to a new scene: ' + scene)\n\nif (msg.payload === 'Lights changed to a new scene: Reset') {\n return null;\n} else {\n return msg;\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 590,
"y": 40,
"wires": [
[]
]
@ -3766,12 +3779,10 @@
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 1230,
"y": 440,
"x": 930,
"y": 460,
"wires": [
[
"6ae79d1701e78840"
]
[]
]
},
{
@ -3825,52 +3836,19 @@
"x": 1530,
"y": 280,
"wires": [
[
"22250920efccf4d1"
]
]
},
{
"id": "a4926fb1dba17563",
"type": "switch",
"z": "a4ee891237e460a2",
"name": "Nightlight?",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "cont",
"v": "Nightlight",
"vt": "str"
},
{
"t": "else"
}
],
"checkall": "true",
"repair": false,
"outputs": 2,
"x": 810,
"y": 440,
"wires": [
[
"c19b4dccc5d6a9af"
],
[
"f07ca0de800cbc8f"
]
[]
]
},
{
"id": "c19b4dccc5d6a9af",
"type": "api-call-service",
"z": "a4ee891237e460a2",
"name": "Nightlight On",
"name": "Nightlight Set",
"server": "9e87348d.9c1c48",
"version": 5,
"debugenabled": false,
"domain": "switch",
"service": "turn_on",
"service": "turn_{{nightlight}}",
"areaId": [],
"deviceId": [],
"entityId": [
@ -3882,37 +3860,8 @@
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 990,
"y": 420,
"wires": [
[
"942a915b6599fb27"
]
]
},
{
"id": "f07ca0de800cbc8f",
"type": "api-call-service",
"z": "a4ee891237e460a2",
"name": "Nightlight Off",
"server": "9e87348d.9c1c48",
"version": 5,
"debugenabled": false,
"domain": "switch",
"service": "turn_off",
"areaId": [],
"deviceId": [],
"entityId": [
"switch.adaptive_lighting_sleep_mode_{{topic}}"
],
"data": "",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 990,
"y": 480,
"x": 750,
"y": 460,
"wires": [
[
"942a915b6599fb27"
@ -4029,25 +3978,6 @@
[]
]
},
{
"id": "6ae79d1701e78840",
"type": "function",
"z": "a4ee891237e460a2",
"name": "Format",
"func": "const str = msg.payload\nvar scene = str.replaceAll(\"_\",\" \")\n\nmsg.dest = msg.topic\n\nmsg.topic = \"Lights Changed\"\nmsg.payload = ('Lights changed to a new scene: ' + scene)\n\nif (msg.payload === 'Lights changed to a new scene: Reset') {\n return null;\n} else {\n return msg;\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1400,
"y": 440,
"wires": [
[
"60924f02885cc3c8"
]
]
},
{
"id": "dc0972a3964e6513",
"type": "api-call-service",
@ -4075,46 +4005,15 @@
[]
]
},
{
"id": "22250920efccf4d1",
"type": "link out",
"z": "a4ee891237e460a2",
"name": "Adaptive Lighting Flow",
"mode": "link",
"links": [
"a092a70d91589196"
],
"x": 1695,
"y": 280,
"wires": []
},
{
"id": "a092a70d91589196",
"type": "link in",
"z": "a4ee891237e460a2",
"name": "Scene Formatting",
"links": [
"22250920efccf4d1"
],
"x": 1265,
"y": 380,
"wires": [
[
"6ae79d1701e78840"
]
]
},
{
"id": "defe84d113029e8e",
"type": "subflow:a062d9e6d44506dc",
"z": "a4ee891237e460a2",
"name": "",
"x": 1280,
"y": 340,
"x": 980,
"y": 400,
"wires": [
[
"60924f02885cc3c8"
]
[]
]
},
{
@ -4183,8 +4082,8 @@
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"x": 1580,
"y": 440,
"x": 920,
"y": 340,
"wires": [
[]
]
@ -4213,8 +4112,8 @@
],
[
"a81fd188d89faa25",
"f9f11a5fa1492190",
"dc0972a3964e6513"
"dc0972a3964e6513",
"4ab49b8485f1886f"
]
],
"outputLabels": [
@ -4228,14 +4127,14 @@
"id": "9af9a2966a477b33",
"type": "function",
"z": "a4ee891237e460a2",
"name": "Dynamic Rooms",
"func": "var dynamicRooms = global.get(\"dynamicRooms\")\nvar topic = msg.topic\n\nif (dynamicRooms.includes(topic)) {\n return[msg,null]\n} else {\n return[null,msg]\n}",
"outputs": 2,
"name": "Routing",
"func": "const str = msg.payload\nvar scene = str.replaceAll(\"_\", \" \")\nvar dynamicRooms = global.get(\"dynamicRooms\")\nvar tvRooms = global.get(\"tvRooms\")\nvar room = msg.topic\n\nvar notify = {\n \"dest\": room,\n \"topic\": \"Lights Changed\",\n \"payload\": \"Lights changed to a new scene: \" + scene\n}\n\nvar statusMsg = {\n \"payload\": \"Lights changed to a new scene: \" + scene\n}\n\nif (dynamicRooms.includes(room)) {\n node.send([msg,null,null,null])\n} else {\n node.send([null,msg,null,null])\n}\n\nif (tvRooms.includes(room)) {\n node.send([null,null,notify,null])\n}\n\nnode.send([null,null,null,statusMsg])",
"outputs": 4,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 580,
"x": 560,
"y": 280,
"wires": [
[
@ -4243,37 +4142,49 @@
],
[
"3a4f567b17b2214e"
]
],
[
"60924f02885cc3c8"
],
[]
],
"outputLabels": [
"Dynamic",
"Else"
"Else",
"",
""
]
},
{
"id": "f9f11a5fa1492190",
"id": "4ab49b8485f1886f",
"type": "function",
"z": "a4ee891237e460a2",
"name": "Dynamic Rooms",
"func": "var states = global.get('homeassistant.homeAssistant.states')\nvar dynamicRooms = global.get(\"dynamicRooms\")\nvar topic = msg.topic\n\nif (dynamicRooms.includes(topic)) {\n var inputBoolean = \"input_boolean.\" + topic + \"_dynamic_scenes\"\n var boolState = states[inputBoolean].state\n if (boolState === 'on') {\n return [msg, null]\n } else {\n return [null, msg]\n }\n} else {\n return[null,msg]\n}",
"outputs": 2,
"name": "Routing",
"func": "const str = msg.payload\nvar scene = str.replaceAll(\"_\", \" \")\nvar states = global.get('homeassistant.homeAssistant.states')\nvar dynamicRooms = global.get(\"dynamicRooms\")\nvar tvRooms = global.get(\"tvRooms\")\nvar room = msg.topic\n\nvar notify = {\n \"dest\": room,\n \"topic\":\"Lights Changed\",\n \"payload\":\"Lights changed to a new scene: \" + scene\n}\n\nvar statusMsg = {\n \"payload\": \"Lights changed to a new scene: \" + scene\n}\n\nif (scene.includes(\"Nightlight\")) {\n msg.nightlight = \"on\"\n} else {\n msg.nightlight = \"off\"\n}\n\nif (dynamicRooms.includes(room)) {\n var inputBoolean = \"input_boolean.\" + room + \"_dynamic_scenes\"\n var boolState = states[inputBoolean].state\n if (boolState === 'on') {\n node.send([msg,null,null,null])\n } else {\n node.send([null,msg,null,null])\n }\n} else {\n node.send([null,msg,null,null])\n}\n\nif (tvRooms.includes(room)) {\n node.send([null,null,notify,null])\n}\n\nnode.send([null,null,null,statusMsg])",
"outputs": 4,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 580,
"x": 560,
"y": 440,
"wires": [
[
"defe84d113029e8e"
],
[
"a4926fb1dba17563"
]
"c19b4dccc5d6a9af"
],
[
"60924f02885cc3c8"
],
[]
],
"outputLabels": [
"Dynamic",
"Else"
"Non-Dynamic",
"Notify",
""
]
},
{
@ -4428,9 +4339,7 @@
]
],
"outputLabels": [
"Adaptive",
"Reset",
"Otherwise"
"Adaptive"
]
},
{
@ -10642,8 +10551,7 @@
"y": 340,
"wires": [
[
"b19f4a996fd4c2ee",
"d790134891fedfcc"
"b19f4a996fd4c2ee"
]
]
},
@ -28314,17 +28222,15 @@
"type": "function",
"z": "3e4ba157b540d183",
"name": "Constants",
"func": "// Set options here\nconst dynamicRooms = [\"living_room\",\"basement_studio\"]\n\n// Commit those options to global context\nglobal.set(\"dynamicRooms\", dynamicRooms);\n\nnode.status({fill:\"green\",shape:\"dot\",text:\"Saved\"});",
"outputs": 1,
"func": "// Set options here\nconst dynamicRooms = [\"living_room\",\"basement_studio\"]\nconst tvRooms = [\"living_room\",\"basement\",\"basement_studio\",\"master_bedroom\"]\n\n// Commit those options to global context\nglobal.set(\"dynamicRooms\", dynamicRooms)\nglobal.set(\"tvRooms\", tvRooms)\n\nnode.status({fill:\"green\",shape:\"dot\",text:\"Saved\"});",
"outputs": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1040,
"y": 620,
"wires": [
[]
]
"wires": []
},
{
"id": "f49fc3da65a68efd",