From 6207e388068a1924c3136a28c9ab09f9fd6b2332 Mon Sep 17 00:00:00 2001 From: Tony Stork Date: Wed, 2 Apr 2025 15:54:11 -0400 Subject: [PATCH] Possible prevention of Kallen's white noise being turned off at 11pm home_automation/Home-Assistant-Configs#233 --- climate/kallen/processing.js | 71 +++++++++++++++++++++++------------- 1 file changed, 45 insertions(+), 26 deletions(-) diff --git a/climate/kallen/processing.js b/climate/kallen/processing.js index 4d0ba51..9fad8b2 100644 --- a/climate/kallen/processing.js +++ b/climate/kallen/processing.js @@ -8,10 +8,15 @@ const brightness = states['switch.adaptive_lighting_kallen_bedroom'].attributes. const fadeNight = states['input_number.wakeup_lights_fade_night'].state const hotDay = states['input_boolean.hot_day'].state const heatWarning = states['binary_sensor.heat_warning'].state +const fanState = states['fan.kallen_bedroom_fan'].state +const fanAvailable = fanState !== 'unavailable' const fanSeparate = states['binary_sensor.kallen_fan_separate_schedule'].state const schedMode = states['input_select.scheduled_climate_mode_kallen_bedroom'].state const topic = msg.topic -const toggle = msg.toggle +const toggle = msg.toggle || '' + +const roomName = 'Kallen Bedroom' + node.log("Kallen Bedroom: Constants Set") let setFan = [] @@ -19,27 +24,40 @@ let setWhiteNoise = [] let setVolume = [] let setLights = [] let setWake = [] -node.log("Kallen Bedroom: Variables Defined") +node.log(`${roomName}: Variables Defined`) -if (toggle === 'off' && (hotDay === 'on' || heatWarning === 'on')) { - setFan = 'turn_on' -} else if ((toggle === 'on' || topic === 'kallen-fan') && schedMode === 'Fan') { - setFan = 'turn_on' -} else { +if (schedMode === 'White Noise') { setFan = 'turn_off' +} else { + if (fanAvailable) { + if (toggle === 'off' && (hotDay === 'on' || heatWarning === 'on')) { + setFan = 'turn_on' + } else if ((toggle === 'on' || topic === 'kallen-fan') && schedMode === 'Fan') { + setFan = 'turn_on' + } else { + setFan = 'turn_off' + } + } else { + if (schedMode === 'Fan') { + node.log(`${roomName}: Fan is unavailable, forcing White Noise mode`) + } + setFan = 'turn_off' + } } -if (schedMode === 'White Noise' && toggle === 'on') { +if ((schedMode === 'White Noise' && toggle === 'on') || (schedMode === 'Fan' && !fanAvailable)) { + setWhiteNoise = 'turn_on' +} else if (topic === 'kallen-fan' && !fanAvailable && schedMode !== 'N/A') { setWhiteNoise = 'turn_on' } else { setWhiteNoise = 'turn_off' } -if (toggle === 'on') { +if (topic === 'boolean' && toggle === 'on') { setVolume = parseFloat(nightVolume) setLights = 'turn_on' setWake = 'turn_off' -} else { +} else if (topic === 'boolean' && toggle === 'off') { setVolume = parseFloat(dayVolume) setWake = 'turn_on' } @@ -49,7 +67,7 @@ let fadeFinal = Math.round(fadeMult) let brtFinal = Math.round(brightness) -node.log("Kallen Bedroom: Decision Logic Complete") +node.log(`${roomName}: Decision Logic Complete`) let sendFan = { "payload": { @@ -112,33 +130,34 @@ let sleepMsg = { "payload": "sleep" } -node.log("Kallen Bedroom: Message Payloads Defined") +node.log(`${roomName}: Message Payloads Defined`) -node.log("----- Kallen Bedroom: Set Parameters -----") -node.log(`setFan: ${setFan}`) -node.log(`setWhiteNoise: ${setWhiteNoise}`) -node.log(`setVolume: ${setVolume}`) -node.log(`setLights: ${setLights}`) -node.log(`setWake: ${setWake}`) -node.log("----- Kallen Bedroom: End Parameters -----") +node.log(`----- ${roomName}: Set Parameters -----`) +node.log(`${roomName}: fanAvailable: ${fanAvailable}`) +node.log(`${roomName}: setFan: ${setFan}`) +node.log(`${roomName}: setWhiteNoise: ${setWhiteNoise}`) +node.log(`${roomName}: setVolume: ${setVolume}`) +node.log(`${roomName}: setLights: ${setLights}`) +node.log(`${roomName}: setWake: ${setWake}`) +node.log(`----- ${roomName}: End Parameters -----`) if (vacationMode === 'off' && overnight === 'off' && kallenLoc === 'home') { if (topic === 'kallen-fan' && fanSeparate === 'on') { node.status({fill:"green",shape:"dot",text:"Fan"}) - node.log("Kallen Bedroom: Early Fan") + node.log(`${roomName}: Early Fan`) node.send([null,[sendFan,sendWhiteNoise],null]) - } else if (toggle === 'off') { + } else if (topic === 'boolean' && toggle === 'off') { node.status({fill:"green",shape:"dot",text:"Wakeup"}) - node.log("Kallen Bedroom: Wake") + node.log(`${roomName}: Wake`) node.send([wakeMsg,[sendFan,sendWhiteNoise,sendVolume,sendWake],null]) - } else if (toggle === 'on') { + } else if (topic === 'boolean' && toggle === 'on') { node.status({fill:"green",shape:"dot",text:"Sleep"}) - node.log("Kallen Bedroom: Sleep") + node.log(`${roomName}: Sleep`) node.send([null,[sendFan,sendWhiteNoise,sendVolume,sendLights,sendWake],sleepMsg]) } } else { node.status({fill:"red",shape:"ring",text:"Blocked"}) - node.log("Kallen Bedroom: Flow Blocked") + node.log(`${roomName}: Flow Blocked`) } -node.log("Kallen Bedroom: Processing Complete") \ No newline at end of file +node.log(`${roomName}: Processing Complete`) \ No newline at end of file