Initial commit

This commit is contained in:
2023-09-28 12:28:27 -04:00
commit 25780c8c5d
30 changed files with 1777 additions and 0 deletions

153
laundry/processing.js Normal file
View File

@ -0,0 +1,153 @@
// Set Constants
const states = global.get('homeassistant.homeAssistant.states')
const textAllowed = states['input_boolean.laundry_notifications_text'].state
const ttsAllowed = states['input_boolean.laundry_notifications_tts'].state
const washerCycle = flow.get("washerCycle", "diskCon")
const washerFinished = flow.get("washerFinished", "diskCon")
const washerTimer = flow.get("washerTimer", "diskCon")
const washerDateTime = flow.get("washerDateTime", "diskCon")
const dryerCycle = flow.get("dryerCycle", "diskCon")
const dryerFinished = flow.get("dryerFinished", "diskCon")
const dryerTimer = flow.get("dryerTimer", "diskCon")
const dryerDateTime = flow.get("dryerDateTime", "diskCon")
const topic = msg.topic
const payload = msg.payload
// Init variables
let timerEntity = []
let boolFinished = []
let servFinished = {}
let dateTimeEntity = []
let servTimer = {}
let setCycle = []
let dateTime = []
let deviceName = {}
let notifyMsg = {}
let ttsMsg = {}
// Set entity IDs and states
if (topic === 'washer') {
setCycle = washerCycle
boolFinished = washerFinished
dateTimeEntity = washerDateTime
timerEntity = washerTimer
deviceName = 'washer'
} else if (topic === 'dryer') {
setCycle = dryerCycle
boolFinished = dryerFinished
dateTimeEntity = dryerDateTime
timerEntity = dryerTimer
deviceName = 'dryer'
}
// Get states from the entities
// @ts-ignore
let cycle = states[setCycle].state
// @ts-ignore
let timerState = states[timerEntity].state
// @ts-ignore
let finishedState = states[boolFinished].state
// Convert minutes into seconds for the timer
let timerDuration = cycle * 60
let notifyDuration = Math.round(cycle)
// Decide services
if (payload === 'start') {
servFinished = 'turn_off'
notifyMsg = 'The ' + deviceName + ' has been started for a ' + notifyDuration + ' minute cycle'
} else if (payload === 'finish') {
dateTime = msg.datetime
servFinished = 'turn_on'
notifyMsg = 'The ' + deviceName + ' has finished its cycle'
ttsMsg = 'The ' + deviceName + ' has finished its cycle. I repeat, the ' + deviceName + ' has finished its cycle.'
} else if (payload === 'cancel') {
notifyMsg = 'The ' + deviceName + ' cycle has been cancelled'
}
// Prepare message payloads
let sendTimerStart = {
"payload": {
"domain": "timer",
"service": "start",
"target": {
"entity_id": timerEntity
},
"data": {
"duration": timerDuration
}
}
}
let sendTimerCancel = {
"payload": {
"domain": "timer",
"service": "cancel",
"target": {
"entity_id": timerEntity
},
"data": {}
}
}
let sendBoolFinished = {
"payload": {
"domain": "input_boolean",
"service": servFinished,
"target": {
"entity_id": boolFinished
},
"data": {}
}
}
let sendDateTimeFinished = {
"payload": {
"domain": "input_datetime",
"service": "set_datetime",
"target": {
"entity_id": dateTimeEntity
},
"data": {
"datetime": dateTime
}
}
}
let sendTextNotify = {
"payload": {
"data": {
"type": "normal",
"who": "all",
"title": "Laundry Tracking",
"message": notifyMsg
}
}
}
let sendTTSNotify = {
"payload": ttsMsg,
"type": "alert",
"topic": "everywhere"
}
if (payload === 'start') {
node.send([sendBoolFinished,sendTimerStart,null,null])
node.status({fill:"green",shape:"dot",text:"Starting " + deviceName + " timer for " + notifyDuration + " minutes"})
node.log("Starting " + deviceName + " timer for " + notifyDuration + " minutes")
} else if (payload === 'finish') {
node.send([[sendBoolFinished,sendDateTimeFinished],null,null])
if (ttsAllowed === 'on') {
node.send([null,null,null,sendTTSNotify])
}
node.status({fill:"green",shape:"dot",text:"The " + deviceName + " has finished"})
node.log("The " + deviceName + " has finished")
} else if (payload === 'cancel') {
node.send([null,sendTimerCancel,null,null])
node.status({fill:"red",shape:"ring",text:"The " + deviceName + " has been cancelled"})
node.log("The " + deviceName + " has been cancelled")
}
if (textAllowed === 'on') {
node.send([null,null,sendTextNotify,null])
}