Hello World!
In this blog, I would like to share my experience in creating a simple battery tracker that alerts the user when the battery level is low. For this, I have used Python and some basic Linux commands.
Our code is going to track the status of the battery, that is, how much percentage of charge the battery currently contains. So, where can I get the data on the battery status? Let’s see.
Open the terminal
Move to the directory /sys/class/power_supply/BAT1
by typing the below command
cd /sys/class/power_supply/BAT1
In some devices, the directory BAT1 may have a different name, like BAT0.
List the files in the directory using the “ls” command. You could see some files like capacity, model_name, manufacturer, status, etc.
The two files that we require are capacity, which has the percentage of charge the battery currently has, and status, which tells us whether the battery is in the charging state or in the discharging state
We can use the cat command to print the capacity and status in the terminal.
cat capacity cat status
This will print the current charge in percentage and status in the terminal. You can refer to the below screenshot.
A screenshot of the terminal showing the charge and status of the battery
So, now we’ve got the data source. Next, how to get this data in Python, and how to track it? Let’s see.
Here, we are going to use Python for getting the data and alerting the user when the charge is low. In Python, we can read the content of the file using the functions open() and readline(). The open function will open the specified file, and the readline function will read the file contents. For example, if we want to read the status of the battery from the status file, the code will be
charge_state = open(“/sys/class/power_supply/BAT1/status”,”r”).readline().strip()
The open function has 2 parameters. The first parameter denotes the file path, and the second parameter denotes the mode. Here, in our example, we have set the mode to read(r) since we only read data from the file. The strip() function removes the trailing blank spaces from the data. As a result, the charge_state variable will hold the status of the battery. That is either of the two values, “Charging” or “Discharging”.
So now, let us get into the logic. When should we alert the user? We have to alert when the charge goes below 30% and the charger is not plugged in. The logic is:
Alert_User when capacity ≤ 30 and status==”Discharging”
Now we have found the logic; how to alert the user? The answer is the dialog box. A dialog box is nothing but a pop-up window used to interrupt the user to display some message or prompt the user to enter any additional information. For displaying info in the dialog box, we use a Python library called Tkinter. Using this library, we can create a dialog box. Below is the source code for our Battery Tracker.
#!/usr/bin/python
import Tkinter as tk
import tkMessageBox
root = tk.Tk()
root.withdraw()
def powerFunction():
current_stat=open("/sys/class/power_supply/BAT1/capacity","r").readline().strip()
return current_stat
def chargeState():
charge_state=open("/sys/class/power_supply/BAT1/status","r").readline().strip()
return charge_state
powerStat = 100
print powerStat
tkMessageBox.showinfo("Running!","Battry Status Tracker is now running on machine")
while int(powerStat)>=30:
powerStat = powerFunction()
chargeStat = chargeState()
print "Battery Tracking"
if int(powerStat)<=30 and chargeStat == "Discharging":
tkMessageBox.showwarning("Alert!","Battery Low!\nCharging Required!\nYour Battery Status:"+powerStat+"% ("+chargeStat+")")
break
We can save this code with the .py extension anywhere in the system, let’s say Desktop. I have now saved the Python file with the file name power.py on the desktop. Now we have to run this python file. How to do that? Let’s see
Open the terminal
Move to the directory to where the Python file is saved. In my case, it is the Desktop. So, I’m moving to the Desktop using the cd command.
cd Desktop
There are two versions of Python, namely Python 2.X and Python 3.X. The above code is written in Python 2. The command to run Python 2 files is python <Filename.py>. If it is in the case of Python 3, then the command is python3 <Filename.py>. Since our code is written in Python 2, the command to execute is
python power.py
This will start executing our Python code in the terminal.
Now, the code is ready. But whenever we turn on our computer, we have to open the terminal move to the desktop, and execute the python file. The terminal will also keep on running until the charge comes down to 30%. This is quite annoying, right? To avoid these steps, we can create a ‘Desktop Entry’ that will allow us to run the Python code with just a double click.
The Desktop Entry is nothing but a desktop shortcut created for easy access to files/executables. Let us see how to create a desktop entry in Linux.
Open any editor (like Gedit).
Copy-paste the code below.
[Desktop Entry]
Type=Application
Exec=python /home/sriram/Desktop/power.py
Icon=/home/sriram/Desktop/Desktop_sub/battery.png
Name=Power Tracker
Terminal=false
Here, ‘Exec’ holds the command that we type in the terminal to execute the Python code. ‘Icon’ holds an image file path that is to be set as an icon for our desktop entry. ‘Name’ holds the name for our desktop entry, which is the name displayed on the screen. In ‘Terminal,’ we can decide on whether to show the terminal while executing. As I said earlier, it will be annoying if we show the terminal. So, I have set this to false so that the code runs in the background. Now we can save this file with the ‘.desktop’ extension.
This is how the desktop entry will look like.
Now, to make our desktop entry execute our Python code with a double click, we need to do one more thing. Right-click on our desktop entry and properties and move to the ‘Permissions’ tab. Check the Allow executing file as a program checkbox. This will make our desktop entry an executable.
Making the desktop entry executable
Now, let’s run the “Power Tracker” by just double-clicking on it. A dialog box will appear to acknowledge that the Power Tracker is running. Once the battery reaches 30% charge and is not plugged in for charging the Alert dialog box will appear with a warning message. This is how it works.
Dialog box to acknowledge to the user that the code is running
The alert dialog box when the battery level comes down to 30%
This works only with machines running the Linux operating system. You can find the full source in this GitHub repo: https://github.com/sriram23/Battery-Tracker
Looking forward to your valuable feedback and suggestions.
Thank you!
Also published here.