Programm zur Ermittlung der Daten meiner Wetterstation
Die Wetterdaten werden von der Netatmo-Wetterstation über das Internet an die Server von Netatmo versendet. Mit einer App für IOS oder Android lassen sich dann die Daten ansehen. Weiterhin ist dies auch mit einer Webseite nach Autentifikation mögich. Ein netter Nebenefekt dieser Datensammelei ist eine weltweite Karte mit den Außentemperaturen aller freigegebener Netatmogeräte (Link).
Netatmo gibt die Möglichkeit eigene Apps zu erstellen, die Dokumentatiaon dazu findet man unter https://dev.netatmo.com/doc. Da ich Python für den RaspberryPi nutzen wollte fand ich auch dazu eine APi im GitHub: https://github.com/philippelt/netatmo-api-python
Phillip Larduinat hat eine Bibliothek in Python erstellt um die API-Funktionen von Netatmo aufzurufen. Diese habe ich für mein Programm benutzt. Hier nun der Quelltext für das Auslesen der Daten meiner Wetterstation:
#!/usr/bin/python3 # encoding=utf-8 # Ermittelung der Wetterdaten aus meiner Netatmo-Wetterstation # mithilfe der Phython-Api von Phillip Larduinat import sys, datetime, time import lnetatmo # Device-Liste von Netatmo abholen authorization = lnetatmo.ClientAuth() devList = lnetatmo.DeviceList(authorization) # Ermittlung der aktuellen Wetterdaten --------------------------------------------- # Aktuelle Aussentemperatur ausgeben temp_Out=devList.lastData()['Garten']['Temperature'] # Min / Max Temperaturen ausgeben temp_min = devList.lastData()['Garten']['min_temp'] temp_max = devList.lastData()['Garten']['max_temp'] # Niederschlagmenge des heutigen Tages auslesen und ausgeben rain = devList.lastData()['Niederschlag']['sum_rain_24'] # Wetterdaten des Vortages ermitteln: ----------------------------------------------- now = time.time() # Von Jetzt start = now - 2* 24 * 3600 # zwei Tage zurück #Ermittlung der Temperaturen als Liste resp = devList.getMeasure( device_id='70:ee:50:01:d8:ec', module_id='02:00:00:01:e7:a0', scale="1day", mtype="min_temp,max_temp", date_begin=start, date_end=now) # Extraieren von Zeit, minTemp und Maxtemp result = [(int(k),v[0],v[1]) for k,v in resp['body'].items()] # Liste sortieren (nach Zeit, da erstes Element) result.sort() #Ermittlung des Datums des Vortages der Min/Max Temperaturen vom Vortag messdatum = time.localtime(result[0][0]) #Ermittlung der Min- und Max-Temperaturen des Vortages last_temp_min = result[0][1] last_temp_max = result[0][2] #Ermittlung des Niederschlages je Tag als Liste resp = devList.getMeasure( device_id='70:ee:50:01:d8:ec', module_id='05:00:00:00:32:72', scale="1day", mtype="sum_rain", date_begin=start, date_end=now) # Extraieren des Datums und des Niederschalges resultRain = [(int(k),v[0]) for k,v in resp['body'].items()] # Liste sortieren (nach Zeit, da erstes Element) resultRain.sort() #Ermittlung der Niederschlags von Gestern last_rain = resultRain[0][1] # --------------------------------------------------------------------------------- # Ausgabe der ermittelten Werte (Später erfolgt die Ausgabe auf dem CBerry28) print (' ') # Aktuelle Aussentemperatur ausgeben print ("Aussentemperatur: {0:.1f}°C".format(temp_Out)) # Min / Max Temperaturen ausgeben print ("Min / Max: {0:.1f}°C / {1:.1f}°C".format(temp_min,temp_max)) # Niederschlagmenge des heutigen Tages auslesen und ausgeben print ("Regen: {0:.1f} Liter/qm".format(rain)) print (' ') #Ausgabe des Datums vom Vortag print(time.strftime("Messwerte vom %d.%m.%Y", messdatum) +":") #Ausgabe der Min/Max Temperaturen vom Vortag print ("Min / Max: {0:.1f}°C / {1:.1f}°C".format(last_temp_min,last_temp_max)) #Ausgabe der Niederschlags von Gestern print ("Regen: {0:.1f} Liter/qm".format(last_rain)) print (' ') # ---------------------------------------------------------------------------------
Dadurch wird die Aktuelle Temperatur, die Minimas und Maximas der Aussentemperaturen und des Niedersschlages des aktuellen und des Vortages ermittelt.
Das Auslesen der aktuellen Daten war für mich kein Problem, schwieriger stellte sich die Ermittelung der Altdaten heraus. Im Demoprogramm wird eine Device-ID und eine Modul-ID erwartet. Diese lassen sich mit dem folgenden Programm ermitteln…
#!/usr/bin/python3 # encoding=utf-8 import sys import lnetatmo # Device-Liste von Netatmo abholen authorization = lnetatmo.ClientAuth() devList = lnetatmo.DeviceList(authorization) # Funktionen um die ID von Modulen und Device zu ermitteln print(devList.modulesNamesList()) # Niederschlag ist der Modulname meines Regenmessers print(devList.moduleByName('Niederschlag'))
Der nächste Schritt wird dann die Ausgabe auf dem CBerry28-Display sein.