Ich habe da vor einiger Zeit mal ein Modul für OpenWeather gemacht: Modul OpenWeatherMap
Ansonsten werden ich mich mit Wunderground-API noch beschäftigen, Solbad die neuen API-Key’s erhältlich sind (sollte eigentlich seit gestern soweit sein). Die API-Key’s sind aber, so wie es zur zeit aussieht, nur für Leute kostenlos, die auch mit eigener Wetterstation Daten liefern (was ich tue).
I write to make sure you know you are not forgotten. We are working hard to prepare the gateway to distribute the new API keys. Thank you for your continuing attention and patience.
I expect that it will be open by Friday, February 22 at the latest, and perhaps as early as Monday, February 18.
I will email you again just as soon as I have better information!
Yours very truly,
Victoria Gardner
Weather Underground API customer service
Ich werde auch mein Modul nachführen, also das PWS Upload Modul, falls es was zu tun gibt. Laut Victoria wird sich der Upload nicht ändern, aber wenn sich was tut werde ich es einbauen.
Ich bin gerade dabei, SymconMisc/Wunderground anzupassen.
Eine Info, die ich von Wunderground bekommen habe: (fasst DU es noch nicht wissen solltest): der Forcaste funktioniert für die Keys der PWS-Besitzer kostenfrei nur als 5days-Variante (getestet). Ich hatte vorgestern erst mit der 7days-Variante getestet und bin immer gescheitert und habe denen dann geschrieben.
Bzgl des Upload der Daten zu Underground: da habe ich die Info von Wunderground, das sich da nichts ändert. Hast Du da andere Informationen?
Ach ja … die API liefert eine MENGE an Daten!!! Ich glaube wenn man alles lesen würde, benötigt man alleine dafür eine Unlimited Lizenz
Ich werde vermutlich heute Nachmittag eine Beta in Github stellen. Aktuell bastel ich noch an der Konfigurierbarkeit, da es sonst zu viele Variablen werden.
Ok, dann machen ich erstmal nicht weiter, denn wenn dein Modul ja alles (soweit möglich) liefert, kann man ja darauf umsteigen, Module brauchen nicht doppelt zu sein. Ich selbst benutze nur einen Bruchteil davon (nur die 12h-Vorhersage für Temperatur und bräuchte auch die Regenvorhersage)
Wenn Du das Modul online hast, würde ich das gerne testen …
Grund: ich hatte die Geo-Position mit Komma eingegeben. Wäre es nicht besser, die Properes als Float zu machen denn als String? Du müsste natürlich die Float entsprechend formatieren …
Ich habe das bei einigen Module auch so gemacht, wenn die Werte 0 sind hole ich die Position aus dem Location-Modul …
Versuch
nach Korrektur der Position
Debug-Dump ist attached.
Ich kann natürlich gerne auch danach suchen, nur dann kollidieren ggfs. meine Korrekturen mit Änderungen von Dir?
Wenn ich das auf die schnelle richtig sehe ist der Wert, der in die Variable geschrieben werden soll, leer.
Um das abzufangen verwende ich immer eine solche Funktion
protected function SetValue($Ident, $Value)
{
@$varID = $this->GetIDForIdent($Ident);
if ($varID == false) {
$this->SendDebug(__FUNCTION__, 'missing variable ' . $Ident, 0);
return;
}
if (IPS_GetKernelVersion() >= 5) {
$ret = parent::SetValue($Ident, $Value);
} else {
$ret = SetValue($varID, $Value);
}
if ($ret == false) {
$this->SendDebug(__FUNCTION__, 'mismatch of value "' . $Value . '" for variable ' . $Ident, 0);
}
}
und einfach so aufrufen
$this->SetValue('DP0QPF', $DP0QPF);
Man muss zwar bei fehlende oder leeren Angaben den Inhalt (hier wäre ja eine 0 korrekt) sinnvollerweise abfangen, aber so knallt es nicht…
Eine Nachfrage zu dem Upload: Du hast in der Doku angegeben, das man das WU-Passwort angeben soll. Nicht den Station-Key? Ich mache im Rahmen von meinem Netatmo-Modul auch den Upload und da verwende ich Station-ID und Station-Key.
Eine Nachfrage zu dem Upload: Du hast in der Doku angegeben, das man das WU-Passwort angeben soll. Nicht den Station-Key? Ich mache im Rahmen von meinem Netatmo-Modul auch den Upload und da verwende ich Station-ID und Station-Key.
Station ID und Passwort werden benötigt. Dein Modul schaue ich mal mal an - da ich keine Netatmo habe, war das nicht auf dem Radar. Weiterhin muss ich meine Upload noch deutlich erweitern, da meine DAVIS eine Menge mehr Daten liefert (aktuell erfolgt der Upload via Meteobridge). Es gibt also noch einiges zu tun.
data ist als array aufgebaut (also json_decode(xxx, true))
var ist der Namen des Array-Elementes, wenn das Element tiefer in der Hierarchie liegt werden die einzelnen Ebenen der Pfad hierzu durch ‚.‘ getrennt
dflt ist der Standardwert, den ich einsetze, wenn das Element nicht da ist / leer ist
Tja, das ist immer so ein Frage. Da ich eine unlimited Version habe, ist die Anzahl der Variablen nicht so relevant. Du rufst ja sowieso hier nur den Forecast ab, nicht die aktuelle Daten (https://api.weather.com/v2/pws/observations/current). Zwischen den zwei Call würde ich dann unterscheiden.
Die aktuellen Daten hat man ja selber geliefert … wobei (um deine Idee aufzugreifen) … wenn man nur z.B. die Temperatur liefert - bekommt man bei diesem Abruf nur diese Information oder zB den Wind dazu?
Für mich kein Thema, weil ich alle Daten selbst ermittle (ausser UV und Sonneneinstrahlung) und für Dich ja eher auch nicht (wenn ich dich richtig verstehe). Man kann aber auch die aktuellen Daten anderer PWS abrufen …
Zusammengefasst - mir würde die granulieren völlig ausreichen.
Hierzu vielleicht noch eine Anregung: ggfs ist es ja erforderlich, die Daten, die man schicken will, umzurechnen (Windgeschwindigkeit hat der eine in m/s und der andere in km/h).
Man kann das natürlich so machen, das man sich selbst in IPS eine Zusatzvariable erstellt und laufen berechnet und diese dann verwendet - klar geht das. Finde ich aber irgendwie nicht so dolle (ganz persönliches „Gefühl“).
In IPSymconOpenWeatherMap/OpenWeatherStation machen ich das daher so, das ich optional ein Script aufrufe, das bekommt alle vorher ermittelten Daten und liefert diese dann, ggfs umgerechnet oder ergänzt, zurück. Diese zurückgelieferten Daten verwenden ich dann um OpenWeatherMap mit Daten zu versorgen.
Ich denke meine Theorie sollten gehen, da der Download von Wetterdaten als Forecast an Geodaten und nicht an die Station gekoppelt ist. Die „Station“ benötigt man „nur“ damit man einen API Schlüssel bekommt - das sollte es sein.
Ich schaue mir das die Woche mal genauer an - wenn das geht kann man die API mehr oder weniger wie bisher nutzen und bekommt genaue Wetterdaten.
meine letzte Anmerkung war nur auf current (also die aktuellen Daten) bezogen, also schickt Temperatur zu WU und bekommt dann aber den Ist-Zustand von Wind und Regen zurück.
Aber klar, ist eine andere Baustelle.
Ja klar … Current kann nur das liefern was da ist. Bei uns gibt es theoretisch 2 Stationen im Ort und eine 5km weg … wer wirklich auf Wetterdaten angewiesen ist, benötigt lokale Sensoren - da ist m.E. auch WU was ansich genau ist, zu ungenau - es sei denn der Nachbar hat eine Wetterstation.
Hi Demel,
mal eine Frage … verwendest Du die von dir beschriebene Funktion für jede Variable? Wenbn ich den Code richtig lese, die prüfst Du jede Variable ob sie leer ist und ersetzt sie dann mit einem Validen Wert. Das ist soweit ja auch sinnvoll, aber bei über 200 potentiellen Variablen die evtl. leer sind eine Menge Code mit überschaubarem Nutzen?
Sehe ich hier was falsch? Natürlich wäre es super die NULL’s abzufangen. Evtl… macht es Sinn das nur bei denen zu tun wo es oft der Fall ist und das wäre das aktuelle Segment (daypart0).
es geht natürlich nur über die Variablen, die Du auch auswerten willst, das ist klar.
Aber unabhängig davon, wie viele es sind, stellen sich ja immer zwei Probleme
a) man greift auf eine Element (egal ob Objekt oder Array) der json-Struktur zu. Ist das nicht da, rumst es, das Script bricht ab.
Also muss man jeden Zugriff mit isset testen - der Code ist dann schon umfangreicher.
Meiner Erfahrung nach kann man sich nie darauf verlassen, das alle Emelente da sind. Ich habe früher auch weniger geprüft, habe aber dann in der Nacharbeit immer wieder mit Abbrüchen aufgrund fehlender Felder zu tun gehabt.
b) was macht man, wenn das Feld zwar da ist, aber keinen Inhalt hat? Es ist natürlich eine eigenen Frage, wie man damit umgeht, wenn für eine bestimmte Variable keine Werte mehr kommen. Manchmal mag das bedeuten, das es keinen (neuen) Wert gibt und der alte weiter gilt, meiner Erfahrung nach ist es aber i.d.R. nicht so zu verstehen, der bisherige Wert ist nicht mehr gültig
Das muss man natürlich selbst entscheiden, wie man das gewichtet bzw. wie das auch in der jeweiligen API zu verstehen ist.
leider gibt es bei den IPS-Variablen nicht einen NULL-Wert - also nicht die Zahl 0, sondern das NICHTS. Das wäre mir am liebsten, denn dann wäre klar, es gibt diesen Wert im Augenblick nicht, also versuche ich Ersatzwerte zu nehmen, die möglichst nicht „falsch“ sind bzw dem Wert entsprechend, die in IPS für neue Variablen verwendet werden (also false für bool bzw. 0 für int/float).
Das eigene SetValue() benutze ich ja, damit das Script nicht rumst, wenn der Datentyp nicht zum IPS-Variablentyp passt.
Eine Menge Code sehe ich da allerdings nicht, das ist ja nicht mehr als der Zugriff auch die Variable
FYI … am 22.03.2019 wird die alte API für den Wetterdownload abgestellt … wie man an neue Keys kommt steht nochmal in dem Dokument. Für den Download der Wetterdaten könnt ihr das Wunderground PWS Sync Modul verwenden [Modul] Wunderground Wetterstation (PWS) Upload