Jelajahi Sumber

'send_mail.py' hinzufügen

tsi 3 tahun lalu
induk
melakukan
f3fdad05ae
1 mengubah file dengan 83 tambahan dan 0 penghapusan
  1. 83 0
      send_mail.py

+ 83 - 0
send_mail.py

@@ -0,0 +1,83 @@
+import urllib.request, tempfile, smtplib, email, time
+from datetime import datetime, timedelta
+from influxdb import InfluxDBClient
+
+tmpdir = tempfile.TemporaryDirectory() 
+beginning = str((1000*int(time.time()))-(17*3600000))
+end = str(1000*int(time.time()))
+
+def get_boot_time():
+    with open('/proc/uptime', 'r') as f:
+        uptime_seconds = int(float(f.readline().split()[0]))
+        boot_time = datetime.now() - timedelta(seconds=uptime_seconds) + timedelta(hours=1)
+    return boot_time
+
+def get_uptime():
+    with open('/proc/uptime', 'r') as f:
+        uptime_hours = round(float(f.readline().split()[0])/3600, 2)
+    return uptime_hours
+
+get_boot_time()
+client = InfluxDBClient(host='127.0.0.1', port=8086, database='solar')
+result = client.query("SELECT sum(\"eingespeiste_leistung\") *0.000002777777777 FROM \"Tannenstrasse\"  WHERE time >= " + beginning + "ms and time <= " + end + "ms")
+if 'series' in result.raw:
+    kwh = round(result.raw['series'][0]['values'][0][1], 1)
+else:
+    kwh = "0 - Keine Werte"
+
+urllib.request.urlretrieve("http://localhost:3000/render/d-solo/-wCxs6mgk/solaranlage?orgId=1&refresh=10s&panelId=2&from=" + beginning + "&to=" + end + "&width=600&height=300&tz=Europe%2FBerlin", tmpdir.name + "/leistung.png")
+
+# Send an HTML email with an embedded image and a plain text message for
+# email clients that don't want to display the HTML.
+
+from email.mime.multipart import MIMEMultipart
+from email.mime.text import MIMEText
+from email.mime.image import MIMEImage
+
+# Define these once; use them twice!
+strFrom = 'pv-tannenstr@web.de'
+strTo = ["tobias.siegel@outlook.com", "wsiegel@web.de"]
+
+# Create the root message and fill in the from, to, and subject headers
+msgRoot = MIMEMultipart('related')
+msgRoot['Subject'] = datetime.today().strftime('%Y-%m-%d') + ' - ' + str(kwh) + 'kWh - Solaranlage'
+msgRoot['From'] = strFrom
+msgRoot['To'] = ",".join(strTo)
+msgRoot.preamble = 'This is a multi-part message in MIME format.'
+
+# Encapsulate the plain and HTML versions of the message body in an
+# 'alternative' part, so message agents can decide which they want to display.
+msgAlternative = MIMEMultipart('alternative')
+msgRoot.attach(msgAlternative)
+
+msgText = MIMEText('This is the alternative plain text message.')
+msgAlternative.attach(msgText)
+
+# Get Boot Time and Convert it to String
+bt = get_boot_time()
+bt_str = bt.strftime("%d.%m.%Y, %H.%M")
+
+# We reference the image in the IMG SRC attribute by the ID we give it dasdasdbelow
+msgText = MIMEText('<img src="cid:image1"><br><p>Letzter Start: ' + bt_str + ' Uhr</p>', 'html')
+msgAlternative.attach(msgText)
+
+# This example assumes the image is in the current directory
+fp = open(tmpdir.name + '/leistung.png', 'rb')
+msgImage = MIMEImage(fp.read())
+fp.close()
+
+# Define the image's ID as referenced above
+msgImage.add_header('Content-ID', '<image1>')
+msgRoot.attach(msgImage)
+
+# Send the email (this example assumes SMTP authentication is required)
+import smtplib, ssl
+context = ssl.create_default_context()
+with smtplib.SMTP('smtp.web.de', 587) as server:
+    server.ehlo()  # Can be omitted
+    server.starttls(context=context)
+    server.ehlo()  # Can be omitted
+    server.login(strFrom, 'PV-Tannenstr')
+    server.sendmail(strFrom, strTo, msgRoot.as_string())
+
+tmpdir.cleanup()