Ankündigung

Einklappen
Keine Ankündigung bisher.

OpenWeatherMap

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [wiregate] OpenWeatherMap

    Hallo!

    Wie bekommt man Zugriff auf das SVN um die Plugins nicht im Forum untergehen zu lassen?


    Anbei mein Plugin, welches Wetterdaten von openweathermap.org abholt und an den KNX Bus weitergibt.


    Plugin:
    Code:
    ######################################################################################
    #
    # Plugin OpenWeatherMap
    # Copyright: krumboeck (https://knx-user-forum.de/members/krumboeck.html)
    # License: GPL (v2)
    # V0.3 2013-09-07
    #
    # Ein Wiregate Plugin zum Senden von openweathermap.org Wetterdaten auf den KNX Bus
    #
    ######################################################################################
    
    
    #################
    ### Konfiguration
    #################
    
    # Festlegen, dass das Plugin alle 20 Minuten laufen soll
    $plugin_info{$plugname.'_cycle'} = 1200;
    
    
    #################################
    ### Lesen der Konfigurationsdatei
    #################################
    
    my ($lat, $lon, $locale);
    my $knxGA;
    
    # Read config file in conf.d
    my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
    if (! -f $confFile) {
        plugin_log($plugname, " no conf file [$confFile] found.");
        return "no conf file [$confFile] found.";
    } else {
        open(CONF, $confFile);
        my @lines = <CONF>;
        close($confFile);
        my $result = eval("@lines");
        if ($@) {
            plugin_log($plugname, "conf file [$confFile] returned:");
            my @parts = split(/\n/, $@);
            plugin_log($plugname, "--> $_") foreach (@parts);
        }
    }
    
    
    ################
    ### Definitionen
    ################
    
    use LWP::UserAgent;
    use XML::Simple;
    
    my $units = 'metric';
    my $mode = 'xml';
    
    
    #########################
    ### Wetterdaten ermitteln
    #########################
    
    my $baseurl = 'http://api.openweathermap.org/data/2.5/weather?';
    my $url = $baseurl . 'lat=' . $lat . '&lon=' . $lon . '&units=' . $units . '&mode=' . $mode . '&lang=' . $locale;
    
    my $ua = LWP::UserAgent->new;
    $ua->timeout(30);
    my $response = $ua->get($url);
    
    if (! $response->is_success) {
      return $response->status_line;
    }
    
    my $content = $response->decoded_content;
    
    my $xml = new XML::Simple;
    my $data = $xml->XMLin($content);
    
    
    #################################
    ### Wetterdaten auf Bus schreiben
    #################################
    
    if (defined $knxGA->{temperature}) {
        knx_write($knxGA->{temperature}, $data->{temperature}->{value}, 9.001);
    }
    
    if (defined $knxGA->{humidity}) {
        knx_write($knxGA->{humidity}, $data->{humidity}->{value}, 9.007);
    }
    
    if (defined $knxGA->{pressure}) {
        knx_write($knxGA->{pressure}, $data->{pressure}->{value}, 9.006);
    }
    
    if (defined $knxGA->{windSpeed}) {
        knx_write($knxGA->{windSpeed}, $data->{wind}->{speed}->{value}, 9.005);
    }
    
    if (defined $knxGA->{windDirection}) {
        knx_write($knxGA->{windDirection}, $data->{wind}->{direction}->{value}, 9.003);
    }
    
    if (defined $knxGA->{clouds}) {
        knx_write($knxGA->{clouds}, $data->{clouds}->{value}, 5.004);
    }
    
    if (defined $knxGA->{city}) {
            my $city = $data->{city}->{name};
            if (length($city) > 14) {
                $city = subtr($city, 0, 14);
            }
        knx_write($knxGA->{city}, $city, 16.001);
    }
    
    my $ret = "Temperatur: " . $data->{temperature}->{value} . " °C";
    $ret .= "; Luftfeuchtigkeit: " . $data->{humidity}->{value} . " %";
    $ret .= "; Luftdruck: " . $data->{pressure}->{value} . " hPa";
    $ret .= "; Windgeschwindigkeit: " . $data->{wind}->{speed}->{value} . " km/h";
    
    return $ret;
    Konfiguration:
    Code:
    # Längengrad, Breitengrad und Sprache
    $lat = 49.235;
    $lon = 16.653;
    $locale = 'de';
    
    # Die Gruppenadressen müssen vorher mit dem Gruppenadresseditor erfasst werden.
    # Wenn ein Wert nicht benötigt wird, kann man ihn einfach auskommentieren.
    $knxGA = {
        temperature => '1/2/0',        # DPT  9.001: Außentemperatur in °C
        humidity => '1/2/1',        # DPT  9.007: Luftfeuchtigkeit in %
        pressure => '1/2/2',        # DPT  9.006: Luftdruck in hPa
        windSpeed => '1/2/3',        # DPT  9.005: Windgeschwindigkeit in km/h
        windDirection => '1/2/4',    # DPT  5.003: Winkel in Grad
        clouds => '1/2/5',        # DPT  5.004: Bewölkung in %
        city => '1/2/6',        # DPT 16.001: Name des nächsten Ortes (mit Wettervorhersage)
        };

    #2
    Zitat von krumboeck Beitrag anzeigen
    Wie bekommt man Zugriff auf das SVN um die Plugins nicht im Forum untergehen zu lassen?
    1. SourceForge Account anlegen
    2. Makki oder mir den Account-Namen mitteilen, dann können wir Dich freischalten. (So lange Makki im Sabatical ist, vermutlich besser nur an mich, sonst könnte es dauern... )
    TS2, B.IQ, DALI, WireGate für 1wire so wie Server für Logik und als KNX Visu die CometVisu auf HomeCockpit Minor. - Bitte keine PNs, Fragen gehören in das Forum, damit jeder was von den Antworten hat!

    Kommentar


      #3
      Hallo,

      Openweathermap verlangt neuerdings eine Registrierung und einen APIKEY, der mit &APPID=1111111111 an den Abfragestring angefügt werden muss.
      Siehe auch http://openweathermap.org/faq#error401

      Code:
      ######################################################################################
      #
      # Plugin OpenWeatherMap
      # Copyright: krumboeck (https://knx-user-forum.de/members/krumboeck.html)
      # License: GPL (v2)
      # V0.4 2015-10-29 CMa APIKEY eingebaut.
      # V0.3 2013-09-07
      #
      # Ein Wiregate Plugin zum Senden von openweathermap.org Wetterdaten auf den KNX Bus
      #
      ######################################################################################
      
      
      #################
      ### Konfiguration
      #################
      
      # Festlegen, dass das Plugin alle 2 Minuten laufen soll
      $plugin_info{$plugname.'_cycle'} = 120;
      
      
      #################################
      ### Lesen der Konfigurationsdatei
      #################################
      
      my ($lat, $lon, $locale, $APIKEY);
      my $knxGA;
      
      # Read config file in conf.d
      my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
      if (! -f $confFile) {
          plugin_log($plugname, " no conf file [$confFile] found.");
          return "no conf file [$confFile] found.";
      } else {
          open(CONF, $confFile);
          my @lines = <CONF>;
          close($confFile);
          my $result = eval("@lines");
          if ($@) {
              plugin_log($plugname, "conf file [$confFile] returned:");
              my @parts = split(/\n/, $@);
              plugin_log($plugname, "--> $_") foreach (@parts);
          }
      }
      
      
      ################
      ### Definitionen
      ################
      
      use LWP::UserAgent;
      use XML::Simple;
      
      my $units = 'metric';
      my $mode = 'xml';
      
      #########################
      ### Wetterdaten ermitteln
      #########################
      
      my $baseurl = 'http://api.openweathermap.org/data/2.5/weather?';
      my $url = $baseurl . 'lat=' . $lat . '&lon=' . $lon . '&units=' . $units . '&mode=' . $mode . '&lang=' . $locale . '&APPID=' . $APIKEY ;
      
      my $ua = LWP::UserAgent->new;
      $ua->timeout(30);
      my $response = $ua->get($url);
      
      if (! $response->is_success) {
          return $response->status_line;
      }
      
      my $content = $response->decoded_content;
      
      my $xml = new XML::Simple;
      my $data = $xml->XMLin($content);
      
      
      #################################
      ### Wetterdaten auf Bus schreiben
      #################################
      
      if (defined $knxGA->{temperature}) {
          knx_write($knxGA->{temperature}, $data->{temperature}->{value}, 9.001);
      }
      
      if (defined $knxGA->{humidity}) {
          knx_write($knxGA->{humidity}, $data->{humidity}->{value}, 9.007);
      }
      
      if (defined $knxGA->{pressure}) {
          knx_write($knxGA->{pressure}, $data->{pressure}->{value}, 9.006);
      }
      
      if (defined $knxGA->{windSpeed}) {
          knx_write($knxGA->{windSpeed}, $data->{wind}->{speed}->{value}, 9.005);
      }
      
      if (defined $knxGA->{windDirection}) {
          knx_write($knxGA->{windDirection}, $data->{wind}->{direction}->{value}, 9.003);
      }
      
      if (defined $knxGA->{clouds}) {
          knx_write($knxGA->{clouds}, $data->{clouds}->{value}, 5.004);
      }
      
      if (defined $knxGA->{city}) {
              my $city = $data->{city}->{name};
              if (length($city) > 14) {
                  $city = substr($city, 0, 14);
              }
          knx_write($knxGA->{city}, $city, 16.001);
      }
      
      my $ret = "Temperatur: " . $data->{temperature}->{value} . " °C";
      $ret .= "; Luftfeuchtigkeit: " . $data->{humidity}->{value} . " %";
      $ret .= "; Luftdruck: " . $data->{pressure}->{value} . " hPa";
      $ret .= "; Windgeschwindigkeit: " . $data->{wind}->{speed}->{value} . " km/h";
      $ret .= "; Windrichtung : " . $data->{wind}->{deg}->{value} . " Richtung";
      $ret .= "; Bewölkung : " . $data->{clouds}->{value} . " % bewölkt";
      
      
      return $ret;

      neue Konfig:

      Code:
      # Längengrad, Breitengrad und Sprache
      $lat = 49.235;
      $lon = 16.653;
      $locale = 'de';
      $APIKEY='1111111111';
      
      # Die Gruppenadressen müssen vorher mit dem Gruppenadresseditor erfasst werden.
      # Wenn ein Wert nicht benötigt wird, kann man ihn einfach auskommentieren.
      $knxGA = {
          temperature => '1/2/0',        # DPT  9.001: Außentemperatur in °C
          humidity => '1/2/1',        # DPT  9.007: Luftfeuchtigkeit in %
          pressure => '1/2/2',        # DPT  9.006: Luftdruck in hPa
          windSpeed => '1/2/3',        # DPT  9.005: Windgeschwindigkeit in km/h
          windDirection => '1/2/4',    # DPT  5.003: Winkel in Grad
          clouds => '1/2/5',        # DPT  5.004: Bewölkung in %
          city => '1/2/6',        # DPT 16.001: Name des nächsten Ortes (mit Wettervorhersage)
          };
      Momentan nur hier und nicht im SVN gepflegt.

      Gruß

      Christoph

      Kommentar

      Lädt...
      X