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('

Letzter Start: ' + bt_str + ' Uhr

', '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', '') 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()