Ankündigung

Einklappen
Keine Ankündigung bisher.

eibpc und Wetterdaten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    eibpc und Wetterdaten

    Hallo zusammen,
    plane einen eibpc zu kaufen, stöbere aber noch durchs Forum, um letzte Gewissheit zu erlangen.
    Jetzt lese ich oft von Wetterstationen und Wetterdaten die verarbeitet werden und somit als Trigger für Events dienen können.
    Was mir noch nicht ganz klar ist..... Geht es nur mit Infos einer an KNX angeschlossener Wetterstation oder ginge es auch mit Daten eines Internet Wetterdienstes die online für den Standort ermittelt werden.
    Z. Bsp Temp für die Nacht lt. Vorhersage >25 Grad, fahre Rolladen wieder hoch bzw. gar nicht erst runter. Gewitter wird in der Nacht vorhergesagt, alle Rolladen runter fahren.


    Gruß
    Ralf

    #2
    Moin Ralf,

    Zitat von amazing Beitrag anzeigen
    Geht es nur mit Infos einer an KNX angeschlossener Wetterstation oder ginge es auch mit Daten eines Internet Wetterdienstes die online für den Standort ermittelt werden.
    Z. Bsp Temp für die Nacht lt. Vorhersage >25 Grad, fahre Rolladen wieder hoch bzw. gar nicht erst runter. Gewitter wird in der Nacht vorhergesagt, alle Rolladen runter fahren.
    Es gibt zum Beispiel die Google Wettervorhersage. Es existiert ein Makro um die Daten abzufragen. Allerdings wird dir klar sein, das es regnen kann trotz der Tatsache das die Googlefrösche meinen es ist eine Sternklare Nacht. Aber um grundsätzlich festzustellen, ob es kälter wird um dann die Heizung einzuschalten reicht die Internet-Info sicher aus.

    Gruß,
    Bernd

    Kommentar


      #3
      Zitat von amazing Beitrag anzeigen
      ... oder ginge es auch mit Daten eines Internet Wetterdienstes die online für den Standort ermittelt werden.
      Z. Bsp Temp für die Nacht lt. Vorhersage >25 Grad, fahre Rolladen wieder hoch bzw. gar nicht erst runter. Gewitter wird in der Nacht vorhergesagt, alle Rolladen runter fahren.
      Hoi Ralf

      Ich hab' auch einige Daten aus dem Internet gefischt und nicht lebensnotwendige Dinge davon abhängig gemacht.
      Weil das kann auch mal "hängen", oder die Verbindung zum Internet besteht mal nicht usw.
      Gut eignen sich xml Daten:
      Weather Underground
      http://www.google.com/ig/api?weather=Rueti&hl=de
      http://www.yr.no/place/Switzerland/Z%C3%BCrich/R%C3%BCti~2658909/forecast_hour_by_hour.xml
      Allerdings habe ich das parsen des xml auch mit dem Wiregate gemacht. Aber das geht auch mit dem EibPC z.B. mit einem Macro:
      [highlight=epc]
      GoogleWetter(Rueti,8635,Switzerland,htime(5,00,00) )
      [/highlight]
      [highlight=epc]
      //----------------------------------------------------------------------
      // Abfrage von GoogleWetter
      //----------------------------------------------------------------------

      :begin GoogleWetter(Name,PLZ,Land,Startabfrage)
      :info $Abfrage bei Google-Weather. Das Makro generiert die Werte Google_Name_Temperatur, Google_Name_Luftfeuchtigkeit, Google_Name_VorhersageMax, Google_Name_VorhersageMin als 16-BitFlieflkommazahlen. Diese kˆnnen im Programm genutzt werden. Google_Name_Wolken und Google_Name_VorhersageWolken werden mit den Vorhersagen wie "sonnig" als Strings c1400 definiert. ‹ber PLZ und Land (in englischer Sprache, z.B. Germany) gibt man den gew¸nschten Standort der Abfrage an. ‹ber Startabfrage kann der Prozess gestartet werden, z.B. mit htime(5,00,00) t‰glich um 5 Uhr morgens.$\\
      $Der Name, z.B. "Daheim" oder "Erlachstrasse"$\\
      $Die Postleitzahl$\\
      $Das Land in englischer Sprache, z.B. Germany$\\
      $Initieren der Abfrage, z.B. htime(5,00,00)$
      :shortinfo $Wetterabfrage bei Google$

      // Variablen definieren
      Google_Name_xmlText=$$
      Google_Name_xmlText_Data1=$$
      Google_Name_xmlText_Data2=$$
      Google_Name_xmlCount=0
      Google_Name_Port=0u16
      Google_Name_IP=0u32
      Google_Name_GooglePort = 80u16
      Google_Name_GoogleIP = 0u32
      Google_Name_Temperatur=0.0
      Google_Name_Luftfeuchtigkeit=0.0
      Google_Name_VorhersageMax=0.0
      Google_Name_VorhersageMin=0.0
      Google_Name_Wolken=$$
      Google_Name_VorhersageWolken=$$
      Google_Name_Wind=$$
      Google_Name_PosStart=0u16
      Google_Name_PosEnd=0u16

      // TCP Verbindung öffnen
      if (Startabfrage == EIN) then {
      Google_Name_GoogleIP=resolve($www.google.com$)
      }endif
      if after(Startabfrage == EIN,600u64) then {
      connecttcp(Google_Name_GooglePort,Google_Name_Goog leIP)
      } endif

      // TCP Anfrage senden
      if (after(Startabfrage,1000u64) == EIN) then {
      sendtcp(Google_Name_GooglePort,Google_Name_GoogleI P,$GET /ig/api?weather=$+$^PLZ^$+$+$+$^Land^$+$&hl=de HTTP/1.1$,0x0D,0x0A,0x0D,0x0A)
      }endif

      // Empfang vpn 2 TCP Paketen
      if event(readtcp(Google_Name_Port,Google_Name_IP,Goog le_Name_xmlText)) and Google_Name_IP == Google_Name_GoogleIP then {
      if (Google_Name_xmlCount==0) then Google_Name_xmlText_Data1=Google_Name_xmlText endif;
      if (Google_Name_xmlCount==1) then Google_Name_xmlText_Data2=Google_Name_xmlText endif;
      Google_Name_xmlCount=Google_Name_xmlCount+1
      }endif

      // TCP Verbindung schliessen
      if after(Startabfrage,10000u64) then {
      closetcp(Google_Name_Port,Google_Name_IP)
      } endif

      // Parsen der xml Daten
      if Google_Name_xmlCount==2 then {
      /* Die eigentlichen Daten passen in einen einzigen String, daher Ausschneiden des Headers */;
      Google_Name_PosStart=find(Google_Name_xmlText_Data 1,$<forecast_information>$,0u16)+size($<forecast_i nformation>$);
      Google_Name_xmlText=split(Google_Name_xmlText_Data 1,Google_Name_PosStart,END)+Google_Name_xmlText_Da ta2;
      /* Parsen nach Temperatur */;
      Google_Name_PosStart=find(Google_Name_xmlText,$<te mp_c data="$,0u16)+size($<temp_c data="$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"$,0u16)+Google_Name_Po sStart;
      Google_Name_Temperatur=convert(split(Google_Name_x mlText,Google_Name_PosStart,Google_Name_PosEnd),0. 0);
      /* Parsen nach Luftfeuchtigkeit */;
      Google_Name_PosStart=find(Google_Name_xmlText,$<hu midity data="Luftfeuchtigkeit:$,0u16)+size($<humidity data=" Luftfeuchtigkeit:$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$%$,0u16)+Google_Name_Po sStart;
      Google_Name_Luftfeuchtigkeit=convert(split(Google_ Name_xmlText,Google_Name_PosStart,Google_Name_PosE nd),0.0);
      /* Parsen nach Wind*/;
      Google_Name_PosStart=find(Google_Name_xmlText,$<wi nd_condition data="Wind:$,0u16)+size($<wind_condition data="Wind:$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"$,0u16)+Google_Name_Po sStart-1u16;
      Google_Name_Wind=split(Google_Name_xmlText,Google_ Name_PosStart,Google_Name_PosEnd);
      /* Parsen nach Vorhersage Min*/;
      Google_Name_PosStart=find(Google_Name_xmlText,$<lo w data="$,0u16)+size($<low data="$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"$,0u16)+Google_Name_Po sStart;
      Google_Name_VorhersageMin=convert(split(Google_Nam e_xmlText,Google_Name_PosStart,Google_Name_PosEnd) ,0.0);
      /* Parsen nach Vorhersage Max*/;
      Google_Name_PosStart=find(Google_Name_xmlText,$<hi gh data="$,0u16)+size($<high data="$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"$,0u16)+Google_Name_Po sStart;
      Google_Name_VorhersageMax=convert(split(Google_Nam e_xmlText,Google_Name_PosStart,Google_Name_PosEnd) ,0.0);
      /* Parsen nach Wolken*/;
      Google_Name_PosStart=find(Google_Name_xmlText,$<co ndition data="$,0u16)+size($<condition data="$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"/>$,0u16)+Google_Name_PosStart-1u16;
      Google_Name_Wolken=split(Google_Name_xmlText,Googl e_Name_PosStart,Google_Name_PosEnd);
      /* Parsen nach Wolkenvorhersage f¸r 1. Tag*/;
      Google_Name_PosStart=find(Google_Name_xmlText,$<co ndition data="$,1u16)+size($<condition data="$);
      Google_Name_PosEnd=find(split(Google_Name_xmlText, Google_Name_PosStart,END),$"/>$,0u16)+Google_Name_PosStart-1u16;
      Google_Name_VorhersageWolken=split(Google_Name_xml Text,Google_Name_PosStart,Google_Name_PosEnd);
      Google_Name_xmlCount=0
      } endif
      :end
      [/highlight](ist das GoogleWetter.lib, in den Librarys vom EibPC enthalten)

      Oder selber (aber nicht nur von mir) gestrickt:
      [highlight=epc]
      //GoogleWeather-------------------------
      Port=0u16
      IP=0u32
      GooglePort=80u16
      GoogleIP=0u32
      xmlText=$$
      xmlText_Data1=$$
      xmlText_Data2=$$
      xmlCount=0
      PosStart=0u16
      PosEnd=0u16
      G_Stadt=$$
      G_Temp=0.0
      G_Hum=0.0
      G_V_Max=0.0
      G_V_Min=0.0
      G_Wolken=$$
      G_V_Wolken=$$
      G_Wind=$$

      //TCP Verbindung aufmachen
      if mtime(02,00) or mtime(17,00) or mtime(32,00) or mtime(47,00) then {
      GoogleIP = resolve($www.google.com$);
      connecttcp(GooglePort,GoogleIP)
      }endif

      //TCP Anfrage schicken
      if mtime(02,03) or mtime(17,03) or mtime(32,03) or mtime(47,03) then {
      sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=Ruti+Switzerland&hl=de HTTP/1.1$,0x0D,0x0A,0x0D,0x0A)
      }endif

      //Es kommen 2 Pakete an
      if event(readtcp(Port,IP,xmlText)) and IP == GoogleIP then {
      if (xmlCount==0) then xmlText_Data1=xmlText endif;
      if (xmlCount==1) then xmlText_Data2=xmlText endif;
      xmlCount=xmlCount+1
      }endif

      //TCP Verbindung wieder ordentlich schließen
      if mtime(02,08) or mtime(17,08) or mtime(32,08) or mtime(47,08) then {
      closetcp(Port,IP)
      } endif

      //Und nun parsen der XML Info
      if xmlCount==2 then {
      /* Die eigentlichen Info passen in einen einizigen String, daher Ausschneiden des Headers */;
      PosStart=find(xmlText_Data1,$<forecast_information >$,0u16)+size($<forecast_information>$);
      xmlText=split(xmlText_Data1,PosStart,END)+xmlText_ Data2;

      /* Parsen nach Stadt */;
      PosStart=find(xmlText,$<city data="$,0u16)+size($<city data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"/>$,0u16)+PosStart-1u16;
      G_Stadt=split(xmlText,PosStart,PosEnd);

      /* Parsen nach Temperatur */;
      PosStart=find(xmlText,$<temp_c data="$,0u16)+size($<temp_c data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"$,0u16)+ PosStart;
      G_Temp=convert(split(xmlText,PosStart,PosEnd),0.0) ;

      /* Parsen nach Luftfeuchte */;
      PosStart=find(xmlText,$<humidity data="Luftfeuchtigkeit:$,0u16)+size($<humidity data="Luftfeuchtigkeit:$);
      PosEnd=find(split(xmlText,PosStart,END),$%$,0u16)+ PosStart;
      G_Hum=convert(split(xmlText,PosStart,PosEnd),0.0);

      /* Parsen nach Vorhersage Min */;
      PosStart=find(xmlText,$<low data="$,0u16)+size($<low data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"$,0u16)+ PosStart;
      G_V_Min=convert(split(xmlText,PosStart,PosEnd),0.0 );

      /* Parsen nach Vorhersage Max */;
      PosStart=find(xmlText,$<high data="$,0u16)+size($<high data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"$,0u16)+ PosStart;
      G_V_Max=convert(split(xmlText,PosStart,PosEnd),0.0 );

      /* Parsen nach Wolken*/;
      PosStart=find(xmlText,$<condition data="$,0u16)+size($<condition data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"/>$,0u16)+PosStart-1u16;
      G_Wolken=split(xmlText,PosStart,PosEnd);

      /* Parsen nach Wolkenvorhersage für 1. Tag*/;
      PosStart=find(xmlText,$<condition data="$,1u16)+size($<condition data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"/>$,0u16)+PosStart-1u16;
      G_V_Wolken=split(xmlText,PosStart,PosEnd);

      /* Parsen nach Wind*/;
      PosStart=find(xmlText,$<wind_condition data="$,0u16)+size($<wind_condition data="$);
      PosEnd=find(split(xmlText,PosStart,END),$"/>$,0u16)+PosStart-1u16;
      G_Wind=split(xmlText,PosStart,PosEnd);

      xmlCount=0;
      pdisplay(GTempID,G_Temp,TEMPERATURE,DISPLAY,GREEN, InfoSID);
      pdisplay(GHumID,G_Hum,WEATHER,DISPLAY,GREEN,InfoSI D);
      pdisplay(GMaxID,G_V_Max,TEMPERATURE,DISPLAY,GREEN, InfoSID);
      pdisplay(GMinID,G_V_Min,TEMPERATURE,DISPLAY,GREEN, InfoSID);
      pdisplay(GAktuellID,G_Wolken,WEATHER,DISPLAY,GREEN ,InfoSID);
      pdisplay(GHeuteID,G_V_Wolken,WEATHER,DISPLAY,GREEN ,InfoSID);
      pdisplay(GWindID,G_Wind,WEATHER,DISPLAY,GREEN,Info SID);
      pdisplay(GCityID,G_Stadt,WEATHER,DISPLAY,GREEN,Inf oSID)
      } endif
      [/highlight]
      Grüsse Bodo
      Fragen gehören ins Forum, und nicht in mein Postfach;
      EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

      Kommentar


        #4
        ok, vielen Dank.
        Kann also die Wetterinfos aus dem Internet gewinnen und diese als Trigger z.Bsp. für Rolladensteuerung verwenden, prima.

        Wie verhindert man eigenlich dass sich Makros gegenseitig behindern.
        Z.Bsp sagt ein Makro um 23 Uhr Rolladen runter, ein anderes sagt, wenn um 22 Uhr die Temp grösser 25 Grad dann Rolladen aufbleiben


        Gruß
        Ralf

        Kommentar


          #5
          Zitat von amazing Beitrag anzeigen
          Wie verhindert man eigenlich dass sich Makros gegenseitig behindern.
          Z.Bsp sagt ein Makro um 23 Uhr Rolladen runter, ein anderes sagt, wenn um 22 Uhr die Temp grösser 25 Grad dann Rolladen aufbleiben
          Hoi Ralf

          Genau dieses "Problem" hab' ich auch gerade.
          Ich hab' eine Szene Beschattung, eine Szene Sichtschutz und eine Szene Fernsehen.

          Ich werde wohl die Freigaben gegenseitig abfragen und eine gewisse Priorisierung einbauen.

          Wenn Szene Fernsehen dann diese Fenster nicht etwas anderes...
          Grüsse Bodo
          Fragen gehören ins Forum, und nicht in mein Postfach;
          EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

          Kommentar


            #6
            Zitat von amazing Beitrag anzeigen
            ok, vielen Dank.
            Kann also die Wetterinfos aus dem Internet gewinnen und diese als Trigger z.Bsp. für Rolladensteuerung verwenden, prima.
            Ja, aber man muss bedenken, das man nur relativ statisch parsen kann. Manche Betreiber ändern gerne mal ein wenig an ihren Seiten, da kann es dann schnell passieren, das die Infos nicht mehr korrekt extrahiert werden. Man muss also letzlich Seiten finden, die ihr Format möglichst lange unverändert lassen - oder ständig den Analyse-Code anpassen.

            Zitat von amazing Beitrag anzeigen
            Wie verhindert man eigentlich dass sich Makros gegenseitig behindern.
            Z.Bsp sagt ein Makro um 23 Uhr Rolladen runter, ein anderes sagt, wenn um 22 Uhr die Temp grösser 25 Grad dann Rolladen aufbleiben
            Indem man sie die Aktion nicht direkt ausführen lässt sondern sie lediglich einen Wert setzen (dürfen). Ein zentrales Modul (kann auch gerne ein Makro sein) muss dann eine Logik enthalten, die all diese Werte als Input hat und davon die Entscheidung ableitet, was nun passieren soll. Das Stichwort Priorisiererung ist ja in dem Zusammenhang schon gefallen. Sollen dazu Entscheidungen aus der Vergangenheit verwendet werden, müssen die halt entsprechend lange (im Logik-Modul) zwischengespeichert werden.
            Tessi

            Kommentar


              #7
              Zitat von Tessi Beitrag anzeigen
              Ja, aber man muss bedenken, das man nur relativ statisch parsen kann. Manche Betreiber ändern gerne mal ein wenig an ihren Seiten,
              Hoi Tessi

              Daher hab' ich auch die XML Daten empfohlern, die bleiben relativ konstant.

              (Ausser vei TV-Movie, die aktualisieren gerade mal wieder nicht die Daten)
              Grüsse Bodo
              Fragen gehören ins Forum, und nicht in mein Postfach;
              EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

              Kommentar


                #8
                Zitat von Bodo Beitrag anzeigen
                (Ausser bei TV-Movie, die aktualisieren gerade mal wieder nicht die Daten)
                hast du da ein Macro für den Eibpc ???

                Gruß Martin
                Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                Kommentar


                  #9
                  Zitat von Brick Beitrag anzeigen
                  hast du da ein Macro für den Eibpc ???
                  Hoi Martin

                  Aktuell nur für's Wiregate, aber das lässt sich transformieren.
                  Grüsse Bodo
                  Fragen gehören ins Forum, und nicht in mein Postfach;
                  EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                  Kommentar


                    #10
                    Zitat von Bodo Beitrag anzeigen
                    Hoi Tessi

                    Daher hab' ich auch die XML Daten empfohlern, die bleiben relativ konstant.

                    (Ausser vei TV-Movie, die aktualisieren gerade mal wieder nicht die Daten)
                    Dann bleiben Sie ja nicht nur relativ konstant
                    Viele Grüße
                    Martin

                    There is no cloud. It's only someone else's computer.

                    Kommentar


                      #11
                      Zitat von Bodo Beitrag anzeigen
                      Hoi Martin

                      Aktuell nur für's Wiregate, aber das lässt sich transformieren.
                      Hallo Bodo,

                      kannst Du das Wiregate Makro für eine Adaption zur Verfügung stellen?

                      Ich habe bisher keinen kostenlosen Anbieter eines XML APIs für EPG-Daten finden können, sonst hätte ich das Makro bereits programmiert.

                      Viele Grüße

                      Michael

                      Kommentar


                        #12
                        Zitat von Jambala Beitrag anzeigen
                        Ich habe bisher keinen kostenlosen Anbieter eines XML APIs für EPG-Daten finden können...
                        Hoi Michael

                        Da wären
                        Code:
                        http://www.tvmovie.de/rss/tvjetzt.xml
                        http://www.tvmovie.de/rss/tvtipps-spielfilm.xml
                        http://www.tvmovie.de/rss/tv2015.xml
                        http://www.tvmovie.de/rss/tv2200.xml
                        
                        http://www.tvspielfilm.de/tv-programm/rss/tipps.xml
                        http://www.tvspielfilm.de/tv-programm/rss/heute2015.xml
                        http://www.tvspielfilm.de/tv-programm/rss/heute2200.xml
                        http://www.tvspielfilm.de/tv-programm/rss/jetzt.xml
                        http://www.tvspielfilm.de/tv-programm/rss/filme.xml
                        http://www.tvspielfilm.de/news-und-specials/newsarchiv/rss.xml
                        Grüsse Bodo
                        Fragen gehören ins Forum, und nicht in mein Postfach;
                        EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                        Kommentar


                          #13
                          Google Wetter

                          Hallo zusamen,

                          habe nun meinen eibPC und habe auch schon einiges hinbekommen.
                          Bin jetzt beim Thema Wetter angekommen. Frage ist für mich momentan, wie ich die Informationen zu Wetter weiterverarbeiten kann.
                          Z.B. Im Webserver anzeigen und den Wert sonnig für die Beschattung nutzen.
                          Hat jemand evtl. ein Code Bsp?

                          Danke und Gruß
                          Ralf

                          Kommentar


                            #14
                            Hoi

                            Welche Dartenquelle verwendest Du oder möchtest du verwenden?
                            Grüsse Bodo
                            Fragen gehören ins Forum, und nicht in mein Postfach;
                            EibPC-Fan; Wiregate-Fan; Timberwolf-Fan mit 30x 1-Wire Sensoren;

                            Kommentar


                              #15
                              welche verwendest du denn?
                              EPIX
                              ...und möge der Saft mit euch sein...
                              Getippt von meinen Zeigefingern auf einer QWERTZ Tastatur

                              Kommentar

                              Lädt...
                              X