Ankündigung

Einklappen
Keine Ankündigung bisher.

Wetterdaten aus dem Internet

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

    Wetterdaten aus dem Internet

    Hallo zusammen,

    hab seit langem endlich mal wieder Zeit mich mit meinem EibPC zu beschäftigen und gleich mal auf neue Firmware und somit auf den neuen Webserver aktualisert: Coole Sache! Respekt enertegus (Gabs da nicht mal den Danke Thread?!)

    Aber ich schweife vom Thema ab:
    Meine Beschattung und Rolladensteuerung funktioniert jetzt wunderbar. Das einzige Problem an der Sache ist jetzt noch, dass ich dem EibPC von Hand sagen muss ob Beschattet werden muss oder nicht, da mir die notwendige Wetterstation fehlt.

    Gibt es keine Möglichkeit sich die Aktuellen Wetterdaten aus dem Internet zu holen. Speziell gehts mir um die lokale Aussentemperatur und die Helligkeit.

    Vielleicht hat ja sogar schon jemand ein Makro dafür gebastelt? :-)

    Gruß
    Andreas
    Gruß Kex

    #2
    Zitat von kex Beitrag anzeigen
    Respekt enertegus (Gabs da nicht mal den Danke Thread?!)
    Den gibts noch https://knx-user-forum.de/eibpc/7280-danke-thread.html
    Gibt es keine Möglichkeit sich die Aktuellen Wetterdaten aus dem Internet zu holen. Speziell gehts mir um die lokale Aussentemperatur und die Helligkeit.
    Nicht dass ich wüsste, gehen müsste es ggf. mit dem TCP/IP Server/client. Meine Unterstützung hättest Du sicher...
    offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
    Enertex Produkte kaufen

    Kommentar


      #3
      Hmmm... Ich hatte gehofft dass ich nicht der erste bin, der sich das Geld für ne Wetterstation sparen will ;-)

      Aber dann versuch ich eben mal einen Vorstoß zu wagen. Vielleicht bekommen wir als Forengemeinschaft das Problem gelöst:

      Ich hab mal ein bisschen gegoogelt und bin recht schnell auf die Wetter API von Google gestoßen. Hier mach ich mir Hoffnungen, dass man die Daten irgendwie in Variablen des EibPC reinbekommt:

      (Hier z.B. eine Anfrage für meine Heimatstadt):
      http://www.google.com/ig/api?weather...+Germany&hl=de

      Ich hab leider absolut keine Erfahrung wie man den TCP/IP Client/Server vom EibPC benutzen kann.
      Aber wenn man den XML String der von der URL zurückbekommt in den EibPC bekommt, muss man den nurnoch parsen (das würd ich mir zutrauen).

      Aber ich brauch nen Tipp wie ich den String überhaupt in den EibPC bekomme, dass es was zum Parsen gibt.

      Irgendwelche Vorschläge?

      Doku zur API gibts leider keine, da die Schnittstelle wohl nicht so ganz offiziell frei gegeben ist. :-(
      Gruß Kex

      Kommentar


        #4
        Hoi

        Also der xml File sieht folgendermassen aus:

        Wetter auf eigener Website mit Google Weather API
        Angehängte Dateien
        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


          #5
          Zitat von Bodo Beitrag anzeigen
          Also der xml File sieht folgendermassen aus:
          Wetter auf eigener Website mit Google Weather API
          Man sollte folgendes beachten:
          offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
          Enertex Produkte kaufen

          Kommentar


            #6
            Hoi

            Ja da hab' ich gleich wieder ein paar Fragen:

            1. Kann ich eine URL auch so eingeben: "http://www.google.com"

            2. Und wie packe ich das Ergebnis (also das xml) in eine Variable?

            Ich frag' lieber

            [highlight=epc]
            // Google Weather
            GooglePort = 80u16
            GoogleIP = 74.125.77.104
            if ("Google-0/0/70" == EIN) then {
            connecttcp(GooglePort,GoogleIP)
            }endif
            if (after("Google-0/0/70",1000u64) == EIN) then {
            sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=89520+Germany&hl=de HTTP/1.1$,0x0Du08,0x0Au08,0x0Du08,0x0Au08);
            closetcp(GooglePort,GoogleIP)
            }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


              #7
              Hallo,

              eibPC HomeControl enthält ein auf google basierendes Wetterwidget.
              Schau doch einfach mal rein. Die ausgelesenen Werte können mit joins oder gas verbunden werden, so dass sie automatisch auf dem Bus aktualisiert werden können.

              Gruß
              Arno

              Kommentar


                #8
                Zitat von Bodo Beitrag anzeigen
                Hoi
                Kann ich eine URL auch so eingeben: "http://www.google.com"
                Du kannst so arbeiten:
                [highlight=epc]
                // Google Weather
                GooglePort = 80u16
                GoogleIP = resolve($www.google.com$)
                [/highlight]
                Und wie packe ich das Ergebnis (also das xml) in eine Variable?
                Ich habe eben mal gesnifft, die Antwort ist weniger als 1400 Bytes und passt daher komplett in einen c1400 String. Das macht eine komplexere Verarbeitung in einer Nachrichtenwarteschlange unnötig:
                [highlight=epc]
                xmlText=$$
                Port=0u16
                IP=0u32
                // readtcp überschreibt beim Eintreffen einer Nachricht seine Argumente
                if (event( readtcp(Port,IP,xmlText)) and IP== GoogleIP then {
                /// Jetzt trägt xmlText die gesamten ASCII string
                /// xmlString muss nun mit find() und split() geparst werden
                }endif
                [/highlight]
                offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                Enertex Produkte kaufen

                Kommentar


                  #9
                  Zitat von Bodo Beitrag anzeigen
                  [highlight=epc]
                  if (after("Google-0/0/70",1000u64) == EIN) then {
                  sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=89520+Germany&hl=de HTTP/1.1$,0x0Du08,0x0Au08,0x0Du08,0x0Au08);
                  closetcp(GooglePort,GoogleIP)
                  }endif
                  [/highlight]
                  Sehe ich gerade: closetcp erst in der if(event(readtcp(- Funktion aufrufen, sonst bekommst Du die Anwort nimmer mit.
                  offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                  Enertex Produkte kaufen

                  Kommentar


                    #10
                    Hoi

                    Ich hab' das readtcp auch mit GoogleIP versucht.
                    [highlight=epc]
                    // Google Weather
                    xmlText=$$
                    Port=0u16
                    IP=0u32
                    GooglePort = 80u16
                    GoogleIP = resolve($www.google.com$)
                    if ("Google-0/0/80" == EIN) then {
                    connecttcp(GooglePort,GoogleIP)
                    }endif
                    if (after("Google-0/0/80",1000u64) == EIN) then {
                    sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=89520+Germany&hl=de HTTP/1.1$,0x0Du08,0x0Au08,0x0Du08,0x0Au08);
                    closetcp(GooglePort,GoogleIP)
                    }endif
                    if (event(readtcp(Port,IP,xmlText)) and IP == GoogleIP then {
                    sendmail($xxxxx@xxxxx.ch$,betreff,xmlText)
                    }endif
                    [/highlight]

                    gibt einen Fehler:
                    Code:
                    Datei: "./tmpMacroOut.txt" wurde geschriebenSyntaxfehler in Zeile:[167] 
                     >if (event(readtcp(Port,IP,xmlText)) and  IP == GoogleIP then {  sendmail($xxxxx@xxxxx.ch$,betreff,xmlText)}endif<
                     Gültig bis Spaltenposition: {0} 
                     STOP Parser --> if (event(readtcp(Port,IP,xmlText)) and  IP == GoogleIP then {  sendmail($xxxxx@xxxxx.ch$,betreff,xmlText)}endif
                    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


                      #11
                      [highlight=epc]
                      // Google Weather
                      xmlText=$$
                      Port=0u16
                      IP=0u32
                      GooglePort = 80u16
                      GoogleIP = resolve($www.google.com$)
                      if ("Google-0/0/80" == EIN) then {
                      connecttcp(GooglePort,GoogleIP)
                      }endif
                      if (after("Google-0/0/80",1000u64) == EIN) then {
                      sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=89520+Germany&hl=de HTTP/1.1$,0x0Du08,0x0Au08,0x0Du08,0x0Au08);
                      closetcp(GooglePort,GoogleIP)
                      }endif
                      if event(readtcp(Port,IP,xmlText)) and IP == GoogleIP then {
                      sendmail($xxxxx@xxxxx.ch$,betreff,xmlText)
                      }endif
                      [/highlight]
                      Eine Klammer war nicht geschlossen bei event - ok. ok, die Fehlermeldung könnte besser sein, ich weiss schon.
                      offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                      Enertex Produkte kaufen

                      Kommentar


                        #12
                        Hoi

                        Danke, ich bin echt blind...
                        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
                          Sollte nicht entsprechend dem Tip von Michael in Post #9 die Zeile 12 unter 15 verschoben werden?

                          Kommentar


                            #14
                            Zitat von MarkusL Beitrag anzeigen
                            Sollte nicht entsprechend dem Tip von Michael in Post #9 die Zeile 12 unter 15 verschoben werden?
                            Ja, ich mach das eben mal und poste es gleich - es sei denn es klingeln noch 20x irgendwelche Kinder mit Süßes oder Saures...
                            offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                            Enertex Produkte kaufen

                            Kommentar


                              #15
                              Süßes oder Saures...

                              [highlight=epc]
                              [EibPC]
                              // Google Weather: Es kommen 2 TCP Pakete an.
                              xmlText=$$
                              xmlText_Data1=$$
                              xmlText_Data2=$$
                              xmlCount=0

                              Port=0u16
                              IP=0u32
                              GooglePort = 80u16
                              GoogleIP = resolve($www.google.com$)
                              // TCP Verbindung aufmachen
                              if ('0/0/80'b01 == EIN) then {
                              connecttcp(GooglePort,GoogleIP)
                              }endif
                              // TCP Anfrage schicken
                              if (after('0/0/80'b01,1000u64) == EIN) then {
                              sendtcp(GooglePort,GoogleIP,$GET /ig/api?weather=91301+Germany&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 after('0/0/80'b01,10000u64) then {
                              closetcp(Port,IP)
                              } endif


                              // Parsen der xml Daten
                              Temperatur=0.0
                              Luftfeuchte=0.0
                              VorhersageMax=0.0
                              VorhersageMin=0.0
                              Wolken=$$
                              VorhersageWolken=$$
                              PosStart=0u16
                              PosEnd=0u16
                              // Und nun parsen
                              if xmlCount==2 then {
                              /* Die eigentlichen Daten 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 Temperatur */;
                              PosStart=find(xmlText,$<temp_c data="$,0u16)+size($<temp_c data="$);
                              PosEnd=find(split(xmlText,PosStart,END),$"$,0u16)+ PosStart;
                              Temperatur=convert(split(xmlText,PosStart,PosEnd), 0.0);
                              /* Parsen nach Luftfeuchte */;
                              PosStart=find(xmlText,$<humidity data="Feuchtigkeit:$,0u16)+size($<humidity data="Feuchtigkeit:$);
                              PosEnd=find(split(xmlText,PosStart,END),$%$,0u16)+ PosStart;
                              Luftfeuchte=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;
                              VorhersageMin=convert(split(xmlText,PosStart,PosEn d),0.0);
                              /* Parsen nach Vorhersage Max*/;
                              PosStart=find(xmlText,$<high data="$,0u16)+size($<high data="$);
                              PosEnd=find(split(xmlText,PosStart,END),$"$,0u16)+ PosStart;
                              VorhersageMax=convert(split(xmlText,PosStart,PosEn d),0.0);
                              /* Parsen nach Wolken*/;
                              PosStart=find(xmlText,$<condition data="$,0u16)+size($<condition data="$);
                              PosEnd=find(split(xmlText,PosStart,END),$"/>$,0u16)+PosStart-1u16;
                              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;
                              VorhersageWolken=split(xmlText,PosStart,PosEnd);
                              xmlCount=0
                              } endif
                              [/highlight]
                              So nun geht das, wenn man die GA auf 1 toggelt.

                              Ich hoffe, es findet sich nun jemand, der das in ein Makro pakt und hier postet. Dann würde ich es auch in die Makrosammlung mit aufnehmen.

                              Als Makro stelle ich mir vor:
                              Wetter(PLZ)
                              wobei dieses Makro jeden Tag mit einem Timer aktualisiert wird. Mal gespannt, wer das macht...
                              offizielles Supportforum für den Enertex® EibPC: https://knx-user-forum.de/eibpc/
                              Enertex Produkte kaufen

                              Kommentar

                              Lädt...
                              X