Files
HA-NerdFlows-Functions/lightfx/processing.js

237 lines
6.8 KiB
JavaScript

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 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")
//! Use delay in service calls, not duration
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("stateBasement", stateBasement)
let firstFloorLights = []
let basementLights = []
let basement1 = []
let basement2 = []
let basementFull = []
let livingRoom1 = []
let livingRoom2 = []
let livingRoomFull = []
let colorName1 = effectType
let colorName2 = "white"
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 (stateBasement === 'on') {
basementLights.push('light.basement_tall_lamp','light.basement_short_lamp','light.basement_stairwell','light.basement_led_strip_1')
}
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")
}
//! Implement setting of colors here
// 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
}
}
}
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": {}
}
}
if (effectBasement === true) {
node.send([null,null,null,null,[sendBasementStripFX,sendBasementLights,sendBasementStrip1,sendBasementStrip2],null])
}