Emma door alert

This commit is contained in:
2025-03-24 05:18:44 -04:00
parent ab3b66c3fc
commit b1570a3086

View File

@ -1908,12 +1908,20 @@
"b542615d3dee41f6", "b542615d3dee41f6",
"fc25e2a837ec8229", "fc25e2a837ec8229",
"440fc7142e7345d4", "440fc7142e7345d4",
"cef61cdb2808ce5a" "cef61cdb2808ce5a",
"0367216416de8b4d",
"03075516f3003707",
"2e356bc6f1ad80dc",
"c9d498c1e323b1e4",
"f7bd6d5fabdba0e0",
"515f7471cec7bce2",
"ca85b450d07da81c",
"40dae72402f8cdee"
], ],
"x": 894, "x": 34,
"y": 739, "y": 1139,
"w": 612, "w": 812,
"h": 262 "h": 442
}, },
{ {
"id": "0f7fdf39e4400032", "id": "0f7fdf39e4400032",
@ -2131,7 +2139,7 @@
"5524e8ba9b5545be" "5524e8ba9b5545be"
], ],
"x": 894, "x": 894,
"y": 1019, "y": 739,
"w": 612, "w": 612,
"h": 262 "h": 262
}, },
@ -2154,7 +2162,7 @@
"81129efa6676b58e" "81129efa6676b58e"
], ],
"x": 894, "x": 894,
"y": 1299, "y": 1019,
"w": 612, "w": 612,
"h": 262 "h": 262
}, },
@ -4963,6 +4971,72 @@
"resend": false, "resend": false,
"debugEnabled": false "debugEnabled": false
}, },
{
"id": "9643a7993e266372",
"type": "ha-entity-config",
"server": "9e87348d.9c1c48",
"deviceConfig": "",
"name": "Emma Door Alert",
"version": 6,
"entityType": "switch",
"haConfig": [
{
"property": "name",
"value": "Emma Door Alert"
},
{
"property": "icon",
"value": "mdi:door"
},
{
"property": "entity_picture",
"value": ""
},
{
"property": "entity_category",
"value": ""
},
{
"property": "device_class",
"value": ""
}
],
"resend": false,
"debugEnabled": false
},
{
"id": "7d7c641acaff9284",
"type": "ha-entity-config",
"server": "9e87348d.9c1c48",
"deviceConfig": "",
"name": "Emma Door Alert Cancel",
"version": 6,
"entityType": "button",
"haConfig": [
{
"property": "name",
"value": "Emma Door Alert Cancel"
},
{
"property": "icon",
"value": "mdi:cancel"
},
{
"property": "entity_picture",
"value": ""
},
{
"property": "entity_category",
"value": ""
},
{
"property": "device_class",
"value": ""
}
],
"resend": false,
"debugEnabled": false
},
{ {
"id": "afead614fabc01bb", "id": "afead614fabc01bb",
"type": "function", "type": "function",
@ -13852,8 +13926,8 @@
"service": "turn_off", "service": "turn_off",
"output_location": "", "output_location": "",
"output_location_type": "none", "output_location_type": "none",
"x": 1410, "x": 550,
"y": 960, "y": 1360,
"wires": [ "wires": [
[] []
] ]
@ -13871,8 +13945,8 @@
"initialize": "", "initialize": "",
"finalize": "", "finalize": "",
"libs": [], "libs": [],
"x": 1150, "x": 290,
"y": 840, "y": 1240,
"wires": [ "wires": [
[ [
"440fc7142e7345d4" "440fc7142e7345d4"
@ -13917,8 +13991,8 @@
"blockInputOverrides": false, "blockInputOverrides": false,
"domain": "timer", "domain": "timer",
"service": "start", "service": "start",
"x": 1410, "x": 550,
"y": 900, "y": 1300,
"wires": [ "wires": [
[] []
] ]
@ -13949,8 +14023,8 @@
"blockInputOverrides": false, "blockInputOverrides": false,
"domain": "timer", "domain": "timer",
"service": "cancel", "service": "cancel",
"x": 1410, "x": 550,
"y": 840, "y": 1240,
"wires": [ "wires": [
[] []
] ]
@ -13975,8 +14049,8 @@
"valueType": "date" "valueType": "date"
} }
], ],
"x": 1000, "x": 140,
"y": 960, "y": 1360,
"wires": [ "wires": [
[ [
"cef61cdb2808ce5a" "cef61cdb2808ce5a"
@ -14028,8 +14102,8 @@
"valueType": "str" "valueType": "str"
} }
], ],
"x": 990, "x": 130,
"y": 840, "y": 1240,
"wires": [ "wires": [
[ [
"3b698d0a4f2620bd" "3b698d0a4f2620bd"
@ -14065,8 +14139,8 @@
"blockInputOverrides": false, "blockInputOverrides": false,
"domain": "light", "domain": "light",
"service": "turn_on", "service": "turn_on",
"x": 1400, "x": 540,
"y": 780, "y": 1180,
"wires": [ "wires": [
[] []
] ]
@ -14102,8 +14176,8 @@
"override_payload": "msg", "override_payload": "msg",
"entity_location": "data", "entity_location": "data",
"override_data": "msg", "override_data": "msg",
"x": 1210, "x": 350,
"y": 960, "y": 1360,
"wires": [ "wires": [
[ [
"c3f2a4aa281295ce" "c3f2a4aa281295ce"
@ -14402,7 +14476,7 @@
"output_location": "", "output_location": "",
"output_location_type": "none", "output_location_type": "none",
"x": 1410, "x": 1410,
"y": 1240, "y": 960,
"wires": [ "wires": [
[] []
] ]
@ -14421,7 +14495,7 @@
"finalize": "", "finalize": "",
"libs": [], "libs": [],
"x": 1150, "x": 1150,
"y": 1120, "y": 840,
"wires": [ "wires": [
[ [
"5524e8ba9b5545be" "5524e8ba9b5545be"
@ -14467,7 +14541,7 @@
"domain": "timer", "domain": "timer",
"service": "start", "service": "start",
"x": 1410, "x": 1410,
"y": 1180, "y": 900,
"wires": [ "wires": [
[] []
] ]
@ -14499,7 +14573,7 @@
"domain": "timer", "domain": "timer",
"service": "cancel", "service": "cancel",
"x": 1410, "x": 1410,
"y": 1120, "y": 840,
"wires": [ "wires": [
[] []
] ]
@ -14525,7 +14599,7 @@
} }
], ],
"x": 1000, "x": 1000,
"y": 1240, "y": 960,
"wires": [ "wires": [
[ [
"0b5424aadc3479f7" "0b5424aadc3479f7"
@ -14578,7 +14652,7 @@
} }
], ],
"x": 990, "x": 990,
"y": 1120, "y": 840,
"wires": [ "wires": [
[ [
"4954c509d4d697e2" "4954c509d4d697e2"
@ -14620,7 +14694,7 @@
"entity_location": "data", "entity_location": "data",
"override_data": "msg", "override_data": "msg",
"x": 1210, "x": 1210,
"y": 1240, "y": 960,
"wires": [ "wires": [
[ [
"f3824e4c7e202605" "f3824e4c7e202605"
@ -14655,7 +14729,7 @@
"domain": "input_select", "domain": "input_select",
"service": "select_option", "service": "select_option",
"x": 1400, "x": 1400,
"y": 1060, "y": 780,
"wires": [ "wires": [
[] []
] ]
@ -14689,7 +14763,7 @@
"output_location": "", "output_location": "",
"output_location_type": "none", "output_location_type": "none",
"x": 1410, "x": 1410,
"y": 1520, "y": 1240,
"wires": [ "wires": [
[] []
] ]
@ -14708,7 +14782,7 @@
"finalize": "", "finalize": "",
"libs": [], "libs": [],
"x": 1150, "x": 1150,
"y": 1400, "y": 1120,
"wires": [ "wires": [
[ [
"81129efa6676b58e" "81129efa6676b58e"
@ -14754,7 +14828,7 @@
"domain": "timer", "domain": "timer",
"service": "start", "service": "start",
"x": 1410, "x": 1410,
"y": 1460, "y": 1180,
"wires": [ "wires": [
[] []
] ]
@ -14786,7 +14860,7 @@
"domain": "timer", "domain": "timer",
"service": "cancel", "service": "cancel",
"x": 1410, "x": 1410,
"y": 1400, "y": 1120,
"wires": [ "wires": [
[] []
] ]
@ -14812,7 +14886,7 @@
} }
], ],
"x": 1000, "x": 1000,
"y": 1520, "y": 1240,
"wires": [ "wires": [
[ [
"4a431478798a51c8" "4a431478798a51c8"
@ -14865,7 +14939,7 @@
} }
], ],
"x": 990, "x": 990,
"y": 1400, "y": 1120,
"wires": [ "wires": [
[ [
"3063e6a5b5c3f677" "3063e6a5b5c3f677"
@ -14907,7 +14981,7 @@
"entity_location": "data", "entity_location": "data",
"override_data": "msg", "override_data": "msg",
"x": 1210, "x": 1210,
"y": 1520, "y": 1240,
"wires": [ "wires": [
[ [
"e270c73896a1a50c" "e270c73896a1a50c"
@ -14942,7 +15016,7 @@
"domain": "input_select", "domain": "input_select",
"service": "select_option", "service": "select_option",
"x": 1400, "x": 1400,
"y": 1340, "y": 1060,
"wires": [ "wires": [
[] []
] ]
@ -15050,6 +15124,265 @@
[] []
] ]
}, },
{
"id": "0367216416de8b4d",
"type": "server-state-changed",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Door",
"server": "9e87348d.9c1c48",
"version": 6,
"outputs": 1,
"exposeAsEntityConfig": "9643a7993e266372",
"entities": {
"entity": [
"binary_sensor.emma_bedroom_door"
],
"substring": [],
"regex": []
},
"outputInitially": false,
"stateType": "str",
"ifState": "",
"ifStateType": "str",
"ifStateOperator": "is",
"outputOnlyOnStateChange": true,
"for": "0",
"forType": "num",
"forUnits": "minutes",
"ignorePrevStateNull": false,
"ignorePrevStateUnknown": true,
"ignorePrevStateUnavailable": true,
"ignoreCurrentStateUnknown": true,
"ignoreCurrentStateUnavailable": true,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "topic",
"propertyType": "msg",
"value": "door",
"valueType": "str"
}
],
"x": 110,
"y": 1420,
"wires": [
[
"03075516f3003707"
]
]
},
{
"id": "03075516f3003707",
"type": "function",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Door Alert",
"func": "const states = global.get('homeassistant.homeAssistant.states')\nconst masterBedroomSleeping = states['input_boolean.master_bedroom_sleeping'].state\nconst emmaSleep = states['input_boolean.emma_sleeping'].state\nconst tonyAwake = states['input_boolean.tony_awake'].state\nconst xiaDesktopUser = states['sensor.xia_desktop_current_username'].state\nconst xiaDesktopIdle = states['binary_sensor.tina_desktop_idle'].state\nconst tonyLocation = states['person.tony_stork'].state\nconst tinaLocation = states['person.christina_stork'].state\nconst overnight = states['binary_sensor.overnight'].state\nconst payload = msg.payload\nconst topic = msg.topic\n\n// Set some default values\n\nlet who = 'Master Bedroom'\nlet tinaAvailable = false\nlet tonyAvailable = false\nlet enable = false\n\n// Determine who is available to respond\n\nif (tonyAwake === 'on' && tonyLocation === 'home') {\n tonyAvailable = true\n}\n\nif (xiaDesktopUser === 'irish' && xiaDesktopIdle === 'off' && tinaLocation === 'home') {\n tinaAvailable = true\n}\n\n// Determine where to send the alert to\n\nif (tinaAvailable === true || tonyAvailable === true) {\n who = 'Common Areas'\n}\n\n// Determine if the alert should be sent\n\nif (overnight === 'on' && masterBedroomSleeping === 'on') {\n enable = true\n} else if (overnight === 'off') {\n enable = true\n}\n\n// Define the alert message\n\nlet alertTTS = {\n \"topic\": who,\n \"payload\": \"Emma has opened her door, please check on her. I repeat, Emma has opened her door, please check on her. This is urgent, Emma is awake. PDS toddler warning, a large and extremely dangerous toddler is on the ground in your area.\",\n \"type\": \"critical\"\n}\n\n// Send the alert if conditions are met\n\nif (topic === 'door' && payload === 'on') {\n if (enable === true) {\n node.status({fill:'green',shape:'dot',text:`Sending alert to ${who}`})\n node.send([alertTTS,msg,null])\n } else {\n node.status({fill:'red',shape:'ring',text:'Door Opened, but no alert sent'})\n }\n} else if (topic === 'timer') {\n node.status({fill:'green',shape:'dot',text:'Timer Finished'})\n node.send([alertTTS,msg,null])\n} else if (topic === 'button') {\n node.status({fill:'green',shape:'dot',text:'Cancel Button Pressed'})\n node.send([null,null,msg])\n} else if (topic === 'door' && payload === 'off') {\n node.status({fill:'green',shape:'dot',text:'Door Closed'})\n}",
"outputs": 3,
"timeout": 0,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 340,
"y": 1480,
"wires": [
[
"2e356bc6f1ad80dc"
],
[
"c9d498c1e323b1e4"
],
[
"515f7471cec7bce2"
]
],
"outputLabels": [
"TTS Output",
"Start Timer",
"Cancel Timer"
]
},
{
"id": "2e356bc6f1ad80dc",
"type": "subflow:6429099c4571dd6b",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "",
"x": 560,
"y": 1420,
"wires": [
[]
]
},
{
"id": "c9d498c1e323b1e4",
"type": "api-call-service",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Start Timer",
"server": "9e87348d.9c1c48",
"version": 7,
"debugenabled": false,
"action": "timer.start",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"timer.emma_door_alert"
],
"labelId": [],
"data": "{\"duration\":\"00:00:30\"}",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"blockInputOverrides": true,
"domain": "timer",
"service": "start",
"x": 550,
"y": 1480,
"wires": [
[]
]
},
{
"id": "f7bd6d5fabdba0e0",
"type": "server-events",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Timer Finished",
"server": "9e87348d.9c1c48",
"version": 3,
"exposeAsEntityConfig": "",
"eventType": "timer.finished",
"eventData": "{\"entity_id\":\"timer.emma_door_alert\"}",
"waitForRunning": true,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "date"
},
{
"property": "topic",
"propertyType": "msg",
"value": "timer",
"valueType": "str"
}
],
"x": 140,
"y": 1480,
"wires": [
[
"03075516f3003707"
]
]
},
{
"id": "515f7471cec7bce2",
"type": "api-call-service",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Cancel Timer",
"server": "9e87348d.9c1c48",
"version": 7,
"debugenabled": false,
"action": "timer.cancel",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [
"timer.emma_door_alert"
],
"labelId": [],
"data": "",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"blockInputOverrides": true,
"domain": "timer",
"service": "cancel",
"x": 550,
"y": 1540,
"wires": [
[
"40dae72402f8cdee"
]
]
},
{
"id": "ca85b450d07da81c",
"type": "ha-button",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Cancel Button",
"version": 0,
"debugenabled": false,
"outputs": 1,
"entityConfig": "7d7c641acaff9284",
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "topic",
"propertyType": "msg",
"value": "button",
"valueType": "str"
}
],
"x": 130,
"y": 1540,
"wires": [
[
"03075516f3003707"
]
]
},
{
"id": "40dae72402f8cdee",
"type": "api-call-service",
"z": "5e238cbbe6d612c9",
"g": "ba738e13229c781b",
"name": "Volume Reset",
"server": "9e87348d.9c1c48",
"version": 7,
"debugenabled": false,
"action": "script.volume_reset",
"floorId": [],
"areaId": [],
"deviceId": [],
"entityId": [],
"labelId": [],
"data": "",
"dataType": "jsonata",
"mergeContext": "",
"mustacheAltTags": false,
"outputProperties": [],
"queue": "none",
"blockInputOverrides": true,
"domain": "script",
"service": "volume_reset",
"x": 740,
"y": 1540,
"wires": [
[]
]
},
{ {
"id": "07049ae77b6751c6", "id": "07049ae77b6751c6",
"type": "server-state-changed", "type": "server-state-changed",