Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var next_alarm_entity = "sensor.derek_s20_next_alarm"
- var person_or_device_entity = "person.derek"
- //20-30 minutes for real-world; 600 minutes for testing
- var how_many_minutes_before_alarm = 30
- var entity_to_adjust_based_on_alarm = "light.bedroom1"
- msg.payload = null;
- var d = global.get('homeassistant').homeAssistant
- var next_alarm = d.states[next_alarm_entity].state
- var who = d.states[person_or_device_entity].state
- function map(x, in_min, in_max, out_min, out_max)
- {
- return Math.round((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min);
- }
- var entity_current_brightness = d.states[entity_to_adjust_based_on_alarm].attributes.brightness
- var entity_current_state = d.states["light.bedroom1"].state
- var time_now_unix = new Date().getTime();
- var next_alarm_unix = new Date(next_alarm).getTime();
- var how_long_until_next_alarm_in_minutes = ((next_alarm_unix - time_now_unix) / 60000).toFixed()
- // Check if home and within number of minutes before alarm
- if (who === "Home" && how_long_until_next_alarm_in_minutes <= how_many_minutes_before_alarm) {
- //convert the percentage of minutes until alarm compared to variable how_many_minutes_before_alarm
- //and then set to scale of 0 to 255 for brightness attribute
- var brightness = ((1 - (how_long_until_next_alarm_in_minutes / how_many_minutes_before_alarm)) * 100).toFixed()
- brightness = map(brightness, 0, 100, 0, 255);
- //Check if current brightness is less than brightness variable or undefined (off)
- if (entity_current_brightness < brightness || entity_current_brightness === undefined) {
- msg.payload = {domain: "light", service: "turn_on", data: {
- entity_id: entity_to_adjust_based_on_alarm,
- brightness: brightness,
- //kelvin: null }
- }
- };
- msg.payload.entity_id = entity_to_adjust_based_on_alarm;
- node.status({text: "Within range; adjusting brightness to " + brightness});
- return msg;
- } else {
- //The brightness is already brighter than what script is wanting to adjust it to
- node.status({text: "Within range but not adjusting brightness"});
- }
- } else {
- //.status({text: "Not time yet; flow halted"});
- node.status({text: how_long_until_next_alarm_in_minutes + " minutes until alarm"});
- //node.status({text: how_long_until_next_alarm_in_minutes});
- }
Add Comment
Please, Sign In to add comment