Problem mit Weather Underground

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
PCSHG
Beiträge: 46
Registriert: 07.10.2017, 15:14

Problem mit Weather Underground

Beitrag von PCSHG » 25.09.2018, 11:23

Hallo,

ich betreibe eine Raspberrymatic mit der Firmware 2.35.16.20180826. Nach der Aktualisierung von CUxD auf die Version 2.1.0 werden meine Wetterdaten von Weather Underground mit Hilfe des CUxD Multitimers nicht mehr abgerufen.

mpcc
Beiträge: 493
Registriert: 09.03.2007, 16:38
Wohnort: Eichwalde bei Berlin
Kontaktdaten:

Re: Problem mit Weather Underground

Beitrag von mpcc » 25.09.2018, 12:45

und nun ?
Gruss Marco Pniok
http://www.piotek-smarthome.de, eQ-3 Fachpartner, Joonior Systemintegrator, PEHA EnOcean, Eltako-Partner, Viessmann Vitocontrol200 Partner, HomeMatic, HomeMatic IP, PioTek-Tracker , IP-Symcon, Symbox, IPS-Studio, Wibutler ....

PCSHG
Beiträge: 46
Registriert: 07.10.2017, 15:14

Re: Problem mit Weather Underground

Beitrag von PCSHG » 26.09.2018, 14:39

Der manuelle Aufruf des Programms mit Weather Underground funktioniert, so dass die Wetterdaten korrekt abgerufen und gespeichert werden.

Wie muss unter der CUxD Version 2.1.0 der Multitimer konfiguriert werden, damit der Abruf wieder automatisiert funktioniert? Ich möchte einen Abruf der Wetterdaten alle 22 Minuten

Benutzeravatar
uwe111
Beiträge: 3738
Registriert: 26.02.2011, 22:22
Kontaktdaten:

Re: Problem mit Weather Underground

Beitrag von uwe111 » 26.09.2018, 15:52

PCSHG hat geschrieben:
26.09.2018, 14:39
Wie muss unter der CUxD Version 2.1.0 der Multitimer konfiguriert werden, damit der Abruf wieder automatisiert funktioniert?
Genau so, wie bei den Vorgängerversionen. Da hat sich nichts geändert.
Wie hast Du es denn aktuell konfiguriert?

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.2.0, RFD-Monitor, Vellemann K8055, SSH KeyDir

PCSHG
Beiträge: 46
Registriert: 07.10.2017, 15:14

Re: Problem mit Weather Underground

Beitrag von PCSHG » 26.09.2018, 16:46

Hallo, ich weiß nicht genau, wie ich hier das Script aufrufen muss.
Dateianhänge
Screenshot CUxD Multitimer.jpg

Benutzeravatar
uwe111
Beiträge: 3738
Registriert: 26.02.2011, 22:22
Kontaktdaten:

Re: Problem mit Weather Underground

Beitrag von uwe111 » 26.09.2018, 18:08

PCSHG hat geschrieben:
26.09.2018, 16:46
ich weiß nicht genau, wie ich hier das Script aufrufen muss.
Welches Script? Ich hole leider keine Wetterdaten von Weather Underground.

Mit Deiner aktuellen Konfiguration löst der 1. Kanal alle 15 Minuten aus.
Ein Script ist nicht eingetragen.
Vielleicht wird Dein Script per Programmverknüpfung getriggert?

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.2.0, RFD-Monitor, Vellemann K8055, SSH KeyDir

nicolas-eric
Beiträge: 2769
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel

Re: Problem mit Weather Underground

Beitrag von nicolas-eric » 26.09.2018, 19:01

Bei mir funktioniert das auch immer noch mit WUndergound Wetter mit der neuesten Raspi Version und dem neuesten CUxD.

Habe ein Programm, das alle 15 Minuten startet, das führt ein Script aus, welches die Wetterdaten holt und in entsprechende Systemvariablen schreibt.

Programm:
Bildschirmfoto 2018-09-26 um 19.02.22.jpg
Script im Programm:

Code: Alles auswählen

        !http://homematic-forum.de/forum/viewtopic.php?f=31&t=17209
        !zuerst folgende Systemvariablen anlegen
        !Achtung: keine vergessen und exakte Schreibweise mit Drag&Drop
        !Wetter_Station                        Zeichenkette
        !Wetter_Aktualisierung             Zeichenkette
        !Wetter_Bedingungen               Zeichenkette
        !Wetter_Temperatur                  Zahl                     °C
        !Wetter_Luftfeuchte                  Zahl                      %
        !Wetter_Windbedingungen       Zeichenkette
        !Wetter_Windrichtung               Zeichenkette
        !Wetter_Windrichtg                   Zahl                       °
        !Wetter_Windgeschwindigkeit   Zahl                     km/h
        !Wetter_Windboeen                  Zahl                     km/h
        !Wetter_Luftdruck                      Zahl                      mb
        !Wetter_Luftdrucktrend             Zeichenkette
        !Wetter_Taupunkt                      Zahl                     °C
        !Wetter_UV                                Zeichenkette

        var url = "http://api.wunderground.com/api/533a498c4f21c08f/conditions/lang:DL/q/Germany/pws:IELSDORF22.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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_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";}
           ! 7 # Südost
           if (word_laenge == 7)  {daten = "Süd-Ost";}
           ! 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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_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("Wetter_UV").State(zahl);
!WriteLine("Hallo Welt!");

Benutzeravatar
papi
Beiträge: 222
Registriert: 18.12.2013, 08:40
Wohnort: Willich, NRW

Re: Problem mit Weather Underground

Beitrag von papi » 26.09.2018, 20:20

Oder wenn man es mit dem zuverlässigen CUxD-Timer machen will:

CUxD-Doku 2.1, Seite 88ff (5.8.1 System.Timer (16 Kanäle).
Dateianhänge
Unbenannt.PNG

nicolas-eric
Beiträge: 2769
Registriert: 07.01.2015, 23:26
Wohnort: Scheeßel

Re: Problem mit Weather Underground

Beitrag von nicolas-eric » 26.09.2018, 20:29

Dass der CCU/RM Timer unzuverlässig ist, das war zu Zeiten, als in der Versionsnummer noch eine 2 stand mit einer gang ganz kleinen Zahl hinter dem Punkt. Mit den aktuellen Versionen ist das nicht mehr der Fall.

Antworten

Zurück zu „CUxD“