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;
}

