Shower mode nodes rewritten to handle rate-limiting
home_automation/Home-Assistant-Configs#237
This commit is contained in:
@ -11,31 +11,33 @@ const sleeping = states['input_boolean.master_bedroom_sleeping'].state
|
|||||||
const hotDay = states['input_boolean.hot_day'].state
|
const hotDay = states['input_boolean.hot_day'].state
|
||||||
const topic = msg.topic
|
const topic = msg.topic
|
||||||
|
|
||||||
|
const masterBedroomAircon = ["climate.master_bedroom_aircon"]
|
||||||
|
|
||||||
let setTemp = {}
|
let setTemp = {}
|
||||||
let ecoMode = {}
|
let setEco = {}
|
||||||
let duration = {}
|
let duration = {}
|
||||||
let end = {}
|
let end = {}
|
||||||
let hvac = {}
|
let setHvac = {}
|
||||||
|
|
||||||
if (topic === 'toggle') {
|
if (topic === 'toggle') {
|
||||||
if (hotDay === 'on' || sleeping === 'on') {
|
if (hotDay === 'on' || sleeping === 'on') {
|
||||||
setTemp = bedTemp
|
setTemp = bedTemp
|
||||||
ecoMode = 'none'
|
setEco = 'turn_off'
|
||||||
} else {
|
} else {
|
||||||
setTemp = nightTemp
|
setTemp = nightTemp
|
||||||
ecoMode = 'eco'
|
setEco = 'turn_on'
|
||||||
}
|
}
|
||||||
} else if (topic === 'timer') {
|
} else if (topic === 'timer') {
|
||||||
if (currentSetTemp == bedTemp) {
|
if (currentSetTemp == bedTemp) {
|
||||||
setTemp = nightTemp
|
setTemp = nightTemp
|
||||||
if (hotDay === 'on') {
|
if (hotDay === 'on') {
|
||||||
ecoMode = 'none'
|
setEco = 'turn_off'
|
||||||
} else {
|
} else {
|
||||||
ecoMode = 'eco'
|
setEco = 'turn_on'
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
setTemp = dayTemp
|
setTemp = dayTemp
|
||||||
ecoMode = 'eco'
|
setEco = 'turn_on'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,36 +52,75 @@ if (setTemp == bedTemp) {
|
|||||||
if (setTemp == dayTemp) {
|
if (setTemp == dayTemp) {
|
||||||
end = true
|
end = true
|
||||||
if (hotDay === 'off') {
|
if (hotDay === 'off') {
|
||||||
hvac = 'off'
|
setHvac = 'off'
|
||||||
} else {
|
} else {
|
||||||
hvac = 'cool'
|
setHvac = 'cool'
|
||||||
}
|
}
|
||||||
} else if (setTemp != bedTemp && coolingTime === 'on') {
|
} else if (setTemp != bedTemp && coolingTime === 'on') {
|
||||||
end = true
|
end = true
|
||||||
hvac = 'cool'
|
setHvac = 'cool'
|
||||||
} else {
|
} else {
|
||||||
end = false
|
end = false
|
||||||
hvac = 'cool'
|
setHvac = 'cool'
|
||||||
}
|
|
||||||
|
|
||||||
let setMsg = {
|
|
||||||
"set": setTemp,
|
|
||||||
"eco": ecoMode,
|
|
||||||
"hvac": hvac,
|
|
||||||
"end": end
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let timerStart = {
|
let timerStart = {
|
||||||
"duration": duration
|
"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 (ac === 'on' && temp >= threshold) {
|
||||||
if (sleeping === 'on' || coolingTime === 'on' || end === true) {
|
if (sleeping === 'on' || coolingTime === 'on' || end === true) {
|
||||||
node.status({fill:"green",shape:"dot",text:"Finished"})
|
node.status({fill:"green",shape:"dot",text:"Finished"})
|
||||||
return [setMsg, null]
|
return [[sendHvac, sendTemp, sendAcFan, sendEco], null]
|
||||||
} else {
|
} else {
|
||||||
node.status({fill:"blue",shape:"dot",text:"Next Cycle"})
|
node.status({fill:"blue",shape:"dot",text:"Next Cycle"})
|
||||||
return [setMsg, timerStart]
|
return [[sendHvac, sendTemp, sendAcFan, sendEco], timerStart]
|
||||||
}
|
}
|
||||||
} else if (ac === 'off') {
|
} else if (ac === 'off') {
|
||||||
node.status({fill:"red",shape:"ring",text:"A/C Not Installed"})
|
node.status({fill:"red",shape:"ring",text:"A/C Not Installed"})
|
||||||
|
@ -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 bedTemp = states['input_number.master_bedroom_bedtime_temp'].state
|
||||||
const sleeping = states['input_boolean.master_bedroom_sleeping'].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 (ac === 'on') {
|
||||||
if (temp >= threshold) {
|
if (temp >= threshold) {
|
||||||
if (sleeping === 'on') {
|
node.status({fill:"green",shape:"dot",text:`Shower Mode On: ${setTemp}°F`})
|
||||||
msg.set = bedTemp
|
node.send([[sendHvac, sendTemp, sendEco]])
|
||||||
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
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
node.status({fill:"red",shape:"ring",text:"Too Cold"})
|
node.status({fill:"red",shape:"ring",text:"Too Cold"})
|
||||||
return null
|
return null
|
||||||
|
Reference in New Issue
Block a user