5okin
4 years ago
3 changed files with 96 additions and 0 deletions
@ -0,0 +1,28 @@ |
|||||
|
import time |
||||
|
from datetime import datetime |
||||
|
from .weather_mail import send_mail |
||||
|
|
||||
|
|
||||
|
def percentage(old, new, operator, percent): |
||||
|
'''Check if numbers are within range''' |
||||
|
|
||||
|
if operator == '+': |
||||
|
return bool(round((old + old * percent / 100.0), 1) == new) |
||||
|
elif operator == '-': |
||||
|
return bool(round((old - old * percent / 100.0)) == new) |
||||
|
|
||||
|
|
||||
|
def process(data): |
||||
|
'''Check incoming data for +40% temp and -50% ground humidity''' |
||||
|
|
||||
|
if len(data) > 0: |
||||
|
latest_measurement = data[len(data)-1] |
||||
|
|
||||
|
for measurement in data: |
||||
|
if measurement != data[len(data)-1]: |
||||
|
tdelta = datetime.strptime(latest_measurement['time'], '%H:%M:%S') - datetime.strptime(measurement['time'], '%H:%M:%S') |
||||
|
if tdelta.seconds < 300: |
||||
|
if percentage(measurement['temperature'], latest_measurement['temperature'], '+', 40) and percentage(measurement['air-humidity'], latest_measurement['air-humidity'], '-', 50): |
||||
|
send_mail(measurement['temperature'], latest_measurement['temperature'], measurement['air-humidity'], latest_measurement['air-humidity']) |
||||
|
else: |
||||
|
data.remove(measurement) |
@ -0,0 +1,28 @@ |
|||||
|
import json |
||||
|
import os |
||||
|
from flask_pymongo import PyMongo |
||||
|
from influxdb import InfluxDBClient |
||||
|
from app import app |
||||
|
|
||||
|
|
||||
|
#Connect to db using environment variables |
||||
|
CLIENT = InfluxDBClient('influxdb', 8086, os.environ['INFLUXDB_USERNAME'], os.environ['INFLUXDB_PASSWORD'], os.environ['INFLUXDB_DATABASE']) |
||||
|
|
||||
|
|
||||
|
def send_data(data): |
||||
|
'''Send a single json object to the database''' |
||||
|
|
||||
|
data_to_send = [] |
||||
|
add_db_info = {} |
||||
|
|
||||
|
add_db_info['measurement'] = "Rpi_data" |
||||
|
add_db_info['fields'] = data |
||||
|
|
||||
|
data_to_send.append(add_db_info) |
||||
|
|
||||
|
print(f'Send to DB: {data_to_send}', flush=True) |
||||
|
|
||||
|
try: |
||||
|
CLIENT.write_points(data_to_send) |
||||
|
except: |
||||
|
print("Failed to send to database") |
@ -0,0 +1,40 @@ |
|||||
|
import os |
||||
|
import smtplib |
||||
|
from email.message import EmailMessage |
||||
|
|
||||
|
|
||||
|
EMAIL_ADDRESS = os.environ['MAILUSER'] |
||||
|
EMAIL_PASSWORD= os.environ['MAILPASS'] |
||||
|
|
||||
|
def send_mail(measurment_temp, latest_measurment_temp, measurment_hum, latest_measurment_hum): |
||||
|
'''Handles email compose and connection to SMTP''' |
||||
|
|
||||
|
print(f"Email send: {measurment_temp} and {latest_measurment_temp}", flush=True) |
||||
|
|
||||
|
message = f"""The temperature went from {measurment_temp} to {latest_measurment_temp} |
||||
|
in five minutes, thats a 40% increase! And the air humidity went from |
||||
|
{measurment_hum} to {latest_measurment_hum} in five minutes, thats a 50% |
||||
|
drop! |
||||
|
""" |
||||
|
|
||||
|
msg = EmailMessage() |
||||
|
msg['Subject'] = 'Weather Staion Report' |
||||
|
msg['From'] = EMAIL_ADDRESS |
||||
|
msg['To'] = 'nkoutsolelos@gmail.com' |
||||
|
|
||||
|
msg.set_content('This email was send automaticly from the weather server') |
||||
|
|
||||
|
msg.add_alternative(f"""\ |
||||
|
<!DOCTYPE html> |
||||
|
<html> |
||||
|
<body> |
||||
|
<h1 style="color:SlateGray;">Weather is off the charts !!!!</h1> |
||||
|
<p>{message}</p> |
||||
|
</body> |
||||
|
</html> |
||||
|
""", subtype='html') |
||||
|
|
||||
|
|
||||
|
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp: |
||||
|
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD) |
||||
|
smtp.send_message(msg) |
Loading…
Reference in new issue