mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-02-26 10:34:52 +00:00
49_SSCam: trigger several number of snapshots with alternative text and send it alltogether by email (execute "get <device> versionNotes" for informations)
git-svn-id: https://svn.fhem.de/fhem/trunk@18207 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
231002c56f
commit
28dc072172
@ -1,5 +1,8 @@
|
||||
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
|
||||
# Do not insert empty lines here, update check depends on it.
|
||||
- feature: 49_SSCam: trigger several number of snapshots with alternative
|
||||
text and send it alltogether by email
|
||||
(execute "get <device> versionNotes" for informations)
|
||||
- bugfix: 98_DOIFtools: fixed line break in DOIFtoolsLog
|
||||
- feature: 72_FB_CALLMONITOR: support for contact images and download of
|
||||
all available contact images from FritzBox
|
||||
|
@ -47,6 +47,10 @@ use Encode;
|
||||
|
||||
# Versions History intern
|
||||
our %SSCam_vNotesIntern = (
|
||||
"8.4.2" => "10.01.2019 snapEmailTxt can use placeholders \$DATE, \$TIME ",
|
||||
"8.4.1" => "09.01.2019 Transaction of snap and getsnapinfo implemented, debugactive token verbose level changed ",
|
||||
"8.4.0" => "07.01.2019 command snap extended to \"snap [number] [lag] [snapEmailTxt:\"subject => <Betreff-Text>, body => ".
|
||||
"<Mitteilung-Text>\"]\", SID-hash is deleted if attr \"session\" is set ",
|
||||
"8.3.2" => "03.01.2019 fix Process died prematurely if Can't locate object method \"get_sslversion\" via package \"Net::SMTP::SSL\" ",
|
||||
"8.3.1" => "02.01.2019 fix SMTP usage for older Net::SMTP, new attribute \"smtpSSLPort\"",
|
||||
"8.3.0" => "02.01.2019 CAMLASTRECID replaced by Reading CamLastRecId, \"SYNO.SurveillanceStation.Recording\" added, ".
|
||||
@ -110,6 +114,9 @@ our %SSCam_vNotesIntern = (
|
||||
|
||||
# Versions History extern
|
||||
our %SSCam_vNotesExtern = (
|
||||
"8.4.0" => "07.01.2019 Command snap is extended to syntax \"snap [number] [lag] [snapEmailTxt:\"subject => <Betreff-Text>, body => ".
|
||||
"<Mitteilung-Text>\"]\". Now you are able to trigger several number of ".
|
||||
"snapshots by only one snap-command. The triggered snapshots can be shipped alltogether with the internal email client. ",
|
||||
"8.3.0" => "02.01.2019 new get command \"saveRecording\"",
|
||||
"8.2.0" => "02.01.2019 SMTP Email delivery of snapshots implemented. You can send snapshots after it is created subsequentely ".
|
||||
"with the integrated Email client. You have to store SMTP credentials with \"smtpcredentials\" before. ",
|
||||
@ -515,6 +522,10 @@ sub SSCam_Attr($$$$) {
|
||||
# $name is device name
|
||||
# aName and aVal are Attribute name and value
|
||||
|
||||
if ($aName eq "session") {
|
||||
delete $hash->{HELPER}{SID};
|
||||
}
|
||||
|
||||
if ($aName =~ /hlsNetScript/ && SSCam_IsModelCam($hash)) {
|
||||
return " The attribute \"$aName\" is only valid for devices of type \"SVS\"! Please set this attribute in a device of this type.";
|
||||
}
|
||||
@ -702,7 +713,7 @@ sub SSCam_Set($@) {
|
||||
"on ".
|
||||
"off:noArg ".
|
||||
"motdetsc:disable,camera,SVS ".
|
||||
"snap:noArg ".
|
||||
"snap ".
|
||||
(AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" ").
|
||||
"createSnapGallery:noArg ".
|
||||
"createStreamDev:generic,hls,mjpeg,switched ".
|
||||
@ -736,7 +747,7 @@ sub SSCam_Set($@) {
|
||||
if ($opt eq "credentials") {
|
||||
return "Credentials are incomplete, use username password" if (!$prop || !$prop1);
|
||||
return "Password is too long. It is limited up to and including 20 characters." if (length $prop1 > 20);
|
||||
delete $hash->{HELPER}{SID} if($hash->{HELPER}{SID});
|
||||
delete $hash->{HELPER}{SID};
|
||||
($success) = SSCam_setcredentials($hash,"svs",$prop,$prop1);
|
||||
$hash->{HELPER}{ACTIVE} = "off";
|
||||
|
||||
@ -779,18 +790,31 @@ sub SSCam_Set($@) {
|
||||
|
||||
} elsif ($opt eq "snap" && SSCam_IsModelCam($hash)) {
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
$hash->{HELPER}{SNAPBYSTRMDEV} = 1 if ($prop && $prop =~ /STRM/); # $prop wird mitgegeben durch Snap by SSCamSTRM-Device
|
||||
|
||||
my ($num,$lag,$ncount) = (1,2,1);
|
||||
my $emtxt = "";
|
||||
if($prop && $prop =~ /[\d+]/) { # Anzahl der Schnappschüsse zu triggern (default: 1)
|
||||
$num = $prop;
|
||||
$ncount = $prop;
|
||||
}
|
||||
if($prop1 && $prop1 =~ /[\d+]/) { # Zeit zwischen zwei Schnappschüssen (default: 2 Sekunden)
|
||||
$lag = $prop1;
|
||||
}
|
||||
|
||||
$hash->{HELPER}{SNAPBYSTRMDEV} = 1 if ($prop2 && $prop2 =~ /STRM/); # $prop wird mitgegeben durch Snap by SSCamSTRM-Device
|
||||
|
||||
my $at = join(" ",@a);
|
||||
if($at =~ /snapEmailTxt:/) {
|
||||
$at =~ m/.*snapEmailTxt:"(.*)".*/i;
|
||||
$emtxt = $1;
|
||||
}
|
||||
|
||||
if (AttrVal($name, "snapEmailTxt", "")) {
|
||||
# Snap soll nach Erstellung per Email versendet werden
|
||||
# snapEmailTxt muss sein: subject => <Subject-Text>, body => <Body-Text>
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
if (!$hash->{SMTPCREDENTIALS}) {
|
||||
return "Due to attribute \"snapEmailTxt\" is set, you want to send snapshots by email but SMTP credentials are not set - make sure you've set credentials with \"set $name smtpcredentials username password\"";
|
||||
}
|
||||
if (!$hash->{SMTPCREDENTIALS}) {return "Due to attribute \"snapEmailTxt\" is set, you want to send snapshots by email but SMTP credentials are not set - make sure you've set credentials with \"set $name smtpcredentials username password\"";}
|
||||
}
|
||||
|
||||
SSCam_camsnap($hash);
|
||||
SSCam_camsnap("$name:$num:$lag:$ncount:$emtxt");
|
||||
|
||||
} elsif ($opt eq "startTracking" && SSCam_IsModelCam($hash)) {
|
||||
if (!$hash->{CREDENTIALS}) {return "Credentials of $name are not set - make sure you've set it with \"set $name credentials username password\"";}
|
||||
@ -2108,14 +2132,21 @@ sub SSCam_cammotdetsc($) {
|
||||
|
||||
###############################################################################
|
||||
# Kamera Schappschuß aufnehmen
|
||||
# $num = Anzahl der Schnappschüsse
|
||||
# $lag = Zeit zwischen zwei Schnappschüssen
|
||||
# $ncount = Anzahl der Schnappschüsse zum rnterzählen
|
||||
###############################################################################
|
||||
sub SSCam_camsnap($) {
|
||||
my ($hash) = @_;
|
||||
my $camname = $hash->{CAMNAME};
|
||||
my $name = $hash->{NAME};
|
||||
my ($str) = @_;
|
||||
my ($name,$num,$lag,$ncount,$emtxt,$tac) = split(":",$str);
|
||||
my $hash = $defs{$name};
|
||||
my $camname = $hash->{CAMNAME};
|
||||
my $errorcode;
|
||||
my $error;
|
||||
|
||||
$tac = (defined $tac)?$tac:5000;
|
||||
my $ta = $hash->{HELPER}{TRANSACTION};
|
||||
|
||||
RemoveInternalTimer($hash, "SSCam_camsnap");
|
||||
return if(IsDisabled($name));
|
||||
|
||||
@ -2140,17 +2171,22 @@ sub SSCam_camsnap($) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
||||
if ($hash->{HELPER}{ACTIVE} eq "off" || ((defined $ta) && $ta == $tac)) {
|
||||
# einen Schnappschuß aufnehmen
|
||||
$hash->{OPMODE} = "Snap";
|
||||
$hash->{HELPER}{LOGINRETRIES} = 0;
|
||||
$hash->{HELPER}{CANSENDSNAP} = 1; # Versand Schnappschuß darf erfolgen falls gewünscht
|
||||
$hash->{HELPER}{CANSENDSNAP} = 1 if(AttrVal($name, "snapEmailTxt", "")); # Versand Schnappschüsse soll erfolgen
|
||||
$hash->{HELPER}{SNAPNUM} = $num if($num); # Gesamtzahl der auszulösenden Schnappschüsse
|
||||
$hash->{HELPER}{SNAPLAG} = $lag if($lag); # Zeitverzögerung zwischen zwei Schnappschüssen
|
||||
$hash->{HELPER}{SNAPNUMCOUNT} = $ncount if($ncount); # Restzahl der auszulösenden Schnappschüsse (wird runtergezählt)
|
||||
$hash->{HELPER}{SMTPMSG} = $emtxt if($emtxt); # alternativer Text für Email-Versand
|
||||
|
||||
SSCam_setActiveToken($hash);
|
||||
SSCam_getapisites($hash);
|
||||
|
||||
} else {
|
||||
InternalTimer(gettimeofday()+0.3, "SSCam_camsnap", $hash, 0);
|
||||
$tac = (defined $tac)?$tac:"";
|
||||
InternalTimer(gettimeofday()+0.3, "SSCam_camsnap", "$name:$num:$lag:$ncount:$emtxt:$tac", 0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3029,14 +3065,17 @@ return;
|
||||
###########################################################################
|
||||
sub SSCam_getsnapinfo ($) {
|
||||
my ($str) = @_;
|
||||
my ($name,$slim,$ssize) = split(":",$str);
|
||||
my ($name,$slim,$ssize,$tac) = split(":",$str);
|
||||
my $hash = $defs{$name};
|
||||
my $camname = $hash->{CAMNAME};
|
||||
|
||||
$tac = (defined $tac)?$tac:5000;
|
||||
my $ta = $hash->{HELPER}{TRANSACTION};
|
||||
|
||||
RemoveInternalTimer("SSCam_getsnapinfo");
|
||||
return if(IsDisabled($name));
|
||||
|
||||
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
||||
if ($hash->{HELPER}{ACTIVE} eq "off" || ((defined $ta) && $ta == $tac)) {
|
||||
$hash->{OPMODE} = "getsnapinfo";
|
||||
$hash->{OPMODE} = "getsnapgallery" if(exists($hash->{HELPER}{GETSNAPGALLERY}));
|
||||
$hash->{HELPER}{LOGINRETRIES} = 0;
|
||||
@ -3048,6 +3087,7 @@ sub SSCam_getsnapinfo ($) {
|
||||
SSCam_getapisites($hash);
|
||||
|
||||
} else {
|
||||
$tac = (defined $tac)?$tac:"";
|
||||
InternalTimer(gettimeofday()+1.7, "SSCam_getsnapinfo", "$name:$slim:$ssize", 0);
|
||||
}
|
||||
}
|
||||
@ -4869,6 +4909,11 @@ sub SSCam_camop_parse ($) {
|
||||
# falls Aufnahme noch läuft -> state = on setzen
|
||||
SSCam_refresh($hash,0,1,0); # kein Room-Refresh, SSCam-state-Event, kein SSCamSTRM-Event
|
||||
|
||||
my $tac = "";
|
||||
if($hash->{HELPER}{CANSENDSNAP}) {
|
||||
$tac = SSCam_openOrgetTrans($hash); # Transaktion starten oder vorhandenen Code holen
|
||||
}
|
||||
|
||||
$snapid = $data->{data}{'id'};
|
||||
readingsSingleUpdate($hash,"LastSnapId",$snapid, 0) if($snapid);
|
||||
|
||||
@ -4880,13 +4925,28 @@ sub SSCam_camop_parse ($) {
|
||||
# Logausgabe
|
||||
Log3($name, 3, "$name - Snapshot of Camera $camname has been done successfully");
|
||||
|
||||
# Token freigeben vor nächstem Kommando
|
||||
SSCam_delActiveToken($hash);
|
||||
|
||||
# Schnappschußgalerie abrufen (snapGalleryBoost) oder nur Info des letzten Snaps
|
||||
my $num = $hash->{HELPER}{SNAPNUM}; # Gesamtzahl der auszulösenden Schnappschüsse
|
||||
my $ncount = $hash->{HELPER}{SNAPNUMCOUNT}; # Restzahl der auszulösenden Schnappschüsse
|
||||
$ncount--; # wird vermindert je Snap
|
||||
my $lag = $hash->{HELPER}{SNAPLAG}; # Zeitverzögerung zwischen zwei Schnappschüssen
|
||||
my $emtxt = $hash->{HELPER}{SMTPMSG}?$hash->{HELPER}{SMTPMSG}:""; # alternativer Text für Email-Versand
|
||||
if($ncount > 0) {
|
||||
InternalTimer(gettimeofday()+$lag, "SSCam_camsnap", "$name:$num:$lag:$ncount:$emtxt:$tac", 0);
|
||||
return;
|
||||
}
|
||||
|
||||
# Anzahl und Size für Schnappschußabruf bestimmen
|
||||
my ($slim,$ssize) = SSCam_snaplimsize($hash);
|
||||
|
||||
if(!$hash->{HELPER}{TRANSACTION}) {
|
||||
# Token freigeben vor nächstem Kommando wenn keine Transaktion läuft
|
||||
SSCam_delActiveToken($hash);
|
||||
}
|
||||
|
||||
RemoveInternalTimer("SSCam_getsnapinfo");
|
||||
InternalTimer(gettimeofday()+0.6, "SSCam_getsnapinfo", "$name:$slim:$ssize", 0);
|
||||
InternalTimer(gettimeofday()+0.6, "SSCam_getsnapinfo", "$name:$slim:$ssize:$tac", 0);
|
||||
return;
|
||||
|
||||
} elsif ($OpMode eq "getsnapinfo" ||
|
||||
$OpMode eq "getsnapgallery" ||
|
||||
@ -4906,7 +4966,8 @@ sub SSCam_camop_parse ($) {
|
||||
$lstime = "n.a.";
|
||||
}
|
||||
|
||||
Log3($name,4, "$name - Snap [0]: ID => $lsid, File => $lfname, Created => $lstime");
|
||||
Log3($name, $verbose, "$name - Snapinfos of camera $camname retrieved");
|
||||
Log3($name,4, "$name - Snap [0]: ID => $lsid, File => $lfname, Created => $lstime");
|
||||
|
||||
readingsBeginUpdate($hash);
|
||||
readingsBulkUpdate($hash,"Errorcode","none");
|
||||
@ -4916,7 +4977,7 @@ sub SSCam_camop_parse ($) {
|
||||
readingsBulkUpdate($hash,"LastSnapTime", $lstime);
|
||||
readingsEndUpdate($hash, 1);
|
||||
|
||||
# Schnapschuss soll als liveView angezeigt werden (mindestens 1 Bild vorhanden)
|
||||
##### ein Schnapschuss soll als liveView angezeigt werden #####
|
||||
Log3($name, 3, "$name - There is no snapshot of camera $camname to display ! Take one snapshot before.")
|
||||
if(exists($hash->{HELPER}{RUNVIEW}) && $hash->{HELPER}{RUNVIEW} =~ /snap/ && !exists($data->{'data'}{'data'}[0]{imageData}));
|
||||
|
||||
@ -4925,53 +4986,92 @@ sub SSCam_camop_parse ($) {
|
||||
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
|
||||
}
|
||||
|
||||
##### eine Schnapschussgalerie soll angezeigt oder als Bulk versendet werden #####
|
||||
if($OpMode eq "getsnapgallery") {
|
||||
# es soll eine Schnappschußgallerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt werden (Attr snapGalleryBoost=0)
|
||||
my $i = 0;
|
||||
my $sn = 0;
|
||||
my %allsnaps = (); # Schnappschuss Hash wird leer erstellt
|
||||
if($hash->{HELPER}{CANSENDSNAP}) {
|
||||
# es sollen die Anzahl "$hash->{HELPER}{SNAPNUM}" Schnappschüsse versendet werden
|
||||
my $i = 0;
|
||||
my $sn = 0;
|
||||
my %sendsnaps = (); # Schnappschuss Hash zum Versand wird leer erstellt
|
||||
|
||||
$hash->{HELPER}{TOTALCNT} = $data->{data}{total}; # total Anzahl Schnappschüsse
|
||||
while ($data->{'data'}{'data'}[$i]) {
|
||||
if($data->{'data'}{'data'}[$i]{'camName'} ne $camname) {
|
||||
$i += 1;
|
||||
next;
|
||||
}
|
||||
$snapid = $data->{data}{data}[$i]{id};
|
||||
my $createdTm = $data->{data}{data}[$i]{createdTm};
|
||||
my $fileName = $data->{data}{data}[$i]{fileName};
|
||||
my $imageData = $data->{data}{data}[$i]{imageData}; # Image data of snapshot in base64 format
|
||||
|
||||
while ($data->{'data'}{'data'}[$i]) {
|
||||
if($data->{'data'}{'data'}[$i]{'camName'} ne $camname) {
|
||||
$i += 1;
|
||||
next;
|
||||
}
|
||||
$snapid = $data->{data}{data}[$i]{id};
|
||||
my $createdTm = $data->{data}{data}[$i]{createdTm};
|
||||
my $fileName = $data->{data}{data}[$i]{fileName};
|
||||
my $imageData = $data->{data}{data}[$i]{imageData}; # Image data of snapshot in base64 format
|
||||
$sendsnaps{$sn}{snapid} = $snapid;
|
||||
my @t = split(" ", FmtDateTime($createdTm));
|
||||
my @d = split("-", $t[0]);
|
||||
$createdTm = "$d[2].$d[1].$d[0] / $t[1]";
|
||||
$sendsnaps{$sn}{createdTm} = $createdTm;
|
||||
$sendsnaps{$sn}{fileName} = $fileName;
|
||||
$sendsnaps{$sn}{imageData} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to send gallery hash: ID => $sendsnaps{$sn}{snapid}, File => $sendsnaps{$sn}{fileName}, Created => $sendsnaps{$sn}{createdTm}");
|
||||
$sn += 1;
|
||||
$i += 1;
|
||||
}
|
||||
|
||||
$allsnaps{$sn}{snapid} = $snapid;
|
||||
my @t = split(" ", FmtDateTime($createdTm));
|
||||
my @d = split("-", $t[0]);
|
||||
$createdTm = "$d[2].$d[1].$d[0] / $t[1]";
|
||||
$allsnaps{$sn}{createdTm} = $createdTm;
|
||||
$allsnaps{$sn}{fileName} = $fileName;
|
||||
$allsnaps{$sn}{imageData} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $allsnaps{$sn}{snapid}, File => $allsnaps{$sn}{fileName}, Created => $allsnaps{$sn}{createdTm}");
|
||||
$sn += 1;
|
||||
$i += 1;
|
||||
}
|
||||
# Schnappschuß soll als Email versendet werden
|
||||
if(AttrVal($name, "snapEmailTxt", "")) {
|
||||
SSCam_prepareSendEmail ($hash, $OpMode, \%sendsnaps);
|
||||
}
|
||||
|
||||
# Hash der Schnapschüsse erstellen
|
||||
$hash->{HELPER}{".SNAPHASH"} = \%allsnaps;
|
||||
} else {
|
||||
# es soll eine Schnappschußgalerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt
|
||||
# werden (Attr snapGalleryBoost=0)
|
||||
my $i = 0;
|
||||
my $sn = 0;
|
||||
my %allsnaps = (); # Schnappschuss Hash wird leer erstellt
|
||||
|
||||
# Direktausgabe Snaphash wenn nicht gepollt wird
|
||||
if(!AttrVal($name, "snapGalleryBoost",0)) {
|
||||
my $htmlCode = SSCam_composegallery($name);
|
||||
$hash->{HELPER}{TOTALCNT} = $data->{data}{total}; # total Anzahl Schnappschüsse
|
||||
|
||||
for (my $k=1; (defined($hash->{HELPER}{CL}{$k})); $k++ ) {
|
||||
asyncOutput($hash->{HELPER}{CL}{$k},"$htmlCode");
|
||||
}
|
||||
delete($hash->{HELPER}{".SNAPHASH"}); # Snaphash löschen wenn nicht gepollt wird
|
||||
delete($hash->{HELPER}{CL});
|
||||
}
|
||||
while ($data->{'data'}{'data'}[$i]) {
|
||||
if($data->{'data'}{'data'}[$i]{'camName'} ne $camname) {
|
||||
$i += 1;
|
||||
next;
|
||||
}
|
||||
$snapid = $data->{data}{data}[$i]{id};
|
||||
my $createdTm = $data->{data}{data}[$i]{createdTm};
|
||||
my $fileName = $data->{data}{data}[$i]{fileName};
|
||||
my $imageData = $data->{data}{data}[$i]{imageData}; # Image data of snapshot in base64 format
|
||||
|
||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||
}
|
||||
$allsnaps{$sn}{snapid} = $snapid;
|
||||
my @t = split(" ", FmtDateTime($createdTm));
|
||||
my @d = split("-", $t[0]);
|
||||
$createdTm = "$d[2].$d[1].$d[0] / $t[1]";
|
||||
$allsnaps{$sn}{createdTm} = $createdTm;
|
||||
$allsnaps{$sn}{fileName} = $fileName;
|
||||
$allsnaps{$sn}{imageData} = $imageData;
|
||||
Log3($name,4, "$name - Snap '$sn' added to gallery hash: ID => $allsnaps{$sn}{snapid}, File => $allsnaps{$sn}{fileName}, Created => $allsnaps{$sn}{createdTm}");
|
||||
$sn += 1;
|
||||
$i += 1;
|
||||
}
|
||||
|
||||
# Hash der Schnapschüsse erstellen
|
||||
$hash->{HELPER}{".SNAPHASH"} = \%allsnaps;
|
||||
|
||||
# Direktausgabe Snaphash wenn nicht gepollt wird
|
||||
if(!AttrVal($name, "snapGalleryBoost",0)) {
|
||||
my $htmlCode = SSCam_composegallery($name);
|
||||
|
||||
for (my $k=1; (defined($hash->{HELPER}{CL}{$k})); $k++ ) {
|
||||
asyncOutput($hash->{HELPER}{CL}{$k},"$htmlCode");
|
||||
}
|
||||
delete($hash->{HELPER}{".SNAPHASH"}); # Snaphash löschen wenn nicht gepollt wird
|
||||
delete($hash->{HELPER}{CL});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
SSCam_closeTrans($hash); # Transaktion beenden
|
||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||
|
||||
##### Fall abhängige Eventgenerierung #####
|
||||
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||
# Snap durch SSCamSTRM-Device ausgelöst
|
||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
||||
@ -4984,14 +5084,6 @@ sub SSCam_camop_parse ($) {
|
||||
SSCam_refresh($hash,0,0,0); # kein Room-Refresh, SSCam-state-Event, SSCamSTRM-Event
|
||||
}
|
||||
|
||||
Log3($name, $verbose, "$name - Snapinfos of camera $camname retrieved");
|
||||
|
||||
# Schnappschuß soll als Email versendet werden
|
||||
if(AttrVal($name, "snapEmailTxt", "") && $hash->{HELPER}{CANSENDSNAP}) {
|
||||
SSCam_prepareSendEmail ($hash, $OpMode, $data->{data}{data}[0]{imageData});
|
||||
delete $hash->{HELPER}{CANSENDSNAP};
|
||||
}
|
||||
|
||||
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
||||
# HLS Streaming wurde aktiviert
|
||||
$hash->{HELPER}{HLSSTREAM} = "active";
|
||||
@ -5023,6 +5115,7 @@ sub SSCam_camop_parse ($) {
|
||||
# Token freigeben vor hlsactivate
|
||||
SSCam_delActiveToken($hash);
|
||||
SSCam_hlsactivate($hash);
|
||||
return;
|
||||
|
||||
} elsif ($OpMode eq "activate_hls") {
|
||||
# HLS Streaming wurde aktiviert, Aktivitätsstatus speichern
|
||||
@ -5768,7 +5861,7 @@ sub SSCam_login ($$) {
|
||||
my $lrt = AttrVal($name,"loginRetries",3);
|
||||
my ($url,$param);
|
||||
|
||||
delete $hash->{HELPER}{SID} if($hash->{HELPER}{SID});
|
||||
delete $hash->{HELPER}{SID};
|
||||
|
||||
# Login und SID ermitteln
|
||||
Log3($name, 4, "$name - --- Begin Function SSCam_login ---");
|
||||
@ -6179,13 +6272,21 @@ sub SSCam_snaplimsize ($) {
|
||||
if(!AttrVal($name,"snapGalleryBoost",0)) {
|
||||
$slim = 1;
|
||||
$ssize = 0;
|
||||
$ssize = 2 if(AttrVal($name,"snapEmailTxt","")); # Full Size für EMail-Versand, wird durch "snapGallerySize" überschrieben
|
||||
} else {
|
||||
$hash->{HELPER}{GETSNAPGALLERY} = 1;
|
||||
$slim = AttrVal($name,"snapGalleryNumber",$SSCam_slim); # Anzahl der abzurufenden Snaps
|
||||
my $sg = AttrVal($name,"snapGallerySize","Icon"); # Auflösung Image
|
||||
$ssize = ($sg eq "Icon")?1:2;
|
||||
}
|
||||
|
||||
if($hash->{HELPER}{CANSENDSNAP}) {
|
||||
# Versand Schnappschuß darf erfolgen falls gewünscht
|
||||
# Galerie über "$hash->{HELPER}{SNAPNUM}" Snaps zum Versand abrufen
|
||||
$hash->{HELPER}{GETSNAPGALLERY} = 1; # Steuerbit für Snap-Galerie
|
||||
$slim = $hash->{HELPER}{SNAPNUM}; # enthält die Anzahl der zu versendenden Images
|
||||
$ssize = 2; # Full Size für EMail-Versand
|
||||
}
|
||||
|
||||
return ($slim,$ssize);
|
||||
}
|
||||
|
||||
@ -6540,7 +6641,7 @@ sub SSCam_StreamDev($$$) {
|
||||
my $imgrecendless = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTART.png\">";
|
||||
my $cmdrecstop = "cmd=set $camname off"; # Aufnahme Stop
|
||||
my $imgrecstop = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTOP.png\">";
|
||||
my $cmddosnap = "cmd=set $camname snap STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
my $cmddosnap = "cmd=set $camname snap 1 2 STRM"; # Snapshot auslösen mit Kennzeichnung "by STRM-Device"
|
||||
my $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||
my $cmdrefresh = "cmd=set $camname refresh STRM"; # Refresh in SSCamSTRM-Devices
|
||||
my $imgrefresh = "<img src=\"$FW_ME/www/images/default/Restart.png\">";
|
||||
@ -7080,42 +7181,45 @@ return ($error);
|
||||
#############################################################################################
|
||||
# Vorbereitung SMTP EMail-Versand
|
||||
# $OpMode = aktueller Operation Mode zur Unterscheidung was versendet werden soll
|
||||
# $data = zu versendende Daten, evtl. anders bereitgestellt (ReadingsVal)
|
||||
# $data = zu versendende Daten, evtl. als Hash Referenz
|
||||
#############################################################################################
|
||||
sub SSCam_prepareSendEmail ($$;$) {
|
||||
my ($hash, $OpMode, $data) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $calias = AttrVal($name,"alias",$hash->{CAMNAME}); # Alias der Kamera wenn gesetzt oder Originalname aus SVS
|
||||
my ($ret,$sdat,$fname,$snapid,$lsnaptime) = ('','','','','');
|
||||
my $snapnum = 1;
|
||||
|
||||
my $sp = AttrVal($name, "smtpPort", 25);
|
||||
my $nousessl = AttrVal($name, "smtpNoUseSSL", 0);
|
||||
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime;
|
||||
my $date = sprintf "%02d.%02d.%04d" , $mday , $mon+=1 ,$year+=1900;
|
||||
my $time = sprintf "%02d:%02d:%02d" , $hour , $min , $sec;
|
||||
|
||||
# Extraktion EMail-Texte
|
||||
# Attribut snapEmailTxt kann übersteuert werden mit: $hash->{HELPER}{SMTPMSG}
|
||||
# Format in $hash->{HELPER}{SMTPMSG} muss sein: subject => <Betreff-Text>, body => <Mitteilung-Text>
|
||||
my $mt = AttrVal($name, "snapEmailTxt", "");
|
||||
$mt =~ s/['"]//g;
|
||||
my $mth = delete $hash->{HELPER}{SMTPMSG};
|
||||
my $mt = $mth?$mth:AttrVal($name, "snapEmailTxt", "");
|
||||
$mt =~ s/['"]//g;
|
||||
|
||||
my($subj,$body) = split(",", $mt);
|
||||
my($subj,$body) = split(",", $mt, 2);
|
||||
my($subjk,$subjt) = split("=>", $subj);
|
||||
my($bodyk,$bodyt) = split("=>", $body);
|
||||
$subjk = SSCam_trim($subjk);
|
||||
$subjt = SSCam_trim($subjt);
|
||||
$subjt =~ s/\$NAME/$calias/g;
|
||||
$subjt =~ s/\$CAM/$calias/g;
|
||||
$subjt =~ s/\$DATE/$date/g;
|
||||
$subjt =~ s/\$TIME/$time/g;
|
||||
$bodyk = SSCam_trim($bodyk);
|
||||
$bodyt = SSCam_trim($bodyt);
|
||||
$bodyt =~ s/\$NAME/$calias/g;
|
||||
$bodyt =~ s/\$CAM/$calias/g;
|
||||
$bodyt =~ s/\$DATE/$date/g;
|
||||
$bodyt =~ s/\$TIME/$time/g;
|
||||
my %smtpmsg = ();
|
||||
$smtpmsg{$subjk} = "$subjt";
|
||||
$smtpmsg{$bodyk} = "$bodyt";
|
||||
|
||||
if($OpMode =~ /^getsnap/) {
|
||||
$fname = ReadingsVal($name,"LastSnapFilename","");
|
||||
$snapid = ReadingsVal($name,"LastSnapId","");
|
||||
$lsnaptime = ReadingsVal($name,"LastSnapTime","");
|
||||
$sdat = $data;
|
||||
}
|
||||
|
||||
my $sslfrominit = 0;
|
||||
my $smtpsslport = 465;
|
||||
if(AttrVal($name,"smtpSSLPort",0)) {
|
||||
@ -7123,6 +7227,16 @@ sub SSCam_prepareSendEmail ($$;$) {
|
||||
$smtpsslport = AttrVal($name,"smtpSSLPort",0);
|
||||
}
|
||||
|
||||
my $tac = $hash->{HELPER}{TRANSACTION}; # Code der laufenden Transaktion
|
||||
|
||||
if($OpMode =~ /^getsnap/) {
|
||||
$fname = ReadingsVal($name,"LastSnapFilename","");
|
||||
$snapid = ReadingsVal($name,"LastSnapId","");
|
||||
$lsnaptime = ReadingsVal($name,"LastSnapTime","");
|
||||
$sdat = $data;
|
||||
delete $hash->{HELPER}{CANSENDSNAP};
|
||||
delete $hash->{HELPER}{SMTPMSG};
|
||||
|
||||
$ret = SSCam_sendEmail($hash, {'subject' => $smtpmsg{subject},
|
||||
'part1txt' => $smtpmsg{body},
|
||||
'part2type' => 'image/jpeg',
|
||||
@ -7134,8 +7248,11 @@ sub SSCam_prepareSendEmail ($$;$) {
|
||||
'smtpnousessl' => $nousessl,
|
||||
'sslfrominit' => $sslfrominit,
|
||||
'smtpsslport' => $smtpsslport,
|
||||
'tac' => $tac,
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@ -7209,14 +7326,15 @@ sub SSCam_sendEmail ($$) {
|
||||
'smtpsslport' => {'attr'=>'smtpSSLPort', 'default'=>'', 'required'=>0, 'set'=>1}, # SSL-Port, verwendet bei direktem SSL-Aufbau
|
||||
'smtpnousessl' => {'attr'=>'smtpNoUseSSL','default'=>'0', 'required'=>0, 'set'=>1},
|
||||
'smtpdebug' => {'attr'=>'smtpDebug', 'default'=>'0', 'required'=>0, 'set'=>0},
|
||||
'sdat' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Daten base64 codiert, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt werden
|
||||
'sdat' => { 'default'=>'', 'required'=>0, 'set'=>1}, # (Hash)Daten base64 codiert, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt werden
|
||||
'image' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Daten als File, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt werden
|
||||
'fname' => { 'default'=>'image.jpg', 'required'=>0, 'set'=>1}, # Filename für "image" oder "sdat"
|
||||
'lsnaptime' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel des letzten Schnappschusses
|
||||
'opmode' => { 'default'=>'', 'required'=>1, 'set'=>1}, # OpMode muss gesetzt sein
|
||||
'sslfb' => { 'default'=>$sslfb, 'required'=>0, 'set'=>1}, # Flag für Verwendung altes Net::SMTP::SSL
|
||||
'sslfrominit' => { 'default'=>'', 'required'=>0, 'set'=>1}, # SSL soll sofort ! aufgebaut werden
|
||||
);
|
||||
'tac' => { 'default'=>'', 'required'=>0, 'set'=>1}, # übermittelter Transaktionscode der ausgewerteten Transaktion
|
||||
);
|
||||
|
||||
my %params = ();
|
||||
foreach my $key (keys %SSCam_mailparams) {
|
||||
@ -7270,17 +7388,18 @@ sub SSCam_sendEmailblocking($) {
|
||||
my $to = $paref->{smtpTo};
|
||||
my $msgtext = $paref->{msgtext};
|
||||
my $smtpdebug = $paref->{smtpdebug};
|
||||
my $sdat = $paref->{sdat}; # base64 kodierte Schnappschußdaten
|
||||
my $image = $paref->{image}; # image, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt sein
|
||||
my $sdat = $paref->{sdat}; # Image Daten als Hash base64 codiert
|
||||
my $image = $paref->{image}; # Image, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt sein
|
||||
my $fname = $paref->{fname}; # Filename von "image"
|
||||
my $lsnaptime = $paref->{lsnaptime}; # Zeit des letzten Schnappschusses wenn gesetzt
|
||||
my $opmode = $paref->{opmode}; # aktueller Operation Mode
|
||||
my $sslfb = $paref->{sslfb}; # Flag für Verwendung altes Net::SMTP::SSL
|
||||
my $sslfrominit = $paref->{sslfrominit}; # SSL soll sofort ! aufgebaut werden
|
||||
my $tac = $paref->{tac}; # übermittelter Transaktionscode der ausgewerteten Transaktion
|
||||
|
||||
my $hash = $defs{$name};
|
||||
my $sslver = "";
|
||||
my ($err,$fh,$smtp);
|
||||
my ($err,$fh,$smtp,@as);
|
||||
|
||||
# Credentials abrufen
|
||||
my ($success, $username, $password) = SSCam_getcredentials($hash,0,"smtp");
|
||||
@ -7318,28 +7437,37 @@ sub SSCam_sendEmailblocking($) {
|
||||
);
|
||||
}
|
||||
|
||||
### Add image, Das Image liegt base64-codiert vor und wird dekodiert in ein "in-memory IO" gespeichert (snap)
|
||||
no strict "refs";
|
||||
if($sdat) {
|
||||
my $decoded = MIME::Base64::decode_base64($sdat);
|
||||
my $mh = '';
|
||||
if(open ($fh, '>', \$mh)) { # in-memory IO Handle
|
||||
binmode $fh;
|
||||
print $fh $decoded;
|
||||
close($fh);
|
||||
open ($fh, '<', \$mh);
|
||||
Log3($name, 4, "$name - image data were saved to memory handle for smtp prepare");
|
||||
} else {
|
||||
$err = "Can't open memory handle: $!";
|
||||
Log3($name, 2, "$name - $err");
|
||||
$err = encode_base64($err,"");
|
||||
return "$name|$err|''";
|
||||
### Images liegen in einem Hash (Ref in $sdat) base64-codiert vor und werden dekodiert in ein "in-memory IO" gespeichert (snap)
|
||||
my ($ct,$img,$decoded);
|
||||
@as = sort{$a<=>$b}keys%{$sdat};
|
||||
foreach my $key (@as) {
|
||||
$ct = $sdat->{$key}{createdTm};
|
||||
$img = $sdat->{$key}{imageData};
|
||||
$fname = $sdat->{$key}{fileName};
|
||||
$fh = '$fh'.$key;
|
||||
$decoded = MIME::Base64::decode_base64($img);
|
||||
my $mh = '';
|
||||
if(open ($fh, '>', \$mh)) { # in-memory IO Handle
|
||||
binmode $fh;
|
||||
print $fh $decoded;
|
||||
close $fh;
|
||||
open ($fh, '<', \$mh);
|
||||
Log3($name, 4, "$name - image data were saved to memory handle for smtp prepare");
|
||||
} else {
|
||||
$err = "Can't open memory handle: $!";
|
||||
Log3($name, 2, "$name - $err");
|
||||
$err = encode_base64($err,"");
|
||||
return "$name|$err|''";
|
||||
}
|
||||
$mailmsg->attach(
|
||||
Type => $part2type,
|
||||
FH => $fh,
|
||||
Filename => $fname,
|
||||
Disposition => 'attachment',
|
||||
);
|
||||
}
|
||||
$mailmsg->attach(
|
||||
Type => $part2type,
|
||||
FH => $fh,
|
||||
Filename => $fname,
|
||||
Disposition => 'attachment',
|
||||
);
|
||||
}
|
||||
|
||||
$mailmsg->attr('content-type.charset' => 'UTF-8');
|
||||
@ -7451,10 +7579,17 @@ sub SSCam_sendEmailblocking($) {
|
||||
return "$name|$err|''";
|
||||
}
|
||||
|
||||
my $ret = "Email successfully sent ".( $sslver?"encoded by $sslver":"" );
|
||||
my $ret = "Email transaction \"$tac\" successfully sent ".( $sslver?"encoded by $sslver":"" );
|
||||
Log3($name, 3, "$name - $ret To: $to".(($cc)?", CC: $cc":"") );
|
||||
|
||||
close($fh) if($fh);
|
||||
if($sdat) {
|
||||
# handles schließen
|
||||
foreach my $key (@as) {
|
||||
close '$fh'.$key;
|
||||
}
|
||||
}
|
||||
|
||||
use strict "refs";
|
||||
|
||||
# Daten müssen als Einzeiler zurückgegeben werden
|
||||
$ret = encode_base64($ret,"");
|
||||
@ -7517,7 +7652,7 @@ sub SSCam_setActiveToken ($) {
|
||||
|
||||
$hash->{HELPER}{ACTIVE} = "on";
|
||||
if (AttrVal($name,"debugactivetoken",0)) {
|
||||
Log3($name, 3, "$name - Active-Token set by OPMODE: $hash->{OPMODE}");
|
||||
Log3($name, 1, "$name - Active-Token set by OPMODE: $hash->{OPMODE}");
|
||||
}
|
||||
|
||||
return;
|
||||
@ -7532,7 +7667,44 @@ sub SSCam_delActiveToken ($) {
|
||||
|
||||
$hash->{HELPER}{ACTIVE} = "off";
|
||||
if (AttrVal($name,"debugactivetoken",0)) {
|
||||
Log3($name, 3, "$name - Active-Token deleted by OPMODE: $hash->{OPMODE}");
|
||||
Log3($name, 1, "$name - Active-Token deleted by OPMODE: $hash->{OPMODE}");
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#############################################################################################
|
||||
# Transaktion starten oder vorhandenen TA Code zurück liefern
|
||||
#############################################################################################
|
||||
sub SSCam_openOrgetTrans ($) {
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
my $tac = "";
|
||||
|
||||
if(!$hash->{HELPER}{TRANSACTION}) {
|
||||
$tac = int(rand(4500)); # Transaktionscode erzeugen und speichern
|
||||
$hash->{HELPER}{TRANSACTION} = $tac;
|
||||
if (AttrVal($name,"debugactivetoken",0)) {
|
||||
Log3($name, 1, "$name - Transaction opened, TA-code: $tac");
|
||||
}
|
||||
} else {
|
||||
$tac = $hash->{HELPER}{TRANSACTION}; # vorhandenen Transaktionscode zurück liefern
|
||||
}
|
||||
|
||||
return $tac;
|
||||
}
|
||||
|
||||
#############################################################################################
|
||||
# Transaktion freigeben
|
||||
#############################################################################################
|
||||
sub SSCam_closeTrans ($) {
|
||||
my ($hash) = @_;
|
||||
my $name = $hash->{NAME};
|
||||
|
||||
return if(!defined $hash->{HELPER}{TRANSACTION});
|
||||
my $tac = delete $hash->{HELPER}{TRANSACTION}; # Transaktion beenden
|
||||
if (AttrVal($name,"debugactivetoken",0)) {
|
||||
Log3($name, 1, "$name - Transaction \"$tac\" closed");
|
||||
}
|
||||
|
||||
return;
|
||||
@ -7565,7 +7737,7 @@ return ($str);
|
||||
<ul>
|
||||
<li>Start a Recording</li>
|
||||
<li>Stop a Recording (using command or automatically after the <RecordTime> period</li>
|
||||
<li>Trigger a Snapshot </li>
|
||||
<li>Trigger of snapshots and optionally send them alltogether by Email using the integrated Email client </li>
|
||||
<li>Deaktivate a Camera in Synology Surveillance Station</li>
|
||||
<li>Activate a Camera in Synology Surveillance Station</li>
|
||||
<li>Control of the exposure modes day, night and automatic </li>
|
||||
@ -8324,14 +8496,19 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<li><b> set <name> snap </b> (valid for CAM)</li> <br>
|
||||
<li><b> set <name> snap [<number>] [<time difference>] [snapEmailTxt:"subject => <subject text>, body => <message text>"]</b> (valid for CAM)</li> <br>
|
||||
|
||||
A snapshot will be triggered.
|
||||
One or multiple snapshots are triggered. The number of snapshots to trigger and the time difference (in seconds) between
|
||||
each snapshots can be optionally specified. Without any specification only one snapshot is triggered.
|
||||
The ID and the filename of the last snapshot will be displayed in Reading "LastSnapId" respectively "LastSnapFilename" of the
|
||||
device. <br><br>
|
||||
device. <br>
|
||||
The snapshot Email shipping is activated by setting the <a href="#SSCamattr">attribute</a> "snapEmailTxt". If you want
|
||||
temporary overwrite the message text set in "snapEmailTxt", you can optionally specify the "snapEmailTxt:"-tag as shown
|
||||
above. <br><br>
|
||||
|
||||
<b>Email shipping</b> <br><br>
|
||||
The snapshot can be sent after creation with <b>Email</b>. For this purpose the module contains its own Email client.
|
||||
<b>Email shipping preparation</b> <br><br>
|
||||
|
||||
The snapshots can be sent by <b>Email</b> alltogether after creation. For this purpose the module contains its own Email client.
|
||||
Before you can use this function you have to install the Perl-module <b>MIME::Lite</b>. On debian systems it can be
|
||||
installed with command: <br><br>
|
||||
|
||||
@ -8340,8 +8517,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
</ul>
|
||||
<br>
|
||||
|
||||
The Email shipping is activated by setting the <a href="#SSCamattr">attribute</a> "snapEmailTxt".
|
||||
There are more attributes must be set or can be used optionally. <br>
|
||||
There are some attributes must be set or can be used optionally. <br>
|
||||
At first the Credentials for access the Email outgoing server must be set by command <b>"set <name> smtpcredentials <user> <password>"</b>.
|
||||
The connection establishment to the server is initially done unencrypted and switches to an encrypted connection if SSL
|
||||
encryption is available. In that case the transmission of User/Password takes place encrypted too.
|
||||
@ -8353,9 +8529,9 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
||||
<tr><td style="vertical-align:top"> <b>snapEmailTxt</b> <td>- Activates the Email shipping. Has the form: <br>
|
||||
<code>subject => <subject text>, body => <message text> </code><br>
|
||||
The placeholder variable $NAME can be used. $NAME is
|
||||
The placeholder variables $CAM, $DATE and $TIME can be used. $CAM is
|
||||
replaced by the device alias or the name of camera in SVS if alias is not
|
||||
defined. </td></tr>
|
||||
defined. $DATE and $TIME are replaced with the current date and time. </td></tr>
|
||||
<tr><td> <b>smtpHost</b> </td><td>- Hostname of outgoing Email server (e.g. securesmtp.t-online.de) </td></tr>
|
||||
<tr><td> <b>smtpFrom</b> </td><td>- Return address (<name>@<domain>) </td></tr>
|
||||
<tr><td> <b>smtpTo</b> </td><td>- Receiving address(es) (<name>@<domain>) </td></tr>
|
||||
@ -8904,13 +9080,14 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<a name="snapEmailTxt"></a>
|
||||
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
||||
Activates the Email shipping of snapshots after its creation. <br>
|
||||
The attribute has to be definied in the form as described. You can use the placeholder variable $NAME.
|
||||
The variable $NAME is replaced by the device alias or the name of the camera in SVS if the device alias isn't available.
|
||||
The attribute has to be definied in the form as described. You can use the placeholder variables $CAM, $DATE and $TIME.
|
||||
The variable $CAM is replaced by the device alias or the name of the camera in SVS if the device alias isn't available.
|
||||
$DATE and $TIME are replaced with the current date and time.
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<b>Example:</b><br>
|
||||
snapEmailTxt subject => Motion alarm $NAME, body => A motion was recognized on $NAME.
|
||||
snapEmailTxt subject => Motion alarm $CAM, body => A motion was recognized at $CAM.
|
||||
</ul>
|
||||
<br>
|
||||
</li>
|
||||
@ -9087,7 +9264,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<ul>
|
||||
<li>Start einer Aufnahme</li>
|
||||
<li>Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer) </li>
|
||||
<li>Aufnehmen eines Schnappschusses und Ablage in der Synology Surveillance Station </li>
|
||||
<li>Auslösen von Schnappschnüssen und optionaler Email-Versand mittels integrierten Email-Client </li>
|
||||
<li>Deaktivieren einer Kamera in Synology Surveillance Station</li>
|
||||
<li>Aktivieren einer Kamera in Synology Surveillance Station</li>
|
||||
<li>Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch </li>
|
||||
@ -9866,15 +10043,20 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<li><b> set <name> snap </b> (gilt für CAM)</li> <br>
|
||||
<li><b> set <name> snap [<Anzahl>] [<Zeitabstand>] [snapEmailTxt:"subject => <Betreff-Text>, body => <Mitteilung-Text>"]</b> (gilt für CAM)</li> <br>
|
||||
|
||||
Ein Schnappschuß wird ausgelöst.
|
||||
Ein oder mehrere Schnappschüsse werden ausgelöst. Es kann die Anzahl der auszulösenden Schnappschüsse und deren zeitlicher
|
||||
Abstand in Sekunden optional angegeben werden. Ohne Angabe wird ein Schnappschuß getriggert.
|
||||
Es wird die ID und der Filename des letzten Snapshots als Wert der Variable "LastSnapId" bzw. "LastSnapFilename" in den
|
||||
Readings der Kamera gespeichert. <br><br>
|
||||
Readings der Kamera gespeichert. <br>
|
||||
Der Email-Versand wird durch das Setzen des <a href="#SSCamattr">Attributs</a> "snapEmailTxt" eingeschaltet. Der Text
|
||||
im Attribut "snapEmailTxt" kann durch die Spezifikation des optionalen "snapEmailTxt:"-Tags, wie oben gezeigt, temporär
|
||||
überschrieben bzw. geändert werden. <br><br>
|
||||
|
||||
<b>Email-Versand</b> <br><br>
|
||||
Der Schnappschuß kann nach der Erstellung per <b>Email</b> versendet werden. Dazu enthält das Modul einen eigenen
|
||||
Email-Client. Zur Verwendung dieser Funktion muss das Perl-Modul <b>MIME::Lite</b> installiert sein. Auf Debian-System kann
|
||||
<b>Email-Versand </b> <br><br>
|
||||
Die Schnappschüsse können nach der Erstellung per <b>Email</b> gemeinsam versendet werden. Dazu enthält das Modul einen
|
||||
eigenen Email-Client.
|
||||
Zur Verwendung dieser Funktion muss das Perl-Modul <b>MIME::Lite</b> installiert sein. Auf Debian-System kann
|
||||
es mit <br><br>
|
||||
|
||||
<ul>
|
||||
@ -9884,8 +10066,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
|
||||
installiert werden. <br><br>
|
||||
|
||||
Der Email-Versand wird durch das Setzen des <a href="#SSCamattr">Attributs</a> "snapEmailTxt" eingeschaltet.
|
||||
Weitere Attribute müssen gesetzt oder können optional verwendet werden. <br>
|
||||
Für die Verwendung des Email-Versands müssen einige Attribute gesetzt oder können optional genutzt werden. <br>
|
||||
Die Credentials für den Zugang zum Email-Server müssen mit dem Befehl <b>"set <name> smtpcredentials <user> <password>"</b>
|
||||
gesetzt werden. Der Verbindungsaufbau zum Postausgangsserver erfolgt initial unverschüsselt und wechselt zu einer verschlüsselten
|
||||
Verbindung wenn SSL zur Verfügung steht. In diesem Fall erfolgt auch die Übermittlung von User/Password verschlüsselt.
|
||||
@ -9897,9 +10078,10 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
||||
<tr><td style="vertical-align:top"> <b>snapEmailTxt</b> <td>- Aktiviert den Email-Versand. Die Eingabe hat die Form: <br>
|
||||
<code>subject => <Betreff-Text>, body => <Mitteilung-Text></code><br>
|
||||
Es kann der Platzhalter $NAME verwendet werden. $NAME wird
|
||||
Es können die Platzhalter $CAM, $DATE und $TIME verwendet werden. $CAM wird
|
||||
durch den Device-Alias bzw. den Namen der Kamera in der SVS
|
||||
ersetzt falls der Device-Alias nicht gesetzt ist. </td></tr>
|
||||
ersetzt falls der Device-Alias nicht gesetzt ist.
|
||||
$DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt.</td></tr>
|
||||
<tr><td> <b>smtpHost</b> </td><td>- Hostname oder IP-Adresse des Postausgangsservers (z.B. securesmtp.t-online.de) </td></tr>
|
||||
<tr><td> <b>smtpFrom</b> </td><td>- Absenderadresse (<name>@<domain>) </td></tr>
|
||||
<tr><td> <b>smtpTo</b> </td><td>- Empfängeradresse(n) (<name>@<domain>) </td></tr>
|
||||
@ -10471,13 +10653,13 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<a name="snapEmailTxt"></a>
|
||||
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
||||
Aktiviert den Emailversand von Schnappschüssen nach deren Erstellung. <br>
|
||||
Das Attribut muß in der angegebenen Form definiert werden. Es kann der Platzhalter $NAME verwendet werden.
|
||||
$NAME wird durch den Device-Alias bzw. den Namen der Kamera in der SVS ersetzt falls der Device-Alias nicht vorhanden
|
||||
ist. <br><br>
|
||||
Das Attribut muß in der angegebenen Form definiert werden. Es können die Platzhalter $CAM, $DATE und $TIME verwendet werden.
|
||||
$CAM wird durch den Device-Alias bzw. den Namen der Kamera in der SVS ersetzt falls der Device-Alias nicht vorhanden
|
||||
ist. $DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt. <br><br>
|
||||
|
||||
<ul>
|
||||
<b>Beispiel:</b><br>
|
||||
snapEmailTxt subject => Bewegungsalarm $NAME, body => Eine Bewegung wurde an der $NAME registriert.
|
||||
snapEmailTxt subject => Bewegungsalarm $CAM, body => Eine Bewegung wurde an der $CAM registriert.
|
||||
</ul>
|
||||
<br>
|
||||
</li>
|
||||
|
@ -7208,12 +7208,12 @@ sub SSCam_prepareSendEmail ($$;$) {
|
||||
my($bodyk,$bodyt) = split("=>", $body);
|
||||
$subjk = SSCam_trim($subjk);
|
||||
$subjt = SSCam_trim($subjt);
|
||||
$subjt =~ s/\$NAME/$calias/g;
|
||||
$subjt =~ s/\$CAM/$calias/g;
|
||||
$subjt =~ s/\$DATE/$date/g;
|
||||
$subjt =~ s/\$TIME/$time/g;
|
||||
$bodyk = SSCam_trim($bodyk);
|
||||
$bodyt = SSCam_trim($bodyt);
|
||||
$bodyt =~ s/\$NAME/$calias/g;
|
||||
$bodyt =~ s/\$CAM/$calias/g;
|
||||
$bodyt =~ s/\$DATE/$date/g;
|
||||
$bodyt =~ s/\$TIME/$time/g;
|
||||
my %smtpmsg = ();
|
||||
@ -7737,7 +7737,7 @@ return ($str);
|
||||
<ul>
|
||||
<li>Start a Recording</li>
|
||||
<li>Stop a Recording (using command or automatically after the <RecordTime> period</li>
|
||||
<li>Trigger a Snapshot </li>
|
||||
<li>Trigger of snapshots and optionally send them alltogether by Email using the integrated Email client </li>
|
||||
<li>Deaktivate a Camera in Synology Surveillance Station</li>
|
||||
<li>Activate a Camera in Synology Surveillance Station</li>
|
||||
<li>Control of the exposure modes day, night and automatic </li>
|
||||
@ -8529,7 +8529,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
||||
<tr><td style="vertical-align:top"> <b>snapEmailTxt</b> <td>- Activates the Email shipping. Has the form: <br>
|
||||
<code>subject => <subject text>, body => <message text> </code><br>
|
||||
The placeholder variables $NAME, $DATE and $TIME can be used. $NAME is
|
||||
The placeholder variables $CAM, $DATE and $TIME can be used. $CAM is
|
||||
replaced by the device alias or the name of camera in SVS if alias is not
|
||||
defined. $DATE and $TIME are replaced with the current date and time. </td></tr>
|
||||
<tr><td> <b>smtpHost</b> </td><td>- Hostname of outgoing Email server (e.g. securesmtp.t-online.de) </td></tr>
|
||||
@ -9080,14 +9080,14 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<a name="snapEmailTxt"></a>
|
||||
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
||||
Activates the Email shipping of snapshots after its creation. <br>
|
||||
The attribute has to be definied in the form as described. You can use the placeholder variables $NAME, $DATE and $TIME.
|
||||
The variable $NAME is replaced by the device alias or the name of the camera in SVS if the device alias isn't available.
|
||||
The attribute has to be definied in the form as described. You can use the placeholder variables $CAM, $DATE and $TIME.
|
||||
The variable $CAM is replaced by the device alias or the name of the camera in SVS if the device alias isn't available.
|
||||
$DATE and $TIME are replaced with the current date and time.
|
||||
<br><br>
|
||||
|
||||
<ul>
|
||||
<b>Example:</b><br>
|
||||
snapEmailTxt subject => Motion alarm $NAME, body => A motion was recognized on $NAME.
|
||||
snapEmailTxt subject => Motion alarm $CAM, body => A motion was recognized at $CAM.
|
||||
</ul>
|
||||
<br>
|
||||
</li>
|
||||
@ -9264,7 +9264,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<ul>
|
||||
<li>Start einer Aufnahme</li>
|
||||
<li>Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer) </li>
|
||||
<li>Aufnehmen eines Schnappschusses und Ablage in der Synology Surveillance Station </li>
|
||||
<li>Auslösen von Schnappschnüssen und optionaler Email-Versand mittels integrierten Email-Client </li>
|
||||
<li>Deaktivieren einer Kamera in Synology Surveillance Station</li>
|
||||
<li>Aktivieren einer Kamera in Synology Surveillance Station</li>
|
||||
<li>Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch </li>
|
||||
@ -10078,7 +10078,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<colgroup> <col width=12%> <col width=88%> </colgroup>
|
||||
<tr><td style="vertical-align:top"> <b>snapEmailTxt</b> <td>- Aktiviert den Email-Versand. Die Eingabe hat die Form: <br>
|
||||
<code>subject => <Betreff-Text>, body => <Mitteilung-Text></code><br>
|
||||
Es können die Platzhalter $NAME, $DATE und $TIME verwendet werden. $NAME wird
|
||||
Es können die Platzhalter $CAM, $DATE und $TIME verwendet werden. $CAM wird
|
||||
durch den Device-Alias bzw. den Namen der Kamera in der SVS
|
||||
ersetzt falls der Device-Alias nicht gesetzt ist.
|
||||
$DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt.</td></tr>
|
||||
@ -10653,13 +10653,13 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
||||
<a name="snapEmailTxt"></a>
|
||||
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
||||
Aktiviert den Emailversand von Schnappschüssen nach deren Erstellung. <br>
|
||||
Das Attribut muß in der angegebenen Form definiert werden. Es können die Platzhalter $NAME, $DATE und $TIME verwendet werden.
|
||||
$NAME wird durch den Device-Alias bzw. den Namen der Kamera in der SVS ersetzt falls der Device-Alias nicht vorhanden
|
||||
Das Attribut muß in der angegebenen Form definiert werden. Es können die Platzhalter $CAM, $DATE und $TIME verwendet werden.
|
||||
$CAM wird durch den Device-Alias bzw. den Namen der Kamera in der SVS ersetzt falls der Device-Alias nicht vorhanden
|
||||
ist. $DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt. <br><br>
|
||||
|
||||
<ul>
|
||||
<b>Beispiel:</b><br>
|
||||
snapEmailTxt subject => Bewegungsalarm $NAME, body => Eine Bewegung wurde an der $NAME registriert.
|
||||
snapEmailTxt subject => Bewegungsalarm $CAM, body => Eine Bewegung wurde an der $CAM registriert.
|
||||
</ul>
|
||||
<br>
|
||||
</li>
|
||||
|
Loading…
x
Reference in New Issue
Block a user