Wunderground Wetter mit einfachem HM-Skript holen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Red_D
Beiträge: 45
Registriert: 14.01.2017, 20:44
Hat sich bedankt: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Red_D » 22.01.2017, 20:34

Ahhhh das wars! Tip Top. Super!
Danke!

rodja
Beiträge: 2
Registriert: 06.02.2017, 08:57

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von rodja » 06.02.2017, 09:10

Hallo, Frage in die Runde:
das Skript läuft prima!
Ich möchte aber gerne 2 Stationen mit Vorhersage abfragen: Wie muss ich das Skript und die Systemvariablen entsprechend anpassen?
Ich hatte schon probiert aus "WD" ein "HWD" zu machen und dies im Skript und den variablen angepasst...Variablen werden aber leider nicht befüllt.

Hat mir jemand einen Tipp bitte.

dondaik
Beiträge: 12929
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1604 Mal
Danksagung erhalten: 222 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von dondaik » 06.02.2017, 09:13

und auch zwei anmeldungen verwendet... doch bitte den lösungsansatz von dir hier einstellen sonst ist alles wasserglas lesen :-(
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

rodja
Beiträge: 2
Registriert: 06.02.2017, 08:57

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von rodja » 06.02.2017, 09:35

Was meinst du mit zwei Anmeldungen? Benötige ich zwei API-Keys?
Ich habe ein zweites Programm angelegt mit dem Skript unten. Ich habe nur den neuen Variablennamen "HWD" unten eingefügt/ersetzt.
So habe ich auch die Systemvariablen in der CCU benannt - HWD_XXX

Code: Alles auswählen

! Wetter_Vorhersage_holen V1.04
!
! -------------------- Anpassungen ---------------------
!  Zugangsdaten Wetterdienst Wunderground.com
var ApiKey = "XXX"; ! (Persoenlicher Api-Key)
!var Wetterstation = "Germany/STUTTGART";! (Hier Ort eintragen oder Wetterstation eintragen)
var Wetterstation = "pws:EDDS"; ! (oder: Wetterstation direkt eintragen)
! ----------------- Ende Anpassungen -------------------
!
! Cutwort,Suchwort,kuerze vorne,kuerze hinten,Datenart,Systemvariable
string F1 = "epoch,weekday ,0,2,1,Tag,";!Zeichenkette
string F2 = "high,celsius,1,2,3,Max_Temperatur,";!Zahl °C
string F3 = "low,celsius,1,2,3,Min_Temperatur,";!Zahl °C
string F4 = "conditions,conditions,1,2,5,Allgemein,";!Zeichenkette
string F5 = "skyicon,pop,1,2,2,Regenrisiko,";!Zahl %
string F6 = "qpf_allday,in,1,2,4,Regen,";!Zahl mm
string F7 = "snow_allday,cm,1,2,3,Schnee,";!Zahl cm
string F8 = "maxwind,kph,1,2,3,Max_Wind,";!Zahl km/h
string F9 = "maxwind,dir,1,2,5,Windrichtung 2,";!Zeichenkette
string F10 = "avewind,kph,1,2,3,Wind,";!Zahl km/h
string F11 = "avewind,dir,1,2,5,Windrichtung 1,";!Zeichenkette
string F12 = "/avewind,avehumidity,1,2,2,Luftfeuchte,";!Zahl %
string ForeCast = F1#F2#F3#F4#F5#F6#F7#F8#F9#F10#F11#F12;

string Umlaut ="ö,ö,ü,ü,ä,ä,";
string URL;
string Wetterdaten;
string Cut;
string Wort;
integer KorV;
integer KorH;
integer Art;
string Variablenname;
integer Wortlaenge;
integer Wortposition;
string Wortdaten;
integer Zaehler1;
integer Zaehler2;
integer Zaehler3;

! URL zusammensetzen und Wetterdaten.xml von Wunderground holen
URL = "http://api.wunderground.com/api/" # ApiKey # "/forecast/lang:DL/q/" # Wetterstation # ".xml";
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '" # URL # "'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
Wetterdaten = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();

! Vorhersage kuerzen, Daten ausfiltern und in Systemvariablen speichern
Zaehler1 = 0;
while(Zaehler1 < 4) {;
Zaehler2 = 0;
while(Zaehler2 < 72) {;
Cut = ForeCast.StrValueByIndex(",", Zaehler2);
Wort = ForeCast.StrValueByIndex(",", Zaehler2 + 1);
KorV = ForeCast.StrValueByIndex(",", Zaehler2 + 2);
KorH = ForeCast.StrValueByIndex(",", Zaehler2 + 3);
Art = ForeCast.StrValueByIndex(",", Zaehler2 + 4);
Variablenname = "HWD" # Zaehler1.ToString() # "_" # ForeCast.StrValueByIndex(",", Zaehler2 + 5);
Wortlaenge = Wetterdaten.Length();
Wortposition = Wetterdaten.Find(Cut);
Wetterdaten = Wetterdaten.Substr(Wortposition, (Wortlaenge - Wortposition));
Wortlaenge = Wort.Length();
Wortposition = Wetterdaten.Find(Wort);
Wortdaten = Wetterdaten.Substr((Wortposition + Wortlaenge + KorV.ToInteger()), 100);
Wortposition = Wortdaten.Find(Wort);
Wortdaten = Wortdaten.Substr(0, (Wortposition - KorH.ToInteger()));
if (Art == 1) {string Zahl = Wortdaten;}
if (Art == 2) {integer Zahl = Wortdaten.ToInteger();}
if (Art == 3) {real Zahl = Wortdaten.ToFloat();}
if (Art == 4) {real Zahl = Wortdaten.ToFloat() * 25.4;}
if (Art == 5) {;
                Zaehler3 = 0;
                while(Zaehler3 < 6) {;
                Cut = Umlaut.StrValueByIndex(",", Zaehler3);
                Wort = Umlaut.StrValueByIndex(",", Zaehler3 + 1);
                Wortposition = Wortdaten.Find(Cut);
                if (Wortposition > -1) {Wortdaten = Wortdaten.Substr(0, Wortposition) # Wort # Wortdaten.Substr(Wortposition + 2, (Wortdaten.Length() - Wortposition));
                Zaehler3 = -2;}
                Zaehler3 = Zaehler3 + 2;}
                string Zahl = Wortdaten;}
dom.GetObject(Variablenname).State(Zahl);
Zaehler2 = Zaehler2 + 6;}
Zaehler1 = Zaehler1 + 1;}


quit;

CH-HMaticer
Beiträge: 18
Registriert: 20.08.2015, 08:24

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von CH-HMaticer » 21.02.2017, 15:17

Hallo zusammen

Ich habe mir den Script von Seite 9 http://homematic-forum.de/forum/viewtop ... 80#p154855 von tibit für forcast geholt und soweit angepasst.

Ich erhalte jedoch bei der Prüfung vom Script diese Fehlermeldung: Denke, es betrifft wahrscheinlich das "Icon".... oder?
Wo liegt der Fehler?

Error 1 at row 94 col 66 near ^ + "\">";
dom.GetObject("WetterFct_Icon").State(daten);
! WriteLi

Mein Script

Code: Alles auswählen

    !zuerst folgende Systemvariablen anlegen
    !Achtung: keine vergessen und exakte Schreibweise mit Drag&Drop
    !WetterFct_Tag                        Zeichenkette -> Forecast fuer welchen Wochentag
    !WetterFct_Condition               Zeichenkette -> Forecast Wetterbedingung
    !WetterFct_Icon                       Zeichenkette -> Forecast URL zu Pictogramm (zeigt Bild im Protokoll / Systemvariablen)
    !WetterFct_Text                       Zeichenkette -> Forecast Text (max 200 Zeichen)
    !WetterFct_TempMax               Zahl         °C -> Forecast Maximale Temperatur
    !WetterFct_Pop                        Zahl          % -> Forecast Regenwahrscheinlichkeit (probability of precipation)
    !WetterFct_Zeit                       Zeichenkette -> Forecast erstellt um diese Zeit

var url = "http://api.wunderground.com/api/XXX/forecast/lang:EN/q/XXX/XXX.xml";
!Beispiele:
!    var url = "http://api.wunderground.com/api/<API-Key>/forecast/lang:EN/q/Switzerland/Neuhausen.xml";
!Sprache: Deutsch
!    var url = "http://api.wunderground.com/api/<API-Key>/forecast/lang:DL/q/Switzerland/Neuhausen.xml";
!Spezifische PWS-Wetterstation:
!    var url = "http://api.wunderground.com/api/<API-Key>/forecast/lang:EN/q/pws:ISCHAFFH8.xml";
!Spezifische Flughafen-Wetterstation:
!    var url = "http://api.wunderground.com/api/<API-Key>/forecast/lang:EN/q/LSZH.xml";

    !hier ist die Abfrage mit CUxD (wenn kein CUxD, die 3 Zeilen unten auskommentieren und system.Exec einschalten)
    dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State("wget -q -O - '"#url#"'");
    dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
    string wetter_xml = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

    !hier ist die Abfrage mit system.Exec (nur ohne CUxD verwenden)
    !string stdout;
    !string stderr;
    !system.Exec("wget -q -O - '"#url#"'", &stdout, &stderr);
    !WriteLine(stdout);
    !string wetter_xml = stdout;
    !WriteLine(wetter_xml);

    !Beim XML-File den ueberfluessigen Header die bereiche "txt_forecast" und "simpleforecast" isolieren
    integer laenge = wetter_xml.Length();
!finde Position für "txt_forecast"
    integer wort_txt_fcst_position = wetter_xml.Find("txt_forecast");
!finde Position für "simpleforecast"
    integer wort_simplefcst_position = wetter_xml.Find("simpleforecast");
!isoliere "txt_forecast"
string wetter_txtfct_xml = wetter_xml.Substr(wort_txt_fcst_position, (wort_simplefcst_position - wort_txt_fcst_position));
!isoliere "simpleforecast"
string wetter_simplefct_xml = wetter_xml.Substr(wort_simplefcst_position, (laenge - wort_simplefcst_position));
!WriteLine("TXT_Forecast:--------------------------");
!    WriteLine(wetter_txtfct_xml);
!WriteLine("Simpleforecast:--------------------------");
!    WriteLine(wetter_simplefct_xml);


    !Daten mit Suchworten aus XML-File ausfiltern:

!Setze WetterFct_Zeit: Suche in txt_forecast nach "date" (einmalig)
        string word = "date";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1), 100);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-2));
        dom.GetObject("WetterFct_Zeit").State(daten);
!        WriteLine("Zeit:");
!        WriteLine(daten);

!Hole Daten aus "txt_forecast"-------------------------

!Setze WetterFct_Tag: Suche in txt_forecast nach "title"
        string word = "title";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1), 100);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-2));
        dom.GetObject("WetterFct_Tag").State(daten);
!        WriteLine("Tag:");
!        WriteLine(daten);

!Setze WetterFct_Condition: Suche in txt_forecast nach "icon"
   string word = "icon";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1), 100);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-2));
        dom.GetObject("WetterFct_Condition").State(daten);
!        WriteLine("Condition:");
!        WriteLine(daten);

!Setze WetterFct_Icon: Suche in txt_forecast nach "icon_url"
   string word = "icon_url";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1), 100);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-2));
        daten = "</div><img src=\"" + daten + "\" alt=\"" + daten2 + "\">";
        dom.GetObject("WetterFct_Icon").State(daten);
!        WriteLine("Icon:");
!        WriteLine(daten);

!Setze WetterFct_Text: Suche in txt_forecast nach "fcttext_metric"
        string word = "fcttext_metric";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1 + 9), 200);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-5));
        dom.GetObject("WetterFct_Text").State(daten);
!        WriteLine("Text:");
!        WriteLine(daten);

!Setze WetterFct_Pop: Suche in txt_forecast nach "pop"
        string word = "pop";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_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("WetterFct_Pop").State(zahl);
!        WriteLine("Pop:");
!        WriteLine(zahl);

!Hole Daten aus "simpleforecast"-------------------------

!Setze WetterFct_TempMax: Suche in simpleforecast nach "celsius"
        string word = "celsius";
        integer word_laenge = word.Length();
        integer word_position = wetter_simplefct_xml.Find(word);
        string daten = wetter_simplefct_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("WetterFct_TempMax").State(zahl);
!        WriteLine("TempMax:");
!        WriteLine(zahl);
HomeMatic: 1x Zentrale CCU2, 4x Funk-Zwischenstecker HM-LC-Sw1-Pl-DN-R5; 1x Funk-Schaltaktor mis Leistungsmessun HM-ES-PMSw1-Pl; 1x Funk-Schaltaktor 8-fach Kanal Relais Modul 230Volt mit Taster

tibid
Beiträge: 144
Registriert: 14.03.2014, 19:56
Danksagung erhalten: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von tibid » 01.03.2017, 23:17

CH-HMaticer hat geschrieben: Ich erhalte jedoch bei der Prüfung vom Script diese Fehlermeldung: Denke, es betrifft wahrscheinlich das "Icon".... oder?
Wo liegt der Fehler?

Error 1 at row 94 col 66 near ^ + "\">";
dom.GetObject("WetterFct_Icon").State(daten);
! WriteLi

Mein Script

Code: Alles auswählen

 
!Setze WetterFct_Icon: Suche in txt_forecast nach "icon_url"
...
        daten = "</div><img src=\"" + daten + "\" alt=\"" + daten2 + "\">";
...
Hallo CH-HMaticer,
es scheint die Variable "daten2" nicht definiert und gesetzt zu werden.
In die folgende Sektion die Zeile "string daten2 = daten;" hinzufügen, soll also folgendermassen aussehen:

Code: Alles auswählen

 
!Setze WetterFct_Condition: Suche in txt_forecast nach "icon"
   string word = "icon";
        integer word_laenge = word.Length();
        integer word_position = wetter_txtfct_xml.Find(word);
        string daten = wetter_txtfct_xml.Substr((word_position + word_laenge + 1), 100);
        integer word_position = daten.Find(word);
        daten = daten.Substr(0, (word_position-2));
        string daten2 = daten;
        dom.GetObject("WetterFct_Condition").State(daten);
!        WriteLine("Condition:");
!        WriteLine(daten);

Hoffe so klappt es?

Gruss,
tibid

CH-HMaticer
Beiträge: 18
Registriert: 20.08.2015, 08:24

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von CH-HMaticer » 02.03.2017, 13:55

SUUPER tibid! Genau das war es!

Dann ist aber in Dein Script ein Fehler drin, denn dort fehlt diese Zeile dann auch! Ev. noch einfügen bitte.

Danke Dir nochmals für Deine super Arbeit!

Gruss
CH-HMaticer
HomeMatic: 1x Zentrale CCU2, 4x Funk-Zwischenstecker HM-LC-Sw1-Pl-DN-R5; 1x Funk-Schaltaktor mis Leistungsmessun HM-ES-PMSw1-Pl; 1x Funk-Schaltaktor 8-fach Kanal Relais Modul 230Volt mit Taster

Benutzeravatar
shamen7777
Beiträge: 79
Registriert: 01.06.2015, 19:27
Wohnort: Bergheim, Großraum Köln

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von shamen7777 » 10.03.2017, 12:51

Hallo zusammen,

ich weiß nicht, ob ich ein genrelles Problem mit der CCU1 habe und bin auch rest neu in das Thema Homematic eingestiegen. Ich habe von Funkleuchtturm die Skripte genommen, einmal für die Berechnung von Sonnenaufgang und Sonnenuntergang, das Wundergroundskript und zu letzt das Elevations- und Azimutskript.

Das SA und SU Skript läuft alle 2 min ab und die Variablen werden auch in der CCU1 alle 2 min aktualisiert. Wobei hier ein anderer Fehler auftritt, der meine Rollade um 12:02 Uhr wieder runterfahren läßt. Da weiß ich noch nicht wo der Fehler liegen kann. Habe das ausführende Programm, welches die Rollade steuert schon 2 - 3 mal neu programmiert in der WebUI, aber es hat keine Änderung gebracht.

Dann habe ich Sonnenstands-Skript (Elevation und Azimut) genommen, das wird auch alle 5 min gestartet, aber das Programm speichert nicht die Variablen ab, diese bleiben immer nur auf den Stand des ersten Ablauf und werden nicht mehr aktualisiert.

JEtzt komm ich zum Wunderground Skript. Alle Variablen angelegt, aber hier wird gar nicht erst in die Variablen geschrieben. Ich habe es schon mit kopieren aus dem Skript gemacht, das die Variablennamen genau gleich sind. Der API key ist richtig, da mir dieer im Browser alle Werte anzeigt.

Ich verzweifle langsam daran. Kann es an der CCU1 liegen? Aber eigentlich auch nciht, da es auch Nutzer der CCU2 gibt, die Probleme haben. Leider bin ich auf der Abreit und kann das Skript nciht posten mit den dazugehören Variablen. Das kann ich heute Abend machen.
MfG

Mirko

Homematic Komponenten:
CCU2 FW 2.49.18, geplant Homeputer; CUxD 2.3.3; CUxD Highcharts 1.4.5; XML-API 1.20; HQ WebUI 2.5.4; Programme drucken 1.2a; E-Mail 1.6.7c

Benutzeravatar
shamen7777
Beiträge: 79
Registriert: 01.06.2015, 19:27
Wohnort: Bergheim, Großraum Köln

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von shamen7777 » 10.03.2017, 14:46

Hier das Programm und das Skript.

Code: Alles auswählen

!Wunderground Wetterdaten 09.03.2017  http://homematic-forum.de/forum/viewtopic.php?f=31&t=17209
!zuerst folgende Systemvariablen anlegen
!Achtung: keine vergessen und exakte Schreibweise mit Drag&Drop
!W_Station                Zeichenkette
!W_Aktualisierung         Zeichenkette
!W_Bedingungen            Zeichenkette
!W_Temperatur             Zahl                  °C
!W_Luftfeuchte            Zahl                  %
!W_Windbedingungen        Zeichenkette
!W_Windrichtung           Zeichenkette
!W_Windrichtg             Zahl                  °
!W_Windgeschwindigkeit    Zahl                  km/h
!W_Windboeen              Zahl                  km/h
!W_Luftdruck              Zahl                  mbar
!W_Luftdrucktrend         Zeichenkette
!W_Taupunkt               Zahl                  °C
!W_UV                     Zeichenkette
!W_GefühlteLufttemp       Zahl                  °C
!W_Windkühle              Zahl                  °C
!W_Regenmenge             Zahl                  mm
!W_Regenmenge1h           Zahl                  mm

var url = "http://api.wunderground.com/api/xxxxxxx/conditions/lang:DL/q/Germany/stadt.xml";

!hier ist die Abfrage mit CUxD
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("display_location");
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 = "city";
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 = "observation_time_rfc822";
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 = "weather";
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_Bedingungen").State(daten);

string word = "temp_c";
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 = "relative_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 = "wind_string";
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_Windbedingungen").State(daten);

string word = "wind_dir";
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));
word_laenge =daten.Length();
string anfangsbuchstabe = daten.Substr(0,1);
! Umlaute korrigieren
!
! N # Nord ***
if (anfangsbuchstabe == "N") {
!
if (daten == "Nordwest") {daten = "Nord-West" ;}
        }
 
! S # Süd ***
if (anfangsbuchstabe == "S") {
! 4 # Süd
if (word_laenge == 4)  {daten = "Süd";}
! 8 # Südwest
if (word_laenge == 8)  {daten = "Süd-West";}
! 12 # Süd-Südost
if (word_laenge == 12) {daten = "Süd-Süd-Ost" ;}
! 13
if (word_laenge == 13) {daten = "Süd-Süd-West" ;}
        }

! W # Westen
if (anfangsbuchstabe == "W") {
! 13 # West-Südwest
if (word_laenge == 13) {daten = "West-Süd-West" ;}
        }

! O # Osten
if (anfangsbuchstabe == "O") {
! 11 # Ost-Südost
if (word_laenge == 11) {daten = "Ost-Süd-Ost" ;}
        }
dom.GetObject("W_Windrichtung").State(daten);
!WriteLine(daten);
 
string word = "wind_degrees";
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 = "wind_kph";
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 = "wind_gust_kph";
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_mb";
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 = "pressure_trend";
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_Luftdrucktrend").State(daten);

string word = "dewpoint_c";
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);

string word = "feelslike_c";
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_GefühlteLufttemp").State(zahl);

string word = "windchill_c";
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_Windkühle").State(zahl);

string word = "precip_today_metric";
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_Regenmenge").State(zahl);

string word = "precip_1hr_metric";
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_Regenmenge1h").State(zahl);
Dateianhänge
Wundergrund Programm.JPG
Programm Wunderground
MfG

Mirko

Homematic Komponenten:
CCU2 FW 2.49.18, geplant Homeputer; CUxD 2.3.3; CUxD Highcharts 1.4.5; XML-API 1.20; HQ WebUI 2.5.4; Programme drucken 1.2a; E-Mail 1.6.7c

Benutzeravatar
shamen7777
Beiträge: 79
Registriert: 01.06.2015, 19:27
Wohnort: Bergheim, Großraum Köln

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von shamen7777 » 13.03.2017, 11:36

Guten Morgen zusammen,

hat vielleicht jemand das Skript auch auf einer CCU1 laufen? Oder seid ihr alle im Besitz einer CCU2?
MfG

Mirko

Homematic Komponenten:
CCU2 FW 2.49.18, geplant Homeputer; CUxD 2.3.3; CUxD Highcharts 1.4.5; XML-API 1.20; HQ WebUI 2.5.4; Programme drucken 1.2a; E-Mail 1.6.7c

Antworten

Zurück zu „Projektvorstellungen“