Files
HA-NerdFlows-Functions/climate/kallen/processing.js
2025-01-25 22:22:38 -05:00

149 lines
4.2 KiB
JavaScript

const states = global.get('homeassistant.homeAssistant.states')
const vacationMode = states['input_boolean.vacation_mode'].state
const overnight = states['input_boolean.kallen_overnight'].state
const kallenLoc = states['person.kallen_stork'].state
const dayVolume = states['input_number.kallen_bedroom_google_speaker_day_volume'].state
const nightVolume = states['input_number.kallen_bedroom_google_speaker_night_volume'].state
const brightness = states['switch.adaptive_lighting_kallen_bedroom'].attributes.brightness_pct
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 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
node.log("Kallen Bedroom: Constants Set")
let setFan = []
let setWhiteNoise = []
let setVolume = []
let setLights = []
let setWake = []
node.log("Kallen Bedroom: 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 {
setFan = 'turn_off'
}
if (schedMode === 'White Noise' && toggle === 'on') {
setWhiteNoise = 'turn_on'
} else {
setWhiteNoise = 'turn_off'
}
if (toggle === 'on') {
setVolume = parseFloat(nightVolume)
setLights = 'turn_on'
setWake = 'turn_off'
} else {
setVolume = parseFloat(dayVolume)
setWake = 'turn_on'
}
let fadeMult = fadeNight * 60
let fadeFinal = Math.round(fadeMult)
let brtFinal = Math.round(brightness)
node.log("Kallen Bedroom: Decision Logic Complete")
let sendFan = {
"payload": {
"domain": "fan",
"service": setFan,
"target": {
"entity_id": ["fan.kallen_bedroom_fan"]
},
"data": {}
}
}
let sendWhiteNoise = {
"payload": {
"domain": "input_boolean",
"service": setWhiteNoise,
"target": {
"entity_id": ["input_boolean.white_noise_kallen_bedroom"]
},
"data": {}
}
}
let sendVolume = {
"payload": {
"domain": "media_player",
"service": "volume_set",
"target": {
"entity_id": ["media_player.kallen_bedroom_google_speaker"]
},
"data": {
"volume_level": setVolume
}
}
}
let sendLights = {
"payload": {
"domain": "light",
"service": setLights,
"target": {
"entity_id": ["light.kallen_bedroom_lights"]
},
"data": {}
}
}
let sendWake = {
"payload": {
"domain": "input_boolean",
"service": setWake,
"target": {
"entity_id": ["input_boolean.kallen_awake"]
},
"data": {}
}
}
let wakeMsg = {
"brightness": brtFinal,
"fade": fadeFinal
}
let sleepMsg = {
"payload": "sleep"
}
node.log("Kallen Bedroom: 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 -----")
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.send([null,[sendFan,sendWhiteNoise],null])
} else if (toggle === 'off') {
node.status({fill:"green",shape:"dot",text:"Wakeup"})
node.log("Kallen Bedroom: Wake")
node.send([wakeMsg,[sendFan,sendWhiteNoise,sendVolume,sendWake],null])
} else if (toggle === 'on') {
node.status({fill:"green",shape:"dot",text:"Sleep"})
node.log("Kallen Bedroom: 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("Kallen Bedroom: Processing Complete")