Ankündigung

Einklappen
Keine Ankündigung bisher.

WundergroundWeather - Plugin

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

    #46
    Das reine Perl-Script wäre das angehängte. Einfach das.txt entfernen und mit "perl wunderground.pl" aufrufen.

    Aber:
    1. Kein Senden auf den Bus möglich
    2. Die API muss man sich noch besorgen
    3. Im crontab müsste ein Eintrag geschaffen werden der das Script alle xx Minuten (jede Stunde reicht auch) startet
    4. Das Anpassen der Pfade kann einem niemand abnehmen
    5. Die Symbole...da hat bestimmt noch jemand einen Tip für Dich wo die die herbekommst
    6. Das Bier bekommt dann Jens oder Bodo ... oder beide
    7. ungetestet


    Grüße
    Angehängte Dateien
    Umgezogen? Ja! ... Fertig? Nein!
    Baustelle 2.0 !

    Kommentar


      #47
      Danke!
      Werde ich später gleich mal ausprobieren ...

      O.K. ein Bierchen auf 3 Personen geht eher schlecht ...
      Forums-Spende in der Höhe von € 5.-- auch in Ordnung?

      Kommentar


        #48
        Forumsspenden sind bestimmt auch gern gesehen ... lösch mal noch die Zeile mit "plugin_info ...." und das "return;" am Ende.

        Grüße
        Umgezogen? Ja! ... Fertig? Nein!
        Baustelle 2.0 !

        Kommentar


          #49
          So nun erstmalig getestet und bleibt leider gleich bei Zeile 42 hängen (nach ## Hauptverarbeitung)

          exakte Fehlermeldung:

          Can't locate LWP/Simple.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /var/www/wunderground/wunderground.pl line 42.
          BEGIN failed--compilation aborted at /var/www/wunderground/wunderground.pl line 42.

          Kommentar


            #50
            Hoi

            Das liegt an den Perl Bibliotheken die es braucht.

            use LWP::Simple;
            use XML::Simple;

            Die sind halt auf dem Wiregate schon dabei, lassen sich aber leicht nachinstallieren, denke ich.
            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


              #51
              @tqm:

              Versuchs mal mit einem apt-get install liblwp-simple-perl libxml-simple-perl ich weiß aber nicht auf welchem OS dein Pi läuft.

              @bodo:
              Danke, aber die hatte ich schon . Ich nutz das schon ne Weile und hatte damals den Code fürs iPad angepasst. Aber super dass Du den Code mal aufgeräumt hast.

              Grüße
              Umgezogen? Ja! ... Fertig? Nein!
              Baustelle 2.0 !

              Kommentar


                #52
                Mein Raspberry läuft unter wheezy ...

                Ich hab es so hinbekommen:


                sudo apt-get install curl gcc-4.7

                anschliesend:

                sudo curl -L http://cpanmin.us | perl - --sudo App::cpanminus


                und dann die module mit:

                sudo cpanm LWP::Simple

                und

                sudo cpanm XML::Simple

                nachinstalliert ...

                Hat noch jemand eine PN mit einem Hinweis auf die Icons für mich?

                Kommentar


                  #53
                  Das Perl Script sagt mir heute

                  "Niederschlag heute: -25375mm"

                  Ziemlich starke Verdunstung :-) Ist das auch schon jemanden aufgefallen? Gibt's da 'nen Bugfix?!

                  Gruß, Nersrac

                  Kommentar


                    #54
                    Zitat von netsrac Beitrag anzeigen
                    Das Perl Script sagt mir heute

                    "Niederschlag heute: -25375mm"

                    Ziemlich starke Verdunstung :-) Ist das auch schon jemanden aufgefallen? Gibt's da 'nen Bugfix?!

                    Gruß, Nersrac
                    Bei mir "Niederschlag heute: 0mm" welchen Ort hast du eingetragen?

                    Apropo, ich hab das Plugin ein wenig "eingemetalt", die Symbole kommen jetzt aus der CometVisu also aus dem KNX-UF-Iconset, hier der Code:

                    Code:
                    #Plugin zum Abfragen und Darstellen von
                    # WundergroundWeather von jensgulow
                    # based on
                    # Plugin zum Abfragen von Google Weather
                    # Version 0.51 2012-11-29
                    # Copyright: Bodo (https://knx-user-forum.de/members/bodo.html)
                    # License: GPL (v2)
                    
                    ##################
                    ### DEFINITION ###
                    ##################
                    
                    my $city = "Berlin";        # Meine Stadt, hier statt ü,ä,ö einfach u,a,o nehmen oder ue,ae,oe
                    my $country = "Germany";        # Mein Land
                    my $lang = "DL";                # Meine Sprache
                    my $api = "xxx";        # API, muss man sich bei Wunderground besorgen
                    
                    my $wunderground_temp_ga = "0/2/8";        # Gruppenadresse Temperatur (DPT9.001)
                    my $wunderground_hum_ga = "0/2/1";        # Gruppenadresse Luftfeuchte (DPT9.007)
                    my $wunderground_forecast_maxtemp_ga = "0/2/9";        # Gruppenadresse Temperatur Maximum (DPT9.001)
                    my $wunderground_forecast_mintemp_ga = "0/2/10";        # Gruppenadresse Temperatur Minimum (DPT9.001)
                    my $wunderground_clouds_ga = "0/0/8";        # Gruppenadresse Wolken (DPT16)
                    my $wunderground_forecast_clouds_ga = "0/0/9";        # Gruppenadresse Vorhersage Wolken (DPT16)
                    my $wunderground_wind_ga = "0/0/10";    # Gruppenadresse Wind (DPT16)
                    
                    my $wunderground_ip                                    = "http://api.wunderground.com/api/";
                    #my $symbole                                            = "/symbole/";                        # Pfad zu den Wettersymbolen
                    my $symbole                                            = "/visu_svn/icon/knx-uf-iconset/128x128_white/";                        # Pfad zu den Wettersymbolen
                    my $symbolebg                                        = "/symbolebg/";                    # Pfad zu den Wetterhintergründen
                    my $htdocs                                            = "/var/www/";                        # Das Webverzeichnis
                    my $wunderground_xml                                = "wunderground_weather.xml";        # Der XML Datensatz
                    my $weather_html                                    = "wunderground_weather.html";        # Ausgabe als HTML
                    my $wunderground_css                                = "wunderground_weather.css";        # Das Stylesheet
                    
                    $plugin_info{$plugname.'_cycle'} = 1800;    # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen) 
                                            # nicht zu klein, da die Daten sowieso in längeren Perioden refresht werden
                                            # und das Plugin auf die CF schreibt.
                    
                    my %myIcon;
                    %myIcon = (
                      'chanceflurries.gif' => 'weather_snow_light.png',
                      'chancerain.gif' => 'weather_rain.png',
                      'chancesleet.gif' => 'weather_rain_light.png',
                      'chancesnow.gif' => 'weather_snow.png',
                      'chancetstorms.gif' => 'weather_storm.png',
                      'clear.gif' => 'weather_sun.png',
                      'cloudy.gif' => 'weather_cloudy.png',
                      'flurries.gif' => 'weather_snow_light.png',
                      'fog.gif' => 'weather_cloudy_heavy.png',
                      'hazy.gif' => 'weather_cloudy_heavy.png',
                      'mostlycloudy.gif' => 'weather_cloudy_light.png',
                      'mostlysunny.gif' => 'weather_cloudy_light.png',
                      'partlycloudy.gif' => 'weather_cloudy.png',
                      'partlysunny.gif' => 'weather_cloudy.png',
                      'rain.gif' => 'weather_rain.png',
                      'sleet.gif' => 'weather_rain_light.png',
                      'snow.gif' => 'weather_snow.png',
                      'sunny.gif' => 'weather_sun.png',
                      'tstorms.gif' => 'weather_thunderstorm.png',
                      'nt_chanceflurries.gif' => 'weather_snow_light.png',
                      'nt_chancerain.gif' => 'weather_rain.png',
                      'nt_chancesleet.gif' => 'weather_rain_light.png',
                      'nt_chancesnow.gif' => 'weather_snow.png',
                      'nt_chancetstorms.gif' => 'weather_storm.png',
                      'nt_clear.gif' => 'scene_night.png',
                      'nt_cloudy.gif' => 'weather_cloudy.png',
                      'nt_flurries.gif' => 'weather_snow_light.png',
                      'nt_fog.gif' => 'weather_cloudy_heavy.png',
                      'nt_hazy.gif' => 'weather_cloudy_heavy.png',
                      'nt_mostlycloudy.gif' => 'weather_cloudy_light.png',
                      'nt_mostlysunny.gif' => 'weather_cloudy_light.png',
                      'nt_partlycloudy.gif' => 'weather_cloudy.png',
                      'nt_partlysunny.gif' => 'weather_cloudy.png',
                      'nt_rain.gif' => 'weather_rain.png',
                      'nt_sleet.gif' => 'weather_rain_light.png',
                      'nt_snow.gif' => 'weather_snow.png',
                      'nt_sunny.gif' => 'scene_night.png',
                      'nt_tstorms.gif' => 'weather_thunderstorm.png'
                    );
                    
                    #######################
                    ### ENDE DEFINITION ###
                    #######################
                    
                    # Hauptverarbeitung
                    use LWP::Simple;
                    use XML::Simple;
                    use Data::Dumper;
                    use Encode qw(encode decode);
                    # use open ":utf8";
                    
                    my $url = $wunderground_ip.$api."/conditions/forecast/astronomy/lang:".$lang."/q/".$country."\/".$city."\.xml";
                    #my $xml = encode("utf8",get($url));
                    my $xml = get($url);
                    return "Couldn't get it!" unless defined $xml;
                    
                    my $xml_w = ">".$htdocs.$wunderground_xml;
                    open(XML, $xml_w);    # XML Datei zum Schreiben öffnen
                    print XML $xml;
                    close(XML);
                    
                    my $weather = XMLin($xml);
                    
                    my $wunderground_temp = $weather->{current_observation}->{temp_c};
                    $wunderground_temp =~ m/(\d{1,3})(\D)(\d{1,3})/; # ($1)($2)($3)
                    knx_write($wunderground_temp_ga,$1,9);
                    
                    my $wunderground_hum = $weather->{current_observation}->{relative_humidity};
                    $wunderground_hum =~ m/(\d{1,3})(\D)/; # ($1)($2)
                    knx_write($wunderground_hum_ga,$1,9);
                    
                    my $wunderground_forecast_maxtemp = $weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[0]->{high}->{celcius};
                    $wunderground_forecast_maxtemp =~ m/(\d{1,3})(\D)(\d{1,3})/; # ($1)($2)($3)
                    knx_write($wunderground_forecast_maxtemp_ga,$1,9);
                    
                    my $wunderground_forecast_mintemp = $weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[0]->{low}->{celcius};
                    $wunderground_forecast_mintemp =~ m/(\d{1,3})(\D)(\d{1,3})/; # ($1)($2)($3)
                    knx_write($wunderground_forecast_mintemp_ga,$1,9);
                    
                    my $wunderground_clouds = $weather->{current_observation}->{weather};
                    if ($wunderground_clouds =~ m/(\D*)(\s)(\D*)/) {  # \s findet Zwischenraum (whitspaces). ($1)($2)($3)
                      knx_write($wunderground_clouds_ga,$1." ".$3,16);
                    } else {
                      knx_write($wunderground_clouds_ga,$wunderground_clouds,16);
                    }
                    
                    my $wunderground_forecast_clouds = $weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[0]->{conditions};
                    if ($wunderground_forecast_clouds =~ m/(\D*)(\s)(\D*)/) { # ($1)($2)($3)
                      knx_write($wunderground_forecast_clouds_ga,$1." ".$3,16);
                    } else {
                      knx_write($wunderground_forecast_clouds_ga,$wunderground_forecast_clouds,16);
                    }
                    my $wunderground_wind = $weather->{current_observation}->{wind_string};
                    if ($wunderground_wind =~ m/(\D*)(\s)(\D*)/) { # ($1)($2)($3)
                      knx_write($wunderground_wind_ga,$1." ".$3,"16");
                    } else {
                      knx_write($wunderground_wind_ga,$wunderground_wind,16);
                    }
                    
                    my $length = -4;
                    my $icontoday = $myIcon {substr ($weather->{current_observation}->{icon_url}, 31, $length).".gif"};
                    my $location = substr ($weather->{current_observation}->{observation_time}, 5, $length);
                    
                    my $html = 
                    "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN'>
                    <html>
                    <head>
                    <title>Wetter</title>
                    <meta name='language' content='de'>
                    <meta http-equiv='content-type' content='text/html; charset=utf8'>
                    <meta http-equiv='refresh' content='". $plugin_info{$plugname.'_cycle'}/4 ."'>
                    <link rel='stylesheet' type='text/css' href='".$wunderground_css."'>
                    </style>
                    </head>
                    <body>
                    <table background=\"".$symbolebg.$icontoday."\">".
                    
                    "<tr height=380px>\n".
                    "<td width=250px align=left>\n".
                    "<h2 align=center>".$weather->{current_observation}->{temp_c}."°</h2><h3><br/>\n".
                    "Gefühlt: ".$weather->{current_observation}->{feelslike_c}."° C<br/>\n".
                    "Bewölkung: ".$weather->{current_observation}->{weather}."<br/>\n".
                    "Luftfeuchte: ".$weather->{current_observation}->{relative_humidity}."<br/>\n".
                    "Niederschlag heute: ".$weather->{current_observation}->{precip_today_metric}." mm"."<br/>\n".
                    "Windrichtung: ".$weather->{current_observation}->{wind_dir}."<br/>\n".
                    "Windgeschwindigkeit: ".$weather->{current_observation}->{wind_kph}." km/h"."<br/>\n"."<br/>\n".
                    $location."</h3><br/>\n".
                    "</td>\n".
                    "<td>\n".
                    "<img width=250px height=250px src=\"".$symbole.$icontoday."\" alt=\"".
                    $weather->{current_observation}->{icon}."\" /><br/>\n".
                    "</td>\n";
                    
                    for(my $j=0;$j<4;$j++) {
                    	my $fc_icon = $symbole.$myIcon {$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{icon}.".gif"};
                    
                    	$html = $html."<td align=center>\n".
                    		"<strong>".$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{date}->{weekday}."</strong><br/>\n"."<h3>".
                    		$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{conditions}."</h3><br/>\n<h1><font color=\"orange\">".
                    		$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{high}->{celsius}."° C</font><br/>\n".
                    		$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{low}->{celsius}."° C</h1><h3><br/>\n".
                    		"Niederschlagsrisiko ".$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{pop}."%<br/>\n</h3>".
                    		"<img width=150px height=150px src=\"".$fc_icon."\" alt=\"".
                    		$weather->{forecast}->{simpleforecast}->{forecastdays}->{forecastday}->[$j]->{conditions}."\" /><br/>\n".
                    		"</td>\n";
                    }
                    $html = $html."</tr>
                    </table>
                    </body>";
                    
                    
                    my $html_datei = $htdocs.$weather_html;
                    
                    open(HTML, ">:utf8", $html_datei);    # HTML Datei zum Schreiben öffnen
                    print HTML $html;
                    close(HTML);
                    Ich hoffe, der Plugin Ersteller hat nichts dagegen?!

                    Grüße
                    David

                    Kommentar


                      #55
                      Zitat von kingolli Beitrag anzeigen
                      Bei mir "Niederschlag heute: 0mm" welchen Ort hast du eingetragen?
                      Berlin

                      Hast Du mal 'nen Screenshot von dem geänderten Layout?! Würde mich freuen....


                      Danke....Netsrac

                      Kommentar


                        #56
                        Naja, ich hab das Metal noch ein wenig auf mich angepasst, sieht bei mir jetzt so aus (bin aber noch nicht ganz fertig bzw. funktionieren einige Sache im CSS nicht wie erwartet!).

                        Grüße
                        David
                        Angehängte Dateien

                        Kommentar


                          #57
                          Wie hast Du denn die farblich abgesetzten aktiven Tabs in den Navbars parametrisiert (über die custom.css)?

                          Jens
                          Viele Grüße Jens

                          Kommentar


                            #58
                            Hallo,

                            kann man eigentlich auch lokalere/User-Wetterstationen abfragen?
                            Ein Beispiel: Ich hätte gerne den Niederschlag von hier:
                            Weather History for Weather Station INIEDERS60 | Weather Underground

                            Mit
                            http://api.wunderground.com/api/[meinapikey][/COLOR]/conditions/forecast/astronomy/langL/q/Germany/INIEDERS60.xml
                            bekomme ich leider nix (bzw. eine Fehlermeldung)
                            Code:
                            <response>
                            <version>0.1</version>
                            <termsofService>
                            http://www.wunderground.com/weather/api/d/terms.html
                            </termsofService>
                            <features>
                            <feature>conditions</feature>
                            <feature>forecast</feature>
                            <feature>astronomy</feature>
                            </features>
                            <error>
                            <type>querynotfound</type>
                            <description>No cities match your search query</description>
                            </error>
                            </response>
                            Kann man diese Wetterstationen nicht abfragen?

                            Gruß,
                            Hendrik

                            Kommentar


                              #59
                              Hoi Hendrik

                              Ich habe eine Wetterstation in meiner Abfrage:
                              Code:
                              http://api.wunderground.com/weatherstation/WXCurrentObXML.asp?ID=IZURICHC2
                              Nur wenn die ausfällt gibt es halt auch mal keine 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


                                #60
                                Hi,

                                danke!
                                Weisst du, ob das Plugin damit klar kommt?
                                Wie kommt's, dass kein Api-Key nötig ist?

                                Gruß,
                                Hendrik

                                Kommentar

                                Lädt...
                                X