Laptop Low Battery Smartphone Push Notification
This post is part of the Into The Past series. A list of posts written long after they happened as part of an attempt to look back at some earlier creations and thoughts I had along the way. This post was written April 2024.
Preface #
This is a small gem that I had created which ended up serving me for several years before I moved on to use Mac as my primary OS. I'm sure a number of people would agree that the default power options in Windows can feel very aggressive, and putting a laptop into sleep mode after a few minutes of inactivity can often lead to annoying situations if you are running some long-winded process. I had often run into issues with this. So please allow me to lead this post with the same quote that the original Instructable is served with:
When your laptop is sitting on a table and you're doing some other stuff in the meanwhile, it might quietly be running out of battery. In that case, you likely want to be nudged to find it a power outlet before it has to shut down or hibernate. Wouldn't it be nice to get a push message on your phone (or even smartwatch, because hey, it's 2015)? Quote from Dammit.nl
The full, original step by step guide on setting this up can be found at Instructables.com
AutoIt Scripting Language #
This small utility is written in the AutoIt Scripting Language which, although old, at the time was a very neat language for automating tasks on Windows. Highlighting the below quote from from their own site might give an immediate indication of the utilities that this automation language can serve:
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting. It uses a combination of simulated keystrokes, mouse movement and window/control manipulation in order to automate tasks in a way not possible or reliable with other languages.
The script itself was released on Pastebin along with the Instructables guideline, and can be found in the section below. Pushbullet is used as a mediator to receive push notification, and can be installed on any smart device.
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.12.0
Author: Michael Cavaleri
-
Script Function:
This script will run once every 5 minute. You can easily change this to
run more frequent or have it delayed some. I thought 5 minutes seemed
like a decent amount of time to balance resource usage and effectivity.
You will receive a notification every 5 minutes when your laptop is
running low on battery.
This script will check if your computer is connected to the internet.
If this is the case, then it will check your current battery status.
If the power level is 20% or less (this amount being easy to change),
then it will fire a notification to your smartphone or tablet or whatever
device you are hooking it up to on PushBullet.
The script will only fire a notification, if your laptop is not hooked
up to a power source. By default, it will fire a notification to all of
your devices on PushBullet. However, you can change it to a single device
by changing $vSendToAll to False and entering your Device ID in $vDeviceID
Instructions:
1. Press CTRL+F and search for "change these variables".
2. Change each variable to fit your needs.
3. Press F7 to compile this script into an executable.
4. Run the executable to receive notifications.
#ce ----------------------------------------------------------------------------
; Include the necessary libraries:
#include <WinAPISys.au3>
; Change these variables
$vAccessToken = "ACCESS TOKEN" ; You can find your access token in http://www.pushbullet.com/account
$vTimer = 300000 ; This is the amount of time it waits between checking battery status. 1000 = 1 second.
$vPowerPercentageAlert = 20 ; This is the power level percentage where you want to receive the notification.
$vSendToAll = True ; Change this to False if you only want notifications on a single device.
$vDeviceID = "" ; Change this to the ID of the device if you only want notifications on one devices.
#region ### CREATE TRAY MENU ###
Opt("TrayMenuMode", 3)
Opt("TrayOnEventMode", 1)
$iExit = TrayCreateItem("Exit")
#endregion ### CREATE TRAY MENU ###
TrayItemSetOnEvent($iExit, "Close")
While 1
If _IsInternetConnected() Then
$vPowerStatus = _WinAPI_GetSystemPowerStatus()
If $vPowerStatus[0] = 0 Then
if $vPowerStatus[2] <= $vPowerPercentageAlert Then
if $vSendToAll = True Then
$sPD = '{"type": "note", "title": "Laptop Battery Low", "body": "Your laptop only has ' & $vPowerStatus[2] &'% power left."}'
ElseIf $vSendToAll = False Then
$sPD = '{"device_iden": "' & $vDeviceID & '", "type": "note", "title": "Laptop Battery Low", "body": "Your laptop only has ' & $vPowerStatus[2] &'% power left."}'
EndIf
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("POST", "https://api.pushbullet.com/v2/pushes", False)
$oHTTP.setRequestHeader("Authorization", "Bearer " & $vAccessToken)
$oHTTP.SetRequestHeader("Content-Type", "application/json")
$oHTTP.Send($sPD)
EndIf
EndIf
EndIf
Sleep($vTimer)
WEnd
#Region ### The Functions ###
Func Close()
Exit
EndFunc
Func _IsInternetConnected()
Local $aReturn = DllCall('connect.dll', 'long', 'IsInternetConnected')
If @error Then
Return SetError(1, 0, False)
EndIf
Return $aReturn[0] = 0
EndFunc ;==>_IsInternetConnected
#EndRegion