Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- This function checks the battery level of a device and turns on/off a
- corresponding charger in order to maintain optimal battery life.
- The function relies on a get entities node set to find the naming convention of each device to get the
- battery level and outputs to an empty service call node.
- */
- // High-low battery range
- const high_battery = 90 //Stop charging at or above this level
- const low_battery = 30 //Start charging at or below this level
- /*
- These are the variables used to transform the tablet's entity ID
- into the charger's entity ID. The two entity names need to be
- relatively similiar. For example,
- sensor.fire_living_room_battery_level
- switch.fire_living_room_charger
- */
- const domain_from = "sensor"
- const domain_to = "switch"
- const name_segment_from = "battery_level"
- const name_segment_to = "charger"
- //Get charger name and status
- const charger_entity = msg.payload.entity_id.replace(domain_from, domain_to).replace(name_segment_from, name_segment_to);
- const ha = global.get('homeassistant').homeAssistant.states[charger_entity]
- const charger_state = ha.state
- const friendly_name = ha.attributes["friendly_name"]
- const battery_level = parseInt(msg.payload.state)
- var srv = ""
- node.status({ text: "No actions at this time." });
- //Tablet is not available
- if (msg.payload.state == "unavailable") {
- return
- }
- //Tablet is being charged
- if (battery_level <= high_battery && battery_level >= low_battery && charger_state === "on") {
- return
- }
- //Tablet is on battery and does not need to be charged
- if (battery_level <= high_battery && battery_level >= low_battery && charger_state === "off") {
- return
- }
- //Turn off charger
- if (battery_level >= high_battery) {
- if (charger_state === "on") {
- srv = "off";
- } else {
- return
- }
- }
- //Turn on charger
- if (battery_level <= low_battery) {
- if (charger_state === "off") {
- srv = "on";
- } else {
- return
- }
- }
- //Catches unnecessary service calls
- if (charger_state === "on" && srv === "on") { return }
- if (charger_state === "off" && srv === "off") { return }
- node.status({ text: friendly_name + " turned " + srv + "(" + battery_level + ")" });
- msg.payload = {domain: "switch", service: "turn_" + srv, data: {
- entity_id: charger_entity,
- }
- };
- return msg;
Advertisement
Add Comment
Please, Sign In to add comment