Ankündigung

Einklappen
Keine Ankündigung bisher.

Misterhouse => Wetterdaten in iPhone Visu

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

    Misterhouse => Wetterdaten in iPhone Visu

    Hallo zusammen,

    leider habe ich gar keine Wetterstation oder ähnliches
    Aber ich habe gelesen, das man(n) auch aus dem Internet die Wetterdaten abfragen/auslesen kann um diese dann in der iPhone Visu einzubinden?? Nur: Was heißt dann z.B. parsen der Seite und welche nimmt man da am besten??

    Besten Gruß,
    Joerg

    #2
    Hallo,

    hat zwar nix mit IPhone zu tun aber wettertechnisch habe ich da für mich eine eigene Lösung gebaut. Vielleicht ist das ja auch interessant.

    Also hier die Wetterdaten bei mir im Garten:
    Wetterstatistik Überblick

    Das Ganze basiert auf dieser Hardware:
    IP-Wetterdatenempfänger IPWE 1 Hardware

    Und hier meine winstärkenabhängige Jalousiesteuerung, die ich damit realisiert habe:
    Windstärkenabhängige Jalousiesteuerung

    Ob das von Interesse ist, weiss ich aber nicht.

    Gruß,
    thoern

    Kommentar


      #3
      Dann öffnen wir mal unsere Zauberkiste .

      Code:
      my $WeatherURL = "http://eine.sinnige.url/wo/du/wetterdaten/herbekommst";
      my $WeatherFile = "einsinnigernamefuerstmpfile";
      
      #Unterverzeichnis muss existieren
      my $f_weather_page = "$config_parms{data_dir}/weather/$WeatherFile.txt";
      
      $p_weather_page = new Process_Item;
      $v_weather_page = new  Voice_Cmd('[Get,Read,Show,Short] internet weather');
      $v_weather_page-> set_info("Weather conditions and forecast for $config_parms{city}, $config_parms{state}  $config_parms{country}");
      $v_weather_page-> set_authority('anyone');
      
      # Hiermit laden wir das file alle 5min, bei restart/reload oder manuell
      if ((said $v_weather_page eq 'Get') || ($New_Minute && ($Minute % 5) == 4) || $Startup || $Reload) {
      
        if (&net_connect_check) {
          set $p_weather_page "wget -q $WeatherURL -O $f_weather_page";
          #print_log "########## Retrieving $WeatherFile weather...";
          # Use start instead of run so we can detect when it is done
          start $p_weather_page;
        } else {
          #speak "Sorry, you must be logged onto the net";
        }
      }
      
      if (done_now $p_weather_page) {
        my $text = file_read $f_weather_page;
      
        # Hier musst du mittels Perl Boardmitteln (man perlre ist ein guter Anfang) aus der HTML Seite die enstprechenden Daten irgendwie extrahieren.
      
      # Fuer mich ist das einfach, da ich ein csv file lade
        my @val = split " ", $text;
      
        #print_log "########## temp:$val[4]";
        # Dann die Entsprechenden Variablen setzten und schupps hast du die daten in MH/Auf dem Bus
      # Mit den paar Zeilen habe ich die Aussentemp auf meinen TS2+
        set $Aussentemp $val[4];
        #print_log "########## temp:" . state $Aussentemp;
      }
      Viel Spass beim "basteln". Mit dem Code bekommst du eigentlich alles auf den Bus (Den DAX zB, oder die VW Aktie)

      Das hier ware ein Anfang zum Üben .

      Kommentar


        #4
        Wow, besten Dank für diesen Code, auch wenn ich da (natürlich) nicht richtig durchsteige

        Ich habe die URL angepasst, das Verzeichnis angelegt und mit 777 (full-control) berechtigt. Trotzdem bekomme ich die folgende Meldung nach dem starten von MH

        sh: -O: command not found
        Warning, could not open file_read file /opt/misterhouse/data/weather/weather.txt: No such file or directory

        Sollte nicht
        my $f_weather_page = "$config_parms{data_dir}/weather/$WeatherFile.txt";

        die Datei anlegen??

        Besten Gruß,
        Joerg

        Kommentar


          #5
          Nein, damit wird nur in der Variablen der Name der datei gespeichert. Bist du dir sicher, dass du das Verzeichnis auch angelegt hast?

          Code:
          #Unterverzeichnis muss existieren
          Ich wette irgendein Verzeichnis in dem Pfad existiert noch nicht.

          Kommentar


            #6
            Hallo Ralf,

            das Verzeichnis existiert, jedoch heißt es ja "no such file or directory".

            In meiner mh_private.ini ist folgendes declariert:

            # Here are some common parms you probably want to override:
            code_dir = /opt/misterhouse/code
            data_dir = /opt/misterhouse/data
            sound_dir = /opt/misterhouse/sounds

            Wie kommt denn die Datei dahin??

            ----------------------------------------------------------------------

            Und dann ist da ja noch die Meldung
            sh: -O: command not found

            Muß ich da noch etwas installieren??

            ----------------------------------------------------------------------

            Und kannst Du mir/uns evtl. noch den code posten/senden, wie Du Deine csv Datei parsed?? Ich spreche leider gar kein perl und muß mir die Anpassung dann ergoogeln oder probieren. Aber ohne Start =>

            Besten Gruß,
            Joerg
            Angehängte Dateien

            Kommentar


              #7
              Steht da doch
              Code:
              # Fuer mich ist das einfach, da ich ein csv file lade
                my @val = split " ", $text;
              
                #print_log "########## temp:$val[4]";

              Kommentar


                #8
                Vielleicht noch ein paar Zeilen dazu. Vorhin war ich in Eile. Mit split teilt man einen String auf. Das erste Argument ist der Trenner, das zweite der Text zum trennen. Für mehr Infos schau dir mal "man perlfunc" an.

                Um eine Web Seite zu parsen reicht split nicht. Schau dir doch bitte mal das Thema Regular Expressions an. Dazu gibt es sicher ne Menge im Netz. EIn guter Anfang ist "man perlre". Gib das eifach mal auf der Kommandozeile an und lese.

                Sei mir nicht böse. Ich kann dich da nicht an der Hand ranführen. Lesen bildet und konkrete Fragen beantworte ich gerne konkret.

                Zu deiner Frage wie die Datei da hinkommt. Das macht das script mit wget.

                Kommentar


                  #9
                  Hmm,

                  scheinbar wird die Seite ja gar nicht erst geladen??? Im normalen I-Explorer gibt es die Seite jedoch (Ist die von Ralf als Start empfohlene).

                  Wie könnte ich denn unter linux testen, ob die Seite aufrufbar ist?? Das nachladen der einzelnen Debian Module funtzte ja auch?!?!

                  LG,
                  Joerg

                  Kommentar


                    #10
                    So,

                    nach einigem probieren lag es tatsächlich an der gewählten Seite, welche zwar im IE aber nicht im Debian mit wget -O geladen werden konnte. Dies war aber erst sichtbar, als ich -q (quit) abgeschaltet habe

                    Nun nehme ich meteo24 und das klappt, ich bekomme eine Datei in mein existierendes Verzeichnis. Diese scheint mir relativ statisch und die Information die ich benötige steht in Zeile 192. Also ein wenig gegoogled und perl seiten unsicher gemacht und hier ist mein Ergebnis.

                    Code:
                    my @inhalt = file_read $f_weather_page;
                    my $tmp_line = "@inhalt[192] \n";
                    my $my_Start = index($tmp_line, ">");
                    my $my_End = rindex($tmp_line, "<");
                    my $TempME = substr($tmp_line, $my_Start+1, $my_End-$my_Start-1);
                    Nun die nächste Frage

                    Wie bekomme ich die Temperatur am sinnvollsten in die iPhone Visu?? EIB3 oder EIB4 in der ###.mht anlegen?? Kann ich das direkt in die iphone.pl packen??

                    Besten Gruß,
                    Joerg

                    Kommentar


                      #11
                      Hallo schon wieder,

                      habe leider immer noch ein Code-Problem

                      Soweit funtzt der Code, aber leider nur einmal beim Start von MH. Dannach wird immer der gleiche Wert = Temperatur angezeigt, obwahl die Ausgabe im Log immer zeigt das die Datei neu angelegt wurde und ich habe auch überprüft, das dies passiert ist. (Neuer Wert für Temp) Das Script läuft auch immer durch, da ich mir derzeit den Wert im Log anzeigen lassen (Zeile aus Code entfernt).

                      Code:
                      my $WeatherURL = "[URL="http://www.meteo24.de/wetter/49X2533.html"]Wetter Mettmann Deutschland (Nordrhein-Westfalen) - Luftdruck Urlaub in Mettmann Reisewetter[/URL]";
                      my $WeatherFile = "mettmann";
                      #Unterverzeichnis muss existieren
                      my $f_weather_page = "$config_parms{data_dir}/weather/$WeatherFile.txt";
                      $p_weather_page = new Process_Item;
                      $v_weather_page = new  Voice_Cmd('[Get,Read,Show,Short] internet weather');
                      $v_weather_page-> set_info("Weather conditions and forecast for $config_parms{city}, $config_parms{state}  $config_parms{country}");
                      $v_weather_page-> set_authority('anyone');
                      # Hiermit laden wir das file alle 5min, bei restart/reload oder manuell
                      #if ((said $v_weather_page eq 'Get') || ($New_Minute && ($Minute % 5) == 4) || $Startup || $Reload) {
                      if ((said $v_weather_page eq 'Get') || ($New_Minute && ($Minute % 10) == 4) || $Startup || $Reload) {
                        if (&net_connect_check) {
                          set $p_weather_page "wget $WeatherURL -O $f_weather_page";
                          print_log "########## Retrieving $WeatherFile weather...";
                          # Use start instead of run so we can detect when it is done
                          start $p_weather_page;
                        } else {
                          #speak "Sorry, you must be logged onto the net";
                        }
                      }
                      if (done_now $p_weather_page) {
                      my @inhalt = file_read $f_weather_page;
                       
                      my $tmp_line = "@inhalt[192] \n";
                      my $my_Start = index($tmp_line, ">");
                      my $my_End = rindex($tmp_line, "<");
                      my $TempME = substr($tmp_line, $my_Start+1, $my_End-$my_Start-1);
                      #print_log "########## temp:$val[4]";
                        # Dann die Entsprechenden Variablen setzten und schupps hast du die daten in MH/Auf dem Bus
                      #set $Aussentemp $TempME;
                      print_log "########## temp:", $TempME;
                      }
                      Zwei Fragen:

                      - Warum wird der Wert nur einmal ausgelesen?
                      - Wie bekomme ich den Wert im iPhone Menu ganz oben angezeigt

                      Besten Gruß,
                      Joerg

                      Kommentar


                        #12
                        Du lädst zwar mit Boardmitteln das html file, dann parst du es, aber was machst du mit dem ermittelten Wert $TempME? Wie meinst du soll der auf den Bus kommen. Du setzt zwar den Inhalt der Variablen $TempME, aber das ist doch eine reine Variable in Perl. MH kennt die zwar, aber der Inhalt wird in keiner Weise auf den Bus gesendet.

                        Hast du eine EIB5 Variable angelegt in eib_items.mht? zB:
                        Code:
                        EIB5,     0/6/7,               Aussentemp,        Status, R
                        Dann das Kommentarzeichen hier entfernen:
                        Code:
                        set $Aussentemp $TempME;
                        Und dann das EIB5 Objekt $Aussentemp entsprechend in die Visu einbauen.

                        Dann solltest du es geschafft haben .

                        Gratulor!

                        Kommentar


                          #13
                          Hi Ralf,

                          Der Tip mit dem EIB5 fehlte mir, da ich irgendwie nach dem ganzen Perlen einen Blackout hatte und nicht wusste welche EIB Klasse ich nutze.


                          Aber: warum anert sich der Wert der Temp nicht?? Die Datei wird neu geschrieben, aber mein Script liest diese augenscheinlich nicht mehr aus???

                          Gruss aus der Regio-Bahn
                          Joerg

                          Nachtrag:
                          So, Auftrag ausgeführt und wie von RaK angegeben eingebunden und EIB5 Item erstellt. Ergebnis => siehe Bild (Temperatur ohne Wert )

                          Im LOG erscheint zu:

                          set $Aussentemp $TempME;
                          print_log "########## temp:" . state $Aussentemp;
                          print_log "########## temp:", $TempME;
                          print_log "########## ", $Aussentemp;

                          06/23/09 07:39:56 PM ########## state:21.7
                          06/23/09 07:39:56 PM ########## temp: 21.7
                          06/23/09 07:39:56 PM ########## EIB5_Item=HASH(0xaef2d78)
                          Angehängte Dateien

                          Kommentar


                            #14
                            HURRA,

                            ein bißchen weiter im Forum gesucht und einen aaalten Beitrag zur Visu ausgebuddelt.

                            Nach Eintrag der Zeile.

                            $Aussentemp -> set_label('Aussentemperatur[%.1f°C]');

                            in meiner Groups.pl erscheint auch die Temperatur und sogar mit °C Angabe.

                            Nun bleibt nur noch die Frage an die Perlisten: Warum wird die Datei zwar (bei mir alle 10 min) geschrieben, aber nicht mehr eingelesen???

                            Besten Gruß,
                            Joerg
                            Angehängte Dateien

                            Kommentar


                              #15
                              1) ich vermute, dass deine $TempME Variable noch ein Leerzeichen am Anfang zuviel hat. _20.7 anstatt 20.7. Kann das sein? Deshalb hat das erst nach dem hinzufügen des [%.1f C] funktioniert.

                              2) Ich empfehle dir dringend, wiederholt und letztmalig () das Thema Regular Expressions (man perlre ist ein Anfang) anzuschauen. Andernfalls lesen wir in zwei Wochen einen neuen Beitrag von dir, dass das Einlesen der Temperatur nicht mehr funktioniert, weil sich die Seite leicht geändert hat.

                              3) Ich habe file_read noch nie benutzt. Ich mache das immer mit open, close wie hier beschrieben. Meine Vermutung ist, dass du immer das gleiche File liest, da du das erste Lesen nie mit close beendest. Aber wie gesagt, ich kenne das file_read nicht. Insofern überschreibt MH dir zwar das File. Du greifst im nachfolgenden code aber immer noch auf die alten Inhalte zu.

                              Der Tip mit dem EIB5 fehlte mir, da ich irgendwie nach dem ganzen Perlen einen Blackout hatte und nicht wusste welche EIB Klasse ich nutze.
                              4)Ich klinke mich an dieser Stelle mal aus. Der Punkt hat mir zugesetzt .

                              5) und letztens. Ich glaube mittlerweile JoergA ist ein eingefleischter HS Jünger seit langen Jahren und freut sich diebisch, wenn ihr ellenlange Threads entstehen die verdeutlichen sollen, wie komplex Misterhouse und Linux im Allgemeinen ist . Durchschaut?

                              Kommentar

                              Lädt...
                              X