отправка писем, если условие выполняется с использованием кода Python - PullRequest
0 голосов
/ 14 сентября 2018

мы настроили raspberry pi для измерения комнатной температуры на сервере и сохранили вывод в текстовом файле в этом формате "Temp: 24.0 C Humidity: 67.0 %" (обновляется каждые 2 секунды) с помощью скрипта python.

Теперь я ищу код Python для чтения значения температуры (например, 24.0) из текстового файла и отправки мне электронных писем, если условие истинно, как (Temp> 35.0), в противном случае ничего не делать и выйти.

Я новичок в python, поэтому, пожалуйста, помогите мне, мы уже написали код электронной почты и он работает, просто включите запрошенное условие выше в этом коде ниже.

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
fromaddr = "sender@gmail.com"
toaddr = "recipient@gmail.com"
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Alert: Server Room  " 
body = "Server room current temprature is : "
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

Эти сценарии будут выполняться с использованием вкладки cron.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

С первого взгляда это выглядит, но полное надежное решение довольно сложно реализовать.Код, который вы запрашиваете, может выглядеть следующим образом:

with open ('temp.txt', 'r',  encoding='utf-8') as temp:
 for line in temp:
       try: 
           temperature = float(line.split()[1])
           if temperature > 35.0: 
                 #SENDEMAIL 
           else: 
               pass
       except: 
          pass

Здесь temp.txt - файл из вашей малины.

О чем вам нужно беспокоиться:

  1. Чтение файлов в режиме реального времени.
  2. Вы должны разработать логику - каждое чтение должно читать новую часть файла.Для старой части вы уже отправили письмо.В противном случае вы будете заполнять почтовый ящик огромными письмами.
0 голосов
/ 14 сентября 2018

Я предполагаю, что что-то подобное сделает:

import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText


def send_email(temperature):
    fromaddr = "sender@gmail.com"
    toaddr = "recipient@gmail.com"
    msg = MIMEMultipart()
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Subject'] = "Alert: Server Room  "
    body = "Server room current temprature is : " + temperature
    msg.attach(MIMEText(body, 'plain'))
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(fromaddr, "password")
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()


f = open("temp_log.txt", "r")
content = f.read()
temp = content.split(' ')[1]
if float(temp) > 35:
    send_email(temp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...