树莓派-4B源码分享


前几天无聊,把一直吃灰的树莓派从角落里面拿出来。决定做私有云。但是发现之前写的python脚本失效了,经过查阅百度几番修改,使其重新”焕发生机”。
百度很多源码都是无效的,有各种各样的问题,对于不想折腾的人来说很麻烦。所以今天我就把自己写好的脚本分享出来。


1.开机自启播报IP发送至邮箱

#-*-coding:utf-8-*-
import time
import smtplib
import socket
from email.mime.text import MIMEText
from email.utils import formataddr

def sendemail():    #发送邮件
    my_sender = 'xxxxxx@xxxxx.xxx'  # 发件人邮箱账号
    my_pass = '************'  # 发件人邮箱密码
    my_user = 'xxxxxx@xxxxx.xxx'  # 收件人邮箱账号,我这边发送给自己
    msg=MIMEText('系统启动成功!\nIP地址:'+ip_adress+'\n默认端口:22\n', 'plain', 'utf-8')
    msg['From'] = formataddr(["Raspberry Pi 4B", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
    msg['To'] = formataddr(["xxxxxx@xxxxx.xxx", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
    msg['Subject'] = "来自树莓派的信"  # 邮件的主题,也可以说是标题
    server = smtplib.SMTP_SSL("xxxxxxxxxx", xxx)  # 发件人邮箱中的SMTP服务器,端口
    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
    server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  # 关闭连接

def get_ip():#获取树莓派的IP
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.connect(("1.1.1.1", 80))
    ip_adress = s.getsockname()[0]
    s.close()
    return ip_adress


if __name__ == '__main__':
    time.sleep(25)
    ip_adress = get_ip()
    sendemail()

2.定时播报CPU温度

# -*-coding:utf-8-*-
import smtplib
import os
from email.mime.text import MIMEText
from email.utils import formataddr

def email():
    my_sender = 'xxxxxx@xxxxx.xxx'  # 发件人邮箱账号
    my_pass = '********'  # 发件人邮箱密码
    my_user = 'xxxxxx@xxxxx.xxx'  # 收件人邮箱账号
    msg = MIMEText(date, 'plain', 'utf-8')
    msg['From'] = formataddr(["Raspberry 4B", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
    msg['To'] = formataddr(["xxxxxx@xxxxx.xxx", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
    msg['Subject'] = "来自树莓派的温度提示"  # 邮件的主题,也可以说是标题
    server = smtplib.SMTP_SSL("xxxxxxxxxx", xxx)  # 发件人邮箱中的SMTP服务器,端口是25
    server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
    server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
    server.quit()  # 关闭连接
    if init == 7:
        os.system('wall 警告!\nCPU温度过高\n为保证硬件稳定性与数据的安全,系统已强制执行关机命令\n\n您已被动下线!')
        os.system('shutdown -h now')

def get_cpu():  # 获取树莓派CPU的温度
    init = 0
    walls = 0
    file = open("/sys/class/thermal/thermal_zone0/temp", 'r')
    temp = float(file.read()) / 1000  # 读取结果,转换为浮点数
    temps = round(temp, 2)  # 保留两位小数点
    file.close()  # 关闭文件
    if temps <= 39:
        walls = '状态空闲!'
    elif 40 <= temps < 50:
        walls = '状态正常!'
    elif 50 <= temps < 60:
        walls = '当前状态:负载较高!'
    elif 60 <= temps < 70:
        walls = '达到预警值状态,请注意!!!'
    elif temps >= 70:
        walls = '警告!\n温度过高,为保证安全,执行强制性断电命令!'
        init = 7
    return '当前CPU温度为:'+str(temps)+'℃\n'+walls, init

if __name__ == '__main__':
    date, init = get_cpu()
    email()

3.邮件附件发送

#-*-coding:utf-8-*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formataddr


def mail():
    print("\n\t#-----------------邮箱附件发送服务-----------------#\t\n")
    my_sender = 'xxxxxx@xxxxx.xxx'             # 发件人邮箱账号
    my_pass = '********'                # 发件人邮箱密码
    my_user = input("请输入收件人账号:")         # 收件人邮箱账号
    ret = True
    content = input("请输入附件的路径:")
    temp = input("是否默认发送附件名称(默认会包含文件的路径信息):")
    try:
        msg = MIMEMultipart()
        att = MIMEText(open(content, 'rb').read(), 'base64', 'gb2312')
        att["Content-Type"] = 'application/octet-stream'
        if temp == "是":
            att.add_header('Content-Disposition', 'attachment', filename=content)
        else:
            contens = input("请输入发送附件名称(包含后缀):")
            att.add_header('Content-Disposition', 'attachment', filename=contens)
        # att["Content-Disposition"] = 'attachment,filename=content'  这种写法是bin附件(二进制)
        msg.attach(att)
        print("In transit......")
        server = smtplib.SMTP_SSL("xxxxxxxxxxxxx", xxx)                       # 发件人邮箱中的SMTP服务器,端口是25
        server.login(my_sender, my_pass)                                    # 括号中对应的是发件人邮箱账号、邮箱密码
        server.sendmail(my_sender, [my_user, ], msg.as_string())            # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
        server.quit()                                                       # 关闭连接
    except Exception:                                                       # 如果 try 中的语句没有执行,则会执行下面的 ret=False
        ret = False
    return ret

ret = mail()
if ret:
    print("邮件发送成功!\n如果您不想让别人知道你的邮件信息,可以使用clear命令来刷新终端!")
else:
    print("\n邮件发送失败!\n帮助:请检查您的附件路径,发件人邮箱以及网络连通性.")

评论与订阅

avatar
100
  订阅  
提醒