// Set constants const states = global.get('homeassistant.homeAssistant.states') const occupied = states["binary_sensor.basement_occupied"].state const quiet = states["input_boolean.studio_quiet"].state const stateTinaDesk = states["light.tina_desk_lights"].state const stateLivingRoom = states["light.living_room_lights"].state 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 adaptBasement = states["switch.adaptive_lighting_basement_studio"].state const nightLivingRoom = states["switch.adaptive_lighting_sleep_mode_living_room"].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 effectBasement = msg.payload.event.basement const effectFirstFloor = msg.payload.event.first_floor const effectType = msg.payload.event.type const effectDivide = msg.payload.event.divide const duration = msg.payload.event.duration const delay = duration * 1000 const adaptiveSwitchFirstFloor = flow.get("adaptiveFirstFloor", "diskCon") const adaptiveSwitchBasement = flow.get("adaptiveBasement", "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("adaptLivingRoom", adaptLivingRoom) flow.set("adaptBasement", adaptBasement) flow.set("nightLivingRoom", nightLivingRoom) flow.set("nightBasement", nightBasement) 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 = [] let basementFull = [] // Define empty arrays for living room LED strip zones let livingRoom1 = [] let livingRoom2 = [] 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') } // Setup the proper zones to use for the effect if (effectDivide === 'half') { basement1 = flow.get("halfBasement1", "diskCon") basement2 = flow.get("halfBasement2", "diskCon") livingRoom1 = flow.get("halfLivingRoom1", "diskCon") livingRoom2 = flow.get("halfLivingRoom2", "diskCon") } else if (effectDivide === 'quarter') { basement1 = flow.get("effectSegBasement1", "diskCon") basement2 = flow.get("effectSegBasement2", "diskCon") livingRoom1 = flow.get("effectSegLivingRoom1", "diskCon") livingRoom2 = flow.get("effectSegLivingRoom2", "diskCon") } else if (effectDivide === 'full') { basementFull = flow.get("basementFull", "diskCon") livingRoomFull = flow.get("livingRoomFull", "diskCon") } // Set/change colors if necessary if (effectType === 'police') { colorName1 = 'red' colorName2 = 'blue' } // Set message payloads let sendBasementStripFX = { "payload": { "domain": "lifx", "service": "effect_move", "target": { "entity_id": ["light.basement_led_strip_1"] }, "data": { "speed": 0.5, "direction": "right", "power_on": false } } } let sendBasementStrip1 = { "payload": { "domain": "lifx", "service": "set_state", "target": { "entity_id": ["light.basement_led_strip_1"] }, "data": { "zones": basement1, "color_name": colorName1, "brightness": 255 } } } let sendBasementStrip2 = { "payload": { "domain": "lifx", "service": "set_state", "target": { "entity_id": ["light.basement_led_strip_1"] }, "data": { "zones": basement2, "color_name": colorName2, "brightness": 255, "power": true } } } let sendBasementLights = { "payload": { "domain": "light", "service": "turn_on", "target": { "entity_id": [ "light.basement_tall_lamp", "light.basement_short_lamp", "light.basement_stairwell" ] }, "data": { "color_name": colorName1, "brightness": 255 } } } let sendLivingRoomStripFX = { "payload": { "domain": "lifx", "service": "effect_move", "target": { "entity_id": ["light.living_room_led_strip"] }, "data": { "speed": 0.5, "direction": "right", "power_on": false } } } let sendLivingRoomStrip1 = { "payload": { "domain": "lifx", "service": "set_state", "target": { "entity_id": ["light.living_room_led_strip"] }, "data": { "zones": livingRoom1, "color_name": colorName1, "brightness": 255 } } } let sendLivingRoomStrip2 = { "payload": { "domain": "lifx", "service": "set_state", "target": { "entity_id": ["light.living_room_led_strip"] }, "data": { "zones": livingRoom2, "color_name": colorName2, "brightness": 255, "power": true } } } let sendLivingRoomLights = { "payload": { "domain": "light", "service": "turn_on", "target": { "entity_id": [ "light.living_room_color_1", "light.living_room_color_2", "light.living_room_color_3" ] }, "data": { "color_name": colorName1, "brightness": 255 } } } let sendTinaDeskLights = { "payload": { "domain": "light", "service": "turn_on", "target": { "entity_id": ["light.tina_desk_lights"] }, "data": { "color_name": colorName1, "brightness": 255 } } } let sendDiningRoomLamp = { "payload": { "domain": "light", "service": "turn_off", "target": { "entity_id": ["light.dining_room_lamp"] }, "data": {} } } let sendAdaptiveFirstFloor = { "payload": { "domain": "switch", "service": "turn_off", "target": { "entity_id": adaptiveSwitchFirstFloor }, "data": {} } } let sendAdaptiveBasement = { "payload": { "domain": "switch", "service": "turn_off", "target": { "entity_id": adaptiveSwitchBasement }, "data": {} } } let backupFirstFloor = { "payload": { "domain": "scene", "service": "create", "data": { "scene_id": "first_floor_alert_restore", "snapshot_entities": firstFloorLights } } } let backupBasement = { "payload": { "domain": "scene", "service": "create", "data": { "scene_id": "basement_alert_restore", "snapshot_entities": basementLights } } } let sendReset = { "delay": delay } if (stateLivingRoom === 'on' && currentSceneLivingRoom != 'Alert') { node.send([[backupFirstFloor],null,null,null,null,null]) } if (stateBasement === 'on' && currentSceneBasement != 'Alert') { 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]) } if (effectFirstFloor === true) { node.send([null,[sendLivingRoomStripFX,sendLivingRoomLights,sendLivingRoomStrip1,sendLivingRoomStrip2],sendTinaDeskLights,sendDiningRoomLamp,null,null]) } // Send the reset message to start the timer node.send([null,null,null,null,null,sendReset])