Simply Python automatically report module working on Raspberry Pi.
- Raspberry Pi Automatically Report
- Schedule
You can using schedule module for job scheduling, you can found the scheduling setting at scripts examples.
import schedule
#Execute setting
schedule.every(30).minutes.do( #Something Package as function)
#Loop
try:
while True:
schedule.run_pending()
time.sleep(1)
#Crtl+C to exit
except KeyboardInterrupt:
print("GoodBye ...")- Crontab
Alternatively, automatically execute via cron.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
0 9-22/1 * * * pi python /home/pi/python_script/coretemp_warning.py
0 */1 * * * pi python /home/pi/python_script/ip_address_notice.py
#- Google account needed, sign in using App passwords.
- Receiver is unlimited. First time running email sending, it will asking configuration.
Mail Configuration not found, please initialize.
Please enter the sender account: example@gmail.com
Please enter the sender password: •••••••••
Please enter the receiver address: receiver@gmail.com
You can also set disalbe_phone_book to True, directly setting email configuration.
#Email configuration Mode
disalbe_phone_book = False
#If set "disalbe_phone_book" True
sender_account = "example@gmail.com"
sender_password = "•••••••••"
receiver_address = "receiver@gmail.com"Critical value is necessary, can be integer or floating point. Configure store at config.json.
"tempture_alert": {
"critical": 55.0
},The critical value, unit of temperature is degree celsius.
If default address is empty, it will fill in when initialization.
"ip_address_alert": {
"ipv4": "1.1.1.1",
"ipv6": "2606:4700:4700::1111"
},If default program name is empty, it will print error message when initialization, or return True as result and print message.
Query not found. Configuration is necessary.
Configure store at config.json.
"program_checker": {
"program": ""
},Store configuration as JSON format file, named config.json..
You can editing the clean copy, which looks like this:
{
"mail": {
"sender": "",
"scepter": "",
"receiver": ""
},
"tempture_alert": {
"critical": 55.0
},
"ip_address_alert": {
"ipv4": "",
"ipv6": ""
},
"program_checker": {
"program": ""
},
"last_update_time": ""
}If you fill in with correct configure, it will skip initialization step.
If you want to using schedule module for job scheduling, install this module are needed.
- Import the module
import automatically_reportimport automatically_report as auto- Alternatively, you can import the function independent
from automatically_report import get_address
get_address(mode_select=False)import automatically_report
temperature = automatically_report.cputemperature(float_mode=True)If you enable float_mode, it will return float. otherwise it will return integer.
Runnable script refer to coretemp_notice.py. After sending email it will print.
2021-02-26 11:11:11 | Temperature report complete.
Refer to coretemp_warning.py.
It will sending email if the CPU temperature higher then critical value.
2021-02-26 11:11:19 | Temperature report complete.
Otherwise it will print:
2021-02-26 11:11:31 | Core temperature under critical value.
Refer to ip_address_notice.py.
Configure the mode_select to select IPv4 only or IPv6 only.
- If you set
mode_selecttoIPv4
Compare IPv4 only. - If you set
mode_selecttoIPv6
Compare IPv6 only.
If address no change, it will print.
2021-02-26 11:28:56 | No changes detected.
If changes detected, depend on mode_select, it will sending email and print.
- IPv4 only
2021-02-26 11:28:14 | 114.514.19.19
- IPv6 only
2021-02-26 11:28:14 | 8930:8100:1145:141:919:36:114:514
- If
mode_selectis default (False)
2021-02-26 11:28:14 | [True, False] | 1.1.1.1 | 8930:8100:1145:141:919:36:114:514
False means that IPv6 has been change.
Refer to program_checker.py.
If the query program or process not found, it will sending email and print.
2021-02-26 11:12:55 | Program not found.
2021-02-26 11:12:55 | Status report complete.
Otherwise it will print:
2021-02-26 11:13:20 | Program found in process list.
Error message store at error.log
- Python 3.6 or above
- os
- re
- sys
- json
- socket
- getpass
- smtplib
- logging
- requests
- datetime
- subprocess
General Public License -3.0