d_sellers1

Device Battery Saver

Nov 16th, 2021 (edited)
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. This function checks the battery level of a device and turns on/off a
  3. corresponding charger in order to maintain optimal battery life.
  4. The function relies on a get entities node set to find the naming convention of each device to get the
  5. battery level and outputs to an empty service call node.
  6. */
  7.  
  8. // High-low battery range
  9. const high_battery = 90  //Stop charging at or above this level
  10. const low_battery = 30  //Start charging at or below this level
  11.  
  12. /*
  13. These are the variables used to transform the tablet's entity ID
  14. into the charger's entity ID. The two entity names need to be
  15. relatively similiar. For example,
  16. sensor.fire_living_room_battery_level
  17. switch.fire_living_room_charger
  18. */
  19. const domain_from = "sensor"
  20. const domain_to = "switch"
  21. const name_segment_from = "battery_level"
  22. const name_segment_to = "charger"
  23.  
  24. //Get charger name and status
  25. const charger_entity = msg.payload.entity_id.replace(domain_from, domain_to).replace(name_segment_from, name_segment_to);
  26. const ha = global.get('homeassistant').homeAssistant.states[charger_entity]
  27. const charger_state = ha.state
  28. const friendly_name = ha.attributes["friendly_name"]
  29. const battery_level = parseInt(msg.payload.state)
  30. var srv = ""
  31. node.status({ text: "No actions at this time." });
  32.  
  33. //Tablet is not available
  34. if (msg.payload.state == "unavailable") {
  35.     return
  36. }
  37.  
  38. //Tablet is being charged
  39. if (battery_level <= high_battery && battery_level >= low_battery && charger_state === "on") {
  40.     return
  41. }
  42.  
  43. //Tablet is on battery and does not need to be charged
  44. if (battery_level <= high_battery && battery_level >= low_battery && charger_state === "off") {
  45.     return
  46. }
  47.  
  48. //Turn off charger
  49. if (battery_level >= high_battery) {
  50.     if (charger_state === "on") {
  51.         srv = "off";
  52.     } else {
  53.         return
  54.     }
  55. }
  56.  
  57. //Turn on charger
  58. if (battery_level <= low_battery) {
  59.     if (charger_state === "off") {
  60.         srv = "on";
  61.     } else {
  62.         return
  63.     }
  64. }
  65.  
  66. //Catches unnecessary service calls
  67. if (charger_state === "on" && srv === "on") { return }
  68. if (charger_state === "off" && srv === "off") { return }
  69.  
  70. node.status({ text: friendly_name + " turned " + srv + "(" + battery_level + ")" });
  71. msg.payload = {domain: "switch", service: "turn_" + srv, data: {
  72.     entity_id: charger_entity,
  73.     }
  74. };
  75. return msg;
Advertisement
Add Comment
Please, Sign In to add comment