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.
|
# 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.
|
# 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
|
- bugfix: 98_DOIFtools: fixed line break in DOIFtoolsLog
|
||||||
- feature: 72_FB_CALLMONITOR: support for contact images and download of
|
- feature: 72_FB_CALLMONITOR: support for contact images and download of
|
||||||
all available contact images from FritzBox
|
all available contact images from FritzBox
|
||||||
|
@ -47,6 +47,10 @@ use Encode;
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
our %SSCam_vNotesIntern = (
|
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.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.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, ".
|
"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
|
# Versions History extern
|
||||||
our %SSCam_vNotesExtern = (
|
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.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 ".
|
"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. ",
|
"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
|
# $name is device name
|
||||||
# aName and aVal are Attribute name and value
|
# aName and aVal are Attribute name and value
|
||||||
|
|
||||||
|
if ($aName eq "session") {
|
||||||
|
delete $hash->{HELPER}{SID};
|
||||||
|
}
|
||||||
|
|
||||||
if ($aName =~ /hlsNetScript/ && SSCam_IsModelCam($hash)) {
|
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.";
|
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 ".
|
"on ".
|
||||||
"off:noArg ".
|
"off:noArg ".
|
||||||
"motdetsc:disable,camera,SVS ".
|
"motdetsc:disable,camera,SVS ".
|
||||||
"snap:noArg ".
|
"snap ".
|
||||||
(AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" ").
|
(AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" ").
|
||||||
"createSnapGallery:noArg ".
|
"createSnapGallery:noArg ".
|
||||||
"createStreamDev:generic,hls,mjpeg,switched ".
|
"createStreamDev:generic,hls,mjpeg,switched ".
|
||||||
@ -736,7 +747,7 @@ sub SSCam_Set($@) {
|
|||||||
if ($opt eq "credentials") {
|
if ($opt eq "credentials") {
|
||||||
return "Credentials are incomplete, use username password" if (!$prop || !$prop1);
|
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);
|
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);
|
($success) = SSCam_setcredentials($hash,"svs",$prop,$prop1);
|
||||||
$hash->{HELPER}{ACTIVE} = "off";
|
$hash->{HELPER}{ACTIVE} = "off";
|
||||||
|
|
||||||
@ -779,18 +790,31 @@ sub SSCam_Set($@) {
|
|||||||
|
|
||||||
} elsif ($opt eq "snap" && SSCam_IsModelCam($hash)) {
|
} 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\"";}
|
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", "")) {
|
if (AttrVal($name, "snapEmailTxt", "")) {
|
||||||
# Snap soll nach Erstellung per Email versendet werden
|
# Snap soll nach Erstellung per Email versendet werden
|
||||||
# snapEmailTxt muss sein: subject => <Subject-Text>, body => <Body-Text>
|
# 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("$name:$num:$lag:$ncount:$emtxt");
|
||||||
|
|
||||||
SSCam_camsnap($hash);
|
|
||||||
|
|
||||||
} elsif ($opt eq "startTracking" && SSCam_IsModelCam($hash)) {
|
} 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\"";}
|
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
|
# 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($) {
|
sub SSCam_camsnap($) {
|
||||||
my ($hash) = @_;
|
my ($str) = @_;
|
||||||
|
my ($name,$num,$lag,$ncount,$emtxt,$tac) = split(":",$str);
|
||||||
|
my $hash = $defs{$name};
|
||||||
my $camname = $hash->{CAMNAME};
|
my $camname = $hash->{CAMNAME};
|
||||||
my $name = $hash->{NAME};
|
|
||||||
my $errorcode;
|
my $errorcode;
|
||||||
my $error;
|
my $error;
|
||||||
|
|
||||||
|
$tac = (defined $tac)?$tac:5000;
|
||||||
|
my $ta = $hash->{HELPER}{TRANSACTION};
|
||||||
|
|
||||||
RemoveInternalTimer($hash, "SSCam_camsnap");
|
RemoveInternalTimer($hash, "SSCam_camsnap");
|
||||||
return if(IsDisabled($name));
|
return if(IsDisabled($name));
|
||||||
|
|
||||||
@ -2140,17 +2171,22 @@ sub SSCam_camsnap($) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($hash->{HELPER}{ACTIVE} eq "off") {
|
if ($hash->{HELPER}{ACTIVE} eq "off" || ((defined $ta) && $ta == $tac)) {
|
||||||
# einen Schnappschuß aufnehmen
|
# einen Schnappschuß aufnehmen
|
||||||
$hash->{OPMODE} = "Snap";
|
$hash->{OPMODE} = "Snap";
|
||||||
$hash->{HELPER}{LOGINRETRIES} = 0;
|
$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_setActiveToken($hash);
|
||||||
SSCam_getapisites($hash);
|
SSCam_getapisites($hash);
|
||||||
|
|
||||||
} else {
|
} 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 ($) {
|
sub SSCam_getsnapinfo ($) {
|
||||||
my ($str) = @_;
|
my ($str) = @_;
|
||||||
my ($name,$slim,$ssize) = split(":",$str);
|
my ($name,$slim,$ssize,$tac) = split(":",$str);
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
my $camname = $hash->{CAMNAME};
|
my $camname = $hash->{CAMNAME};
|
||||||
|
|
||||||
|
$tac = (defined $tac)?$tac:5000;
|
||||||
|
my $ta = $hash->{HELPER}{TRANSACTION};
|
||||||
|
|
||||||
RemoveInternalTimer("SSCam_getsnapinfo");
|
RemoveInternalTimer("SSCam_getsnapinfo");
|
||||||
return if(IsDisabled($name));
|
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} = "getsnapinfo";
|
||||||
$hash->{OPMODE} = "getsnapgallery" if(exists($hash->{HELPER}{GETSNAPGALLERY}));
|
$hash->{OPMODE} = "getsnapgallery" if(exists($hash->{HELPER}{GETSNAPGALLERY}));
|
||||||
$hash->{HELPER}{LOGINRETRIES} = 0;
|
$hash->{HELPER}{LOGINRETRIES} = 0;
|
||||||
@ -3048,6 +3087,7 @@ sub SSCam_getsnapinfo ($) {
|
|||||||
SSCam_getapisites($hash);
|
SSCam_getapisites($hash);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
$tac = (defined $tac)?$tac:"";
|
||||||
InternalTimer(gettimeofday()+1.7, "SSCam_getsnapinfo", "$name:$slim:$ssize", 0);
|
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
|
# falls Aufnahme noch läuft -> state = on setzen
|
||||||
SSCam_refresh($hash,0,1,0); # kein Room-Refresh, SSCam-state-Event, kein SSCamSTRM-Event
|
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'};
|
$snapid = $data->{data}{'id'};
|
||||||
readingsSingleUpdate($hash,"LastSnapId",$snapid, 0) if($snapid);
|
readingsSingleUpdate($hash,"LastSnapId",$snapid, 0) if($snapid);
|
||||||
|
|
||||||
@ -4880,13 +4925,28 @@ sub SSCam_camop_parse ($) {
|
|||||||
# Logausgabe
|
# Logausgabe
|
||||||
Log3($name, 3, "$name - Snapshot of Camera $camname has been done successfully");
|
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);
|
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");
|
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" ||
|
} elsif ($OpMode eq "getsnapinfo" ||
|
||||||
$OpMode eq "getsnapgallery" ||
|
$OpMode eq "getsnapgallery" ||
|
||||||
@ -4906,6 +4966,7 @@ sub SSCam_camop_parse ($) {
|
|||||||
$lstime = "n.a.";
|
$lstime = "n.a.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log3($name, $verbose, "$name - Snapinfos of camera $camname retrieved");
|
||||||
Log3($name,4, "$name - Snap [0]: ID => $lsid, File => $lfname, Created => $lstime");
|
Log3($name,4, "$name - Snap [0]: ID => $lsid, File => $lfname, Created => $lstime");
|
||||||
|
|
||||||
readingsBeginUpdate($hash);
|
readingsBeginUpdate($hash);
|
||||||
@ -4916,7 +4977,7 @@ sub SSCam_camop_parse ($) {
|
|||||||
readingsBulkUpdate($hash,"LastSnapTime", $lstime);
|
readingsBulkUpdate($hash,"LastSnapTime", $lstime);
|
||||||
readingsEndUpdate($hash, 1);
|
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.")
|
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}));
|
if(exists($hash->{HELPER}{RUNVIEW}) && $hash->{HELPER}{RUNVIEW} =~ /snap/ && !exists($data->{'data'}{'data'}[0]{imageData}));
|
||||||
|
|
||||||
@ -4925,8 +4986,44 @@ sub SSCam_camop_parse ($) {
|
|||||||
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
|
$hash->{HELPER}{LINK} = $data->{data}{data}[0]{imageData};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
##### eine Schnapschussgalerie soll angezeigt oder als Bulk versendet werden #####
|
||||||
if($OpMode eq "getsnapgallery") {
|
if($OpMode eq "getsnapgallery") {
|
||||||
# es soll eine Schnappschußgallerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt werden (Attr snapGalleryBoost=0)
|
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
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Schnappschuß soll als Email versendet werden
|
||||||
|
if(AttrVal($name, "snapEmailTxt", "")) {
|
||||||
|
SSCam_prepareSendEmail ($hash, $OpMode, \%sendsnaps);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
# es soll eine Schnappschußgalerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt
|
||||||
|
# werden (Attr snapGalleryBoost=0)
|
||||||
my $i = 0;
|
my $i = 0;
|
||||||
my $sn = 0;
|
my $sn = 0;
|
||||||
my %allsnaps = (); # Schnappschuss Hash wird leer erstellt
|
my %allsnaps = (); # Schnappschuss Hash wird leer erstellt
|
||||||
@ -4968,10 +5065,13 @@ sub SSCam_camop_parse ($) {
|
|||||||
delete($hash->{HELPER}{".SNAPHASH"}); # Snaphash löschen wenn nicht gepollt wird
|
delete($hash->{HELPER}{".SNAPHASH"}); # Snaphash löschen wenn nicht gepollt wird
|
||||||
delete($hash->{HELPER}{CL});
|
delete($hash->{HELPER}{CL});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SSCam_closeTrans($hash); # Transaktion beenden
|
||||||
|
delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo
|
||||||
|
|
||||||
|
##### Fall abhängige Eventgenerierung #####
|
||||||
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
if ($hash->{HELPER}{SNAPBYSTRMDEV} || $hash->{HELPER}{LSNAPBYSTRMDEV}) {
|
||||||
# Snap durch SSCamSTRM-Device ausgelöst
|
# Snap durch SSCamSTRM-Device ausgelöst
|
||||||
SSCam_refresh($hash,0,0,1); # kein Room-Refresh, kein SSCam-state-Event, SSCamSTRM-Event
|
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
|
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$/) {
|
} elsif ($OpMode eq "runliveview" && $hash->{HELPER}{RUNVIEW} =~ m/^live_.*hls$/) {
|
||||||
# HLS Streaming wurde aktiviert
|
# HLS Streaming wurde aktiviert
|
||||||
$hash->{HELPER}{HLSSTREAM} = "active";
|
$hash->{HELPER}{HLSSTREAM} = "active";
|
||||||
@ -5023,6 +5115,7 @@ sub SSCam_camop_parse ($) {
|
|||||||
# Token freigeben vor hlsactivate
|
# Token freigeben vor hlsactivate
|
||||||
SSCam_delActiveToken($hash);
|
SSCam_delActiveToken($hash);
|
||||||
SSCam_hlsactivate($hash);
|
SSCam_hlsactivate($hash);
|
||||||
|
return;
|
||||||
|
|
||||||
} elsif ($OpMode eq "activate_hls") {
|
} elsif ($OpMode eq "activate_hls") {
|
||||||
# HLS Streaming wurde aktiviert, Aktivitätsstatus speichern
|
# HLS Streaming wurde aktiviert, Aktivitätsstatus speichern
|
||||||
@ -5768,7 +5861,7 @@ sub SSCam_login ($$) {
|
|||||||
my $lrt = AttrVal($name,"loginRetries",3);
|
my $lrt = AttrVal($name,"loginRetries",3);
|
||||||
my ($url,$param);
|
my ($url,$param);
|
||||||
|
|
||||||
delete $hash->{HELPER}{SID} if($hash->{HELPER}{SID});
|
delete $hash->{HELPER}{SID};
|
||||||
|
|
||||||
# Login und SID ermitteln
|
# Login und SID ermitteln
|
||||||
Log3($name, 4, "$name - --- Begin Function SSCam_login ---");
|
Log3($name, 4, "$name - --- Begin Function SSCam_login ---");
|
||||||
@ -6179,13 +6272,21 @@ sub SSCam_snaplimsize ($) {
|
|||||||
if(!AttrVal($name,"snapGalleryBoost",0)) {
|
if(!AttrVal($name,"snapGalleryBoost",0)) {
|
||||||
$slim = 1;
|
$slim = 1;
|
||||||
$ssize = 0;
|
$ssize = 0;
|
||||||
$ssize = 2 if(AttrVal($name,"snapEmailTxt","")); # Full Size für EMail-Versand, wird durch "snapGallerySize" überschrieben
|
|
||||||
} else {
|
} else {
|
||||||
$hash->{HELPER}{GETSNAPGALLERY} = 1;
|
$hash->{HELPER}{GETSNAPGALLERY} = 1;
|
||||||
$slim = AttrVal($name,"snapGalleryNumber",$SSCam_slim); # Anzahl der abzurufenden Snaps
|
$slim = AttrVal($name,"snapGalleryNumber",$SSCam_slim); # Anzahl der abzurufenden Snaps
|
||||||
my $sg = AttrVal($name,"snapGallerySize","Icon"); # Auflösung Image
|
my $sg = AttrVal($name,"snapGallerySize","Icon"); # Auflösung Image
|
||||||
$ssize = ($sg eq "Icon")?1:2;
|
$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);
|
return ($slim,$ssize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6540,7 +6641,7 @@ sub SSCam_StreamDev($$$) {
|
|||||||
my $imgrecendless = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTART.png\">";
|
my $imgrecendless = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTART.png\">";
|
||||||
my $cmdrecstop = "cmd=set $camname off"; # Aufnahme Stop
|
my $cmdrecstop = "cmd=set $camname off"; # Aufnahme Stop
|
||||||
my $imgrecstop = "<img src=\"$FW_ME/www/images/sscam/black_btn_RECSTOP.png\">";
|
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 $imgdosnap = "<img src=\"$FW_ME/www/images/sscam/black_btn_DOSNAP.png\">";
|
||||||
my $cmdrefresh = "cmd=set $camname refresh STRM"; # Refresh in SSCamSTRM-Devices
|
my $cmdrefresh = "cmd=set $camname refresh STRM"; # Refresh in SSCamSTRM-Devices
|
||||||
my $imgrefresh = "<img src=\"$FW_ME/www/images/default/Restart.png\">";
|
my $imgrefresh = "<img src=\"$FW_ME/www/images/default/Restart.png\">";
|
||||||
@ -7080,42 +7181,45 @@ return ($error);
|
|||||||
#############################################################################################
|
#############################################################################################
|
||||||
# Vorbereitung SMTP EMail-Versand
|
# Vorbereitung SMTP EMail-Versand
|
||||||
# $OpMode = aktueller Operation Mode zur Unterscheidung was versendet werden soll
|
# $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 ($$;$) {
|
sub SSCam_prepareSendEmail ($$;$) {
|
||||||
my ($hash, $OpMode, $data) = @_;
|
my ($hash, $OpMode, $data) = @_;
|
||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $calias = AttrVal($name,"alias",$hash->{CAMNAME}); # Alias der Kamera wenn gesetzt oder Originalname aus SVS
|
my $calias = AttrVal($name,"alias",$hash->{CAMNAME}); # Alias der Kamera wenn gesetzt oder Originalname aus SVS
|
||||||
my ($ret,$sdat,$fname,$snapid,$lsnaptime) = ('','','','','');
|
my ($ret,$sdat,$fname,$snapid,$lsnaptime) = ('','','','','');
|
||||||
|
my $snapnum = 1;
|
||||||
|
|
||||||
my $sp = AttrVal($name, "smtpPort", 25);
|
my $sp = AttrVal($name, "smtpPort", 25);
|
||||||
my $nousessl = AttrVal($name, "smtpNoUseSSL", 0);
|
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
|
# 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>
|
# Format in $hash->{HELPER}{SMTPMSG} muss sein: subject => <Betreff-Text>, body => <Mitteilung-Text>
|
||||||
my $mt = AttrVal($name, "snapEmailTxt", "");
|
my $mth = delete $hash->{HELPER}{SMTPMSG};
|
||||||
|
my $mt = $mth?$mth:AttrVal($name, "snapEmailTxt", "");
|
||||||
$mt =~ s/['"]//g;
|
$mt =~ s/['"]//g;
|
||||||
|
|
||||||
my($subj,$body) = split(",", $mt);
|
my($subj,$body) = split(",", $mt, 2);
|
||||||
my($subjk,$subjt) = split("=>", $subj);
|
my($subjk,$subjt) = split("=>", $subj);
|
||||||
my($bodyk,$bodyt) = split("=>", $body);
|
my($bodyk,$bodyt) = split("=>", $body);
|
||||||
$subjk = SSCam_trim($subjk);
|
$subjk = SSCam_trim($subjk);
|
||||||
$subjt = SSCam_trim($subjt);
|
$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);
|
$bodyk = SSCam_trim($bodyk);
|
||||||
$bodyt = SSCam_trim($bodyt);
|
$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 = ();
|
my %smtpmsg = ();
|
||||||
$smtpmsg{$subjk} = "$subjt";
|
$smtpmsg{$subjk} = "$subjt";
|
||||||
$smtpmsg{$bodyk} = "$bodyt";
|
$smtpmsg{$bodyk} = "$bodyt";
|
||||||
|
|
||||||
if($OpMode =~ /^getsnap/) {
|
|
||||||
$fname = ReadingsVal($name,"LastSnapFilename","");
|
|
||||||
$snapid = ReadingsVal($name,"LastSnapId","");
|
|
||||||
$lsnaptime = ReadingsVal($name,"LastSnapTime","");
|
|
||||||
$sdat = $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
my $sslfrominit = 0;
|
my $sslfrominit = 0;
|
||||||
my $smtpsslport = 465;
|
my $smtpsslport = 465;
|
||||||
if(AttrVal($name,"smtpSSLPort",0)) {
|
if(AttrVal($name,"smtpSSLPort",0)) {
|
||||||
@ -7123,6 +7227,16 @@ sub SSCam_prepareSendEmail ($$;$) {
|
|||||||
$smtpsslport = AttrVal($name,"smtpSSLPort",0);
|
$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},
|
$ret = SSCam_sendEmail($hash, {'subject' => $smtpmsg{subject},
|
||||||
'part1txt' => $smtpmsg{body},
|
'part1txt' => $smtpmsg{body},
|
||||||
'part2type' => 'image/jpeg',
|
'part2type' => 'image/jpeg',
|
||||||
@ -7134,8 +7248,11 @@ sub SSCam_prepareSendEmail ($$;$) {
|
|||||||
'smtpnousessl' => $nousessl,
|
'smtpnousessl' => $nousessl,
|
||||||
'sslfrominit' => $sslfrominit,
|
'sslfrominit' => $sslfrominit,
|
||||||
'smtpsslport' => $smtpsslport,
|
'smtpsslport' => $smtpsslport,
|
||||||
|
'tac' => $tac,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return $ret;
|
return $ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7209,13 +7326,14 @@ sub SSCam_sendEmail ($$) {
|
|||||||
'smtpsslport' => {'attr'=>'smtpSSLPort', 'default'=>'', 'required'=>0, 'set'=>1}, # SSL-Port, verwendet bei direktem SSL-Aufbau
|
'smtpsslport' => {'attr'=>'smtpSSLPort', 'default'=>'', 'required'=>0, 'set'=>1}, # SSL-Port, verwendet bei direktem SSL-Aufbau
|
||||||
'smtpnousessl' => {'attr'=>'smtpNoUseSSL','default'=>'0', 'required'=>0, 'set'=>1},
|
'smtpnousessl' => {'attr'=>'smtpNoUseSSL','default'=>'0', 'required'=>0, 'set'=>1},
|
||||||
'smtpdebug' => {'attr'=>'smtpDebug', 'default'=>'0', 'required'=>0, 'set'=>0},
|
'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
|
'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"
|
'fname' => { 'default'=>'image.jpg', 'required'=>0, 'set'=>1}, # Filename für "image" oder "sdat"
|
||||||
'lsnaptime' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel des letzten Schnappschusses
|
'lsnaptime' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel des letzten Schnappschusses
|
||||||
'opmode' => { 'default'=>'', 'required'=>1, 'set'=>1}, # OpMode muss gesetzt sein
|
'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
|
'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
|
'sslfrominit' => { 'default'=>'', 'required'=>0, 'set'=>1}, # SSL soll sofort ! aufgebaut werden
|
||||||
|
'tac' => { 'default'=>'', 'required'=>0, 'set'=>1}, # übermittelter Transaktionscode der ausgewerteten Transaktion
|
||||||
);
|
);
|
||||||
|
|
||||||
my %params = ();
|
my %params = ();
|
||||||
@ -7270,17 +7388,18 @@ sub SSCam_sendEmailblocking($) {
|
|||||||
my $to = $paref->{smtpTo};
|
my $to = $paref->{smtpTo};
|
||||||
my $msgtext = $paref->{msgtext};
|
my $msgtext = $paref->{msgtext};
|
||||||
my $smtpdebug = $paref->{smtpdebug};
|
my $smtpdebug = $paref->{smtpdebug};
|
||||||
my $sdat = $paref->{sdat}; # base64 kodierte Schnappschußdaten
|
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 $image = $paref->{image}; # Image, wenn gesetzt muss 'part2' auf 'image/jpeg' gesetzt sein
|
||||||
my $fname = $paref->{fname}; # Filename von "image"
|
my $fname = $paref->{fname}; # Filename von "image"
|
||||||
my $lsnaptime = $paref->{lsnaptime}; # Zeit des letzten Schnappschusses wenn gesetzt
|
my $lsnaptime = $paref->{lsnaptime}; # Zeit des letzten Schnappschusses wenn gesetzt
|
||||||
my $opmode = $paref->{opmode}; # aktueller Operation Mode
|
my $opmode = $paref->{opmode}; # aktueller Operation Mode
|
||||||
my $sslfb = $paref->{sslfb}; # Flag für Verwendung altes Net::SMTP::SSL
|
my $sslfb = $paref->{sslfb}; # Flag für Verwendung altes Net::SMTP::SSL
|
||||||
my $sslfrominit = $paref->{sslfrominit}; # SSL soll sofort ! aufgebaut werden
|
my $sslfrominit = $paref->{sslfrominit}; # SSL soll sofort ! aufgebaut werden
|
||||||
|
my $tac = $paref->{tac}; # übermittelter Transaktionscode der ausgewerteten Transaktion
|
||||||
|
|
||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
my $sslver = "";
|
my $sslver = "";
|
||||||
my ($err,$fh,$smtp);
|
my ($err,$fh,$smtp,@as);
|
||||||
|
|
||||||
# Credentials abrufen
|
# Credentials abrufen
|
||||||
my ($success, $username, $password) = SSCam_getcredentials($hash,0,"smtp");
|
my ($success, $username, $password) = SSCam_getcredentials($hash,0,"smtp");
|
||||||
@ -7318,14 +7437,22 @@ 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) {
|
if($sdat) {
|
||||||
my $decoded = MIME::Base64::decode_base64($sdat);
|
### 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 = '';
|
my $mh = '';
|
||||||
if(open ($fh, '>', \$mh)) { # in-memory IO Handle
|
if(open ($fh, '>', \$mh)) { # in-memory IO Handle
|
||||||
binmode $fh;
|
binmode $fh;
|
||||||
print $fh $decoded;
|
print $fh $decoded;
|
||||||
close($fh);
|
close $fh;
|
||||||
open ($fh, '<', \$mh);
|
open ($fh, '<', \$mh);
|
||||||
Log3($name, 4, "$name - image data were saved to memory handle for smtp prepare");
|
Log3($name, 4, "$name - image data were saved to memory handle for smtp prepare");
|
||||||
} else {
|
} else {
|
||||||
@ -7341,6 +7468,7 @@ sub SSCam_sendEmailblocking($) {
|
|||||||
Disposition => 'attachment',
|
Disposition => 'attachment',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$mailmsg->attr('content-type.charset' => 'UTF-8');
|
$mailmsg->attr('content-type.charset' => 'UTF-8');
|
||||||
|
|
||||||
@ -7451,10 +7579,17 @@ sub SSCam_sendEmailblocking($) {
|
|||||||
return "$name|$err|''";
|
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":"") );
|
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
|
# Daten müssen als Einzeiler zurückgegeben werden
|
||||||
$ret = encode_base64($ret,"");
|
$ret = encode_base64($ret,"");
|
||||||
@ -7517,7 +7652,7 @@ sub SSCam_setActiveToken ($) {
|
|||||||
|
|
||||||
$hash->{HELPER}{ACTIVE} = "on";
|
$hash->{HELPER}{ACTIVE} = "on";
|
||||||
if (AttrVal($name,"debugactivetoken",0)) {
|
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;
|
return;
|
||||||
@ -7532,7 +7667,44 @@ sub SSCam_delActiveToken ($) {
|
|||||||
|
|
||||||
$hash->{HELPER}{ACTIVE} = "off";
|
$hash->{HELPER}{ACTIVE} = "off";
|
||||||
if (AttrVal($name,"debugactivetoken",0)) {
|
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;
|
return;
|
||||||
@ -7565,7 +7737,7 @@ return ($str);
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Start a Recording</li>
|
<li>Start a Recording</li>
|
||||||
<li>Stop a Recording (using command or automatically after the <RecordTime> period</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>Deaktivate a Camera in Synology Surveillance Station</li>
|
||||||
<li>Activate 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>
|
<li>Control of the exposure modes day, night and automatic </li>
|
||||||
@ -8324,14 +8496,19 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<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
|
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>
|
<b>Email shipping preparation</b> <br><br>
|
||||||
The snapshot can be sent after creation with <b>Email</b>. For this purpose the module contains its own Email client.
|
|
||||||
|
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
|
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>
|
installed with command: <br><br>
|
||||||
|
|
||||||
@ -8340,8 +8517,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
</ul>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
The Email shipping is activated by setting the <a href="#SSCamattr">attribute</a> "snapEmailTxt".
|
There are some attributes must be set or can be used optionally. <br>
|
||||||
There are more 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>.
|
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
|
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.
|
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>
|
<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>
|
<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>
|
<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
|
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>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>smtpFrom</b> </td><td>- Return address (<name>@<domain>) </td></tr>
|
||||||
<tr><td> <b>smtpTo</b> </td><td>- Receiving address(es) (<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>
|
<a name="snapEmailTxt"></a>
|
||||||
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
||||||
Activates the Email shipping of snapshots after its creation. <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 attribute has to be definied in the form as described. You can use the placeholder variables $CAM, $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 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>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<b>Example:</b><br>
|
<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>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
</li>
|
</li>
|
||||||
@ -9087,7 +9264,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Start einer Aufnahme</li>
|
<li>Start einer Aufnahme</li>
|
||||||
<li>Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer) </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>Deaktivieren einer Kamera in Synology Surveillance Station</li>
|
||||||
<li>Aktivieren 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>
|
<li>Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch </li>
|
||||||
@ -9866,15 +10043,20 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<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
|
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>
|
<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
|
Die Schnappschüsse können nach der Erstellung per <b>Email</b> gemeinsam versendet werden. Dazu enthält das Modul einen
|
||||||
Email-Client. Zur Verwendung dieser Funktion muss das Perl-Modul <b>MIME::Lite</b> installiert sein. Auf Debian-System kann
|
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>
|
es mit <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
@ -9884,8 +10066,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
|
|
||||||
installiert werden. <br><br>
|
installiert werden. <br><br>
|
||||||
|
|
||||||
Der Email-Versand wird durch das Setzen des <a href="#SSCamattr">Attributs</a> "snapEmailTxt" eingeschaltet.
|
Für die Verwendung des Email-Versands müssen einige Attribute gesetzt oder können optional genutzt werden. <br>
|
||||||
Weitere Attribute müssen gesetzt oder können optional verwendet werden. <br>
|
|
||||||
Die Credentials für den Zugang zum Email-Server müssen mit dem Befehl <b>"set <name> smtpcredentials <user> <password>"</b>
|
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
|
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.
|
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>
|
<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>
|
<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>
|
<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
|
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>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>smtpFrom</b> </td><td>- Absenderadresse (<name>@<domain>) </td></tr>
|
||||||
<tr><td> <b>smtpTo</b> </td><td>- Empfängeradresse(n) (<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>
|
<a name="snapEmailTxt"></a>
|
||||||
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
||||||
Aktiviert den Emailversand von Schnappschüssen nach deren Erstellung. <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.
|
Das Attribut muß in der angegebenen Form definiert werden. Es können die Platzhalter $CAM, $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
|
$CAM wird durch den Device-Alias bzw. den Namen der Kamera in der SVS ersetzt falls der Device-Alias nicht vorhanden
|
||||||
ist. <br><br>
|
ist. $DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt. <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<b>Beispiel:</b><br>
|
<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>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
</li>
|
</li>
|
||||||
|
@ -7208,12 +7208,12 @@ sub SSCam_prepareSendEmail ($$;$) {
|
|||||||
my($bodyk,$bodyt) = split("=>", $body);
|
my($bodyk,$bodyt) = split("=>", $body);
|
||||||
$subjk = SSCam_trim($subjk);
|
$subjk = SSCam_trim($subjk);
|
||||||
$subjt = SSCam_trim($subjt);
|
$subjt = SSCam_trim($subjt);
|
||||||
$subjt =~ s/\$NAME/$calias/g;
|
$subjt =~ s/\$CAM/$calias/g;
|
||||||
$subjt =~ s/\$DATE/$date/g;
|
$subjt =~ s/\$DATE/$date/g;
|
||||||
$subjt =~ s/\$TIME/$time/g;
|
$subjt =~ s/\$TIME/$time/g;
|
||||||
$bodyk = SSCam_trim($bodyk);
|
$bodyk = SSCam_trim($bodyk);
|
||||||
$bodyt = SSCam_trim($bodyt);
|
$bodyt = SSCam_trim($bodyt);
|
||||||
$bodyt =~ s/\$NAME/$calias/g;
|
$bodyt =~ s/\$CAM/$calias/g;
|
||||||
$bodyt =~ s/\$DATE/$date/g;
|
$bodyt =~ s/\$DATE/$date/g;
|
||||||
$bodyt =~ s/\$TIME/$time/g;
|
$bodyt =~ s/\$TIME/$time/g;
|
||||||
my %smtpmsg = ();
|
my %smtpmsg = ();
|
||||||
@ -7737,7 +7737,7 @@ return ($str);
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Start a Recording</li>
|
<li>Start a Recording</li>
|
||||||
<li>Stop a Recording (using command or automatically after the <RecordTime> period</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>Deaktivate a Camera in Synology Surveillance Station</li>
|
||||||
<li>Activate 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>
|
<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>
|
<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>
|
<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>
|
<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
|
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>
|
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>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>
|
<a name="snapEmailTxt"></a>
|
||||||
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
<li><b>snapEmailTxt subject => <subject text>, body => <message text> </b><br>
|
||||||
Activates the Email shipping of snapshots after its creation. <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 attribute has to be definied in the form as described. You can use the placeholder variables $CAM, $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 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.
|
$DATE and $TIME are replaced with the current date and time.
|
||||||
<br><br>
|
<br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<b>Example:</b><br>
|
<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>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
</li>
|
</li>
|
||||||
@ -9264,7 +9264,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
|
|||||||
<ul>
|
<ul>
|
||||||
<li>Start einer Aufnahme</li>
|
<li>Start einer Aufnahme</li>
|
||||||
<li>Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer) </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>Deaktivieren einer Kamera in Synology Surveillance Station</li>
|
||||||
<li>Aktivieren 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>
|
<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>
|
<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>
|
<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>
|
<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
|
durch den Device-Alias bzw. den Namen der Kamera in der SVS
|
||||||
ersetzt falls der Device-Alias nicht gesetzt ist.
|
ersetzt falls der Device-Alias nicht gesetzt ist.
|
||||||
$DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt.</td></tr>
|
$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>
|
<a name="snapEmailTxt"></a>
|
||||||
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
<li><b>snapEmailTxt subject => <Betreff-Text>, body => <Mitteilung-Text> </b><br>
|
||||||
Aktiviert den Emailversand von Schnappschüssen nach deren Erstellung. <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.
|
Das Attribut muß in der angegebenen Form definiert werden. Es können die Platzhalter $CAM, $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
|
$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>
|
ist. $DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt. <br><br>
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<b>Beispiel:</b><br>
|
<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>
|
</ul>
|
||||||
<br>
|
<br>
|
||||||
</li>
|
</li>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user