1184 lines
34 KiB
JSON
1184 lines
34 KiB
JSON
[
|
|
{
|
|
"id": "ed4ea3c2bc13d1ec",
|
|
"type": "tab",
|
|
"label": "Weather",
|
|
"disabled": false,
|
|
"info": "",
|
|
"env": []
|
|
},
|
|
{
|
|
"id": "91324b2dbbd2a883",
|
|
"type": "tab",
|
|
"label": "Settings",
|
|
"disabled": false,
|
|
"info": "",
|
|
"env": []
|
|
},
|
|
{
|
|
"id": "50d1e20d24132c99",
|
|
"type": "tab",
|
|
"label": "Testing",
|
|
"disabled": false,
|
|
"info": "",
|
|
"env": []
|
|
},
|
|
{
|
|
"id": "4107976aa434eb03",
|
|
"type": "subflow",
|
|
"name": "Weather Conversions",
|
|
"info": "",
|
|
"category": "",
|
|
"in": [
|
|
{
|
|
"x": 40,
|
|
"y": 80,
|
|
"wires": [
|
|
{
|
|
"id": "388878f6056fa3e4"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"out": [
|
|
{
|
|
"x": 500,
|
|
"y": 80,
|
|
"wires": [
|
|
{
|
|
"id": "80ce4b42b82e3c78",
|
|
"port": 0
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"env": [],
|
|
"meta": {},
|
|
"color": "#DDAA99",
|
|
"icon": "font-awesome/fa-cloud"
|
|
},
|
|
{
|
|
"id": "0e70b91ae6570376",
|
|
"type": "subflow",
|
|
"name": "Area Weather Alerts",
|
|
"info": "",
|
|
"category": "",
|
|
"in": [
|
|
{
|
|
"x": 60,
|
|
"y": 140,
|
|
"wires": [
|
|
{
|
|
"id": "8ac36baa32177bd6"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"out": [],
|
|
"env": [],
|
|
"meta": {},
|
|
"color": "#3FADB5",
|
|
"icon": "font-awesome/fa-cloud",
|
|
"status": {
|
|
"x": 580,
|
|
"y": 320,
|
|
"wires": [
|
|
{
|
|
"id": "404170ec56d4c845",
|
|
"port": 5
|
|
}
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"id": "df425a30fbcfb2e9",
|
|
"type": "group",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"name": "General Alerts",
|
|
"style": {
|
|
"label": true
|
|
},
|
|
"nodes": [
|
|
"7d9f24e0a78ec15c",
|
|
"7a962f9a62b1c9bd",
|
|
"f9f2f5c1415ff1be",
|
|
"ca5ab0add7ccdb84",
|
|
"474ea9dc63cf9b40",
|
|
"42b8b21e40f8b824",
|
|
"e817e217a8d0d31a",
|
|
"f42e26da028d2230",
|
|
"f683f8c961246dc7"
|
|
],
|
|
"x": 14,
|
|
"y": 19,
|
|
"w": 1032,
|
|
"h": 202
|
|
},
|
|
{
|
|
"id": "b0521ee44dc796d1",
|
|
"type": "group",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"name": "Defiance Alerts",
|
|
"style": {
|
|
"label": true
|
|
},
|
|
"nodes": [
|
|
"aa989a69868fc5fe",
|
|
"67561d51aaa61dfa",
|
|
"bc210da75548aa27"
|
|
],
|
|
"x": 14,
|
|
"y": 239,
|
|
"w": 552,
|
|
"h": 142
|
|
},
|
|
{
|
|
"id": "56542cfc9d0c7a24",
|
|
"type": "group",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"name": "KY Lake Alerts",
|
|
"style": {
|
|
"label": true
|
|
},
|
|
"nodes": [
|
|
"bce3a3a1210ab253",
|
|
"e8efcf839f012317",
|
|
"5a0e961755fd6b45"
|
|
],
|
|
"x": 14,
|
|
"y": 399,
|
|
"w": 552,
|
|
"h": 142
|
|
},
|
|
{
|
|
"id": "0cd2e4517585a8c3",
|
|
"type": "group",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"name": "Ashland County Alerts",
|
|
"style": {
|
|
"label": true
|
|
},
|
|
"nodes": [
|
|
"e0c88351cce4178c",
|
|
"ee268b5bef276f45",
|
|
"028431d8cab86f80"
|
|
],
|
|
"x": 14,
|
|
"y": 559,
|
|
"w": 552,
|
|
"h": 142
|
|
},
|
|
{
|
|
"id": "b11deb643761dfcf",
|
|
"type": "group",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"name": "Bayfield County Alerts",
|
|
"style": {
|
|
"label": true
|
|
},
|
|
"nodes": [
|
|
"d2c7d572608b7d19",
|
|
"26a089d3cbbb5ef1",
|
|
"eed501c9777eecb5"
|
|
],
|
|
"x": 14,
|
|
"y": 719,
|
|
"w": 552,
|
|
"h": 142
|
|
},
|
|
{
|
|
"id": "200f284a1171f0a8",
|
|
"type": "mqtt-broker",
|
|
"name": "",
|
|
"broker": "192.168.1.251",
|
|
"port": "1883",
|
|
"clientid": "",
|
|
"autoConnect": true,
|
|
"usetls": false,
|
|
"protocolVersion": "5",
|
|
"keepalive": "60",
|
|
"cleansession": true,
|
|
"autoUnsubscribe": true,
|
|
"birthTopic": "",
|
|
"birthQos": "0",
|
|
"birthRetain": "false",
|
|
"birthPayload": "",
|
|
"birthMsg": {},
|
|
"closeTopic": "",
|
|
"closeQos": "0",
|
|
"closeRetain": "false",
|
|
"closePayload": "",
|
|
"closeMsg": {},
|
|
"willTopic": "",
|
|
"willQos": "0",
|
|
"willRetain": "false",
|
|
"willPayload": "",
|
|
"willMsg": {},
|
|
"userProps": "",
|
|
"sessionExpiry": ""
|
|
},
|
|
{
|
|
"id": "388878f6056fa3e4",
|
|
"type": "function",
|
|
"z": "4107976aa434eb03",
|
|
"name": "Conversions",
|
|
"func": "msg.data.main.temp = ((msg.data.main.temp - 273.15) * 1.8) + 32\nmsg.data.main.feels_like = ((msg.data.main.feels_like - 273.15) * 1.8) + 32\nmsg.data.main.temp_min = ((msg.data.main.temp_min - 273.15) * 1.8) + 32\nmsg.data.main.temp_max = ((msg.data.main.temp_max - 273.15) * 1.8) + 32\nmsg.data.main.pressure = msg.data.main.pressure * 0.029529983071445\nmsg.data.wind.speed = msg.data.wind.speed * 2.237\nmsg.data.wind.gust = msg.data.wind.gust * 2.237\nreturn msg;",
|
|
"outputs": 1,
|
|
"timeout": "",
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"libs": [],
|
|
"x": 190,
|
|
"y": 80,
|
|
"wires": [
|
|
[
|
|
"80ce4b42b82e3c78"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "80ce4b42b82e3c78",
|
|
"type": "function",
|
|
"z": "4107976aa434eb03",
|
|
"name": "Rounding",
|
|
"func": "const temp = msg.data.main.temp\nconst feels_like = msg.data.main.feels_like\nconst temp_min = msg.data.main.temp_min\nconst temp_max = msg.data.main.temp_max\nconst pressure = msg.data.main.pressure\nconst windspeed = msg.data.wind.speed\nconst windgust = msg.data.wind.gust\n\nmsg.data.main.temp = +temp.toFixed(1)\nmsg.data.main.feels_like = +feels_like.toFixed(1)\nmsg.data.main.temp_min = +temp_min.toFixed(1)\nmsg.data.main.temp_max = +temp_max.toFixed(1)\nmsg.data.main.pressure = +pressure.toFixed(2)\nmsg.data.wind.speed = +windspeed.toFixed(2)\nmsg.data.wind.gust = +windgust.toFixed(2)\n\nreturn msg;",
|
|
"outputs": 1,
|
|
"timeout": "",
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"libs": [],
|
|
"x": 360,
|
|
"y": 80,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "8ac36baa32177bd6",
|
|
"type": "http request",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "NWS Alerts API",
|
|
"method": "GET",
|
|
"ret": "obj",
|
|
"paytoqs": "ignore",
|
|
"url": "",
|
|
"tls": "",
|
|
"persist": false,
|
|
"proxy": "",
|
|
"insecureHTTPParser": false,
|
|
"authType": "",
|
|
"senderr": false,
|
|
"headers": [],
|
|
"x": 200,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"404170ec56d4c845"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "404170ec56d4c845",
|
|
"type": "function",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "Filter",
|
|
"func": "const severeWarningEvents = [\"Severe Thunderstorm Warning\",\"Destructive Severe Thunderstorm Warning\",\"Considerable Destructive Severe Thunderstorm Warning\"]\nconst tornadoWarningEvents = [\"Tornado Warning\",\"Radar Indicated Tornado Warning\",\"Confirmed Tornado Warning\",\"Tornado Emergency\"]\nconst tornadoWatchEvents = [\"Tornado Watch\"]\nconst severeThunderstormWatchEvents = [\"Severe Thunderstorm Watch\"]\nconst area = msg.area\nconst mqttTopic = \"weather/alerts/\" + area\nconst allTopic = mqttTopic + \"/alerts\"\nconst tstormTopic = mqttTopic + \"/severe_thunderstorm_warning\"\nconst tornadoWarnTopic = mqttTopic + \"/tornado_warning\"\nconst tornadoWatchTopic = mqttTopic + \"/tornado_watch\"\nconst severeThunderstormWatchTopic = mqttTopic + \"/severe_thunderstorm_watch\"\n\nlet alerts = msg.payload.features\nlet tornado_possible = false\nlet considerable_destructive = false\nlet confirmed = false\n\n// Filter for Severe Thunderstorm Warnings\n\nlet ts = alerts.filter(function(alert) {\n if (alert.properties &&\n severeWarningEvents.includes(alert.properties.event)) {\n return true\n }\n})\n\n// Filter for Severe Thunderstorm Warnings with tornado detection\n// that have a tornado possible parameter\n\nlet tstp = alerts.filter(function(alert) {\n if (alert.properties &&\n severeWarningEvents.includes(alert.properties.event) &&\n alert.properties.parameters &&\n alert.properties.parameters.tornadoDetection &&\n alert.properties.parameters.tornadoDetection.length > 0) {\n let tornadoPossible = alert.properties.parameters.tornadoDetection[0]\n return tornadoPossible === \"POSSIBLE\"\n }\n})\n\nif (tstp.length > 0) {\n tornado_possible = true\n}\n\n// Filter for considerable destructive severe thunderstorm warnings\n\nlet cdst = alerts.filter(function(alert) {\n if (alert.properties &&\n alert.properties.event === \"Considerable Destructive Severe Thunderstorm Warning\") {\n return true\n }\n})\n\nif (cdst.length > 0) {\n considerable_destructive = true\n}\n\n// Filter for Tornado Warnings\n\nlet tornado = alerts.filter(function(alert) {\n if (alert.properties &&\n tornadoWarningEvents.includes(alert.properties.event)) {\n return true\n }\n})\n\nlet confirmed_tornado = alerts.filter(function(alert) {\n if (alert.properties &&\n alert.properties.event === \"Confirmed Tornado Warning\") {\n return true\n }\n})\n\nif (confirmed_tornado.length > 0) {\n confirmed = true\n}\n\n// Filter for Tornado Watches\n\nlet tornado_watch = alerts.filter(function(alert) {\n if (alert.properties &&\n tornadoWatchEvents.includes(alert.properties.event)) {\n return true\n }\n})\n\n// Filter for Severe Thunderstorm Watches\n\nlet severe_thunderstorm_watch = alerts.filter(function(alert) {\n if (alert.properties &&\n severeThunderstormWatchEvents.includes(alert.properties.event)) {\n return true\n }\n})\n\n// If there are any alerts, return them\n\nlet allAlerts = {\n \"payload\": msg.payload.features,\n \"topic\": allTopic\n}\n\nlet tstormMsg = {\n \"payload\": {\n \"alerts\": ts,\n \"count\": ts.length,\n \"tornado_possible\": tornado_possible,\n \"considerable_destructive\": considerable_destructive\n },\n \"topic\": tstormTopic\n}\n\nlet tornadoWarnMsg = {\n \"payload\": {\n \"alerts\": tornado,\n \"count\": tornado.length,\n \"confirmed\": confirmed\n },\n \"topic\": tornadoWarnTopic\n}\n\nlet tornadoWatchMsg = {\n \"payload\": {\n \"alerts\": tornado_watch,\n \"count\": tornado_watch.length\n },\n \"topic\": tornadoWatchTopic\n}\n\nlet severeThunderstormWatchMsg = {\n \"payload\": {\n \"alerts\": severe_thunderstorm_watch,\n \"count\": severe_thunderstorm_watch.length\n },\n \"topic\": severeThunderstormWatchTopic\n}\n\n// Create status message for node\n\nlet statusMsg = {\n \"status\": {\n \"fill\": \"green\",\n \"shape\": \"dot\",\n \"text\": `${alerts.length} alerts processed at ${new Date().toLocaleString()}`\n }\n}\n\n// Send messages to output nodes\n\nnode.send([allAlerts,tstormMsg,tornadoWarnMsg,tornadoWatchMsg,severeThunderstormWatchMsg,statusMsg])",
|
|
"outputs": 6,
|
|
"timeout": 0,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"libs": [],
|
|
"x": 390,
|
|
"y": 140,
|
|
"wires": [
|
|
[
|
|
"846ac653b993bbec"
|
|
],
|
|
[
|
|
"9151c0cd48bb3c45"
|
|
],
|
|
[
|
|
"ab2e9b884521285a"
|
|
],
|
|
[
|
|
"6e785299ac298ccd"
|
|
],
|
|
[
|
|
"4d8ca3ed3f302d97"
|
|
],
|
|
[]
|
|
],
|
|
"outputLabels": [
|
|
"Severe Thunderstorm Warning",
|
|
"Tornado Warning",
|
|
"",
|
|
"",
|
|
"",
|
|
""
|
|
]
|
|
},
|
|
{
|
|
"id": "846ac653b993bbec",
|
|
"type": "mqtt out",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "MQTT - All Alerts",
|
|
"topic": "",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 650,
|
|
"y": 20,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "ab2e9b884521285a",
|
|
"type": "mqtt out",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "MQTT - Tornado Warning",
|
|
"topic": "",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 670,
|
|
"y": 140,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "9151c0cd48bb3c45",
|
|
"type": "mqtt out",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "MQTT - Severe Thunderstorm Warning",
|
|
"topic": "",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 710,
|
|
"y": 80,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "6e785299ac298ccd",
|
|
"type": "mqtt out",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "MQTT - Tornado Watch",
|
|
"topic": "",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 670,
|
|
"y": 200,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "4d8ca3ed3f302d97",
|
|
"type": "mqtt out",
|
|
"z": "0e70b91ae6570376",
|
|
"name": "MQTT - Severe Thunderstorm Watch",
|
|
"topic": "",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 710,
|
|
"y": 260,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "7d9f24e0a78ec15c",
|
|
"type": "http request",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "AtmosphericX",
|
|
"method": "GET",
|
|
"ret": "obj",
|
|
"paytoqs": "ignore",
|
|
"url": "http://192.168.1.106:3010/api/warnings",
|
|
"tls": "",
|
|
"persist": false,
|
|
"proxy": "",
|
|
"insecureHTTPParser": false,
|
|
"authType": "",
|
|
"senderr": false,
|
|
"headers": [],
|
|
"x": 320,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"f9f2f5c1415ff1be",
|
|
"f683f8c961246dc7"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7a962f9a62b1c9bd",
|
|
"type": "inject",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "topic",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "30",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 130,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"7d9f24e0a78ec15c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f9f2f5c1415ff1be",
|
|
"type": "function",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "Filter",
|
|
"func": "const severeWarningEvents = [\"Severe Thunderstorm Warning\", \"Destructive Severe Thunderstorm Warning\", \"Considerable Destructive Severe Thunderstorm Warning\"]\nconst tornadoWarningEvents = [\"Tornado Warning\", \"Radar Indicated Tornado Warning\", \"Confirmed Tornado Warning\", \"Tornado Emergency\"]\n\nlet alerts = msg.payload\n\n// Helper function to safely access nested properties\nconst getNestedProperty = (obj, path, defaultValue = undefined) => {\n return path.reduce((acc, key) => (acc && acc[key] !== undefined ? acc[key] : defaultValue), obj)\n}\n\n// Filter function\nconst filterAlerts = (alerts, condition) => {\n return alerts.filter(alert => {\n try {\n return condition(alert)\n } catch (e) {\n node.warn(`Error processing alert: ${e.message}`)\n return false\n }\n })\n}\n\n// Filtering logic\nconst ts = filterAlerts(alerts, alert => {\n const event = getNestedProperty(alert, ['raw', 'properties', 'event'])\n return severeWarningEvents.includes(event)\n})\n\nconst tstp = filterAlerts(alerts, alert => {\n const event = getNestedProperty(alert, ['raw', 'properties', 'event'])\n const tornadoDetection = getNestedProperty(alert, ['raw', 'properties', 'parameters', 'tornadoDetection'], [])\n return severeWarningEvents.includes(event) && tornadoDetection.includes(\"POSSIBLE\")\n})\n\nconst cdst = filterAlerts(alerts, alert => {\n const event = getNestedProperty(alert, ['raw', 'properties', 'event'])\n return event === \"Considerable Destructive Severe Thunderstorm Warning\"\n})\n\nconst tornado = filterAlerts(alerts, alert => {\n const event = getNestedProperty(alert, ['raw', 'properties', 'event'])\n return tornadoWarningEvents.includes(event)\n})\n\nconst confirmed_tornado = filterAlerts(alerts, alert => {\n const event = getNestedProperty(alert, ['raw', 'properties', 'event'])\n return event === \"Confirmed Tornado Warning\"\n})\n\n// Output messages\nlet tstormMsg = {\n \"payload\": {\n \"alerts\": ts,\n \"count\": ts.length,\n \"tornado_possible\": tstp.length,\n \"considerable_destructive\": cdst.length\n }\n}\n\nlet tornadoWarnMsg = {\n \"payload\": {\n \"alerts\": tornado,\n \"count\": tornado.length,\n \"confirmed\": confirmed_tornado.length\n }\n}\n\nnode.send([tstormMsg, tornadoWarnMsg])\nnode.status({ fill: 'green', shape: 'dot', text: 'Alerts Updated' })",
|
|
"outputs": 2,
|
|
"timeout": 0,
|
|
"noerr": 0,
|
|
"initialize": "",
|
|
"finalize": "",
|
|
"libs": [],
|
|
"x": 490,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"474ea9dc63cf9b40",
|
|
"e817e217a8d0d31a"
|
|
],
|
|
[
|
|
"ca5ab0add7ccdb84",
|
|
"f42e26da028d2230"
|
|
]
|
|
],
|
|
"outputLabels": [
|
|
"Severe Thunderstorm Warning",
|
|
"Tornado Warning"
|
|
]
|
|
},
|
|
{
|
|
"id": "ca5ab0add7ccdb84",
|
|
"type": "mqtt out",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "",
|
|
"topic": "weather/alerts/general/tornado_warning",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 780,
|
|
"y": 180,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "474ea9dc63cf9b40",
|
|
"type": "mqtt out",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "",
|
|
"topic": "weather/alerts/general/severe_thunderstorm_warning",
|
|
"qos": "0",
|
|
"retain": "",
|
|
"respTopic": "",
|
|
"contentType": "",
|
|
"userProps": "",
|
|
"correl": "",
|
|
"expiry": "",
|
|
"broker": "200f284a1171f0a8",
|
|
"x": 820,
|
|
"y": 120,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "aa989a69868fc5fe",
|
|
"type": "inject",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b0521ee44dc796d1",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "url",
|
|
"v": "https://api.weather.gov/alerts/active/zone/OHC039",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"p": "area",
|
|
"v": "defiance",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "30",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 130,
|
|
"y": 280,
|
|
"wires": [
|
|
[
|
|
"bc210da75548aa27"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "42b8b21e40f8b824",
|
|
"type": "link in",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "Weather - General Alerts Trigger",
|
|
"links": [
|
|
"b98e25d5de4ce89c"
|
|
],
|
|
"x": 185,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"7d9f24e0a78ec15c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "67561d51aaa61dfa",
|
|
"type": "link in",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b0521ee44dc796d1",
|
|
"name": "Weather - Defiance Alerts Trigger",
|
|
"links": [
|
|
"b98e25d5de4ce89c"
|
|
],
|
|
"x": 185,
|
|
"y": 340,
|
|
"wires": [
|
|
[
|
|
"bc210da75548aa27"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e817e217a8d0d31a",
|
|
"type": "debug",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "STS",
|
|
"active": false,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 670,
|
|
"y": 60,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "f42e26da028d2230",
|
|
"type": "debug",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "TW",
|
|
"active": false,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 860,
|
|
"y": 60,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "f683f8c961246dc7",
|
|
"type": "debug",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "df425a30fbcfb2e9",
|
|
"name": "Pre-Filter",
|
|
"active": false,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 500,
|
|
"y": 180,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "bc210da75548aa27",
|
|
"type": "subflow:0e70b91ae6570376",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b0521ee44dc796d1",
|
|
"name": "",
|
|
"x": 440,
|
|
"y": 280,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "bce3a3a1210ab253",
|
|
"type": "inject",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "56542cfc9d0c7a24",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "url",
|
|
"v": "https://api.weather.gov/alerts/active/zone/KYC157",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"p": "area",
|
|
"v": "ky_lake",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "30",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 130,
|
|
"y": 440,
|
|
"wires": [
|
|
[
|
|
"e8efcf839f012317"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e8efcf839f012317",
|
|
"type": "subflow:0e70b91ae6570376",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "56542cfc9d0c7a24",
|
|
"name": "",
|
|
"x": 440,
|
|
"y": 440,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "5a0e961755fd6b45",
|
|
"type": "link in",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "56542cfc9d0c7a24",
|
|
"name": "Weather - KY Lake Alerts Trigger",
|
|
"links": [
|
|
"b98e25d5de4ce89c"
|
|
],
|
|
"x": 185,
|
|
"y": 500,
|
|
"wires": [
|
|
[
|
|
"e8efcf839f012317"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e0c88351cce4178c",
|
|
"type": "inject",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "0cd2e4517585a8c3",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "url",
|
|
"v": "https://api.weather.gov/alerts/active/zone/WIC003",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"p": "area",
|
|
"v": "ashland_co",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "30",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 130,
|
|
"y": 600,
|
|
"wires": [
|
|
[
|
|
"ee268b5bef276f45"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "ee268b5bef276f45",
|
|
"type": "subflow:0e70b91ae6570376",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "0cd2e4517585a8c3",
|
|
"name": "",
|
|
"x": 440,
|
|
"y": 600,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "028431d8cab86f80",
|
|
"type": "link in",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "0cd2e4517585a8c3",
|
|
"name": "Weather - KY Lake Alerts Trigger",
|
|
"links": [
|
|
"b98e25d5de4ce89c"
|
|
],
|
|
"x": 185,
|
|
"y": 660,
|
|
"wires": [
|
|
[
|
|
"ee268b5bef276f45"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "d2c7d572608b7d19",
|
|
"type": "inject",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b11deb643761dfcf",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
},
|
|
{
|
|
"p": "url",
|
|
"v": "https://api.weather.gov/alerts/active/zone/WIC007",
|
|
"vt": "str"
|
|
},
|
|
{
|
|
"p": "area",
|
|
"v": "bayfield_co",
|
|
"vt": "str"
|
|
}
|
|
],
|
|
"repeat": "30",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 130,
|
|
"y": 760,
|
|
"wires": [
|
|
[
|
|
"26a089d3cbbb5ef1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "26a089d3cbbb5ef1",
|
|
"type": "subflow:0e70b91ae6570376",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b11deb643761dfcf",
|
|
"name": "",
|
|
"x": 440,
|
|
"y": 760,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "eed501c9777eecb5",
|
|
"type": "link in",
|
|
"z": "ed4ea3c2bc13d1ec",
|
|
"g": "b11deb643761dfcf",
|
|
"name": "Weather - KY Lake Alerts Trigger",
|
|
"links": [
|
|
"b98e25d5de4ce89c"
|
|
],
|
|
"x": 185,
|
|
"y": 820,
|
|
"wires": [
|
|
[
|
|
"26a089d3cbbb5ef1"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "a1c109993f7dd396",
|
|
"type": "mqtt in",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"topic": "house/time/night_mode",
|
|
"qos": "2",
|
|
"datatype": "auto-detect",
|
|
"broker": "200f284a1171f0a8",
|
|
"nl": false,
|
|
"rap": true,
|
|
"rh": 0,
|
|
"inputs": 0,
|
|
"x": 140,
|
|
"y": 60,
|
|
"wires": [
|
|
[
|
|
"0ea09d79d6de5c53"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "0ea09d79d6de5c53",
|
|
"type": "change",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "night_mode",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 380,
|
|
"y": 60,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "395e101ae9c12369",
|
|
"type": "mqtt in",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"topic": "house/time/give_me_darkness",
|
|
"qos": "2",
|
|
"datatype": "auto-detect",
|
|
"broker": "200f284a1171f0a8",
|
|
"nl": false,
|
|
"rap": true,
|
|
"rh": 0,
|
|
"inputs": 0,
|
|
"x": 160,
|
|
"y": 120,
|
|
"wires": [
|
|
[
|
|
"7e79da9ecd800892"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "7e79da9ecd800892",
|
|
"type": "change",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "give_me_darkness",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 440,
|
|
"y": 120,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "a67eb32acf21917c",
|
|
"type": "mqtt in",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"topic": "house/time/early_night_mode",
|
|
"qos": "2",
|
|
"datatype": "auto-detect",
|
|
"broker": "200f284a1171f0a8",
|
|
"nl": false,
|
|
"rap": true,
|
|
"rh": 0,
|
|
"inputs": 0,
|
|
"x": 160,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"e183038952420a88"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "e183038952420a88",
|
|
"type": "change",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "early_night_mode",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 440,
|
|
"y": 180,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "da24109fa6585678",
|
|
"type": "mqtt in",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"topic": "house/studio/live",
|
|
"qos": "2",
|
|
"datatype": "auto-detect",
|
|
"broker": "200f284a1171f0a8",
|
|
"nl": false,
|
|
"rap": true,
|
|
"rh": 0,
|
|
"inputs": 0,
|
|
"x": 120,
|
|
"y": 240,
|
|
"wires": [
|
|
[
|
|
"f7219402165cd674"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "f7219402165cd674",
|
|
"type": "change",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"rules": [
|
|
{
|
|
"t": "set",
|
|
"p": "studio_live",
|
|
"pt": "global",
|
|
"to": "payload",
|
|
"tot": "msg"
|
|
}
|
|
],
|
|
"action": "",
|
|
"property": "",
|
|
"from": "",
|
|
"to": "",
|
|
"reg": false,
|
|
"x": 340,
|
|
"y": 240,
|
|
"wires": [
|
|
[]
|
|
]
|
|
},
|
|
{
|
|
"id": "59d2d6fec223bd16",
|
|
"type": "mqtt in",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "",
|
|
"topic": "services/homeassistant/reboot",
|
|
"qos": "0",
|
|
"datatype": "auto-detect",
|
|
"broker": "200f284a1171f0a8",
|
|
"nl": false,
|
|
"rap": true,
|
|
"rh": 0,
|
|
"inputs": 0,
|
|
"x": 160,
|
|
"y": 300,
|
|
"wires": [
|
|
[
|
|
"b98e25d5de4ce89c"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "b98e25d5de4ce89c",
|
|
"type": "link out",
|
|
"z": "91324b2dbbd2a883",
|
|
"name": "Home Assistant Reboot",
|
|
"mode": "link",
|
|
"links": [
|
|
"42b8b21e40f8b824",
|
|
"5a0e961755fd6b45",
|
|
"67561d51aaa61dfa",
|
|
"028431d8cab86f80",
|
|
"eed501c9777eecb5"
|
|
],
|
|
"x": 335,
|
|
"y": 300,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "2fe03a09d418699b",
|
|
"type": "exec",
|
|
"z": "50d1e20d24132c99",
|
|
"command": "",
|
|
"addpay": "",
|
|
"append": "",
|
|
"useSpawn": "false",
|
|
"timer": "",
|
|
"winHide": false,
|
|
"oldrc": false,
|
|
"name": "",
|
|
"x": 370,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"652d9b04c03a88b8"
|
|
],
|
|
[
|
|
"b784a6fd67e1cac0"
|
|
],
|
|
[
|
|
"38d4b39d1405b540"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "b114d9e490180bbc",
|
|
"type": "inject",
|
|
"z": "50d1e20d24132c99",
|
|
"name": "",
|
|
"props": [
|
|
{
|
|
"p": "payload"
|
|
}
|
|
],
|
|
"repeat": "",
|
|
"crontab": "",
|
|
"once": false,
|
|
"onceDelay": 0.1,
|
|
"topic": "",
|
|
"payload": "",
|
|
"payloadType": "date",
|
|
"x": 200,
|
|
"y": 180,
|
|
"wires": [
|
|
[
|
|
"2fe03a09d418699b"
|
|
]
|
|
]
|
|
},
|
|
{
|
|
"id": "652d9b04c03a88b8",
|
|
"type": "debug",
|
|
"z": "50d1e20d24132c99",
|
|
"name": "stdout",
|
|
"active": true,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 530,
|
|
"y": 120,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "b784a6fd67e1cac0",
|
|
"type": "debug",
|
|
"z": "50d1e20d24132c99",
|
|
"name": "stderr",
|
|
"active": true,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 530,
|
|
"y": 180,
|
|
"wires": []
|
|
},
|
|
{
|
|
"id": "38d4b39d1405b540",
|
|
"type": "debug",
|
|
"z": "50d1e20d24132c99",
|
|
"name": "return code",
|
|
"active": true,
|
|
"tosidebar": true,
|
|
"console": false,
|
|
"tostatus": false,
|
|
"complete": "true",
|
|
"targetType": "full",
|
|
"statusVal": "",
|
|
"statusType": "auto",
|
|
"x": 550,
|
|
"y": 240,
|
|
"wires": []
|
|
}
|
|
] |