d_sellers1

Ramp up brightness before alarm

Jul 11th, 2022 (edited)
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // @ts-nocheck
  2. var next_alarm_entity = "sensor.derek_s20_next_alarm"
  3. var person_or_device_entity = "person.derek"
  4. //20-30 minutes for real-world; 600 minutes for testing
  5. var how_many_minutes_before_alarm = 30
  6. var entity_to_adjust_based_on_alarm = "light.bedroom1"
  7.  
  8. msg.payload = null;
  9. var d = global.get('homeassistant').homeAssistant
  10. var next_alarm = d.states[next_alarm_entity].state
  11. var who = d.states[person_or_device_entity].state
  12. function map(x, in_min, in_max, out_min, out_max)
  13. {
  14.     return Math.round((x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min);
  15. }
  16.  
  17. var entity_current_brightness = d.states[entity_to_adjust_based_on_alarm].attributes.brightness
  18. var entity_current_state = d.states["light.bedroom1"].state
  19. var time_now_unix = new Date().getTime();
  20. var next_alarm_unix = new Date(next_alarm).getTime();
  21. var how_long_until_next_alarm_in_minutes = ((next_alarm_unix - time_now_unix) / 60000).toFixed()
  22.  
  23. // Check if home and within number of minutes before alarm  
  24.  if (who === "Home" && how_long_until_next_alarm_in_minutes <= how_many_minutes_before_alarm) {
  25.  
  26.     //convert the percentage of minutes until alarm compared to variable how_many_minutes_before_alarm
  27.     //and then set to scale of 0 to 255 for brightness attribute
  28.     var brightness = ((1 - (how_long_until_next_alarm_in_minutes / how_many_minutes_before_alarm)) * 100).toFixed()
  29.     brightness = map(brightness, 0, 100, 0, 255);
  30.  
  31.     //Check if current brightness is less than brightness variable or undefined (off)
  32.     if (entity_current_brightness < brightness || entity_current_brightness === undefined) {
  33.         msg.payload = {domain: "light", service: "turn_on", data: {
  34.             entity_id: entity_to_adjust_based_on_alarm,
  35.             brightness: brightness,
  36.             }
  37.         };
  38.         msg.payload.entity_id = entity_to_adjust_based_on_alarm;
  39.        
  40.         node.status({ text: `Within range; adjusting brightness to ${brightness}` });
  41.         return msg;
  42.     } else {
  43.         //The brightness is already brighter than what script is wanting to adjust it to
  44.         node.status({text: "Within range but not adjusting brightness"});
  45.     }
  46. } else {
  47.     node.status({text: `${how_long_until_next_alarm_in_minutes} minutes until alarm`});
  48. }
Advertisement
Add Comment
Please, Sign In to add comment