|
From: <ma...@us...> - 2012-01-08 19:33:14
|
Revision: 646
http://openautomation.svn.sourceforge.net/openautomation/?rev=646&view=rev
Author: makki1
Date: 2012-01-08 19:33:07 +0000 (Sun, 08 Jan 2012)
Log Message:
-----------
WireGate-Plugins: FTP-Upload/create PNG-graphs, RSSlog
Added Paths:
-----------
wiregate/plugin/generic/FTP_UploadGraph.pl
wiregate/plugin/generic/RSSlog.pl
Added: wiregate/plugin/generic/FTP_UploadGraph.pl
===================================================================
--- wiregate/plugin/generic/FTP_UploadGraph.pl (rev 0)
+++ wiregate/plugin/generic/FTP_UploadGraph.pl 2012-01-08 19:33:07 UTC (rev 646)
@@ -0,0 +1,66 @@
+### Plugin zum erstellen von Grafiken aus RRD's und FTP-Upload (SMTP-Versand, ...)
+# v0.1
+# 2012-01-04
+# Kann aktuell nur einen Wert pro Grafik!
+# Hinweise: Die Grafikerstellung ist sehr resourcenintensiv -
+# stark abhängig von der Groesse der Grafik - und sollte nicht zu haeufig laufen!
+# Dringend empfohlen: nicht mehr als 10 Werte pro Plugin!
+
+###################
+### DEFINITION ###
+###################
+
+$plugin_info{$plugname . '_cycle'} = 3600; # Aufrufzyklus
+
+# FTP Zugangsdaten
+my $host = 'mein.ftpserver.de';
+my $user = 'meinuser';
+my $password = 'meinpasswort';
+my $path = '/public_html/graph'; # Pfad auf dem FTP-Server
+
+my $datasource = 'AVERAGE'; # MIN,AVERAGE,MAX
+
+my %graphics;
+# hash fuer RRD / Grafik-Name
+$graphics{'28.2C0E66010000_temp'} = 'WP_HGL-VL.png';
+$graphics{'28.5F1966010000_temp'} = 'WP_VL.png';
+$graphics{'28.480266010000_temp'} = 'WP_RL.png';
+
+# kann bis auf diesen Teil direkt aus der graph-URL uebernommen werden:
+# DEF:ds0=28.2C0E66010000_temp.rrd:value:AVERAGE;
+# (DEF:ds0.. bis ;)
+# kann man anpassen
+my $url1 = 'http://localhost/graph.pl?--start=-24h;--end=now;-X=0;-W=WireGate;--slope-mode;--lazy;-h=200;-w=650;--full-size-mode;--vertical-label=%B0%20Celsius;';
+my $url2 = 'LINE1:ds0%23ff0000:Wert;VDEF:ds0_LAST=ds0,LAST;GPRINT:ds0_LAST:%2.2lf%B0C;;VDEF:ds0_MIN=ds0,MINIMUM;GPRINT:ds0_MIN:Min\:%20%8.2lf%B0C;VDEF:ds0_AVERAGE=ds0,AVERAGE;GPRINT:ds0_AVERAGE:Mittel\:%20%8.2lf%B0C;VDEF:ds0_MAX=ds0,MAXIMUM;GPRINT:ds0_MAX:Max\:%20%8.2lf%B0C\n;';
+
+########################
+### Ende DEFINITION ###
+########################
+
+
+use Net::FTP;
+my $rrd_ret;
+
+my $ftp = Net::FTP->new($host, Debug => 0, Passive => 1, Timeout => 10)
+ or return "Cannot connect to host $!";
+$ftp->login($user,$password)
+ or return "Cannot login " . $ftp->message . "$!";
+$ftp->cwd($path)
+ or return "Cannot change working directory: " . $ftp->message . "$!";
+$ftp->binary;
+
+# durch den Hash gehen und senden
+while ( my ($rrd,$filename) = each(%graphics) ) {
+ my $url = $url1 . "DEF:ds0=$rrd.rrd:value:$datasource;" . $url2;
+ $rrd_ret .= `wget "$url" -O /tmp/$filename -o /tmp/wget.log`;
+ $ftp->put("/tmp/$filename",$filename)
+ or return "Cannot send $filename: $!";
+
+ # oder hier z.B. eMails verschicken oder...
+}
+
+$ftp->quit;
+
+#return; # ohne Logeintrag
+return "FTP said " . $ftp->message;
+
Added: wiregate/plugin/generic/RSSlog.pl
===================================================================
--- wiregate/plugin/generic/RSSlog.pl (rev 0)
+++ wiregate/plugin/generic/RSSlog.pl 2012-01-08 19:33:07 UTC (rev 646)
@@ -0,0 +1,79 @@
+### Plugin zum erstellen von RSS-logs
+# Fuer Verwendung mit rsslog.php / CometVisu
+# man koennte natuerlich ebenso das rsslog.php direkt mit LWP::Useragent oder
+# wget aufrufen, hier soll aber auch die Verwendung von SQLite Datenbanken
+# demonstriert werden.
+# Wichtig:
+# - benoetigt Paket libdbd-sqlite2-perl
+# - weil in PHP nur sqlite2 verfuegbar
+#
+# v0.1
+# 2012-01-08
+
+###################
+### DEFINITION ###
+###################
+
+$plugin_info{$plugname . '_cycle'} = 0; # Aufrufzyklus - never
+
+my @actionGA;
+# Datenpunkttypen MUESSEN in der globalen config angegeben sein!
+# Logeintrag bei bestimmtem Wert
+push @actionGA, { title => "Eintrag1 ohne Wert", content => 'Textinhalt1', tags => "tag1,tag3", trigger_ga => "1/1/11", value => 1 };
+# Logeintrag beliebigem Wert: value weglassen
+# %s wird mit sprintf durch den Wert ersetzt, anderes wie %.2f geht auch in content oder title!
+# man printf ;)
+push @actionGA, { title => "Eintrag2 mit Wert unabhaengig vom Wert %.2f", content => 'Textinhalt %s', tags => "tag4", trigger_ga => "1/1/11"};
+
+# Nun einge Beispiele aus der Praxis:
+push @actionGA, { title => "Haustuere", content => 'Haustuere auf', tags => "security,sensoren", trigger_ga => "5/1/10", value => 1};
+push @actionGA, { title => "Haustuere", content => 'Haustuere zu', tags => "security,sensoren", trigger_ga => "5/1/10", value => 0};
+push @actionGA, { title => "Garagentor", content => 'Garagentor %d (0=zu, 1=auf)', tags => "security,sensoren", trigger_ga => "5/4/103"};
+push @actionGA, { content => 'Trittmatte', tags => "security,sensoren", trigger_ga => "5/1/11", value => 1};
+push @actionGA, { content => 'Bluetooth Zutritt', tags => "security,sensoren", trigger_ga => "5/1/12", value => 1};
+# title & tags darf auch leer sein
+
+########################
+### Ende DEFINITION ###
+########################
+
+use DBI;
+my $logdb = '/etc/wiregate/rss/rsslog.db';
+
+# check setup, rights, DB
+if (! -d dirname($logdb)) {
+ mkdir(dirname($logdb),0777);
+}
+if (! -e $logdb) {
+ return "$logdb existiert nicht! Bitte mit rsslog.php anlegen"; # FIXME: create sqlite-db
+}
+
+if ($msg{'apci'} eq "A_GroupValue_Write") { # Telegramm eingetroffen
+ foreach my $element (@actionGA) {
+ if ($msg{'dst'} eq "$element->{trigger_ga}") {
+ if (defined $element->{value}) { # skip if value is defined and not what we like
+ next unless "$msg{'value'}" eq "$element->{value}"; }
+
+ my $dbargs = {AutoCommit => 0, PrintError => 1};
+ my $dbh = DBI->connect("dbi:SQLite2:dbname=$logdb", "", "", $dbargs);
+
+ $dbh->do('INSERT INTO Logs(content, title, tags, t) VALUES( ' .
+ " '" . sprintf($element->{content},$msg{'value'}) . "'," .
+ " '" . sprintf($element->{title},$msg{'value'}) . "'," .
+ " '" . $element->{tags} . "'," .
+ " datetime('now') );");
+
+ if ($dbh->err()) { return "DB-Fehler: $DBI::errstr\n"; }
+ $dbh->commit();
+ $dbh->disconnect();
+ return; # "V: " . $dbh->{sqlite_version};
+ }
+ }
+} else { # zyklischer Aufruf/initialisierung
+ #subscribe GAs
+ foreach my $element (@actionGA) {
+ $plugin_subscribe{$element->{trigger_ga}}{$plugname} = 1;
+ }
+}
+return; # "Noop";
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|