Raspberry Pi DIY Wetterstation – Wetter API
Die am Raspberry Pi gemessenen Werte des Raumklimas sollen über eine Wetter API mit Daten von einer Wetterstation in der Nähe angereichert werden. In diesem Artikel zeige ich euch wie man Wetter API Daten gezielt abfragen kann.
Raspberry Pi DIY Wetterstation – Wetter API
Für meine Zwecke hab ich openweathermap.org entdeckt. Dort kann man sich registrieren und bekommt einen Wetter API Zugang. Mit dem gratis Account kann man bis zu 60 Abfragen pro Minute für aktuelle Daten machen. Das ist mehr als genug, außerdem gibt es dort für meinen Heimatort eine Station die ich abfragen kann. Wenn man mehr benötigt oder auf historische Daten zugreifen möchte muss man zahlen. Nach der Registrierung bekommt man einen API Key, welcher wenige Stunden später freigeschaltet wird.
Testabfrage
Mit dem API Key kann man gleich eine Testabfrage starten. Es handelt sich um eine REST Schnittstelle. Man ruft eine URL mit Parametern auf und bekommt als Ergebnis eine JSON Datenstruktur mit dem Ergebnis. Für die Abfrage der aktuellen Wetterdaten eines Ortes übergibt man neben dem Ort auch den API Key und optional auch das Landeskürzel (manche Ortsnamen gibt es in mehreren Ländern). In meinem Fall liefert
https://api.openweathermap.org/data/2.5/weather?q=Mank,at&APPID=MEINAPIKEYSTEHTHIER
folgende Werte:
{"coord":{"lon":15.34,"lat":48.11},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"stations","main":{"temp":289.25,"pressure":1012,"humidity":55,"temp_min":288.71,"temp_max":290.15},"wind":{"speed":9.3,"deg":250},"clouds":{"all":34},"dt":1556715367,"sys":{"type":1,"id":6879,"message":0.0062,"country":"AT","sunrise":1556682051,"sunset":1556734232},"id":7871819,"name":"Mank","cod":200}
Achtung: ich habe meinen API Key durch MEINAPIKEYSTEHTHIER ersetzt. Dort müsst ihr euren eingeben. Der Abfrageparameter ist ein q mit den Werten Ort und optional mit Komma getrennt das Landeskürzel. Nachdem die Testabfrage so gut läuft kann ich auch schon ein Script bauen, welches periodisch die Daten abholt.
Tipp: Genaue Informationen zu den Werten bekommt man aus der API Dokumentation. Es lassen sich aber fast alle Werte auch so raus lesen. Die Temperatur wird beispielsweise als
"temp":289.25
geliefert. Das ist ein Wert in Kelvin. Man muss das nur noch in die passende Einheit umrechnen. Grad Celsius wäre passend, International vernünftig ist jedoch die Speicherung in Kelvin.
Das Script
In meinem Python Script zur Abfrage der Sensordaten gibt es nun auch einen Abschnitt für die Daten der Wetter API. Der relevante Teil sieht wie folgt aus:
# weather api code # hard coded API params appid = "MEINAPIKEYSTEHTHIER" # create your own at openweathermap.org city = "Mank" state = "at" # create API Url string url = "https://api.openweathermap.org/data/2.5/weather?q="+city+","+state+"&APPID="+appid # get weather information by calling REST API interface r = requests.get(url); # convert to JSON object js = r.json() # print needed values api_current_pressure = str(js['main']['pressure']) api_current_temperature = str(js['main']['temp'] - 273.15) # Kelvin to Celsius api_current_humidity = str(js['main']['humidity'])
Zuerst werden die Parameter für die API Schnittstelle gesetzt. Das Script wird nicht dynamisch laufen, deshalb habe ich die Werte hart codiert. Ihr müsst dort euren API Key hinterlegen und eventuell auch den Ortsnamen und das Landeskürzels eurer präferierten Wetterstation. Die Abfrage wird mit der requests.get gemacht, das sendet eine GET Abfrage an den Webserver des Wetterservices. Der Resonse wird in der Variable r gespeichert und mit r.json() in ein JSON Objekt gewandelt. aus diesem extrahieren wir die Werte die wir später in der Datenbank speichern möchten. In meinem Fall ist das der Luftdruck (api_current_pressure), die Temperatur (api_current_temperature) und die Luftfeuchtigkeit (api_current_humidity).
Fazit
REST Schnittstellen sind super einfach zu bedienen. Dank des JSON Formats kann man die erhaltenen Daten in jeder beliebigen Sprache einlesen. In meinem Fall wird immer die selbe URL aufgerufen, weshalb der Prozess hart codiert werden kann. Die Daten werden aufbereitet und stehen bereit um in die Cloud übertragen zu werden. Wir sind soweit mit der Abfrage der Daten fertig im nächsten Artikel beschäftigen wir uns mit der Frage wie wir diese laufend in die Cloud bringen und abspeichern.
Diese Artikelserie besteht aus folgenden Artikeln:
- Raspberry Pi DIY Wetterstation
- Raspberry Pi DIY Wetterstation – initiales Setup
- Raspberry Pi DIY Wetterstation – Temperatursensor
- Raspberry Pi DIY Wetterstation – Luftfeuchtigkeitsensor
- Raspberry Pi DIY Wetterstation – Luftdrucksensor
- Raspberry Pi DIY Wetterstation – Wetter API
- Raspberry Pi DIY Wetterstation – Webserver