Außentemperaturanzeige mit Netatmo-Daten (III)

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.

 


Comments are closed.