Hallo,
ich habe hier ein einfaches Plugin geschrieben um GA gesteuert Fotos von eine IP-Cam einzulesen und in einem Verzeichnis abzulegen.
Vorraussetzung ist, dass die Kamera über einen HTTP-Aufruf ein Bild senden kann.
Für jede GA lässt sich ein Name angeben, unter dem das Bild gespeichert wird. Die Anzahl der Bilder ist ebenfalls einstellbar. Das aktuellste Bild lautet immer Name1.jpg, die älteren werden entsprechend umbenannt bis zum Maximalwert.
Das aktuellste Bild wird auch immer unter picture_latest.jpg abgespeichert.
Ich nutze dies für die CometVisu um zu einer Meldungsliste auch ein aktuelles Bild einzublenden. In einem anderen Menü kann man dann noch auf auf die restlichen Bilder zugreifen, getrennt nach den Ereignissen.
Vielleicht hat jemand Verwendung dafür.
Update: Tipps von Makki berücksichtigt, Nummerierung der Bilder geändert und Begrenzung auf eine Kamera aufgehoben.
Gruß
Carsten
ich habe hier ein einfaches Plugin geschrieben um GA gesteuert Fotos von eine IP-Cam einzulesen und in einem Verzeichnis abzulegen.
Vorraussetzung ist, dass die Kamera über einen HTTP-Aufruf ein Bild senden kann.
Für jede GA lässt sich ein Name angeben, unter dem das Bild gespeichert wird. Die Anzahl der Bilder ist ebenfalls einstellbar. Das aktuellste Bild lautet immer Name1.jpg, die älteren werden entsprechend umbenannt bis zum Maximalwert.
Das aktuellste Bild wird auch immer unter picture_latest.jpg abgespeichert.
Ich nutze dies für die CometVisu um zu einer Meldungsliste auch ein aktuelles Bild einzublenden. In einem anderen Menü kann man dann noch auf auf die restlichen Bilder zugreifen, getrennt nach den Ereignissen.
PHP-Code:
# Eventgesteuert Bilder von der Kamera laden
# Carsten Wolff 10.09.2015
# COMPILE_PLUGIN
use LWP::Simple;
### KONFIGURATION ###
my $path = '/var/www/camera/';
my $filename_latest = 'picture_latest.jpg';
my $filename_src;
my $filename_dst;
my $j;
my @config;
# Für jedes Ereignis eine Zeile
# Parameter
# name : Name unter dem das Bild abgespeichert wird -> Name_nn.jpg
# ga : Gruppenadresse
# anzahl: Maximale Anzahl der Fotos pro GA (1-99). Das älteste wird jeweils überschrieben.
# camera: HTTP-Abfrage für die Kamera.
# Die Bilder werden nach Erstellungsdatum hinter dem Namen durchnummeriert.
# Name_01.jpg ist immer das aktuellste Bild, usw.
push @config, { name => 'Tuerklingel', ga => 'n/n/n', anzahl => '10',
camera => 'http://user:pass@192.168.0.n/Streaming/channels/1/picture'};
push @config, { name => 'BWM_Hauseingang', ga => 'n/n/n', anzahl => '20',
camera => 'http://user:pass@192.168.0.n/Streaming/channels/1/picture'};
# Aufrufgrund ermitteln
my $event=undef;
if (!$plugin_initflag) {
$event='restart'; } # Restart des daemons / Reboot
elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) {
$event='modified'; } # Plugin modifiziert
elsif (%msg) { $event='bus'; } # Bustraffic
elsif ($fh) { $event='socket'; } # Netzwerktraffic
else { $event='cycle'; } # Zyklus
# Variablen initialisieren
# Plugin-Code fuer die verschiedenen Aufrufvarianten
if($event=~/restart|modified/) {
# Erster Aufruf nach Reboot, Daemon-Restart oder Plugin-Modifikation
# Cleanup aller Variablen
for my $k (grep /^$plugname\_/, keys %plugin_info) {
delete $plugin_info{$k};
}
# Alle GAs abonnieren
foreach my $ga (@config) {
$plugin_subscribe{$ga->{ga}}{$plugname}=1;
}
$plugin_info{$plugname.'_cycle'}=0;
return "initialisiert";
}
elsif($event=~/bus/ && $msg{apci} eq 'A_GroupValue_Write') {
# Aufruf durch Bustraffic
if ($msg{data}>0) {
$filename_latest = $path.$filename_latest;
foreach my $element (@config) {
if ($msg{dst} ne $element->{ga}) { next;}
# Aktuelles Bild von der Kamera laden
getstore($element->{camera}, $filename_latest);
for(my $i = $element->{anzahl}; $i > 1; $i--) {
$j = $i - 1;
$filename_src = $path.$element->{name}."_".sprintf("%02s",$j).".jpg";
$filename_dst = $path.$element->{name}."_".sprintf("%02s",$i).".jpg";
rename ($filename_src, $filename_dst);
}
`cp $filename_latest $filename_src`;
}
}
}
return "Foto gespeichert";
Vielleicht hat jemand Verwendung dafür.
Update: Tipps von Makki berücksichtigt, Nummerierung der Bilder geändert und Begrenzung auf eine Kamera aufgehoben.
Gruß
Carsten
Kommentar