326 lines
8.4 KiB
JavaScript
326 lines
8.4 KiB
JavaScript
// Set constants
|
|
const states = global.get('homeassistant.homeAssistant.states')
|
|
const currentSceneBasement = flow.get('currentSceneBasement')
|
|
const currentSceneLivingRoom = flow.get('currentSceneLivingRoom')
|
|
const currentSceneTinaDesk = flow.get('currentSceneTinaDesk')
|
|
const currentSceneDiningRoom = flow.get('currentSceneDiningRoom')
|
|
const adaptLivingRoom = flow.get('adaptLivingRoom')
|
|
const adaptBasement = flow.get('adaptBasement')
|
|
const nightLivingRoom = flow.get('nightLivingRoom')
|
|
const nightBasement = flow.get('nightBasement')
|
|
const nightDiningRoom = flow.get('nightDiningRoom')
|
|
const stateTinaDesk = flow.get('stateTinaDesk')
|
|
const stateLivingRoom = flow.get('stateLivingRoom')
|
|
const stateDiningRoom = flow.get('stateDiningRoom')
|
|
const stateBasement = flow.get('stateBasement')
|
|
const stateStairwell = flow.get('stateStairwell')
|
|
const scenesLivingRoom = states["input_select.living_room_scenes"].attributes.options
|
|
const scenesBasement = states["input_select.basement_studio_scenes"].attributes.options
|
|
const scenesTinaDesk = states["input_select.tina_desk_scenes"].attributes.options
|
|
const scenesDiningRoom = states["input_select.dining_room_lamp_scenes"].attributes.options
|
|
const definedLivingRoom = scenesLivingRoom.includes(currentSceneLivingRoom)
|
|
const definedBasement = scenesBasement.includes(currentSceneBasement)
|
|
const definedTinaDesk = scenesTinaDesk.includes(currentSceneTinaDesk)
|
|
const definedDiningRoom = scenesDiningRoom.includes(currentSceneDiningRoom)
|
|
|
|
// Define variables
|
|
let setSceneLivingRoom = []
|
|
let setSceneTinaDesk = []
|
|
let setSceneBasement = []
|
|
let setSceneDiningRoom = []
|
|
let setServiceLivingRoom = []
|
|
let setServiceTinaDesk = []
|
|
let setServiceDiningRoom = []
|
|
let setServiceBasement = []
|
|
let restoreLivingRoom = {}
|
|
let restoreTinaDesk = {}
|
|
let restoreBasement = {}
|
|
|
|
// Decide what to restore for each room
|
|
if (stateLivingRoom === 'on') {
|
|
setServiceLivingRoom = 'turn_on'
|
|
if (definedLivingRoom === true) {
|
|
restoreLivingRoom = 'defined'
|
|
setSceneLivingRoom = currentSceneLivingRoom
|
|
} else if (nightLivingRoom === 'on') {
|
|
restoreLivingRoom = 'night'
|
|
setSceneLivingRoom = 'Adaptive'
|
|
} else if (adaptLivingRoom === 'on') {
|
|
restoreLivingRoom = 'adaptive'
|
|
setSceneLivingRoom = 'Adaptive'
|
|
} else {
|
|
restoreLivingRoom = 'backup'
|
|
setSceneLivingRoom = 'living_room_alert_restore'
|
|
}
|
|
} else {
|
|
restoreLivingRoom = 'off'
|
|
setServiceLivingRoom = 'turn_off'
|
|
setSceneLivingRoom = 'Adaptive'
|
|
}
|
|
|
|
if (stateTinaDesk === 'on') {
|
|
setServiceTinaDesk = 'turn_on'
|
|
if (definedTinaDesk === true) {
|
|
restoreTinaDesk = 'defined'
|
|
setSceneTinaDesk = currentSceneTinaDesk
|
|
} else {
|
|
restoreTinaDesk = 'adaptive'
|
|
setSceneTinaDesk = 'Reset'
|
|
}
|
|
} else {
|
|
restoreTinaDesk = 'off'
|
|
setServiceTinaDesk = 'turn_off'
|
|
}
|
|
|
|
if (stateDiningRoom === 'on') {
|
|
setServiceDiningRoom = 'turn_on'
|
|
if (nightDiningRoom === 'on') {
|
|
setSceneDiningRoom = 'Nightlight'
|
|
} else {
|
|
setSceneDiningRoom = 'Adaptive'
|
|
}
|
|
} else {
|
|
setServiceDiningRoom = 'turn_off'
|
|
}
|
|
|
|
if (stateBasement === 'on') {
|
|
setServiceBasement = 'turn_on'
|
|
if (definedBasement === true) {
|
|
restoreBasement = 'defined'
|
|
setSceneBasement = currentSceneBasement
|
|
} else if (nightBasement === 'on') {
|
|
restoreBasement = 'night'
|
|
setSceneBasement = 'Adaptive'
|
|
} else if (adaptBasement === 'on') {
|
|
restoreBasement = 'adaptive'
|
|
setSceneBasement = 'Adaptive'
|
|
} else {
|
|
restoreBasement = 'backup'
|
|
setSceneBasement = 'basement_alert_restore'
|
|
}
|
|
} else {
|
|
restoreBasement = 'off'
|
|
setServiceBasement = 'turn_off'
|
|
setSceneBasement = 'Adaptive'
|
|
}
|
|
|
|
// Define messages
|
|
let sendSceneLivingRoom = {
|
|
"payload": {
|
|
"domain": "input_select",
|
|
"service": "select_option",
|
|
"target": {
|
|
"entity_id": ["input_select.living_room_scenes"]
|
|
},
|
|
"data": {
|
|
"option": setSceneLivingRoom
|
|
}
|
|
}
|
|
}
|
|
|
|
let sendSceneTinaDesk = {
|
|
"payload": {
|
|
"domain": "input_select",
|
|
"service": "select_option",
|
|
"target": {
|
|
"entity_id": ["input_select.tina_desk_scenes"]
|
|
},
|
|
"data": {
|
|
"option": setSceneTinaDesk
|
|
}
|
|
}
|
|
}
|
|
|
|
let sendSceneBasement = {
|
|
"payload": {
|
|
"domain": "input_select",
|
|
"service": "select_option",
|
|
"target": {
|
|
"entity_id": ["input_select.basement_studio_scenes"]
|
|
},
|
|
"data": {
|
|
"option": setSceneBasement
|
|
}
|
|
}
|
|
}
|
|
|
|
let sendSceneDiningRoomLamp = {
|
|
"payload": {
|
|
"domain": "input_select",
|
|
"service": "select_option",
|
|
"target": {
|
|
"entity_id": ["input_select.dining_room_lamp_scenes"]
|
|
},
|
|
"data": {
|
|
"option": setSceneDiningRoom
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
let sendNightLivingRoom = {
|
|
"payload": {
|
|
"domain": "switch",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": ["switch.adaptive_lighting_sleep_mode_living_room"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendNightTinaDesk = {
|
|
"payload": {
|
|
"domain": "switch",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": ["switch.adaptive_lighting_sleep_mode_tina_desk"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendNightBasement = {
|
|
"payload": {
|
|
"domain": "switch",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": ["switch.adaptive_lighting_sleep_mode_basement_studio"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStateLivingRoom = {
|
|
"payload": {
|
|
"domain": "light",
|
|
"service": setServiceLivingRoom,
|
|
"target": {
|
|
"entity_id": ["light.living_room_lights"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStateTinaDesk = {
|
|
"payload": {
|
|
"domain": "light",
|
|
"service": setServiceTinaDesk,
|
|
"target": {
|
|
"entity_id": ["light.tina_desk_lights"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStateDiningRoom = {
|
|
"payload": {
|
|
"domain": "light",
|
|
"service": setServiceDiningRoom,
|
|
"target": {
|
|
"entity_id": ["light.dining_room_lamp"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStateBasement = {
|
|
"payload": {
|
|
"domain": "light",
|
|
"service": setServiceBasement,
|
|
"target": {
|
|
"entity_id": ["light.basement_studio_lights"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendRestoreLivingRoom = {
|
|
"payload": {
|
|
"domain": "scene",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": setSceneLivingRoom
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendRestoreTinaDesk = {
|
|
"payload": {
|
|
"domain": "scene",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": setSceneTinaDesk
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendRestoreBasement = {
|
|
"payload": {
|
|
"domain": "scene",
|
|
"service": "turn_on",
|
|
"target": {
|
|
"entity_id": setSceneBasement
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStairwellScript = {
|
|
"payload": {
|
|
"domain": "script",
|
|
"service": "stairwell_led_strip",
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
let sendStairwellOff = {
|
|
"payload": {
|
|
"domain": "light",
|
|
"service": "turn_off",
|
|
"target": {
|
|
"entity_id": ["light.stairwell_led_strip"]
|
|
},
|
|
"data": {}
|
|
}
|
|
}
|
|
|
|
// Send messages
|
|
if (restoreLivingRoom === 'backup') {
|
|
node.send([sendRestoreLivingRoom,null,null,null])
|
|
} else if (restoreLivingRoom === 'off') {
|
|
node.send([sendStateLivingRoom,null,null,null])
|
|
} else {
|
|
node.send([sendSceneLivingRoom,null,null,null])
|
|
}
|
|
|
|
if (restoreTinaDesk === 'backup') {
|
|
node.send([null,sendRestoreTinaDesk,null,null])
|
|
} else if (restoreTinaDesk === 'off') {
|
|
node.send([null,sendStateTinaDesk,null,null])
|
|
} else {
|
|
node.send([null,sendSceneTinaDesk,null,null])
|
|
}
|
|
|
|
node.send([null,null,[sendStateDiningRoom,sendSceneDiningRoomLamp],null])
|
|
|
|
if (restoreBasement === 'backup') {
|
|
node.send([null,null,null,sendRestoreBasement])
|
|
} else if (restoreBasement === 'off') {
|
|
node.send([null,null,null,sendStateBasement])
|
|
} else {
|
|
node.send([null,null,null,sendSceneBasement])
|
|
}
|
|
|
|
if (stateStairwell === 'on') {
|
|
node.send([sendStairwellScript,null,null,null])
|
|
} else {
|
|
node.send([sendStairwellOff,null,null,null])
|
|
}
|
|
|
|
flow.set('alertFirstFloor', false)
|
|
flow.set('alertBasement', false)
|
|
|
|
node.status({fill:'green',shape:'dot',text:'Scenes Reset'}) |