Hallo!
Anbei ein neues Plugin für wiregate, welches Wetterdaten (momentan nur Temperatur) auf openweathermap.org hochlädt.
Ich bin gerne bereit das Plugin für andere Wetterdaten zu erweitern.
Übersicht an möglichen Werten: API/data upload - OpenWeatherMap
Wer ist für Reviews von Plugins zuständig, bzw. wie oder von wem werden diese im SVN eingepflegt?
Configuration:
Plugin:
Anbei ein neues Plugin für wiregate, welches Wetterdaten (momentan nur Temperatur) auf openweathermap.org hochlädt.
Ich bin gerne bereit das Plugin für andere Wetterdaten zu erweitern.
Übersicht an möglichen Werten: API/data upload - OpenWeatherMap
Wer ist für Reviews von Plugins zuständig, bzw. wie oder von wem werden diese im SVN eingepflegt?
Configuration:
Code:
# Benutzername und Passwort für openweathermap.org $user = "myusername"; # Benutzername $pass = "mypassword"; # Passwort # Name, Koordinaten und Meereshöhe der Wetterstation $name = "zb-Name-des-Ortes"; # Name der Wetterstation $lat = 49.245; # Breitengrad in Grad $lon = 16.663; # Längengrad in Grad $alt = 476; # Höhe über dem Meeresspiegel in Meter # Gruppenadresse für den Außentemperaturfühler $GAtemp = "1/2/3"; # Zeiträume in welchen keine Übertragung stattfinden soll push @TimeExclusions, { from => "07:00", until => "11:00" };
Code:
###################################################################################### # # Plugin OpenWeatherMapUpload # Copyright: krumboeck (https://knx-user-forum.de/members/krumboeck.html) # License: GPL (v2) # V0.3 2013-08-24 # # Ein Wiregate Plugin zum Upload von Wetterdaten für openweathermap.org # Folgende Funktionen werden unterstützt: # - Zeitliches Aussetzen wegen Messfehler (z.B.: Sonne scheint auf Tempfühler, etc.) # - Außentemperatur # # TODO: # - Andere Wetterdaten # ###################################################################################### ################# ### Konfiguration ################# # Festlegen, dass das Plugin alle 10 Minuten laufen soll $plugin_info{$plugname.'_cycle'} = 600; ################################# ### Lesen der Konfigurationsdatei ################################# my ($user, $pass, $name, $lat, $lon, $alt, $GAtemp); my @TimeExclusions; # 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); } } use LWP::UserAgent; use HTTP::Request; use URI::Escape; ###################### ### Prüfen von Sperren ###################### my ($Sekunden, $Minuten, $Stunden, $Tag, $Monat, $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time); $Stunden = ($Stunden < 10) ? "0" . $Stunden : $Stunden; $Minuten = ($Minuten < 10) ? "0" . $Minuten : $Minuten; my $currentTime = $Stunden . $Minuten; print $currentTime; foreach my $exclusion (@TimeExclusions) { my $from = $exclusion->{from}; $from =~ s/://; my $until = $exclusion->{until}; $until =~ s/://; print $from; print $until; if ($from <= $until) { if (($from <= $currentTime) && ($until >= $currentTime)) { return "Übertragung ist derzeit gesperrt"; } } else { if (($from <= $currentTime) && (2359 >= $currentTime)) { return "Übertragung ist derzeit gesperrt"; } if ((0 <= $currentTime) && ($until >= $currentTime)) { return "Übertragung ist derzeit gesperrt"; } } } ######################### ### Wetterdaten ermitteln ######################### my $ret = ""; my %post_data; $post_data{name} = $name; $post_data{lat} = $lat; $post_data{long} = $lon; $post_data{alt} = $alt; if ((defined $GAtemp) && (length($GAtemp) >= 5)) { my $temp = knx_read($GAtemp, 300, 9.001); if (defined $temp) { $post_data{temp} = $temp; $ret .= "Temperatur: " . $temp . "; "; } else { $ret .= "Temperatur: N/A" . "; "; } } ######################## ### Übertragen der Daten ######################## my $encoded_data = ""; while ( my ($key, $value) = each(%post_data) ) { $encoded_data .= $key . "=" . uri_escape($value) . "&"; } $encoded_data =~ s/&$//; my $ua = new LWP::UserAgent; my $request = new HTTP::Request(POST => 'http://openweathermap.org/data/post'); $request->authorization_basic($user, $pass); $request->header('Content-Type' => 'application/x-www-form-urlencoded'); $request->content($encoded_data); my $response = $ua->request($request); if ($response->is_success) { $ret =~ s/; $//; return $ret; } else { return "Upload Fehler: " . $response->status_line; }