Wunderground Wetter mit einfachem HM-Skript holen

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Meisternico
Beiträge: 22
Registriert: 05.01.2016, 19:06
Danksagung erhalten: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Meisternico » 04.06.2017, 17:35

Hallo auch bei mir funktionierte das Skript auf Anhieb.
Ich möchte jetzt lediglich noch eine Ergänzung für meine Beregnungsanlage hinzufügen.
Wenn es so viel wie heute geregnet hat, soll das bei der Entscheidung zur Beregnung für morgen auch noch Rücksicht finden.
Dazu soll eldiglich die Systemvariable W_NiederschlagHeute um 23,59 Uhr einmal festegeschrieben werden in die Systemvariable W_NiederschlagGestern

Leider bin ich in der Welt des Scripte Schreibens nicht zu hause aber im Copy und Past wie hier ganz gut :)
Kann mir das jemand kurz als Script schreiben?

Meisternico
Beiträge: 22
Registriert: 05.01.2016, 19:06
Danksagung erhalten: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Meisternico » 26.06.2017, 14:28

Ich möchte meinen letzten beitrag hiermit gerne nochmal nach oben holen.
Das sollte doch über ein einfaches Script machbar sein oder?

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von alchy » 26.06.2017, 20:32

Wenn Zeitmodule täglich bla,bla
dann Script

Code: Alles auswählen

object heute= dom.GetObject(ID_SYSTEM_VARIABLES).Get("W_NiederschlagHeute");
object gestern = dom.GetObject(ID_SYSTEM_VARIABLES).Get("W_NiederschlagGestern");
if ( (heute) && (gestern) ){ gestern.State(heute.Value());}else{WriteLine("Variablen falsch");}
Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Meisternico
Beiträge: 22
Registriert: 05.01.2016, 19:06
Danksagung erhalten: 1 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von Meisternico » 03.07.2017, 20:41

Vielen Dank alchy. Das Script funktioniert bestens.

sunnyw86
Beiträge: 11
Registriert: 24.07.2017, 17:31

Fehler bei Wunderground Wetter

Beitrag von sunnyw86 » 25.07.2017, 15:39

Hallo zusammen,

ich möchte gerne dieses Skript benutzen:

!Stand 03.04.2014 http://homematic-forum.de/forum/viewtop ... 31&t=17209

Code: Alles auswählen

     

  !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                      mb
        !W_Luftdrucktrend             Zeichenkette
        !W_Taupunkt                      Zahl                     °C
        !W_UV                                Zeichenkette
 
        var url = "http://api.wunderground.com/api/api-key/conditions/lang:DL/q/Germany/ort.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();
 
        !hier ist die Abfrage mit system.Exec
        !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 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);
Leider erhalte ich folgende Fehlermeldung: "Error 1 at row 18 col 1 near ^Â, Parse following code failed:"
Kann mir bitte jemand helfen? Vielen lieben Dank.

Viele Grüße
Zuletzt geändert von alchy am 25.07.2017, 16:14, insgesamt 1-mal geändert.
Grund: Threads zusammengeführt - Code in Codetags posten

DrTob
Beiträge: 3426
Registriert: 29.10.2010, 08:24
Danksagung erhalten: 5 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von DrTob » 25.07.2017, 17:04

vielleicht wurden da Zeichen beim Kopieren zerstört, entferne einfach mal den ersten Kommentar-Block (die Zeilen mit Ausrufezeichen) gibts dann noch einen Fehler? Wenn ja: welchen?

sunnyw86
Beiträge: 11
Registriert: 24.07.2017, 17:31

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von sunnyw86 » 26.07.2017, 06:37

Guten Morgen,
vielen Dank für Deine Antwort! Ich habe den ersten Block gelöscht und nun gibt er mir den gleichen Fehler in einer anderen Zeile an. Ich glaube ich werde den Text einfach selber schreiben und hoffe das es dann funktioniert. So wie es aussieht ist beim kopieren irgendwas schief gelaufen. Ich werde es ausprobieren und berichten. Danke für deine Hilfe!

Viele Grüße

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von alchy » 26.07.2017, 06:48

Keinen Umweg beim Kopieren des Scriptes.
Das Script direkt aus dem Browserfenser per Copy und Paste in das Programm einfügen.
Solltest du trotz Vermutung keinen Umweg machen (Zwischenhalt in einem Windoof Editor o.ä. ) dann zum Test Browser wechseln.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

sunnyw86
Beiträge: 11
Registriert: 24.07.2017, 17:31

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von sunnyw86 » 26.07.2017, 07:36

Ok ich werde es heute Nachmittag nochmal probieren. Vielen lieben Dank!!!

Viele Grüße

sunnyw86
Beiträge: 11
Registriert: 24.07.2017, 17:31

Re: Wunderground Wetter mit einfachem HM-Skript holen

Beitrag von sunnyw86 » 27.07.2017, 06:27

Guten Morgen zusammen,

also da ist irgendwas beim kopieren schief gelaufen. Jetzt funktioniert es und nochmals vielen lieben Dank!

Viele Grüße

Antworten

Zurück zu „Projektvorstellungen“