Shower mode nodes rewritten to handle rate-limiting

home_automation/Home-Assistant-Configs#237
This commit is contained in:
2025-04-23 21:53:04 -04:00
parent b0870578ef
commit ba56bd08f4
2 changed files with 109 additions and 29 deletions

View File

@ -11,31 +11,33 @@ const sleeping = states['input_boolean.master_bedroom_sleeping'].state
const hotDay = states['input_boolean.hot_day'].state
const topic = msg.topic
const masterBedroomAircon = ["climate.master_bedroom_aircon"]
let setTemp = {}
let ecoMode = {}
let setEco = {}
let duration = {}
let end = {}
let hvac = {}
let setHvac = {}
if (topic === 'toggle') {
if (hotDay === 'on' || sleeping === 'on') {
setTemp = bedTemp
ecoMode = 'none'
setEco = 'turn_off'
} else {
setTemp = nightTemp
ecoMode = 'eco'
setEco = 'turn_on'
}
} else if (topic === 'timer') {
if (currentSetTemp == bedTemp) {
setTemp = nightTemp
if (hotDay === 'on') {
ecoMode = 'none'
setEco = 'turn_off'
} else {
ecoMode = 'eco'
setEco = 'turn_on'
}
} else {
setTemp = dayTemp
ecoMode = 'eco'
setEco = 'turn_on'
}
}
@ -50,36 +52,75 @@ if (setTemp == bedTemp) {
if (setTemp == dayTemp) {
end = true
if (hotDay === 'off') {
hvac = 'off'
setHvac = 'off'
} else {
hvac = 'cool'
setHvac = 'cool'
}
} else if (setTemp != bedTemp && coolingTime === 'on') {
end = true
hvac = 'cool'
setHvac = 'cool'
} else {
end = false
hvac = 'cool'
}
let setMsg = {
"set": setTemp,
"eco": ecoMode,
"hvac": hvac,
"end": end
setHvac = 'cool'
}
let timerStart = {
"duration": duration
}
let sendHvac = {
"payload": {
"action": "climate.set_hvac_mode",
"target": {
"entity_id": masterBedroomAircon
},
"data": {
"hvac_mode": setHvac
}
}
}
let sendTemp = {
"payload": {
"action": "climate.set_temperature",
"target": {
"entity_id": masterBedroomAircon
},
"data": {
"temperature": setTemp
}
}
}
let sendEco = {
"payload": {
"action": `switch.${setEco}`,
"target": {
"entity_id": ["switch.master_bedroom_aircon_eco_mode"]
},
"data": {}
}
}
let sendAcFan = {
"payload": {
"action": "climate.set_fan_mode",
"target": {
"entity_id": masterBedroomAircon
},
"data": {
"fan_mode": "auto"
}
}
}
if (ac === 'on' && temp >= threshold) {
if (sleeping === 'on' || coolingTime === 'on' || end === true) {
node.status({fill:"green",shape:"dot",text:"Finished"})
return [setMsg, null]
return [[sendHvac, sendTemp, sendAcFan, sendEco], null]
} else {
node.status({fill:"blue",shape:"dot",text:"Next Cycle"})
return [setMsg, timerStart]
return [[sendHvac, sendTemp, sendAcFan, sendEco], timerStart]
}
} else if (ac === 'off') {
node.status({fill:"red",shape:"ring",text:"A/C Not Installed"})

View File

@ -6,17 +6,56 @@ const nightTemp = states['input_number.master_bedroom_night_temp'].state
const bedTemp = states['input_number.master_bedroom_bedtime_temp'].state
const sleeping = states['input_boolean.master_bedroom_sleeping'].state
const masterBedroomAircon = ["climate.master_bedroom_aircon"]
let setTemp = []
let setHvac = "dry"
let setEco = "turn_off"
if (sleeping === 'on') {
setTemp = bedTemp
} else {
setTemp = nightTemp
}
let sendHvac = {
"payload": {
"action": "climate.set_hvac_mode",
"target": {
"entity_id": masterBedroomAircon
},
"data": {
"hvac_mode": setHvac
}
}
}
let sendTemp = {
"payload": {
"action": "climate.set_temperature",
"target": {
"entity_id": masterBedroomAircon
},
"data": {
"temperature": setTemp
}
}
}
let sendEco = {
"payload": {
"action": `switch.${setEco}`,
"target": {
"entity_id": ["switch.master_bedroom_aircon_eco_mode"]
},
"data": {}
}
}
if (ac === 'on') {
if (temp >= threshold) {
if (sleeping === 'on') {
msg.set = bedTemp
node.status({fill:"green",shape:"dot",text:`Shower Mode On: ${bedTemp}`})
return msg
} else {
msg.set = nightTemp
node.status({fill:"green",shape:"dot",text:`Shower Mode On: ${nightTemp}`})
return msg
}
node.status({fill:"green",shape:"dot",text:`Shower Mode On: ${setTemp}°F`})
node.send([[sendHvac, sendTemp, sendEco]])
} else {
node.status({fill:"red",shape:"ring",text:"Too Cold"})
return null