I started monitoring the temperature of my Raspberry Pi computer some time ago. I’ve also set up a Chatbot that can give me this information whenever I want. So next, I was thinking to write a Python script that can shut down the power of my Raspberry Pi (in fact, the smart plug where this device is connected ) when a threshold is reached and also alerts before this, via SMS.

The project is made of multiple python scripts:
– temperature.py this is the main app where all other python scripts/functions are used
– sendSMS.py, used to send a message via Twilio sms service using an api
– tpplug.py, used to shutdown the TP link smart plug
temperature.py
I already have the temperature logging in the LogDNA service so it would be easy to use the API to get this info. From here I only have to check if it has reached the threshold( 60 C in my case ) and then take action. Action would mean to call the send SMS function, wait 30 seconds and then call the shutdown function for my smart plug(I have a TP link smart plug ) .
import requests from datetime import datetime from datetime import timezone from sendSMS import sendSMS from tpplug import send_cmd import time from vault import apikey def main(): dt = datetime.now() timestamp = dt.replace(tzinfo = timezone.utc).timestamp() times = int (timestamp - 600 ) api_url = 'https://api.logdna.com/v1/export?from=%i&to=%i&query=PiTemp' % (times, int (timestamp)) headers = { "servicekey" : apikey} response = requests.get(api_url,headers = headers) x = int (response.text[ 138 : 140 ]) text = f "Shutting down in 30s due to Pi Temperature: {x} C" if int (x) > = 60 : sendSMS(text) time.sleep( 30 ) send_cmd( 'off' ) if __name__ = = '__main__' : main() |
sendSMS.py
For SMS I’ve used the Twilio SMS service. They provide a phone number and also a Python library and API. They also have examples of how to send an SMS via a python script, so this was pretty easy to use.
# Download the helper library from https://www.twilio.com/docs/python/install from twilio.rest import Client from vault import account,token,from_number,to_number def sendSMS(message): # Your Account Sid and Auth Token from twilio.com/console # and set the environment variables. See http://twil.io/secure account_sid = account auth_token = token client = Client(account_sid, auth_token) message = client.messages \ .create( body = message, from_ = from_number, to = to_number ) print (message.sid) |
tpplug.py
I am using a TP-link smart plug for my Raspberry Pi. I’ve also found a way to use python and run commands on this smart plug. (More info here: https://github.com/softScheck/tplink-smartplug). So I’ve used some of the python functions and created a python script that executes a command(‘off’) to shutdown the power. The smart plug does not shut down, it only stops powering my Raspberry Pi.
import socket from struct import pack ip = '192.168.8.211' port = '9999' commands = { 'on' : '{"system":{"set_relay_state":{"state":1}}}' , 'off' : '{"system":{"set_relay_state":{"state":0}}}' , 'info' : '{"system":{"get_sysinfo":{}}}' } def encrypt(string): key = 171 result = pack( ">I" , len (string)) for i in string: a = key ^ ord (i) key = a result + = bytes([a]) return result def decrypt(string): key = 171 result = "" for i in string: a = key ^ i key = i result + = chr (a) return result def send_cmd(string): cmd = commands[string] sock_tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock_tcp.settimeout( 10 ) sock_tcp.connect((ip, int (port))) sock_tcp.send(encrypt(cmd)) data = sock_tcp.recv( 2048 ) sock_tcp.close() decrypted = decrypt(data[ 4 :]) return decrypted |
Next, I’ve scheduled the temperature.py script to run every 5 min.
Here is a screenshot from my tests. I had to drop the threshold to 40 C for testing only.

And that’s all folks.
You can find the scripts here:
https://github.com/czirakim/SMSalert.shutdown.PI