====== Openweathermap ====== Von der Webseite www.openweathermap.com kann man per REST-Schnittstelle kostenlos die aktuellen Wetterdaten von Orten weltweit herunterladen. Kostenlos ist der Service allerdings nur, wenn mann weniger als 60 Aufrufe pro Minute hat, für größere Klickzahlen muss man einen kostenpflichtigen Service in Anspruch nehmen. Über die Güte der Daten kann ich keine Angaben machen. Nach meinen Beobachtungen gibt es schon einige Abweichungen von meinen Wetterbeobachtungen und anderen Wetterdiensten. ===== API ===== Um den Dienst nutzen zu können, muss man sich Registrieren und einen API-Key generieren, der bei den Aufrufen mitgeschickt werden muss. Die API ist auf der Seite http://openweathermap.com/api ausführlich erläutert. Es gibt eine API für das aktuelle Wetter, kostenlos auch für eine 5-Tage-Wettervorhersage, Umweltdaten, etc. Ich habe im Folgenden nur die API für das aktuelle Wetter benutzt. Der Aufruf dazu lautet: http://samples.openweathermap.org/data/2.5/weather?id=2172797&appid=b6907d289e10d714a6e88b30761fae22 Als Parameter mitgeliefert wird die ''id'' der Stadt und die oben beschriebene ''appid''. ===== Ermitteln der Stadt-Id ===== Es gibt eine vollständige Liste mit allen Städte-IDs zum [[http://bulk.openweathermap.org/sample/city.list.json.gz|Download]]. Dort sucht man sich die gewünschte ID heraus. ===== Aufruf der Schnittstelle ===== In PHP wurde das mit folgendem Codebeispiel umgesetzt. Die Daten stehen dann in einem Array zur Verfügung, dass man sich gut auf dem Bildschirm ausgeben und analysieren kann: $url = "http://api.openweathermap.org/data/2.5/weather?id=6553135&lang=de&appid=xxputyourownkeyxxx"; $data = file_get_contents($url); $arrData = json_decode($data,true); echo "
";  print_r ($arrData); echo "
";
Die Ausgabe sieht dann folgendermaßen aus: Array ( [coord] => Array ( [lon] => 7.81 [lat] => 51.68 ) [weather] => Array ( [0] => Array ( [id] => 800 [main] => Clear [description] => Klarer Himmel [icon] => 01d ) ) [base] => stations [main] => Array ( [temp] => 277.15 [pressure] => 1018 [humidity] => 55 [temp_min] => 277.15 [temp_max] => 277.15 ) [visibility] => 10000 [wind] => Array ( [speed] => 1.5 [deg] => 190 ) [clouds] => Array ( [all] => 0 ) [dt] => 1519050000 [sys] => Array ( [type] => 1 [id] => 4912 [message] => 0.0223 [country] => DE [sunrise] => 1519022051 [sunset] => 1519059102 ) [id] => 6553135 [name] => Hamm, Stadt [cod] => 200 ) Die Temperaturen sind in Kelvin angegeben und müssen in ºC umgerechnet werden. ===== Umsetzung mit PHP ===== Die Umsetzung ist jetzt relativ einfach. Die Windstärke ist in der Einheit m/s angegeben. Dort habe ich eine Umrechnung in Windstärken vorgenommen ([[https://de.wikipedia.org/wiki/Beaufortskala|Beaufort-Skala]]). In der Include-Datei ''beaufort-skala.php'' gibt es die Funktion ''getBeaufort()'', die ein Array aus Windstärke und Windstärkenbeschreibung liefert. Da die Windrichtung ebenfalls nur in Grad angegeben wird, habe ich dort zusätzlich eine Prozedur ''getWindrichtung()'' eingefügt, die die meteorologischen Bezeichnungen Nord, Nordost , Ost , ... liefert. Wetterstation

Wetterdaten für

°C

Uhr

Temperatur °C Min: °C Max: °C
Wind , Windstärke , m/s (°)
Wolken %
Luftdruck hPa
Luftfeuchtigkeit %
Sichtweite
Sonenaufgang Uhr
Sunnenuntergang Uhr

Quelle: www.openweathermap.com

* [[https://www.bankerheide.de/wetter/|Skript ausführen]] ===== Windstärke und Windrichtung ===== Die Ermittlung der Windstärke und der Windrichtung lässt sich sicherlich kürzer und eleganter lösen. 0, 'beschreibung' => 'Windstille', 'minwert' => 0 ], ['windstaerke' => 1, 'beschreibung' => 'leiser Zug', 'minwert' => 0.3 ], ['windstaerke' => 2, 'beschreibung' => 'leichte Brise', 'minwert' => 1.6 ], ['windstaerke' => 3, 'beschreibung' => 'schwache Brise', 'minwert' => 3.4 ], ['windstaerke' => 4, 'beschreibung' => 'mäßige Brise', 'minwert' => 5.5 ], ['windstaerke' => 5, 'beschreibung' => 'frische Brise', 'minwert' => 8.0 ], ['windstaerke' => 6, 'beschreibung' => 'staker Wind', 'minwert' => 10.8 ], ['windstaerke' => 7, 'beschreibung' => 'steifer Wind', 'minwert' => 12.9 ], ['windstaerke' => 8, 'beschreibung' => 'stürmische Wind', 'minwert' => 17.2 ], ['windstaerke' => 9, 'beschreibung' => 'Sturm', 'minwert' => 20.8 ], ['windstaerke' => 10, 'beschreibung' => 'schwerer Sturm', 'minwert' => 24.5 ], ['windstaerke' => 11, 'beschreibung' => 'orkanartiger Sturm', 'minwert' => 28.5 ], ['windstaerke' => 12, 'beschreibung' => 'Orkan', 'minwert' => 32.7 ], ); function getBeaufort($numV) { global $arrBeaufort; $strDescription=""; $numSpeeds=0; foreach ($arrBeaufort as $wind) { if ($wind['minwert'] <= $numV) { $strDescription = $wind['beschreibung']; $numSpeeds = $wind['windstaerke']; } else break; } return [$strDescription,$numSpeeds]; } $arrWindrichtung = array ( ["bezeichnung" => "Nord", "kurzbez" => "N", "winkel" => 0], ["bezeichnung" => "Nordost", "kurzbez" => "NE", "winkel" => 22.5], ["bezeichnung" => "Ost", "kurzbez" => "E", "winkel" => 67.5], ["bezeichnung" => "Südost", "kurzbez" => "SE", "winkel" => 112.5], ["bezeichnung" => "Süd", "kurzbez" => "S", "winkel" => 157.5], ["bezeichnung" => "Südwest", "kurzbez" => "SW", "winkel" => 202.5], ["bezeichnung" => "West", "kurzbez" => "W", "winkel" => 247.5], ["bezeichnung" => "Nordwest", "kurzbez" => "NW", "winkel" => 292.5], ["bezeichnung" => "Nord", "kurzbez" => "N", "winkel" => 337.5], ); function getWindrichtung($numDirection) { global $arrWindrichtung; $strBezeichnung=""; $strKurbez=""; foreach ($arrWindrichtung as $richtung) { if ($richtung['winkel'] <= $numDirection) { $strBezeichnung=$richtung['bezeichnung']; $strKurbez=$richtung['kurzbez']; } } return [$strBezeichnung,$strKurbez]; } ?>