Most of the effect and restore flow is now working

This commit is contained in:
2023-10-19 19:06:51 -04:00
parent 591151f606
commit f758c36508
3 changed files with 362 additions and 44 deletions

View File

@ -8,12 +8,15 @@ const stateDiningRoom = states["light.dining_room_lamp"].state
const stateStairwell = states["light.stairwell_led_strip"].state
const stateBasement = states["light.basement_studio_lights"].state
const adaptLivingRoom = states["switch.adaptive_lighting_living_room"].state
const adaptDiningRoom = states["switch.adaptive_lighting_dining_room_lamp"].state
const adaptBasement = states["switch.adaptive_lighting_basement_studio"].state
const nightLivingRoom = states["switch.adaptive_lighting_sleep_mode_living_room"].state
const nightDiningRoom = states["switch.adaptive_lighting_sleep_mode_dining_room_lamp"].state
const nightBasement = states["switch.adaptive_lighting_sleep_mode_basement_studio"].state
const currentSceneBasement = states["input_text.basement_studio_selected_scene"].state
const currentSceneLivingRoom = states["input_text.living_room_selected_scene"].state
const currentSceneTinaDesk = states["input_text.tina_desk_selected_scene"].state
const currentSceneDiningRoom = states["input_text.dining_room_lamp_selected_scene"].state
const effectBasement = msg.payload.event.basement
const effectFirstFloor = msg.payload.event.first_floor
const effectType = msg.payload.event.type
@ -22,24 +25,27 @@ const duration = msg.payload.event.duration
const delay = duration * 1000
const adaptiveSwitchFirstFloor = flow.get("adaptiveFirstFloor", "diskCon")
const adaptiveSwitchBasement = flow.get("adaptiveBasement", "diskCon")
const lightsTinaDesk = flow.get('lightsTinaDesk', 'diskCon')
const lightsBasement = flow.get('lightsBasement', 'diskCon')
const lightsLivingRoom = flow.get('lightsLivingRoom', 'diskCon')
const lightsDiningRoom = flow.get('lightsDiningRoom', 'diskCon')
// Set flow contexts to be used later in the reset node
flow.set("currentSceneBasement", currentSceneBasement)
flow.set("currentSceneLivingRoom", currentSceneLivingRoom)
flow.set("currentSceneTinaDesk", currentSceneTinaDesk)
flow.set('currentSceneDiningRoom', currentSceneDiningRoom)
flow.set("adaptLivingRoom", adaptLivingRoom)
flow.set("adaptBasement", adaptBasement)
flow.set("nightLivingRoom", nightLivingRoom)
flow.set("nightBasement", nightBasement)
flow.set('nightDiningRoom', nightDiningRoom)
flow.set("stateTinaDesk", stateTinaDesk)
flow.set("stateLivingRoom", stateLivingRoom)
flow.set("stateDiningRoom", stateDiningRoom)
flow.set("stateStairwell", stateStairwell)
flow.set("stateBasement", stateBasement)
// Define empty arrays for backup scenes
let firstFloorLights = []
let basementLights = []
// Define empty arrays for basement LED strip zones
let basement1 = []
let basement2 = []
@ -51,28 +57,8 @@ let livingRoomFull = []
// Color names are set by default, however certain effects can override them below
let colorName1 = effectType
let colorName2 = "white"
// Get lights to add to the backup scenes
//! We need to change this from one entire first floor scene to individual room scenes
if (stateTinaDesk === 'on') {
firstFloorLights.push('light.tina_desk_strip','light.tina_lamp_top','light.tina_lamp_side')
}
if (stateLivingRoom === 'on') {
firstFloorLights.push('light.living_room_color_1','light.living_room_color_2','light.living_room_color_3','light.living_room_led_strip')
}
if (stateDiningRoom === 'on') {
firstFloorLights.push('light.dining_room_lamp')
}
if (stateStairwell === 'on') {
firstFloorLights.push('light.stairwell_led_strip')
}
if (stateBasement === 'on') {
basementLights.push('light.basement_tall_lamp','light.basement_short_lamp','light.basement_stairwell','light.basement_led_strip_1')
}
// Define empty array for input texts
let inputTexts = []
// Setup the proper zones to use for the effect
if (effectDivide === 'half') {
@ -90,6 +76,14 @@ if (effectDivide === 'half') {
livingRoomFull = flow.get("livingRoomFull", "diskCon")
}
if (effectFirstFloor === true) {
inputTexts.push('input_text.living_room_selected_scene','input_text.tina_desk_selected_scene')
}
if (effectBasement === true) {
inputTexts.push('input_text.basement_studio_selected_scene')
}
// Set/change colors if necessary
if (effectType === 'police') {
colorName1 = 'red'
@ -97,6 +91,17 @@ if (effectType === 'police') {
}
// Set message payloads
let sendInputTexts = {
"payload": "input_text",
"service": "set_value",
"target": {
"entity_id": inputTexts
},
"data": {
"value": "Alert"
}
}
let sendBasementStripFX = {
"payload": {
"domain": "lifx",
@ -215,7 +220,8 @@ let sendLivingRoomLights = {
"entity_id": [
"light.living_room_color_1",
"light.living_room_color_2",
"light.living_room_color_3"
"light.living_room_color_3",
"light.stairwell_led_strip"
]
},
"data": {
@ -272,13 +278,24 @@ let sendAdaptiveBasement = {
}
}
let backupFirstFloor = {
let backupLivingRoom = {
"payload": {
"domain": "scene",
"service": "create",
"data": {
"scene_id": "first_floor_alert_restore",
"snapshot_entities": firstFloorLights
"scene_id": "living_room_alert_restore",
"snapshot_entities": lightsLivingRoom
}
}
}
let backupTinaDesk = {
"payload": {
"domain": "scene",
"service": "create",
"data": {
"scene_id": "tina_desk_alert_restore",
"snapshot_entities": lightsTinaDesk
}
}
}
@ -289,7 +306,7 @@ let backupBasement = {
"service": "create",
"data": {
"scene_id": "basement_alert_restore",
"snapshot_entities": basementLights
"snapshot_entities": lightsBasement
}
}
}
@ -298,21 +315,26 @@ let sendReset = {
"delay": delay
}
// Send backup messages
if (stateLivingRoom === 'on' && currentSceneLivingRoom != 'Alert') {
node.send([[backupFirstFloor],null,null,null,null,null])
node.send([backupLivingRoom,null,null,null,null,null])
}
if (stateTinaDesk === 'on' && currentSceneTinaDesk != 'Alert') {
node.send([backupTinaDesk,null,null,null,null,null])
}
if (stateBasement === 'on' && currentSceneBasement != 'Alert') {
node.send([[backupBasement],null,null,null,null,null])
node.send([backupBasement,null,null,null,null,null])
}
// Send effect messages
if (effectBasement === true) {
node.send([null,null,null,null,[sendBasementStripFX,sendBasementLights,sendBasementStrip1,sendBasementStrip2],null])
node.send([sendAdaptiveBasement,null,null,null,[sendBasementStripFX,sendBasementLights,sendBasementStrip1,sendBasementStrip2],null])
}
if (effectFirstFloor === true) {
node.send([null,[sendLivingRoomStripFX,sendLivingRoomLights,sendLivingRoomStrip1,sendLivingRoomStrip2],sendTinaDeskLights,sendDiningRoomLamp,null,null])
node.send([sendAdaptiveFirstFloor,[sendLivingRoomStripFX,sendLivingRoomLights,sendLivingRoomStrip1,sendLivingRoomStrip2],sendTinaDeskLights,sendDiningRoomLamp,null,null])
}
// Send the reset message to start the timer