Seite 2 von 3

Re: Wetterdaten von Wunderground

Verfasst: 23.07.2019, 13:00
von novregen
Hallo,

was gibt es für Alterantiven zu Wunderground, oder bekommt man das noch mit einem öffentlichen Key zum laufen ?

Ansonsten würde mich interessieren, was ihr jetzt einsetzt bzw. ob es evtl. Sinn macht sich die Daten aus dem IoBroker zu holen openweathermap oder ähnliches....

Re: Wetterdaten von Wunderground

Verfasst: 23.07.2019, 13:18
von dondaik
dazu ist iobroker ideal ...

Re: Wetterdaten von Wunderground

Verfasst: 23.07.2019, 14:13
von novregen
ok, und wie bringst du dann die Daten rüber ? Jede Variable mit Blocky rüberschreiben ?

Re: Wetterdaten von Wunderground

Verfasst: 23.07.2019, 14:16
von dondaik
wie "rüber"
in iobroker gibt es zig lösungen ( einfach ansehen und dann ein thinkerboard mit 4MB bestellen um iobroker aufzusetzen ) die adapter liefern alles in SV´s..... und die liegen auf der ccu .... ohne umwege :-)

https://forum.iobroker.net

Re: Wetterdaten von Wunderground

Verfasst: 24.07.2019, 11:12
von novregen
die adapter liefern alles in SV´s..... und die liegen auf der ccu .... ohne umwege :-)

Das ist mir noch nicht klar... ich habe iobroker auf dem pi, aber die daten der adapter wie z.b. openweathermap habe ich doch nicht auch automatisch in der homematic ccu zur auswahl....

Re: Wetterdaten von Wunderground

Verfasst: 24.07.2019, 11:14
von dondaik
doch, wenn der iobroker adapter xxx richtig läuft ist die ccu immer der ablageort der SV´s des adapters - egal ob wetter oder tanken. ( wenigstens bei meiner installation )

Re: Wetterdaten von Wunderground

Verfasst: 24.07.2019, 11:29
von Black
er überlegt wahrscheinlich,die wie werte die in den Objecten, welche im IObroker unter dem Adapter (z.b. Weatherunderground.0 oder DasWetter.0 sind, in die CCU kommen.

nun,die CCU wird ja nicht alle Werte brauchen, wenn du IOBroker hast wirst du ja auch dort visualisieren. also wäre interessant:
Temperatur,Luftfeuchte, Luftdruck

Diese legst du als Systemvariablen an
in dem moment kennt IOBroker die unter dem Rega Adapter.

dann in Javascriptein kleiner dreizeiler

Code: Alles auswählen

on({id: "weatherwunderground.0.irgendeinObject", change: 'any'}, function (data) {
  setState ("DeineTempSysvar",getState ("weatherwunderground.0.Deinetempdeduwillst").val);
  dito mit weiteren werten.
});
mehr brauchst du nicht zu machen, sobald du eine rega sysvar in iobroker beschreibst, wird die automatishc in der CCU mitgeführt.

Black

Re: Wetterdaten von Wunderground

Verfasst: 24.07.2019, 11:36
von novregen
ok, also hat die ccu doch nicht automatisch die Werte aus z.b. DasWetter.0 oder openweathermap.0

Die muss ich wie von Black beschrieben mit einem Script rüberschreiben, damit ich diese Systemvaribel auch in der CCU2 habe....

richtig verstanden, oder gibt es sonst noch andere Möglichkeiten ?

Re: Wetterdaten von Wunderground

Verfasst: 24.07.2019, 11:48
von Black
die ccu kriegt die daten automatisch.... man muss nur ein kleines script schreiben, welches die daten aus dem einen in den anderen bereich rübersetzt.

auf der ccu musst du ja auch ein script schreiben, welches die daten holt. durch einen reinen Wunsch tut sich da nicht viel. das ist halt das prinzip de rmiddlewares. du kannst allesmiteinander kombinieren. ob die die kombination nun grafisch in blockly schreibst oder native javascript ist da egal ^^

black

Re: Wetterdaten von Wunderground

Verfasst: 05.03.2024, 09:01
von eschwosk
Wetterdaten von Wounderground geht doch!
Ich wollte schon länger meine Wetterdaten in der Homematic erfasst haben und hatte mich jetzt endlich entschlossen dies auch zu realisieren. Im Internet bin ich auf den Artikel von Frank Pfarr (Homematic Guru) gestoßen und musste erfahren, das es so nicht mehr funktioniert. Ich habe eine eigene Wetterstation in Wounderground und bin rundum zufrieden. Etwas rumsuchen hat dann dazu geführt, das ich sehr wohl einen Apikey generieren kann und mit diesem key unter folgender URL
https://api.weather.com/v2/pws/observat ... =m&apiKey=[API KEY]
daten abrufen kann. Es diese Zeile in den Browser eingeben und wenn alles stimmt erhält man eine XML-Datei. Dies funktioniert übrigens nicht nur für die eigene Station sondern mit dem gleichen API-Key für alle anderen Stationen auch. Das Script in der Homematic sieht dann so aus:

!Stand 05.03.2024 http://homematic-forum.de/forum/viewtop ... 31&t=17209
var url = "https://api.weather.com/v2/pws/observat ... ey=[apiKey]";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string wetter_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

!Beim XML-File den ueberfluessigen Header entfernen
integer laenge = wetter_xml.Length();
integer wort_position = wetter_xml.Find("stationID");
wetter_xml = wetter_xml.Substr(wort_position, (laenge - wort_position));
WriteLine(wetter_xml);

!Daten mit Suchworten aus XML-File ausfiltern:

!string word = "full";
string word = "neighborhood";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Station").State(daten);

!string word = "observation_time";
string word = "obsTimeLocal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
!daten = daten.Substr(0, (word_position -11));
dom.GetObject("W_Aktualisierung").State(daten);

string word = "solarRadiation";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_SolarRadiation").State(daten);


string word = "precipTotal";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_Regenmenge").State(daten);

string word = "temp";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Temperatur").State(zahl);

string word = "humidity";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftfeuchte").State(zahl);

string word = "winddir";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windrichtg").State(zahl);

string word = "windSpeed";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windgeschwindigkeit").State(zahl);

string word = "windGust";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Windboeen").State(zahl);

string word = "pressure";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
integer zahl = daten.ToFloat();
dom.GetObject("W_Luftdruck").State(zahl);

string word = "precipRate";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
dom.GetObject("W_precipRate").State(daten);

string word = "dewpt";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_Taupunkt").State(zahl);

string word = "uv";
integer word_laenge = word.Length();
integer word_position = wetter_xml.Find(word);
string daten = wetter_xml.Substr((word_position + word_laenge +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -2));
real zahl = daten.ToFloat();
dom.GetObject("W_UV").State(zahl);

Je nachdem welche Daten Euere Wetterstation lifert müsst Ihr die ensprechenden Filter löschen oder abändern.
Bild