Hallo liebe Leserinnen und Leser!
Heute geht es weiter mit dem Projekt „Funkthermometer am Raspberry Pi“.
Ich habe mir vor kurzem ein kleines Python-Script gebastelt, das mich per Mail benachrichtigt, wenn die Batterien in einem (oder mehreren) Funkthermometern leer sind. Ob die Batterien leer sind, überprüfe ich einfach, indem ich das Script jeden Morgen per cron durchlaufen lasse und dieses überprüft, ob für den jeweiligen Sender und aktuellen Tag bereits eine .csv-Datei angelegt wurde. In der Mail wird dann das leere Funkthermometer mit Standort genannt, sodass ich ggf. dort dann die Akkus nachladen bzw. Batterien tauschen kann.
Ich habe das Script etwas kommentiert, sodass es einfach zu nutzen sein sollte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/usr/bin/env python2.7 # -*- coding: utf-8 -*- import os.path import time import smtplib from email.mime.text import MIMEText # declare names of senders in dictionary sender_names = {1 : "im Wohnzimmer", 2: "im Badezimmer", 3: "im Schlafzimmer", 4: "draußen"} empty_battery_sensors = [] # generate filename for today's files filename = "/log" + "-" + repr(time.localtime()[2]) + "-" + repr(time.localtime()[1]) + "-" + repr(time.localtime()[0])+".csv" path_prefix = "/var/www/" for x in range(1,5): # generate full path to files of today full_path = path_prefix + repr(x) + filename # check if file[s] exist[s] file_check = os.path.isfile(full_path) # do the following if file doesn't exist [i.e. battery is empty] if file_check == False: empty_battery_sensors.append(x) for element in empty_battery_sensors: server = smtplib.SMTP('smtp.sender.de', 587) server.ehlo() server.starttls() server.ehlo() # log in to the server server.login("nutzername", "passwort") value = "Beim Funkthermometer " + sender_names[element] + " sind die Akkus leer. Bitte nachladen oder tauschen." msg = MIMEText(value, "plain", "utf-8") # define recipients for mail[s] msg['Subject'] = "[Achtung] Funkthermometer " + sender_names[element] + " Batterien laden!" msg['From'] = "Wetterstation" msg['To'] = ", ".join(recipients) # send the mail[s] server.quit() |
Da ich das Script jeden Morgen um 8 Uhr laufen lasse, werde ich zu dieser Zeit ggf. über leere Batterien informiert. Bis dahin sollte auf jeden Fall von allen Sendern mit vollen Batterien Werte am Raspberry Pi eingetroffen sein.
Bei Fragen, Anregungen, Kritik – wie immer einfach Kommentarfeld unten benutzen.
Danke für das Script! Lässt sich ja vielseitig verwenden, nicht nur bei Funkthermometern ;)