Отправка электронной почты в Gmail на основе уведомления от Arduino на последовательный порт - PullRequest
1 голос
/ 02 апреля 2019

Итак, я пытаюсь сделать проект среды мониторинга завода, в котором работает сторона 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...