Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@LeonardoGentile
Last active August 10, 2023 20:02
Show Gist options
  • Star 12 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save LeonardoGentile/7a5330e6bc55860feee5d0dd79e7965d to your computer and use it in GitHub Desktop.
Save LeonardoGentile/7a5330e6bc55860feee5d0dd79e7965d to your computer and use it in GitHub Desktop.
Monitor the raspberry pi temperature and send an email/shutdown in case it's too high
# coding=utf-8
import os
import smtplib
from email.mime.text import MIMEText
critical = False
high = 60
too_high = 80
# At First we have to get the current CPU-Temperature with this defined function
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
# Now we convert our value into a float number
temp = float(getCPUtemperature())
# Check if the temperature is abouve 60°C (you can change this value, but it shouldn't be above 70)
if (temp > high):
if temp > too_high:
critical = True
subject = "Critical warning! The temperature is: {} shutting down!!".format(temp)
body = "Critical warning! The actual temperature is: {} \n\n Shutting down the pi!".format(temp)
else:
subject = "Warning! The temperature is: {} ".format(temp)
body = "Warning! The actual temperature is: {} ".format(temp)
# Enter your smtp Server-Connection
server = smtplib.SMTP('localhost', 25) # if your using gmail: smtp.gmail.com
server.ehlo()
server.starttls()
server.ehlo
# Login
# server.login("your email or username", "your Password")
msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = "Root"
msg['To'] = "root"
# Finally send the mail
server.sendmail("root", "root", msg.as_string())
server.quit()
# Critical, shut down the pi
if critical:
os.popen('sudo halt')
# Don't print anything otherwise.
# Cron will send you an email for any command that returns "any" output (so you would get another email)
# else:
# print "Everything is working fine!"
@LeonardoGentile
Copy link
Author

LeonardoGentile commented Apr 19, 2021

I often forget I wrote this little script, I'm glad it's useful for someone else : ] 👍

@degupukas
Copy link

hi, someone can help me
this is the code

# Enter your smtp Server-Connection
server = smtplib.SMTP('smtp.zoho.com', 465) # if your using gmail: smtp.gmail.com
server.ehlo()
server.starttls()
server.ehlo
# Login
server.login("degu@zoho.com", "mypass")

msg = MIMEText(body)
msg['Subject'] = subject
msg['From'] = "degu@zoho.com"
msg['To'] = "degu@zoho.com"

# Finally send the mail
server.sendmail(msg['from'],msg['To'], msg.as_string())
server.quit()

# Critical, shut down the pi
if critical:
    os.popen('sudo halt')

ERROR

Traceback (most recent call last):
File "ubi.py", line 29, in
server = smtplib.SMTP('smtp.zoho.com', 465) # if your using gmail: smtp.gmail.com
File "/usr/lib/python3.7/smtplib.py", line 251, in init
(code, msg) = self.connect(host, port)
File "/usr/lib/python3.7/smtplib.py", line 338, in connect
(code, msg) = self.getreply()
File "/usr/lib/python3.7/smtplib.py", line 394, in getreply
raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed

@paradonym
Copy link

paradonym commented Mar 26, 2022

What's the difference between 30 * * * * python ~/scripts/temp.py and */30 * * * * python ~/scripts/temp.py?
My crontabs always had */30 to define "every 30th..."

@MestreLion
Copy link

MestreLion commented May 25, 2022

@paradonym

What's the difference between 30 * * * * python ~/scripts/temp.py and */30 * * * * python ~/scripts/temp.py? My crontabs always had */30 to define "every 30th..."

30 means "at minute 30", so it only runs once every hour, while */30 means "on every 30 minutes", running twice every hour, at minutes 0 and 30.

See https://crontab.guru/

@Ricknanon
Copy link

Thank you very much.
Worked like a charm !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment