From 7189cf1a7ef40e14972c46abd7da07e100d70648 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Tue, 22 Aug 2023 01:02:59 -0400 Subject: [PATCH] More meltdown protocol --- flows.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flows.json b/flows.json index 16376d9..8730399 100644 --- a/flows.json +++ b/flows.json @@ -17423,7 +17423,7 @@ "z": "72f99805df043603", "g": "e065b1ed4938b477", "name": "Processing", - "func": "// pull in the necessary information\n\nconst states = global.get('homeassistant.homeAssistant.states')\nconst allowed = states['input_boolean.master_bedroom_climate_protocol'].state\nconst ac = global.get('mb_aircon_installed')\nconst temp = global.get(\"tempStr\")\nconst time = msg.time\nconst type = msg.type\nconst topic = msg.topic\nconst vacation = states['input_boolean.vacation_mode'].state\nconst highTemp = states['sensor.today_corrected_high_temp'].state\nconst dayTemp = states['input_number.master_bedroom_daytime_temp'].state\nconst nightTemp = states['input_number.master_bedroom_night_temp'].state\nconst bedTemp = states['input_number.master_bedroom_bedtime_temp'].state\nconst showerMode = states['input_boolean.shower_mode'].state\nconst nightVolume = states['input_number.master_bedroom_echo_dot_night_volume'].state\nconst fanMode = states['input_select.scheduled_climate_mode_master_bedroom_fan'].state\nconst acMode = states['input_select.scheduled_climate_mode_master_bedroom_aircon'].state\nconst sleeping = states['input_boolean.master_bedroom_sleeping'].state\nconst hotDay = states['input_boolean.hot_day'].state\nconst heatWarning = states[\"binary_sensor.heat_warning\"].state\nconst showerCooldown = states[\"timer.shower_mode_cooldown\"].state\nconst earlyNight = states[\"binary_sensor.early_night_mode\"].state\nconst danger = states['binary_sensor.heat_warning'].attributes.danger\n\n// define variables\n\nlet setTemp = []\nlet setEco = []\nlet setHvac = []\nlet setFan = []\nlet setBool = []\n\n// decision logic\n\nif (time === 'day') {\n flow.set(\"lastMode\", time)\n if (type === 'auto') {\n setBool = 'off'\n }\n if (earlyNight === 'off') {\n setFan = \"off\"\n if (ac === 'on') {\n if (danger === 'Extreme') {\n setTemp = nightTemp\n setEco = \"eco\"\n setHvac = \"cool\"\n } else if (hotDay === 'on' || heatWarning === 'on') {\n setTemp = dayTemp\n setEco = \"eco\"\n setHvac = \"cool\"\n } else {\n setTemp = nightTemp\n setEco = \"eco\"\n setHvac = \"off\"\n }\n }\n } else if (earlyNight === 'on') {\n if (danger === 'Extreme') {\n setTemp === bedTemp\n } else {\n setTemp = nightTemp\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n if (acMode === 'AC') {\n setHvac = 'cool'\n } else if (acMode === 'fan') {\n setHvac = 'fan_only'\n } else {\n setHvac = 'off'\n }\n if (hotDay === 'on') {\n setEco = 'off'\n } else {\n setEco = 'on'\n }\n }\n} else if (time === 'night') {\n flow.set(\"lastMode\", time)\n if (type === 'auto') {\n setBool = 'on'\n }\n if (ac === 'on') {\n if (danger === 'Extreme') {\n setTemp === bedTemp\n } else {\n setTemp = nightTemp\n }\n if (acMode === 'AC') {\n setHvac = 'cool'\n if (hotDay === 'on' || sleeping === 'on') {\n setEco = 'none'\n } else {\n setEco = 'eco'\n }\n } else if (acMode === 'Fan') {\n setHvac = 'fan_only'\n } else {\n setHvac = 'off'\n }\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n} else if (time === 'bedtime') {\n flow.set(\"lastMode\", time)\n if (ac === 'on') {\n setTemp = bedTemp\n setEco = 'none'\n if (acMode === 'AC') {\n setHvac = 'cool'\n } else if (acMode === 'Fan') {\n setHvac = \"fan_only\"\n }\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n}\n\nlet sendFan = {\n \"fan\": setFan\n}\n\nlet sendBool = {\n \"bool\": setBool\n}\n\nlet notify = {\n \"topic\": topic,\n \"nighttemp\": nightTemp,\n \"acmode\": acMode,\n \"fanmode\": fanMode\n}\n\nlet sendHvac = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_hvac_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"hvac_mode\": setHvac\n }\n }\n}\n\nlet sendTemp = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_temperature\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"temperature\": setTemp\n }\n }\n}\n\nlet sendEco = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_preset_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"preset_mode\": setEco\n }\n }\n}\n\nlet sendAcFan = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_fan_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"fan_mode\": \"Auto\"\n }\n }\n}\n\nif (type === 'auto' && time != 'bedtime') {\n node.send([null, null, sendBool, null])\n}\n\nif ((type === 'auto' && allowed === 'on' && danger === 'off') || type === 'manual') {\n if (sleeping === 'on' && type === 'auto' && time != 'bedtime') {\n node.status({ fill: \"red\", shape: \"ring\", text: \"Blocked (sleep mode)\" })\n } else if (vacation === 'off') {\n if (topic === 'mrbedroom-cooling' && ac === 'on') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Cooling Schedule\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], null, null]);\n } else if (time === 'bedtime') {\n node.status({fill:\"green\",shape:\"dot\",text:\"Bedtime\"})\n node.send([[sendHvac,sendTemp,sendEco,sendAcFan],sendFan,null,null]);\n } else if (topic === 'manual-night') {\n if (fanMode === 'Fan') {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Night (Fan)\" })\n node.send([null, sendFan, null, null])\n } else {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Night (No Fan)\" })\n node.send([null, sendFan, null, null])\n }\n } else if (topic === 'mrbedroom-fan' && fanMode == 'Fan') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Fan Schedule\" })\n node.send([null, sendFan, null, null])\n } else if (topic === 'mrbedroom-wakeup') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Wakeup Schedule\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], sendFan, null, null])\n } else if (topic === 'manual-day') {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Day\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], sendFan, null, null])\n }\n }\n} else {\n node.status({ fill: \"red\", shape: \"ring\", text: \"Automation Disabled\" })\n}\n", + "func": "// pull in the necessary information\n\nconst states = global.get('homeassistant.homeAssistant.states')\nconst allowed = states['input_boolean.master_bedroom_climate_protocol'].state\nconst ac = global.get('mb_aircon_installed')\nconst temp = global.get(\"tempStr\")\nconst time = msg.time\nconst type = msg.type\nconst topic = msg.topic\nconst vacation = states['input_boolean.vacation_mode'].state\nconst highTemp = states['sensor.today_corrected_high_temp'].state\nconst dayTemp = states['input_number.master_bedroom_daytime_temp'].state\nconst nightTemp = states['input_number.master_bedroom_night_temp'].state\nconst bedTemp = states['input_number.master_bedroom_bedtime_temp'].state\nconst showerMode = states['input_boolean.shower_mode'].state\nconst nightVolume = states['input_number.master_bedroom_echo_dot_night_volume'].state\nconst fanMode = states['input_select.scheduled_climate_mode_master_bedroom_fan'].state\nconst acMode = states['input_select.scheduled_climate_mode_master_bedroom_aircon'].state\nconst sleeping = states['input_boolean.master_bedroom_sleeping'].state\nconst hotDay = states['input_boolean.hot_day'].state\nconst heatWarning = states[\"binary_sensor.heat_warning\"].state\nconst showerCooldown = states[\"timer.shower_mode_cooldown\"].state\nconst earlyNight = states[\"binary_sensor.early_night_mode\"].state\nconst danger = states['binary_sensor.heat_warning'].attributes.danger\nconst meltdown = states['input_boolean.meltdown_protocol'].state\n\n// define variables\n\nlet setTemp = []\nlet setEco = []\nlet setHvac = []\nlet setFan = []\nlet setBool = []\n\n// decision logic\n\nif (time === 'day') {\n flow.set(\"lastMode\", time)\n if (type === 'auto') {\n setBool = 'off'\n }\n if (earlyNight === 'off') {\n setFan = \"off\"\n if (ac === 'on') {\n if (danger === 'Extreme') {\n setTemp = nightTemp\n setEco = \"eco\"\n setHvac = \"cool\"\n } else if (hotDay === 'on' || heatWarning === 'on') {\n setTemp = dayTemp\n setEco = \"eco\"\n setHvac = \"cool\"\n } else {\n setTemp = nightTemp\n setEco = \"eco\"\n setHvac = \"off\"\n }\n }\n } else if (earlyNight === 'on') {\n if (danger === 'Extreme') {\n setTemp === bedTemp\n } else {\n setTemp = nightTemp\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n if (acMode === 'AC') {\n setHvac = 'cool'\n } else if (acMode === 'fan') {\n setHvac = 'fan_only'\n } else {\n setHvac = 'off'\n }\n if (hotDay === 'on') {\n setEco = 'off'\n } else {\n setEco = 'on'\n }\n }\n} else if (time === 'night') {\n flow.set(\"lastMode\", time)\n if (type === 'auto') {\n setBool = 'on'\n }\n if (ac === 'on') {\n if (danger === 'Extreme') {\n setTemp === bedTemp\n } else {\n setTemp = nightTemp\n }\n if (acMode === 'AC') {\n setHvac = 'cool'\n if (hotDay === 'on' || sleeping === 'on') {\n setEco = 'none'\n } else {\n setEco = 'eco'\n }\n } else if (acMode === 'Fan') {\n setHvac = 'fan_only'\n } else {\n setHvac = 'off'\n }\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n} else if (time === 'bedtime') {\n flow.set(\"lastMode\", time)\n if (ac === 'on') {\n setTemp = bedTemp\n setEco = 'none'\n if (acMode === 'AC') {\n setHvac = 'cool'\n } else if (acMode === 'Fan') {\n setHvac = \"fan_only\"\n }\n }\n if (fanMode === 'Fan') {\n setFan = 'on'\n } else {\n setFan = 'off'\n }\n}\n\nlet sendFan = {\n \"fan\": setFan\n}\n\nlet sendBool = {\n \"bool\": setBool\n}\n\nlet notify = {\n \"topic\": topic,\n \"nighttemp\": nightTemp,\n \"acmode\": acMode,\n \"fanmode\": fanMode\n}\n\nlet sendHvac = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_hvac_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"hvac_mode\": setHvac\n }\n }\n}\n\nlet sendTemp = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_temperature\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"temperature\": setTemp\n }\n }\n}\n\nlet sendEco = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_preset_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"preset_mode\": setEco\n }\n }\n}\n\nlet sendAcFan = {\n \"payload\": {\n \"domain\": \"climate\",\n \"service\": \"set_fan_mode\",\n \"target\": {\n \"entity_id\": [\"climate.master_bedroom_aircon\"]\n },\n \"data\": {\n \"fan_mode\": \"Auto\"\n }\n }\n}\n\nif (type === 'auto' && time != 'bedtime') {\n node.send([null, null, sendBool, null])\n}\n\nif ((type === 'auto' && allowed === 'on' && meltdown === 'off') || type === 'manual') {\n if (sleeping === 'on' && type === 'auto' && time != 'bedtime') {\n node.status({ fill: \"red\", shape: \"ring\", text: \"Blocked (sleep mode)\" })\n } else if (vacation === 'off') {\n if (topic === 'mrbedroom-cooling' && ac === 'on') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Cooling Schedule\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], null, null]);\n } else if (time === 'bedtime') {\n node.status({fill:\"green\",shape:\"dot\",text:\"Bedtime\"})\n node.send([[sendHvac,sendTemp,sendEco,sendAcFan],sendFan,null,null]);\n } else if (topic === 'manual-night') {\n if (fanMode === 'Fan') {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Night (Fan)\" })\n node.send([null, sendFan, null, null])\n } else {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Night (No Fan)\" })\n node.send([null, sendFan, null, null])\n }\n } else if (topic === 'mrbedroom-fan' && fanMode == 'Fan') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Fan Schedule\" })\n node.send([null, sendFan, null, null])\n } else if (topic === 'mrbedroom-wakeup') {\n node.status({ fill: \"green\", shape: \"dot\", text: \"Wakeup Schedule\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], sendFan, null, null])\n } else if (topic === 'manual-day') {\n node.status({ fill: \"blue\", shape: \"dot\", text: \"Manual Day\" })\n node.send([[sendHvac, sendTemp, sendEco, sendAcFan], sendFan, null, null])\n }\n }\n} else {\n node.status({ fill: \"red\", shape: \"ring\", text: \"Automation Disabled\" })\n}\n", "outputs": 4, "noerr": 0, "initialize": "const states = global.get('homeassistant.homeAssistant.states')\nconst cooling = states['input_boolean.master_bedroom_cooling_on'].state\nconst sleeping = states['input_boolean.master_bedroom_sleeping'].state\n\nlet lastMode = []\n\nif (sleeping === 'on') {\n lastMode = 'bedtime'\n} else if (cooling === 'on') {\n lastMode = 'night'\n} else {\n lastMode = 'day'\n}\n\nflow.set(\"lastMode\", lastMode)",