Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Current Conditions Flow #1

Open
GlennGoddard opened this issue Jul 30, 2022 · 1 comment
Open

Current Conditions Flow #1

GlennGoddard opened this issue Jul 30, 2022 · 1 comment

Comments

@GlennGoddard
Copy link

[
{
"id": "a6a42febf437ae5b",
"type": "tab",
"label": "Weather",
"disabled": false,
"info": "",
"env": []
},
{
"id": "983ac43397443359",
"type": "server-state-changed",
"z": "a6a42febf437ae5b",
"name": "Time",
"server": "30ea583309d387b7",
"version": 4,
"exposeToHomeAssistant": false,
"haConfig": [
{
"property": "name",
"value": ""
},
{
"property": "icon",
"value": ""
}
],
"entityidfilter": "sensor.time",
"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": false,
"ignoreCurrentStateUnavailable": false,
"outputProperties": [
{
"property": "payload",
"propertyType": "msg",
"value": "",
"valueType": "entityState"
},
{
"property": "data",
"propertyType": "msg",
"value": "",
"valueType": "eventData"
},
{
"property": "topic",
"propertyType": "msg",
"value": "",
"valueType": "triggerId"
}
],
"x": 70,
"y": 60,
"wires": [
[
"6f5a9ad410474b66"
]
]
},
{
"id": "6f5a9ad410474b66",
"type": "delay",
"z": "a6a42febf437ae5b",
"name": "Every 2 mins",
"pauseType": "rate",
"timeout": "1",
"timeoutUnits": "milliseconds",
"rate": "1",
"nbRateUnits": "2",
"rateUnits": "minute",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 210,
"y": 60,
"wires": [
[
"3229b9a105ac1184"
]
]
},
{
"id": "2857964d8063c657",
"type": "comment",
"z": "a6a42febf437ae5b",
"name": "Current Weather Conditions (Imperial Units)",
"info": "",
"x": 510,
"y": 20,
"wires": []
},
{
"id": "d35814286c571b07",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Lightning T/F",
"func": "if (msg.payload >= 1) {\n //Lightning within last hour\n //msg.lightning = Boolean[1];\n msg.lightning = 'true'\n} else {\n //msg.lightning = Boolean[0];\n msg.lightning = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1010,
"y": 80,
"wires": [
[
"dd84a96812b265be"
]
]
},
{
"id": "74b74a6dd2568826",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Rain Rate",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_rain_rate",
"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": 480,
"y": 200,
"wires": [
[
"aa6cd46e5c7381b3"
]
]
},
{
"id": "598bb0b280ef4b1e",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Precipitation Type",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_precipitation_type",
"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": 450,
"y": 140,
"wires": [
[
"397f5877acd5342a"
]
]
},
{
"id": "3a2f285a22f71b50",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Lightning Last Hour",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_lightning_count_last_hour",
"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": 450,
"y": 80,
"wires": [
[
"d35814286c571b07"
]
]
},
{
"id": "397f5877acd5342a",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Precipitation Type",
"func": "msg.precip_type =\n //None, Rain, Hail, Heavy Rain (Rain + Hail)\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 670,
"y": 140,
"wires": [
[
"977c519cb81ba52d",
"4a56db88759090be",
"479963687be71f29"
]
]
},
{
"id": "977c519cb81ba52d",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Rain T/F",
"func": "if (msg.precip_type == "Rain") {\n //msg.rain = Boolean[1];\n msg.rain = 'true'\n} else if (msg.precip_type == "Heavy Rain") {\n //msg.rain = Boolean[1];\n msg.rain = 'true'\n} else {\n //msg.rain = Boolean[0];\n msg.rain = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1000,
"y": 120,
"wires": [
[
"5e3449835546e08a"
]
]
},
{
"id": "4a56db88759090be",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Hail T/F",
"func": "if (msg.preip_type == "Hail") {\n //msg.hail = Boolean[1];\n msg.hail = 'true'\n} else {\n //msg.hail = Boolean[0];\n msg.hail = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1000,
"y": 160,
"wires": [
[
"91aeb53b7f3297ac"
]
]
},
{
"id": "2e31e9c740883545",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Windy T/F",
"func": "// Imperial >= 25 mph, Metric >= 11.17 m/s\nif (msg.wind_speed >= 25) {\n //msg.windy = Boolean[1];\n msg.windy = 'true';\n} else {\n //msg.windy = Boolean[0];\n msg.windy = 'false';\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1010,
"y": 480,
"wires": [
[
"43aac9f8f438cea2"
]
]
},
{
"id": "ea75f74900c4ff79",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Wind Speed",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_wind_speed_avg",
"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": 470,
"y": 480,
"wires": [
[
"540f1929f4fa942d"
]
]
},
{
"id": "55a4a3e57f22a5e7",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Pouring T/F",
"func": "// Imperial >= 0.31 in/hr, Metric >= 7.8 mm/hr\nif (msg.rain_rate >= 0.31) {\n //msg.pouring = Boolean[1];\n msg.pouring = 'true'\n} else if (msg.precip_type == "Heavy Rain") {\n //msg.pouring = Boolean[1];\n msg.pouring = 'true'\n} else {\n //msg.pouring = Boolean[0];\n msg.pouring = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1010,
"y": 200,
"wires": [
[
"a28f94cd47ac1cdb"
]
]
},
{
"id": "aa6cd46e5c7381b3",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Rain Rate",
"func": "msg.rain_rate =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 640,
"y": 200,
"wires": [
[
"479963687be71f29"
]
]
},
{
"id": "479963687be71f29",
"type": "join",
"z": "a6a42febf437ae5b",
"name": "Wait",
"mode": "custom",
"build": "buffer",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\n",
"joinerType": "str",
"accumulate": false,
"timeout": "60",
"count": "2",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 850,
"y": 200,
"wires": [
[
"55a4a3e57f22a5e7"
]
]
},
{
"id": "6df75101236b188f",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Temperature",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_temperature",
"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": 470,
"y": 320,
"wires": [
[
"1cadb5de14f5e161"
]
]
},
{
"id": "93cb155ab51ccd03",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Humidity",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_humidity",
"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": 480,
"y": 440,
"wires": [
[
"779e392d143babeb"
]
]
},
{
"id": "63f4e16a7a5c7dd8",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Dew Point",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_dew_point",
"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": 470,
"y": 360,
"wires": [
[
"80d75c2eba9c4b54"
]
]
},
{
"id": "3229b9a105ac1184",
"type": "delay",
"z": "a6a42febf437ae5b",
"name": "",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "2",
"rateUnits": "minute",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 140,
"y": 340,
"wires": [
[
"3a2f285a22f71b50",
"598bb0b280ef4b1e",
"74b74a6dd2568826",
"ea75f74900c4ff79",
"9ed7393630737013",
"6df75101236b188f",
"93cb155ab51ccd03",
"63f4e16a7a5c7dd8",
"6d82409f750d0b7c",
"7118601f91fcb565",
"bbcb2da9a843fce1",
"3196dee67d356179",
"66d3c9d2686a72ed"
]
]
},
{
"id": "64d4fba3744c1e1c",
"type": "debug",
"z": "a6a42febf437ae5b",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "current",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1270,
"y": 700,
"wires": []
},
{
"id": "5dcf7f8a8b612c29",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Day T/F",
"func": "// Solar Elevation of <0 is Below the Horizon\nif (msg.se <= 0) {\n //msg.day = Boolean[0];\n msg.day = 'false';\n} else {\n //msg.day = Boolean[1];\n msg.day = 'true';\n}\n\n//context.set("day",day)\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1000,
"y": 520,
"wires": [
[
"a53da46404c52990"
]
]
},
{
"id": "61cf46c120a3cb3d",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Cloudy T/F",
"func": "if ((msg.si_p <= 50) && (msg.si_d >= 50)) {\n //msg.cloudy = Boolean[1];\n msg.cloudy = 'true'\n} else {\n //msg.cloudy = Boolean[0];\n msg.cloudy = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1010,
"y": 580,
"wires": [
[
"21390f473fcc206d"
]
]
},
{
"id": "3b784b4474a5f9c9",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Current Conditions",
"func": "var lightning=flow.get('lightning')\nvar hail=flow.get('hail')\nvar pouring=flow.get('pouring')\nvar snow=flow.get('snow')\nvar rain=flow.get('rain')\nvar windy=flow.get('windy')\nvar fog=flow.get('fog')\nvar day=flow.get('day')\nvar cloudy=flow.get('cloudy')\nvar part_cloud=flow.get('part_cloud')\n\nif ((lightning == 'true') && (rain == 'true')) {\n msg.current = "Lighning & Rain";\n} else if (lightning == 'true') {\n msg.current = "Lightning";\n} else if (hail == 'true') {\n msg.current = "Hail";\n} else if (pouring == 'true') {\n msg.current = "Pouring";\n} else if ((snow == 'true') && (rain == 'true')){\n msg.current = "Snowy Rainy";\n} else if (rain == 'true') {\n msg.current = "Rainy";\n} else if ((windy == 'true') && (cloudy == 'true')){\n msg.current = "Windy Variant";\n} else if (windy == 'true') {\n msg.current = "Windy";\n} else if (fog == 'true') {\n msg.current = "Fog";\n} else if ((snow == 'true') && (cloudy == 'true')) {\n msg.current = "Snowy";\n} else if (cloudy == 'true') {\n msg.current = "Cloudy";\n} else if (part_cloud == 'true') {\n msg.current = "Partly Cloudy";\n} else if (day == 'true') {\n msg.current = "Sunny";\n} else {\n msg.current = "Clear Night";\n}\n\n//msg.current = "Lightning = " + lightning + ", Hail = " + hail + ", Pouring = " + pouring + ", Rain = " + rain + ", Windy = " + windy + ", Cloudy = " + cloudy + ", Day = " + day\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 850,
"y": 700,
"wires": [
[
"b87ef55f939175ca",
"51832653396d0b8d",
"2dcab653e90ee2f4",
"40d15d97bd622605",
"8ca56fcbaa88fb6d"
]
]
},
{
"id": "a53da46404c52990",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "day",
"pt": "flow",
"to": "day",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1230,
"y": 520,
"wires": [
[]
]
},
{
"id": "43aac9f8f438cea2",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "windy",
"pt": "flow",
"to": "windy",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1240,
"y": 480,
"wires": [
[]
]
},
{
"id": "21390f473fcc206d",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "cloudy",
"pt": "flow",
"to": "cloudy",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1240,
"y": 580,
"wires": [
[]
]
},
{
"id": "a28f94cd47ac1cdb",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "pouring",
"pt": "flow",
"to": "pouring",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1240,
"y": 200,
"wires": [
[]
]
},
{
"id": "91aeb53b7f3297ac",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "hail",
"pt": "flow",
"to": "hail",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1230,
"y": 160,
"wires": [
[]
]
},
{
"id": "5e3449835546e08a",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "rain",
"pt": "flow",
"to": "rain",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1230,
"y": 120,
"wires": [
[]
]
},
{
"id": "dd84a96812b265be",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "lightning",
"pt": "flow",
"to": "lightning",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1240,
"y": 80,
"wires": [
[]
]
},
{
"id": "9ed7393630737013",
"type": "delay",
"z": "a6a42febf437ae5b",
"name": "",
"pauseType": "delay",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "1",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 460,
"y": 700,
"wires": [
[
"3094d34772a1adae"
]
]
},
{
"id": "3094d34772a1adae",
"type": "delay",
"z": "a6a42febf437ae5b",
"name": "",
"pauseType": "rate",
"timeout": "5",
"timeoutUnits": "seconds",
"rate": "1",
"nbRateUnits": "30",
"rateUnits": "second",
"randomFirst": "1",
"randomLast": "5",
"randomUnits": "seconds",
"drop": false,
"allowrate": false,
"outputs": 1,
"x": 640,
"y": 700,
"wires": [
[
"3b784b4474a5f9c9"
]
]
},
{
"id": "b87ef55f939175ca",
"type": "ha-entity",
"z": "a6a42febf437ae5b",
"name": "nr_wf_current",
"server": "30ea583309d387b7",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "nr_wf_current"
},
{
"property": "device_class",
"value": "None"
},
{
"property": "icon",
"value": "mdi:weather-partly-snowy-rainy"
},
{
"property": "unit_of_measurement",
"value": ""
},
{
"property": "state_class",
"value": ""
},
{
"property": "last_reset",
"value": ""
}
],
"state": "current",
"stateType": "msg",
"attributes": [],
"resend": true,
"outputLocation": "",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "",
"outputPayloadType": "str",
"x": 1080,
"y": 700,
"wires": [
[
"64d4fba3744c1e1c"
]
]
},
{
"id": "1cadb5de14f5e161",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Temperature",
"func": "msg.temperature =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 320,
"wires": [
[
"43fe13a1440872d0",
"fa837d18adb60b2b"
]
]
},
{
"id": "779e392d143babeb",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Humidity",
"func": "msg.humidity =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 640,
"y": 440,
"wires": [
[
"fa837d18adb60b2b"
]
]
},
{
"id": "80d75c2eba9c4b54",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Dew Point",
"func": "msg.dewpoint =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 360,
"wires": [
[
"43fe13a1440872d0",
"fa837d18adb60b2b"
]
]
},
{
"id": "6d82409f750d0b7c",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Wet Bulb",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_wet_bulb_temperature",
"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": 480,
"y": 280,
"wires": [
[
"3f197ee70b3767a1"
]
]
},
{
"id": "3f197ee70b3767a1",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Wet Bulb",
"func": "msg.wet_bulb =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 640,
"y": 280,
"wires": [
[
"43fe13a1440872d0",
"fa837d18adb60b2b"
]
]
},
{
"id": "7118601f91fcb565",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Freezing Level",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_freezing_level_altitude",
"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": 460,
"y": 240,
"wires": [
[
"b638f99a71c9096f"
]
]
},
{
"id": "b638f99a71c9096f",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Freezing Level",
"func": "msg.freezing_level =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 660,
"y": 240,
"wires": [
[
"43fe13a1440872d0"
]
]
},
{
"id": "bbcb2da9a843fce1",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Cloud Base",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_cloud_base_altitude",
"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": 470,
"y": 400,
"wires": [
[
"068d496f047d790d"
]
]
},
{
"id": "068d496f047d790d",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Cloud Base",
"func": "msg.cloud_base =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 400,
"wires": [
[
"43fe13a1440872d0",
"fa837d18adb60b2b"
]
]
},
{
"id": "2c2e983bd089f4a5",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Snow Possible T/F",
"func": "var temperature = msg.temperature\nvar freezing_level = msg.freezing_level\nvar cloud_base = msg.cloud_base\nvar dew_point = msg.dew_point\nvar wet_bulb = msg.wet_bulb\nvar snow_line = freezing_level - 750 // 500 ft, 150 m\nvar station_height = 325 // in feet for now\n\n// Convert from F to C\n// 2.1C = 35.78F, 1C = 33.8F, 4.1C = 39.38F, -40F = -40C\ntemperature = (temperature - 32) / 1.8\ndew_point = (dew_point - 32) / 1.8\nwet_bulb = (wet_bulb - 32) / 1.8\n\nif ((temperature <= 2.1) && (snow_line <= station_height) && (dew_point <= 1) && (wet_bulb <= 2.1) && (freezing_line <= cloud_base) && (temperature >= -40)) {\n msg.snow = 'true'\n} else {\n msg.snow = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1030,
"y": 260,
"wires": [
[
"7ebd2b848bebbe4d",
"558a25ed32412205"
]
]
},
{
"id": "43fe13a1440872d0",
"type": "join",
"z": "a6a42febf437ae5b",
"name": "Wait",
"mode": "custom",
"build": "buffer",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\n",
"joinerType": "str",
"accumulate": false,
"timeout": "60",
"count": "5",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 850,
"y": 260,
"wires": [
[
"2c2e983bd089f4a5"
]
]
},
{
"id": "7ebd2b848bebbe4d",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Snow Probability",
"func": "var temperature = msg.temperature\nvar dew_point = msg.dew_point\nvar snow_possible = msg.snow\nvar A = dew_point + temperature\nvar snow_prob\n\n// Convert A from F to C\nA = (A - 32) / 1.8\n\nif (snow_possible == 'true') {\n snow_prob = 80 - 10 * A\n} else {\n snow_prob = 0\n}\n\nmsg.snow_probability = Math.round(snow_prob)\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1030,
"y": 300,
"wires": [
[
"cc2748175987e62a"
]
]
},
{
"id": "558a25ed32412205",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "snow",
"pt": "flow",
"to": "snow",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1230,
"y": 260,
"wires": [
[]
]
},
{
"id": "cc2748175987e62a",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "snow_probability",
"pt": "flow",
"to": "snow_probability",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1270,
"y": 300,
"wires": [
[
"10f245ef0f864ef2"
]
]
},
{
"id": "40d15d97bd622605",
"type": "ha-entity",
"z": "a6a42febf437ae5b",
"name": "nr_wf_snow_probability",
"server": "30ea583309d387b7",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "nr_wf_snow_probability"
},
{
"property": "device_class",
"value": "None"
},
{
"property": "icon",
"value": "mdi:snowflake"
},
{
"property": "unit_of_measurement",
"value": "%"
},
{
"property": "state_class",
"value": "measurement"
},
{
"property": "last_reset",
"value": ""
}
],
"state": "snow_probability",
"stateType": "flow",
"attributes": [],
"resend": true,
"outputLocation": "",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "",
"outputPayloadType": "str",
"x": 1110,
"y": 780,
"wires": [
[]
]
},
{
"id": "51832653396d0b8d",
"type": "ha-entity",
"z": "a6a42febf437ae5b",
"name": "nr_wf_snow_possible",
"server": "30ea583309d387b7",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "nr_wf_snow_possible"
},
{
"property": "device_class",
"value": "None"
},
{
"property": "icon",
"value": "mdi:snowflake"
},
{
"property": "unit_of_measurement",
"value": ""
},
{
"property": "state_class",
"value": ""
},
{
"property": "last_reset",
"value": ""
}
],
"state": "snow",
"stateType": "flow",
"attributes": [],
"resend": true,
"outputLocation": "",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "",
"outputPayloadType": "str",
"x": 1100,
"y": 740,
"wires": [
[]
]
},
{
"id": "823b25b8ae86b242",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Partly Cloudy T/F",
"func": "if ((msg.si_p <= 75) && (Math.abs(msg.si_d) >= 15)) {\n //msg.cloudy = Boolean[1];\n msg.part_cloud = 'true'\n} else if ((msg.si_p >= 115) && (Math.abs(msg.si_d) >= 15)){\n msg.part_cloud = 'true'\n} else {\n //msg.cloudy = Boolean[0];\n msg.part_cloud = 'false'\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1030,
"y": 620,
"wires": [
[
"2cc47bda434dfedd"
]
]
},
{
"id": "2cc47bda434dfedd",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "part_cloud",
"pt": "flow",
"to": "part_cloud",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1250,
"y": 620,
"wires": [
[]
]
},
{
"id": "f414b4744d5f5f0e",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Fog Possible T/F",
"func": "var temperature = msg.temperature\nvar cloud_base = msg.cloud_base\nvar dew_point = msg.dew_point\nvar station_height = 325 // in feet for now\nvar humidity = msg.humidity\nvar wind_speed = msg.wind_speed\nvar wet_bulb = msg.wet_bulb\nvar fog\n\n// Convert from F to C\ntemperature = (temperature - 32) / 1.8\ndew_point = (dew_point - 32) / 1.8\nwet_bulb = (wet_bulb - 32) / 1.8\n\n// Convert Wind Speed to Metric\nwind_speed = wind_speed * 0.44704\n\n// 2.5C = 4.5F\n// 5 knots = 5.7 mph = 2.57 m/s\n// 10 knots = 11.5 mph = 5.14 m/s\n// -40C = -40F\nif (((temperature - dew_point) <= 2.5) && (humidity >= 95) && (temperature >= -40) && (wind_speed >= 2.57) && (wind_speed <= 5.14)) {\n fog = 'true'\n} else if (cloud_base <= station_height){\n fog = 'true'\n} else {\n fog = 'false'\n}\n\nmsg.fog = fog\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1030,
"y": 380,
"wires": [
[
"1eb3a97f40b1eb63",
"c0b49a3970051553"
]
]
},
{
"id": "540f1929f4fa942d",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Wind Speed",
"func": "msg.wind_speed =\n msg.payload\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 480,
"wires": [
[
"2e31e9c740883545",
"fa837d18adb60b2b"
]
]
},
{
"id": "fa837d18adb60b2b",
"type": "join",
"z": "a6a42febf437ae5b",
"name": "Wait",
"mode": "custom",
"build": "buffer",
"property": "payload",
"propertyType": "msg",
"key": "topic",
"joiner": "\n",
"joinerType": "str",
"accumulate": false,
"timeout": "60",
"count": "7",
"reduceRight": false,
"reduceExp": "",
"reduceInit": "",
"reduceInitType": "",
"reduceFixup": "",
"x": 850,
"y": 380,
"wires": [
[
"f414b4744d5f5f0e"
]
]
},
{
"id": "1eb3a97f40b1eb63",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "fog",
"pt": "flow",
"to": "fog",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1230,
"y": 380,
"wires": [
[]
]
},
{
"id": "3196dee67d356179",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Solar Elevation",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_solar_elevation",
"state_type": "str",
"blockInputOverrides": false,
"outputProperties": [
{
"property": "se",
"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": 460,
"y": 520,
"wires": [
[
"5dcf7f8a8b612c29"
]
]
},
{
"id": "66d3c9d2686a72ed",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Solar Radiation",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_solar_radiation",
"state_type": "str",
"blockInputOverrides": false,
"outputProperties": [
{
"property": "sr",
"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": 460,
"y": 560,
"wires": [
[
"c90b6b856ffce4b6"
]
]
},
{
"id": "c90b6b856ffce4b6",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Solar Insolation",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_solar_insolation",
"state_type": "str",
"blockInputOverrides": false,
"outputProperties": [
{
"property": "si",
"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": 460,
"y": 600,
"wires": [
[
"6d6f466a3b63a25b"
]
]
},
{
"id": "f8180f55239bbc93",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "SI Percentage",
"func": "if (msg.sz >= 90) {\n msg.si_p = 100;\n} else {\n msg.si_p = Math.round(((msg.sr) / (msg.si)) * 100);\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 660,
"y": 600,
"wires": [
[
"719bec91613c4fe9"
]
]
},
{
"id": "719bec91613c4fe9",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "SI Difference",
"func": "if (msg.sz >= 90) {\n msg.si_d = 0;\n} else {\n msg.si_d = Math.round((msg.si) - (msg.sr));\n}\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 640,
"wires": [
[
"61cf46c120a3cb3d",
"823b25b8ae86b242"
]
]
},
{
"id": "6d6f466a3b63a25b",
"type": "api-current-state",
"z": "a6a42febf437ae5b",
"name": "Solar Elevation",
"server": "30ea583309d387b7",
"version": 3,
"outputs": 1,
"halt_if": "",
"halt_if_type": "str",
"halt_if_compare": "is",
"entity_id": "sensor.tempest_st_00031881_solar_elevation",
"state_type": "str",
"blockInputOverrides": false,
"outputProperties": [
{
"property": "se",
"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": 460,
"y": 640,
"wires": [
[
"56235fe1a1f0891f",
"fa837d18adb60b2b"
]
]
},
{
"id": "56235fe1a1f0891f",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Solar Zenith",
"func": "msg.sz = 90 - msg.se\n\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 650,
"y": 560,
"wires": [
[
"f8180f55239bbc93"
]
]
},
{
"id": "2dcab653e90ee2f4",
"type": "ha-entity",
"z": "a6a42febf437ae5b",
"name": "nr_wf_fog_possible",
"server": "30ea583309d387b7",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "nr_wf_fog_possible"
},
{
"property": "device_class",
"value": "None"
},
{
"property": "icon",
"value": "mdi:weather-fog"
},
{
"property": "unit_of_measurement",
"value": ""
},
{
"property": "state_class",
"value": ""
},
{
"property": "last_reset",
"value": ""
}
],
"state": "fog",
"stateType": "flow",
"attributes": [],
"resend": true,
"outputLocation": "",
"outputLocationType": "msg",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "",
"outputPayloadType": "str",
"x": 1090,
"y": 820,
"wires": [
[]
]
},
{
"id": "c0b49a3970051553",
"type": "function",
"z": "a6a42febf437ae5b",
"name": "Fog Probability",
"func": "var fog = 0;\nvar se = msg.se; // Solar Elevation\nvar wind_speed = msg.wind_speed;\nvar humidity = msg.humidity;\nvar diff = msg.temperature - msg.dew_point;\n\nif (se >= 0) {\n\t// daytime\n\tfog = fog - 15;\n} else {\n\t// fog is more common at night\n\tfog = fog + 10;\n}\nif (wind_speed < 5) { //mph\n\t// fog is more likely when it is calm\n\tfog = fog + 20;\n} else if (wind_speed < 10) { //mph\n\t// it's more windy, fog is slightly less likely\n\tfog = fog + 5;\n} else {\n\t// it's unlikely fog will form above 10mph\n\tfog = fog - 20;\n}\n\nif (humidity > 75 && humidity < 91) {\n\t//high humidity\n\tfog = fog + 5;\n} else if (humidity > 90) {\n\t// higher humidity\n\tfog = fog + 10;\n} else {\n\t// humidity is still quite low\n\tfog = fog - 20;\n}\n\nif ((diff < 5.1) && (diff > 3.9)) {\n\t// Diff between temp and dewpoint is less than 5'C and over 4'C")\n\tfog = fog + 5;\n} else if ((diff < 4.1) && (diff > 2.5)) {\n\t// Diff between temp and dewpoint is less than 4'C and over 2.5'C")\n\tfog = fog + 10;\n} else if ((diff < 2.6) && (diff > 1.9)) {\n\t// Diff between temp and dewpoint is less than 3'C and over 2'C")\n\tfog = fog + 15;\n} else if ((diff < 2.1) && (diff > 0.9)) {\n\t// Diff between temp and dewpoint is less than 2'C and over 1'C")\n\tfog = fog + 20;\n} else if (diff < 1) {\n\t// Diff between temp and dewpoint is less than 1'C")\n\tfog = fog + 25;\n} else {\n\tfog = fog - 20;\n}\n\n// 75 is the maximum possible score\nif (fog > 0) { fog = (fog /75) * 100; } else { fog = 0; }\n\nmsg.fog_probability = Math.round(fog)\nreturn msg",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1020,
"y": 420,
"wires": [
[
"7b298cc19798a10c"
]
]
},
{
"id": "7b298cc19798a10c",
"type": "change",
"z": "a6a42febf437ae5b",
"name": "",
"rules": [
{
"t": "set",
"p": "fog_probability",
"pt": "flow",
"to": "fog_probability",
"tot": "msg"
}
],
"action": "",
"property": "",
"from": "",
"to": "",
"reg": false,
"x": 1260,
"y": 420,
"wires": [
[
"8b767cece2116fac"
]
]
},
{
"id": "8b767cece2116fac",
"type": "debug",
"z": "a6a42febf437ae5b",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "fog_probability",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1490,
"y": 420,
"wires": []
},
{
"id": "8ca56fcbaa88fb6d",
"type": "ha-entity",
"z": "a6a42febf437ae5b",
"name": "nr_wf_fog_probability",
"server": "30ea583309d387b7",
"version": 2,
"debugenabled": false,
"outputs": 1,
"entityType": "sensor",
"config": [
{
"property": "name",
"value": "nr_wf_fog_probability"
},
{
"property": "device_class",
"value": ""
},
{
"property": "icon",
"value": "mdi:weather-fog"
},
{
"property": "unit_of_measurement",
"value": "%"
},
{
"property": "state_class",
"value": "measurement"
},
{
"property": "last_reset",
"value": ""
}
],
"state": "fog_probability",
"stateType": "flow",
"attributes": [],
"resend": true,
"outputLocation": "payload",
"outputLocationType": "none",
"inputOverride": "allow",
"outputOnStateChange": false,
"outputPayload": "",
"outputPayloadType": "str",
"x": 1100,
"y": 860,
"wires": [
[]
]
},
{
"id": "10f245ef0f864ef2",
"type": "debug",
"z": "a6a42febf437ae5b",
"name": "",
"active": false,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "snow_probability",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1520,
"y": 300,
"wires": []
},
{
"id": "30ea583309d387b7",
"type": "server",
"name": "Home Assistant",
"version": 2,
"addon": false,
"rejectUnauthorizedCerts": true,
"ha_boolean": "y|yes|true|on|home|open",
"connectionDelay": true,
"cacheJson": true,
"heartbeat": false,
"heartbeatInterval": "30"
}
]

@GlennGoddard
Copy link
Author

This was too big to send on the HA forums.
You can use as you see fit.
Cloudy & Partly Cloudy won't work for you in this case, since I already removed Solar Elevation and Solar Insolation from this flow (put it in WeatherFlow2MQTT). I will see if I have any backups of those flow if you want them.
I also will see if I have a backup of the Zambretti forecast, I have that is the other integration also.

https://github.com/briis/hass-weatherflow2mqtt
Might be other calculations you can use here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant