Итак, я пытаюсь сделать проект среды мониторинга завода, в котором работает сторона arduino / внедренная. Идея состоит в том, что когда он падает ниже определенного порогового значения в датчиках, встроенная сторона отправляет строку через модуль Bluetooth в последовательные порты, которые слушает этот скрипт Python. Если скрипт обнаруживает одну из строк в порту, он отправляет сообщение электронной почты на введенную электронную почту.
Тем не менее, в настоящее время кажется, что оно не отправляет электронную почту на введенную пользователем электронную почту, я не уверен, что проблема заключается в моем методе send_email или в самом основном цикле, но после заполнения всех пользовательских значений ввода просто зацикливается навсегда, ничего не делая, даже не печатая дело No Email Sent, и я в настоящее время не уверен, почему. Кроме того, были некоторые проблемы с функцией getpass3 и шифрованием пароля в терминале, поэтому на данный момент я переключился на raw_input после того, как я получил функцию отправки электронной почты, я планирую переключиться обратно на getpass3 и исправить это, как все, что было раньше, было введите display запрос на ввод пароля и затем повесьте в этой точке.
Это моя вторая программа на python, поэтому вполне возможно, что я неправильно истолковал, как некоторые из этих методов вызываются или передаются, но из того, что я видел в документации, я не вижу в этом ничего плохого , Я получил adruino для отправки информации через последовательный порт и раньше, но может быть проблема с сопряжением устройств Bluetooth, которая, как я заметил, уже случалась раньше для справки, это модуль HC-05, и я получил его отправьте информацию в TeraTerm раньше.
import time
import serial
import smtplib
import colorama
import getpass3
useremail = raw_input("Enter your email ")
# getpass3.set_echo = '#'
# userpass = getpass3.getpass("Enter your password: ")
userpass = raw_input("Enter your password ")
usercom = raw_input("Please Enter COMPORT: ").upper()
print usercom
TO = useremail
GMAIL_USER = useremail
GMAIL_PASS = userpass #plaintext need to get getpass3 working i hate this way
SUBJECT = 'Plant Environment Needs Attention'
TEXT1 = 'Low Light Levels Detected in the Enclosure'
TEXT2 = 'Low Mositure in the Soil Detected in the Enclosure'
TEXT3 = 'Temperature Outside of Safe Range in Enclosure'
TEXT4 = 'Humidity Outside of Safe Range in Enclosure'
ser = serial.Serial(usercom, 9600) #seems to always be COM9 on my PC can adjust as needed
def send_email(TEXT):
print("Sending Email")
#SMTP server setup
smtpserver = smtplib.SMTP("smtp.gmail.com",587)
smtpserver.ehlo()
smtpserver.starttls()
smtpserver.ehlo()
#login to gmail can potentially add diff email client if wanted
smtpserver.login(GMAIL_USER, GMAIL_PASS)
header = 'To:' + TO + '\n' + 'From: ' + GMAIL_USER
header = header + '\n' + 'Subject:' + SUBJECT + '\n'
# #form the diff cases here based off if its temp hum ect
print header
msg = header + '\n' + TEXT + ' \n\n'
#send email and close server for security reasons
smtpserver.sendmail(GMAIL_USER, TO, msg)
smtpserver.close()
# just do it forever
while True:
message = ser.readline()
print(message)
#big brained implamentation
#L = light
if message[0] == 'L' :
send_email(TEXT1)
print("Email Sent")
#S = Soil Moisutre
if message[0] == 'S' :
send_email(TEXT2)
print("Email Sent")
#T = temp
if message[0] == 'T' :
send_email(TEXT3)
print("Email Sent")
#H = Humidity
if message[0] == 'H' :
print("Email Sent")
send_email(TEXT4)
else:
print("No Email Sent")
time.sleep(0.5)