From 11511b0ad3642e8db4ee68bd30b2937f99edab83 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Mon, 27 Mar 2023 04:55:03 -0400 Subject: [PATCH] Significant rework of master bedroom climate flow Using function nodes to DRASTICALLY reduce the total amount of nodes needed. We had way too many and it was a cluttered mess. This makes significant progress toward fixing that, and also establishes some new ideas for future optimizations. --- flows.json | 1692 ++++++++++++++-------------------------------------- 1 file changed, 463 insertions(+), 1229 deletions(-) diff --git a/flows.json b/flows.json index 1432570..3d8b088 100644 --- a/flows.json +++ b/flows.json @@ -685,9 +685,7 @@ "37f1c11c59a6ce16" ], "x": 94, - "y": 339, - "w": 1872, - "h": 622 + "y": 339 }, { "id": "39a7ac02f2727f1d", @@ -750,13 +748,11 @@ "8e399b2a287a0905", "314752dbc6fd170d", "d7261338e6b907f1", - "fa2b43f4eec9f89a", "6fb7131d5534350c", "fd0a309681a536de", "40dc1e930b887eb7", "bf1b0d6542ef6b38", "512b9dd5177ebeec", - "7d9666e1ce61f8df", "24c3166123d5dad0", "40f52ef656550cf6", "b14bcbf98b7e9f91", @@ -768,29 +764,19 @@ "c0408b03c3cf8f23", "444acaf315688ac9", "9949527a728eaf42", - "a11946e3ceb59514", - "2915ba19778e3fee", "dc440dfc78c41b8a", - "99f6abc4d215980a", "1aa901d26ce8ac46", "7659d7b193fc7fb5", "21001f5409130f44", "bc592ba259667f9d", - "63c1bc35f7c35360", "1f7ac875e593d434", - "7674985a03ff3355", "9179e99207e9f8f3", "404c42d6fea46839", - "929b5cd6a4d7dc30", - "bd5119ed04776902", - "a1ca104dbc102bfc", "ab9ff37610258694", "7a7f626dce181b23", - "cefb338fa0c6931e", "f541ad53e32f703b", "66e85878d60c7d65", "bcba065aa5ecb2be", - "f797103d28ab6d1c", "10d9b30654ef759c", "0a783dc1cb68b4bf", "9af6e13ddc0391f1", @@ -803,34 +789,25 @@ "e2581a5f3f4888df", "c6537f1924370c8c", "c324cf8a87c3b388", - "6e89b3464496e0e8", - "a1315d3be8da5c2f", - "f6e9317205ba7c78", - "90afa6409f3fcac3", - "fa78faf38adfa49d", "1dfb0bcc98f1457b", "096369136e9e607f", "783cfb381b70afc5", "5008caa0192238f7", - "d50e0d34df443b50", - "1c601a60ac7b668f", - "29814d3dcc93670c", - "0ba87300a6fd6950", - "ce3e05090d0848d5", - "76d51b3279d6630c", - "722337dd4775a357", - "e238631130b2c316", "09a31110ed0a8630", "0f6d425791646818", "bc9d4a0d7a7c5c79", "67509a5554fc091f", - "af53020956a6acb5", "2c74eec67f3ff8d8", - "1eb13d819ba7e226" + "1eb13d819ba7e226", + "48abdc71d77186ef", + "a10629857d60f774", + "a370aec30428ffb1", + "e2ad91fc748ca519", + "a3ef2faca9922113" ], "x": 14, "y": 19, - "w": 2722, + "w": 2112, "h": 682 }, { @@ -867,9 +844,7 @@ "486bca43ddc48fb8" ], "x": 34, - "y": 159, - "w": 1072, - "h": 482 + "y": 159 }, { "id": "477e752fcd2e2a19", @@ -1019,9 +994,7 @@ "0968727f2138ac62" ], "x": 34, - "y": 779, - "w": 1432, - "h": 462 + "y": 779 }, { "id": "f55a52c40b8b8749", @@ -1066,9 +1039,7 @@ "318bee4424125dd5" ], "x": 34, - "y": 19, - "w": 832, - "h": 742 + "y": 19 }, { "id": "208284848b13b85b", @@ -1099,9 +1070,7 @@ "1e1891c23a6e7e64" ], "x": 34, - "y": 239, - "w": 1132, - "h": 382 + "y": 239 }, { "id": "1ca205a84922c8c2", @@ -1201,9 +1170,7 @@ "c7a8df4ebeb3b5c5" ], "x": 54, - "y": 19, - "w": 2092, - "h": 282 + "y": 19 }, { "id": "0c81dfaed25d225c", @@ -1258,9 +1225,7 @@ "b281061a4b08d2eb" ], "x": 14, - "y": 539, - "w": 612, - "h": 202 + "y": 539 }, { "id": "550e5b2d99316b12", @@ -1283,9 +1248,7 @@ "4829663e9913e2aa" ], "x": 34, - "y": 639, - "w": 1072, - "h": 202 + "y": 639 }, { "id": "f519aff597ece351", @@ -1427,7 +1390,9 @@ "e59180a1a6ae0a90" ], "x": 1094, - "y": 839 + "y": 839, + "w": 632, + "h": 82 }, { "id": "a705cecb0997a43a", @@ -1450,9 +1415,7 @@ "1a278235669d49ac" ], "x": 34, - "y": 659, - "w": 952, - "h": 302 + "y": 659 }, { "id": "19b0e082db0643ac", @@ -17565,56 +17528,6 @@ ] ] }, - { - "id": "fa2b43f4eec9f89a", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Vacation Mode", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "off", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.vacation_mode", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 540, - "y": 320, - "wires": [ - [ - "bd5119ed04776902" - ], - [] - ], - "outputLabels": [ - "Off", - "On" - ] - }, { "id": "6fb7131d5534350c", "type": "api-current-state", @@ -17677,7 +17590,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1770, + "x": 1230, "y": 180, "wires": [ [ @@ -17707,8 +17620,8 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2320, - "y": 120, + "x": 1560, + "y": 140, "wires": [ [ "0f6d425791646818" @@ -17737,7 +17650,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1770, + "x": 1230, "y": 260, "wires": [ [ @@ -17772,8 +17685,8 @@ "from": "", "to": "", "reg": false, - "x": 2315, - "y": 240, + "x": 1775, + "y": 220, "wires": [ [ "1eb13d819ba7e226" @@ -17817,8 +17730,8 @@ "from": "", "to": "", "reg": false, - "x": 2695, - "y": 80, + "x": 1935, + "y": 120, "wires": [ [ "1eb13d819ba7e226" @@ -17883,7 +17796,7 @@ "from": "", "to": "", "reg": false, - "x": 1415, + "x": 1455, "y": 320, "wires": [ [ @@ -17892,45 +17805,6 @@ ], "l": false }, - { - "id": "7d9666e1ce61f8df", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "High Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "num", - "halt_if_compare": "is", - "entity_id": "sensor.todays_high_temp", - "state_type": "num", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "hightemp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1270, - "y": 460, - "wires": [ - [ - "0ba87300a6fd6950" - ] - ] - }, { "id": "24c3166123d5dad0", "type": "api-call-service", @@ -17953,7 +17827,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1810, + "x": 1510, "y": 440, "wires": [ [ @@ -17983,8 +17857,8 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2360, - "y": 380, + "x": 1840, + "y": 400, "wires": [ [ "bc9d4a0d7a7c5c79" @@ -18013,7 +17887,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1810, + "x": 1510, "y": 500, "wires": [ [] @@ -18089,7 +17963,7 @@ "y": 320, "wires": [ [ - "fa2b43f4eec9f89a" + "a10629857d60f774" ], [] ] @@ -18116,11 +17990,11 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1940, + "x": 1400, "y": 160, "wires": [ [ - "a11946e3ceb59514" + "444acaf315688ac9" ] ] }, @@ -18146,7 +18020,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1940, + "x": 1400, "y": 240, "wires": [ [ @@ -18176,11 +18050,11 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1980, + "x": 1680, "y": 420, "wires": [ [ - "2915ba19778e3fee" + "40f52ef656550cf6" ] ] }, @@ -18715,96 +18589,6 @@ ], "l": false }, - { - "id": "a11946e3ceb59514", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check Night Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_night_temp", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "nighttemp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 2130, - "y": 140, - "wires": [ - [ - "444acaf315688ac9" - ] - ] - }, - { - "id": "2915ba19778e3fee", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check Day Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_daytime_temp", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "daytemp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 2170, - "y": 400, - "wires": [ - [ - "40f52ef656550cf6" - ] - ] - }, { "id": "dc440dfc78c41b8a", "type": "link in", @@ -18818,54 +18602,10 @@ "y": 280, "wires": [ [ - "fa2b43f4eec9f89a" + "a10629857d60f774" ] ] }, - { - "id": "99f6abc4d215980a", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "", - "property": "topic", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "mrbedroom-cooling", - "vt": "str" - }, - { - "t": "eq", - "v": "mrbedroom-fan", - "vt": "str" - }, - { - "t": "eq", - "v": "mrbedroom-wakeup", - "vt": "str" - } - ], - "checkall": "true", - "repair": false, - "outputs": 3, - "x": 865, - "y": 320, - "wires": [ - [ - "10d9b30654ef759c" - ], - [ - "6fb7131d5534350c", - "af53020956a6acb5" - ], - [ - "0a783dc1cb68b4bf" - ] - ], - "l": false - }, { "id": "1aa901d26ce8ac46", "type": "ha-button", @@ -18896,13 +18636,11 @@ "valueType": "entity" } ], - "x": 740, - "y": 140, + "x": 200, + "y": 400, "wires": [ [ - "6fb7131d5534350c", - "f6e9317205ba7c78", - "af53020956a6acb5" + "a10629857d60f774" ] ] }, @@ -18924,8 +18662,8 @@ "checkall": "true", "repair": false, "outputs": 1, - "x": 2635, - "y": 80, + "x": 1875, + "y": 120, "wires": [ [ "9949527a728eaf42" @@ -18963,11 +18701,11 @@ "valueType": "entity" } ], - "x": 1010, - "y": 380, + "x": 210, + "y": 460, "wires": [ [ - "90afa6409f3fcac3" + "a10629857d60f774" ] ] }, @@ -18993,7 +18731,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1000, + "x": 720, "y": 60, "wires": [ [ @@ -19001,51 +18739,6 @@ ] ] }, - { - "id": "7674985a03ff3355", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check Bedtime Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_bedtime_temp", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "bedtemp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 800, - "y": 60, - "wires": [ - [ - "9179e99207e9f8f3" - ] - ] - }, { "id": "1f7ac875e593d434", "type": "ha-button", @@ -19080,60 +18773,10 @@ "y": 120, "wires": [ [ - "6e89b3464496e0e8" + "a3ef2faca9922113" ] ] }, - { - "id": "63c1bc35f7c35360", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Schedule", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "AC", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_select.scheduled_climate_mode_master_bedroom_aircon", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "payload", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 560, - "y": 60, - "wires": [ - [ - "7674985a03ff3355" - ], - [] - ], - "outputLabels": [ - "Cool", - "Not Cool" - ] - }, { "id": "bc592ba259667f9d", "type": "link in", @@ -19147,7 +18790,7 @@ "y": 60, "wires": [ [ - "929b5cd6a4d7dc30" + "a3ef2faca9922113" ] ] }, @@ -19230,150 +18873,18 @@ "y": 120, "wires": [ [ - "7674985a03ff3355" + "9179e99207e9f8f3" ] ] }, - { - "id": "929b5cd6a4d7dc30", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 330, - "y": 60, - "wires": [ - [ - "63c1bc35f7c35360" - ], - [] - ] - }, - { - "id": "bd5119ed04776902", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 730, - "y": 320, - "wires": [ - [ - "99f6abc4d215980a" - ], - [ - "99f6abc4d215980a" - ] - ], - "outputLabels": [ - "on", - "off" - ] - }, - { - "id": "a1ca104dbc102bfc", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Is A/C Installed?", - "property": "ac-installed", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "on", - "vt": "str" - }, - { - "t": "else" - } - ], - "checkall": "true", - "repair": false, - "outputs": 2, - "x": 1080, - "y": 200, - "wires": [ - [ - "a1315d3be8da5c2f" - ], - [] - ], - "outputLabels": [ - "Yes", - "No" - ] - }, { "id": "ab9ff37610258694", "type": "switch", "z": "72f99805df043603", "g": "e065b1ed4938b477", "name": "Is A/C Installed?", - "property": "ac-installed", - "propertyType": "msg", + "property": "mb_aircon_installed", + "propertyType": "global", "rules": [ { "t": "eq", @@ -19391,8 +18902,8 @@ "y": 460, "wires": [ [ - "7d9666e1ce61f8df", - "e473da127624f191" + "e473da127624f191", + "a370aec30428ffb1" ], [ "e473da127624f191" @@ -19413,47 +18924,12 @@ "31b8c8291d19ffc6" ], "x": 145, - "y": 400, - "wires": [ - [ - "fa78faf38adfa49d" - ] - ] - }, - { - "id": "cefb338fa0c6931e", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "", - "property": "payload", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "on", - "vt": "str" - }, - { - "t": "eq", - "v": "off", - "vt": "str" - } - ], - "checkall": "true", - "repair": false, - "outputs": 2, - "x": 295, "y": 580, "wires": [ [ - "722337dd4775a357" - ], - [ - "9af6e13ddc0391f1" + "48abdc71d77186ef" ] - ], - "l": false + ] }, { "id": "f541ad53e32f703b", @@ -19477,7 +18953,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 480, + "x": 460, "y": 540, "wires": [ [ @@ -19507,52 +18983,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 620, - "y": 540, - "wires": [ - [ - "f797103d28ab6d1c" - ] - ] - }, - { - "id": "f797103d28ab6d1c", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check Night Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_night_temp", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "nighttemp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 790, + "x": 600, "y": 540, "wires": [ [ @@ -19582,7 +19013,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 960, + "x": 760, "y": 540, "wires": [ [] @@ -19610,11 +19041,11 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 880, + "x": 840, "y": 200, "wires": [ [ - "a1ca104dbc102bfc" + "e2ad91fc748ca519" ] ] }, @@ -19640,7 +19071,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 880, + "x": 840, "y": 420, "wires": [ [ @@ -19685,7 +19116,7 @@ "override_payload": "msg", "entity_location": "data", "override_data": "msg", - "x": 440, + "x": 480, "y": 620, "wires": [ [ @@ -19722,7 +19153,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 640, + "x": 680, "y": 600, "wires": [ [ @@ -19752,7 +19183,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 840, + "x": 880, "y": 600, "wires": [ [] @@ -19780,7 +19211,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 640, + "x": 680, "y": 660, "wires": [ [ @@ -19810,7 +19241,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 840, + "x": 880, "y": 660, "wires": [ [] @@ -19823,8 +19254,8 @@ "g": "e065b1ed4938b477", "name": "Shower Mode", "info": "", - "x": 170, - "y": 580, + "x": 290, + "y": 640, "wires": [] }, { @@ -19867,8 +19298,8 @@ "checkall": "true", "repair": false, "outputs": 1, - "x": 2255, - "y": 240, + "x": 1715, + "y": 220, "wires": [ [ "c0408b03c3cf8f23" @@ -19894,7 +19325,7 @@ "checkall": "true", "repair": false, "outputs": 1, - "x": 1355, + "x": 1395, "y": 320, "wires": [ [ @@ -19903,256 +19334,6 @@ ], "l": false }, - { - "id": "6e89b3464496e0e8", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 330, - "y": 120, - "wires": [ - [ - "404c42d6fea46839" - ], - [] - ] - }, - { - "id": "a1315d3be8da5c2f", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Shower Mode?", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "off", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.shower_mode", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "shower-mode", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1280, - "y": 200, - "wires": [ - [ - "1c601a60ac7b668f" - ], - [] - ], - "outputLabels": [ - "Off", - "On" - ] - }, - { - "id": "f6e9317205ba7c78", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 950, - "y": 140, - "wires": [ - [ - "a1ca104dbc102bfc" - ], - [ - "a1ca104dbc102bfc" - ] - ], - "outputLabels": [ - "on", - "off" - ] - }, - { - "id": "90afa6409f3fcac3", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1210, - "y": 380, - "wires": [ - [ - "ab9ff37610258694" - ], - [ - "ab9ff37610258694" - ] - ], - "outputLabels": [ - "on", - "off" - ] - }, - { - "id": "fa78faf38adfa49d", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Check A/C Installed", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 2, - "halt_if": "on", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_boolean.master_bedroom_aircon_installed", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "ac-installed", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - }, - { - "property": "data", - "propertyType": "msg", - "value": "", - "valueType": "entity" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 280, - "y": 400, - "wires": [ - [ - "76d51b3279d6630c" - ], - [] - ], - "outputLabels": [ - "on", - "off" - ] - }, { "id": "1dfb0bcc98f1457b", "type": "api-call-service", @@ -20271,192 +19452,12 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1920, - "y": 100, + "x": 1400, + "y": 80, "wires": [ [] ] }, - { - "id": "d50e0d34df443b50", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Manual?", - "property": "topic", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "manual-night", - "vt": "str" - } - ], - "checkall": "true", - "repair": false, - "outputs": 1, - "x": 1760, - "y": 100, - "wires": [ - [ - "5008caa0192238f7" - ] - ] - }, - { - "id": "1c601a60ac7b668f", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Scheduled Mode", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_select.scheduled_climate_mode_master_bedroom_aircon", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "sched_mode", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1490, - "y": 200, - "wires": [ - [ - "29814d3dcc93670c" - ] - ] - }, - { - "id": "29814d3dcc93670c", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Routing", - "property": "sched_mode", - "propertyType": "msg", - "rules": [ - { - "t": "eq", - "v": "AC", - "vt": "str" - }, - { - "t": "eq", - "v": "Fan", - "vt": "str" - }, - { - "t": "eq", - "v": "N/A", - "vt": "str" - } - ], - "checkall": "true", - "repair": false, - "outputs": 3, - "x": 1635, - "y": 200, - "wires": [ - [ - "fd0a309681a536de" - ], - [ - "40dc1e930b887eb7", - "5008caa0192238f7" - ], - [ - "5008caa0192238f7" - ] - ], - "l": false - }, - { - "id": "0ba87300a6fd6950", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Day Threshold", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_daytime_threshold", - "state_type": "num", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "hot_temp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1460, - "y": 460, - "wires": [ - [ - "ce3e05090d0848d5" - ] - ] - }, - { - "id": "ce3e05090d0848d5", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Routing", - "property": "hightemp", - "propertyType": "msg", - "rules": [ - { - "t": "gte", - "v": "hot_temp", - "vt": "msg" - }, - { - "t": "else" - } - ], - "checkall": "true", - "repair": false, - "outputs": 2, - "x": 1640, - "y": 460, - "wires": [ - [ - "24c3166123d5dad0" - ], - [ - "b14bcbf98b7e9f91" - ] - ] - }, { "id": "d823b8a033f30d40", "type": "api-current-state", @@ -20611,111 +19612,6 @@ ], "l": false }, - { - "id": "76d51b3279d6630c", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Temp", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "sensor.pirateweather_temperature", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "temp", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 450, - "y": 400, - "wires": [ - [ - "e238631130b2c316" - ] - ] - }, - { - "id": "722337dd4775a357", - "type": "switch", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "", - "property": "temp", - "propertyType": "msg", - "rules": [ - { - "t": "gte", - "v": "threshold", - "vt": "msg" - } - ], - "checkall": "true", - "repair": false, - "outputs": 1, - "x": 375, - "y": 540, - "wires": [ - [ - "f541ad53e32f703b" - ] - ], - "l": false - }, - { - "id": "e238631130b2c316", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Threshold", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_aircon_run_threshold", - "state_type": "str", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "threshold", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 600, - "y": 400, - "wires": [ - [ - "cefb338fa0c6931e" - ] - ] - }, { "id": "09a31110ed0a8630", "type": "api-call-service", @@ -20738,8 +19634,8 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2120, - "y": 240, + "x": 1580, + "y": 220, "wires": [ [ "c6537f1924370c8c" @@ -20768,8 +19664,8 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2500, - "y": 80, + "x": 1740, + "y": 120, "wires": [ [ "7659d7b193fc7fb5" @@ -20798,7 +19694,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2540, + "x": 2020, "y": 380, "wires": [ [] @@ -20826,7 +19722,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1180, + "x": 900, "y": 60, "wires": [ [] @@ -20955,7 +19851,7 @@ "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 2540, + "x": 2020, "y": 320, "wires": [ [] @@ -21201,45 +20097,6 @@ [] ] }, - { - "id": "af53020956a6acb5", - "type": "api-current-state", - "z": "72f99805df043603", - "g": "e065b1ed4938b477", - "name": "Night Volume", - "server": "9e87348d.9c1c48", - "version": 3, - "outputs": 1, - "halt_if": "", - "halt_if_type": "str", - "halt_if_compare": "is", - "entity_id": "input_number.master_bedroom_echo_dot_night_volume", - "state_type": "num", - "blockInputOverrides": false, - "outputProperties": [ - { - "property": "volume", - "propertyType": "msg", - "value": "", - "valueType": "entityState" - } - ], - "for": "0", - "forType": "num", - "forUnits": "minutes", - "override_topic": false, - "state_location": "payload", - "override_payload": "msg", - "entity_location": "data", - "override_data": "msg", - "x": 1010, - "y": 260, - "wires": [ - [ - "2c74eec67f3ff8d8" - ] - ] - }, { "id": "2c74eec67f3ff8d8", "type": "api-call-service", @@ -21256,16 +20113,18 @@ "entityId": [ "media_player.master_bedroom_echo_dot" ], - "data": "{\t \"volume_level\": msg.volume\t}", + "data": "{\t \"volume_level\": msg.nightvolume\t}", "dataType": "jsonata", "mergeContext": "", "mustacheAltTags": false, "outputProperties": [], "queue": "none", - "x": 1230, - "y": 260, + "x": 830, + "y": 320, "wires": [ - [] + [ + "6fb7131d5534350c" + ] ] }, { @@ -21462,6 +20321,155 @@ [] ] }, + { + "id": "48abdc71d77186ef", + "type": "function", + "z": "72f99805df043603", + "g": "e065b1ed4938b477", + "name": "Shower Mode", + "func": "var states = global.get('homeassistant.homeAssistant.states')\nvar ac = states['input_boolean.master_bedroom_aircon_installed'].state\nvar temp = states['sensor.pirateweather_temperature'].state\nvar threshold = states['input_number.master_bedroom_aircon_run_threshold'].state\nvar nighttemp = states['input_number.master_bedroom_night_temp'].state\nvar showerMode = msg.payload\n\nmsg.temp = temp\nmsg.nighttemp = nighttemp\nmsg.threshold = threshold\n\nif (ac === 'off') {\n if (showerMode === 'on') {\n if (temp >= threshold) {\n return[msg,null]\n } else {\n return null\n }\n } else if (showerMode === 'off') {\n return[null,msg]\n }\n} else {\n return null\n}", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 280, + "y": 580, + "wires": [ + [ + "f541ad53e32f703b" + ], + [ + "9af6e13ddc0391f1" + ] + ], + "outputLabels": [ + "On", + "Off" + ] + }, + { + "id": "a10629857d60f774", + "type": "function", + "z": "72f99805df043603", + "g": "e065b1ed4938b477", + "name": "Processing", + "func": "var states = global.get('homeassistant.homeAssistant.states')\nvar ac = global.get('mb_aircon_installed')\nvar topic = msg.topic\nvar vacation = states['input_boolean.vacation_mode'].state\nvar highTemp = states['sensor.todays_high_temp'].state\nvar dayThreshold = states['input_number.master_bedroom_daytime_threshold'].state\nvar dayTemp = states['input_number.master_bedroom_daytime_temp'].state\nvar nightTemp = states['input_number.master_bedroom_night_temp'].state\nvar showerMode = states['input_boolean.shower_mode'].state\nvar nightVolume = states['input_number.master_bedroom_echo_dot_night_volume'].state\n\nmsg.acInstalled = ac\nmsg.daytemp = dayTemp\nmsg.nighttemp = nightTemp\nmsg.daythreshold = dayThreshold\nmsg.showermode = showerMode\nmsg.nightvolume = nightVolume\n\nif (vacation === 'off') {\n if (topic === 'mrbedroom-cooling') {\n return [msg,null,null]\n } else if (topic === 'manual-night') {\n return [msg,msg,null]\n } else if (topic === 'mrbedroom-fan') {\n return [null,msg,null]\n } else if (topic === 'mrbedroom-wakeup' || topic === 'manual-day') {\n return [null,null,msg]\n }\n} else {\n return [null,null,null]\n}", + "outputs": 3, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 610, + "y": 320, + "wires": [ + [ + "10d9b30654ef759c" + ], + [ + "2c74eec67f3ff8d8" + ], + [ + "0a783dc1cb68b4bf" + ] + ], + "outputLabels": [ + "Cooling", + "Fan", + "Wakeup" + ] + }, + { + "id": "a370aec30428ffb1", + "type": "switch", + "z": "72f99805df043603", + "g": "e065b1ed4938b477", + "name": "Threshold", + "property": "hightemp", + "propertyType": "msg", + "rules": [ + { + "t": "gte", + "v": "daythreshold", + "vt": "str" + }, + { + "t": "else" + } + ], + "checkall": "true", + "repair": false, + "outputs": 2, + "x": 1280, + "y": 460, + "wires": [ + [ + "24c3166123d5dad0" + ], + [ + "b14bcbf98b7e9f91" + ] + ] + }, + { + "id": "e2ad91fc748ca519", + "type": "function", + "z": "72f99805df043603", + "g": "e065b1ed4938b477", + "name": "Cooling Mode", + "func": "var states = global.get('homeassistant.homeAssistant.states')\nvar ac = global.get('mb_aircon_installed')\nvar showerMode = msg.showermode\nvar schedMode = states['input_select.scheduled_climate_mode_master_bedroom_aircon'].state\n\nif (ac === 'on' && showerMode === 'off') {\n if (schedMode === 'AC') {\n return [msg,null,null]\n } else if (schedMode === 'Fan') {\n return [null,msg,null]\n } else if (schedMode === 'N/A') {\n return [null,null,msg]\n }\n} else {\n return [null,null,null]\n}", + "outputs": 3, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 1020, + "y": 200, + "wires": [ + [ + "fd0a309681a536de" + ], + [ + "5008caa0192238f7", + "40dc1e930b887eb7" + ], + [ + "5008caa0192238f7" + ] + ], + "outputLabels": [ + "AC", + "Fan", + "N/A" + ] + }, + { + "id": "a3ef2faca9922113", + "type": "function", + "z": "72f99805df043603", + "g": "e065b1ed4938b477", + "name": "Bedtime Mode", + "func": "var states = global.get('homeassistant.homeAssistant.states')\nvar ac = global.get('mb_aircon_installed')\nvar schedMode = states['input_select.scheduled_climate_mode_master_bedroom_aircon'].state\nvar bedtimeTemp = states['input_number.master_bedroom_bedtime_temp'].state\nvar topic = msg.topic\n\nmsg.bedtimetemp = bedtimeTemp\n\nif (ac === 'on') {\n if (topic === 'mrbedroom-bedtime'){\n if (schedMode === 'AC') {\n return[msg,null]\n } else {\n return null\n }\n } else if (topic === 'manual-bedtime'){\n return[null,msg]\n }\n} else {\n return null\n}", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 340, + "y": 80, + "wires": [ + [ + "9179e99207e9f8f3" + ], + [ + "404c42d6fea46839" + ] + ], + "outputLabels": [ + "Auto", + "Manual" + ] + }, { "id": "105271e0816c6a52", "type": "ha-button", @@ -21684,6 +20692,12 @@ "propertyType": "msg", "value": "", "valueType": "date" + }, + { + "property": "topic", + "propertyType": "msg", + "value": "mrbedroom-bedtime", + "valueType": "str" } ], "x": 100, @@ -28800,6 +27814,145 @@ ] ] }, + { + "id": "a09f10883f07aad0", + "type": "server-state-changed", + "z": "3e4ba157b540d183", + "name": "MB Aircon Installed", + "server": "9e87348d.9c1c48", + "version": 4, + "exposeToHomeAssistant": false, + "haConfig": [ + { + "property": "name", + "value": "" + }, + { + "property": "icon", + "value": "" + } + ], + "entityidfilter": "input_boolean.master_bedroom_aircon_installed", + "entityidfiltertype": "exact", + "outputinitially": false, + "state_type": "str", + "haltifstate": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "outputs": 1, + "output_only_on_state_change": true, + "for": "0", + "forType": "num", + "forUnits": "minutes", + "ignorePrevStateNull": false, + "ignorePrevStateUnknown": false, + "ignorePrevStateUnavailable": false, + "ignoreCurrentStateUnknown": true, + "ignoreCurrentStateUnavailable": true, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "entityState" + } + ], + "x": 170, + "y": 1020, + "wires": [ + [ + "a8d7f5e5d4f549b0" + ] + ] + }, + { + "id": "464e9271285f8450", + "type": "api-current-state", + "z": "3e4ba157b540d183", + "name": "MB Aircon Installed", + "server": "9e87348d.9c1c48", + "version": 3, + "outputs": 1, + "halt_if": "", + "halt_if_type": "str", + "halt_if_compare": "is", + "entity_id": "input_boolean.master_bedroom_aircon_installed", + "state_type": "str", + "blockInputOverrides": false, + "outputProperties": [ + { + "property": "payload", + "propertyType": "msg", + "value": "", + "valueType": "entityState" + } + ], + "for": "0", + "forType": "num", + "forUnits": "minutes", + "override_topic": false, + "state_location": "payload", + "override_payload": "msg", + "entity_location": "data", + "override_data": "msg", + "x": 350, + "y": 1100, + "wires": [ + [ + "a8d7f5e5d4f549b0" + ] + ] + }, + { + "id": "9c8056404bfcafed", + "type": "inject", + "z": "3e4ba157b540d183", + "name": "", + "props": [ + { + "p": "payload" + } + ], + "repeat": "", + "crontab": "", + "once": true, + "onceDelay": "120", + "topic": "", + "payload": "", + "payloadType": "date", + "x": 150, + "y": 1100, + "wires": [ + [ + "464e9271285f8450" + ] + ] + }, + { + "id": "a8d7f5e5d4f549b0", + "type": "change", + "z": "3e4ba157b540d183", + "name": "", + "rules": [ + { + "t": "set", + "p": "mb_aircon_installed", + "pt": "global", + "to": "payload", + "tot": "msg" + } + ], + "action": "", + "property": "", + "from": "", + "to": "", + "reg": false, + "x": 610, + "y": 1020, + "wires": [ + [] + ] + }, { "id": "e038489eca14b1dd", "type": "discordMessage", @@ -29830,5 +28983,86 @@ "wires": [ [] ] + }, + { + "id": "40ca6bea6784da85", + "type": "inject", + "z": "d49b385d8b582b20", + "name": "", + "props": [ + { + "p": "payload" + } + ], + "repeat": "", + "crontab": "", + "once": false, + "onceDelay": 0.1, + "topic": "", + "payload": "", + "payloadType": "date", + "x": 680, + "y": 460, + "wires": [ + [ + "aafbf681a5ad4f1c" + ] + ] + }, + { + "id": "e5408c2d11c0c492", + "type": "debug", + "z": "d49b385d8b582b20", + "name": "msg1", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1030, + "y": 440, + "wires": [] + }, + { + "id": "aafbf681a5ad4f1c", + "type": "function", + "z": "d49b385d8b582b20", + "name": "Heat Threshold", + "func": "var states = global.get('homeassistant.homeAssistant.states')\nvar hightemp = states['sensor.todays_high_temp'].state\nvar threshold = states['input_number.master_bedroom_daytime_threshold'].state\n\nif (hightemp >= threshold) {\n return [msg,null];\n} else {\n return [null,msg];\n}", + "outputs": 2, + "noerr": 0, + "initialize": "", + "finalize": "", + "libs": [], + "x": 860, + "y": 460, + "wires": [ + [ + "e5408c2d11c0c492" + ], + [ + "0eaecf8072527ff5" + ] + ] + }, + { + "id": "0eaecf8072527ff5", + "type": "debug", + "z": "d49b385d8b582b20", + "name": "msg2", + "active": true, + "tosidebar": true, + "console": false, + "tostatus": false, + "complete": "true", + "targetType": "full", + "statusVal": "", + "statusType": "auto", + "x": 1030, + "y": 500, + "wires": [] } ] \ No newline at end of file