From 6031b24e310a7f51921bfebb882a98e3d6283000 Mon Sep 17 00:00:00 2001 From: DS_Starter Date: Mon, 14 Jan 2019 23:09:42 +0000 Subject: [PATCH] 49_SSCam: contrib 8.5.0 git-svn-id: https://svn.fhem.de/fhem/trunk@18261 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/DS_Starter/49_SSCam.pm | 310 ++++++++++++++++++++-------- 1 file changed, 228 insertions(+), 82 deletions(-) diff --git a/fhem/contrib/DS_Starter/49_SSCam.pm b/fhem/contrib/DS_Starter/49_SSCam.pm index b9fb51a70..fce72e7f1 100644 --- a/fhem/contrib/DS_Starter/49_SSCam.pm +++ b/fhem/contrib/DS_Starter/49_SSCam.pm @@ -1,5 +1,5 @@ ######################################################################################################################## -# $Id: 49_SSCam.pm 18207 2019-01-10 19:00:15Z DS_Starter $ +# $Id: 49_SSCam.pm 18216 2019-01-11 14:20:30Z DS_Starter $ ######################################################################################################################### # 49_SSCam.pm # @@ -47,7 +47,8 @@ use Encode; # Versions History intern our %SSCam_vNotesIntern = ( - "8.4.4" => "14.01.2019 change: generate event of every snapfile,id etc. if snap was called with arguments, Forum:#45671 #msg887484 ", + "8.5.0" => "20.01.2019 SVS device set snapAllCams ", + "8.4.4" => "14.01.2019 change: generate event of every snapfile,id etc. if snap was called with arguments, Forum:#45671 #msg887484 ", "8.4.3" => "11.01.2019 fix blocking Active-Token if snap was done with arguments and snapEmailTxt not set, Forum:#45671 #msg885475 ", "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 ", @@ -717,14 +718,14 @@ sub SSCam_Set($@) { "motdetsc:disable,camera,SVS ". "snap ". (AttrVal($name, "snapGalleryBoost",0)?(AttrVal($name,"snapGalleryNumber",undef) || AttrVal($name,"snapGalleryBoost",0))?"snapGallery:noArg ":"snapGallery:$SSCAM_snum ":" "). - "createSnapGallery:noArg ". + "createReadingsGroup ". + "createSnapGallery:noArg ". "createStreamDev:generic,hls,mjpeg,switched ". ((ReadingsVal("$name", "CapPTZPan", "false") ne "false") ? "createPTZcontrol:noArg ": ""). "enable:noArg ". "disable:noArg ". "optimizeParams ". ((ReadingsVal("$name", "CapPIR", "false") ne "false") ? "pirSensor:activate,deactivate ": ""). - "createReadingsGroup ". "runView:live_fw".$hlslfw."live_link,live_open,lastrec_fw,lastrec_fw_MJPEG,lastrec_fw_MPEG4/H.264,lastrec_open,lastsnap_fw ". ((ReadingsVal("$name", "CapPTZPan", "false") ne "false") ? "setPreset ": ""). ((ReadingsVal("$name", "CapPTZPan", "false") ne "false") ? "setHome:---currentPosition---,".ReadingsVal("$name","Presets","")." " : ""). @@ -741,9 +742,11 @@ sub SSCam_Set($@) { $setlist = "Unknown argument $opt, choose one of ". "autocreateCams:noArg ". "credentials ". + "smtpcredentials ". "createReadingsGroup ". "extevent:1,2,3,4,5,6,7,8,9,10 ". - ($hash->{HELPER}{APIHMMAXVER}?"homeMode:on,off ": ""); + ($hash->{HELPER}{APIHMMAXVER}?"homeMode:on,off ": ""). + "snapCams "; } if ($opt eq "credentials") { @@ -818,6 +821,53 @@ sub SSCam_Set($@) { } SSCam_camsnap("$name:$num:$lag:$ncount:$emtxt"); + } elsif ($opt eq "snapCams" && !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\"";} + + my ($num,$lag,$ncount) = (1,2,1); + my $cams = "all"; + 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; + } + + my $at = join(" ",@a); + if($at =~ /CAM:/i) { + $at =~ m/.*CAM:"(.*)".*/i; + $cams = $1; + $cams =~ s/\s//g; + } + + my @camdvs; + my %snapac = (); # Schnappschuss Hash für alle Cams -> Schnappschudaten sollen hinein + + if($cams eq "all") { # alle nicht disabled Kameras auslösen, sonst nur die gewählten + @camdvs = devspec2array("TYPE=SSCam:FILTER=MODEL!=SVS"); + foreach (@camdvs) { + if(!IsDisabled($_)) { + $snapac{$_} = ""; + } + } + } else { + @camdvs = split(",",$cams); + foreach (@camdvs) { + if(!IsDisabled($_)) { + $snapac{$_} = ""; + } + } + } + + my $asref = \%snapac; + $hash->{HELPER}{ALLSNAPREF} = $asref; + foreach my $key (keys%{$asref}) { + delete $asref->{$key} if(!AttrVal($key, "snapEmailTxt", "")); # Snap dieser Kamera auslösen aber nicht senden + SSCam_camsnap("$key:$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\"";} if ($hash->{HELPER}{APIPTZMAXVER} < 5) {return "Function \"$opt\" needs a higher version of Surveillance Station";} @@ -5003,7 +5053,7 @@ sub SSCam_camop_parse ($) { ##### eine Schnapschussgalerie soll angezeigt oder als Bulk versendet werden ##### if($OpMode eq "getsnapgallery") { if($hash->{HELPER}{CANSENDSNAP}) { - # es sollen Schnappschüsse versendet werden + # 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 @@ -5022,18 +5072,16 @@ sub SSCam_camop_parse ($) { 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; + $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); - } + # prüfen ob Schnappschuß als Email versendet werden soll + SSCam_prepareSendEmail ($hash, $OpMode, \%sendsnaps); } else { # es soll eine Schnappschußgalerie bereitgestellt (Attr snapGalleryBoost=1) bzw. gleich angezeigt @@ -5085,7 +5133,7 @@ sub SSCam_camop_parse ($) { readingsBeginUpdate($hash); readingsBulkUpdate($hash,"Errorcode","none"); readingsBulkUpdate($hash,"Error","none"); - readingsEndUpdate($hash, 1); + readingsEndUpdate($hash, 1); SSCam_closeTrans($hash); # Transaktion beenden delete($hash->{HELPER}{GETSNAPGALLERY}); # Steuerbit getsnapgallery statt getsnapinfo @@ -7205,74 +7253,112 @@ return ($error); 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 => , body => - my $mth = delete $hash->{HELPER}{SMTPMSG}; - my $mt = $mth?$mth:AttrVal($name, "snapEmailTxt", ""); - $mt =~ s/['"]//g; + my $calias = AttrVal($name,"alias",$hash->{CAMNAME}); # Alias der Kamera wenn gesetzt oder Originalname aus SVS + my ($ret,$sdat,$fname,$snapid,$lsnaptime,$tac) = ('','','','','',''); - 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/\$CAM/$calias/g; - $subjt =~ s/\$DATE/$date/g; - $subjt =~ s/\$TIME/$time/g; - $bodyk = SSCam_trim($bodyk); - $bodyt = SSCam_trim($bodyt); - $bodyt =~ s/\$CAM/$calias/g; - $bodyt =~ s/\$DATE/$date/g; - $bodyt =~ s/\$TIME/$time/g; - my %smtpmsg = (); - $smtpmsg{$subjk} = "$subjt"; - $smtpmsg{$bodyk} = "$bodyt"; - - my $sslfrominit = 0; - my $smtpsslport = 465; - if(AttrVal($name,"smtpSSLPort",0)) { - $sslfrominit = 1; - $smtpsslport = AttrVal($name,"smtpSSLPort",0); + ### prüfen ob Schnappschnüsse aller Kameras durch ein SVS-Device angefordert wurde, + ### Bilddaten werden erst zum Versand weitergeleitet wenn Schnappshußhash komplett gefüllt ist + my $asref; + my @allsvs = devspec2array("TYPE=SSCam:FILTER=MODEL=SVS"); + foreach (@allsvs) { + next if(!AttrVal($_, "snapEmailTxt", "")); # Schnappschüsse senden NICHT durch SVS ausgelöst -> Snaps der Cams NICHT gemeinsam versenden + my $svshash = $defs{$_}; + if($svshash->{HELPER}{ALLSNAPREF}) { + $asref = $svshash->{HELPER}{ALLSNAPREF}; # Hashreferenz zum summarischen Snaphash + foreach my $key (keys%{$asref}) { + if($key eq $name) { # Kamera Key im Bildhash matcht -> Bilddaten übernehmen + foreach my $pkey (keys%{$data}) { + my $nkey = time()+int(rand(1000)); + $asref->{$nkey.$pkey}{createdTm} = $data->{$pkey}{createdTm}; # Aufnahmezeit der Kamera werden im summarischen Snaphash eingefügt + $asref->{$nkey.$pkey}{".imageData"} = $data->{$pkey}{".imageData"}; # Bilddaten der Kamera werden im summarischen Snaphash eingefügt + $asref->{$nkey.$pkey}{fileName} = $data->{$pkey}{fileName}; # Filenamen der Kamera werden im summarischen Snaphash eingefügt + } + delete $hash->{HELPER}{CANSENDSNAP}; + delete $asref->{$key}; # ursprünglichen Key (Kameranamen) löschen + } + } + $asref = $svshash->{HELPER}{ALLSNAPREF}; # Hashreferenz zum summarischen Snaphash + foreach my $key (keys%{$asref}) { # prüfen ob Bildhash komplett ? + if(!$asref->{$key}) { + return; # Bildhash noch nicht komplett + } + } + my %rs = %{$asref}; + my $rsref = \%rs; + delete $svshash->{HELPER}{ALLSNAPREF}; # ALLSNAPREF löschen -> gemeinsamer Versand beendet + $hash = $svshash; # Hash durch SVS-Hash ersetzt + $name = $svshash->{NAME}; # Name des auslösenden SVS-Devices wird eingesetzt + $data = $rsref; # Referenz zum summarischen Hash einsetzen + $calias = AttrVal($name,"alias",$hash->{NAME}); # Alias des SVS-Devices + $hash->{HELPER}{TRANSACTION} = "multiple_ta"; # fake Transaction im SVS Device setzen + last; # Schleife verlassen und mit Senden weiter + } } - 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', - 'fname' => $fname, - 'smtpport' => $sp, - 'sdat' => $sdat, - 'lsnaptime' => $lsnaptime, - 'opmode' => $OpMode, - 'smtpnousessl' => $nousessl, - 'sslfrominit' => $sslfrominit, - 'smtpsslport' => $smtpsslport, - 'tac' => $tac, - } - ); + ### Bilddaten als Email versenden wenn Attribut "snapEmailTxt" definiert ist + if(AttrVal($name, "snapEmailTxt", "")) { + 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 => , body => + my $mth = delete $hash->{HELPER}{SMTPMSG}; + my $mt = $mth?$mth:AttrVal($name, "snapEmailTxt", ""); + $mt =~ s/['"]//g; + + 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/\$CAM/$calias/g; + $subjt =~ s/\$DATE/$date/g; + $subjt =~ s/\$TIME/$time/g; + $bodyk = SSCam_trim($bodyk); + $bodyt = SSCam_trim($bodyt); + $bodyt =~ s/\$CAM/$calias/g; + $bodyt =~ s/\$DATE/$date/g; + $bodyt =~ s/\$TIME/$time/g; + my %smtpmsg = (); + $smtpmsg{$subjk} = "$subjt"; + $smtpmsg{$bodyk} = "$bodyt"; + + my $sslfrominit = 0; + my $smtpsslport = 465; + if(AttrVal($name,"smtpSSLPort",0)) { + $sslfrominit = 1; + $smtpsslport = AttrVal($name,"smtpSSLPort",0); + } + + $tac = $hash->{HELPER}{TRANSACTION}; # Code der laufenden Transaktion + + if($OpMode =~ /^getsnap/) { + $sdat = $data; + delete $hash->{HELPER}{CANSENDSNAP}; + delete $hash->{HELPER}{SMTPMSG}; + + $ret = SSCam_sendEmail($hash, {'subject' => $smtpmsg{subject}, + 'part1txt' => $smtpmsg{body}, + 'part2type' => 'image/jpeg', + 'smtpport' => $sp, + 'sdat' => $sdat, + 'opmode' => $OpMode, + 'smtpnousessl' => $nousessl, + 'sslfrominit' => $sslfrominit, + 'smtpsslport' => $smtpsslport, + 'tac' => $tac, + } + ); + } + + return $ret; } - -return $ret; + +return; } ############################################################################################# @@ -7348,7 +7434,7 @@ sub SSCam_sendEmail ($$) { '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 + 'lsnaptime' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel der Bilddaten '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 @@ -7407,9 +7493,9 @@ sub SSCam_sendEmailblocking($) { my $to = $paref->{smtpTo}; my $msgtext = $paref->{msgtext}; my $smtpdebug = $paref->{smtpdebug}; - my $sdat = $paref->{sdat}; # Image Daten als Hash base64 codiert + my $sdat = $paref->{sdat}; # Hash von Imagedaten base64 codiert 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 -> verwendet wenn $image ist gesetzt 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 @@ -7463,7 +7549,7 @@ sub SSCam_sendEmailblocking($) { @as = sort{$a<=>$b}keys%{$sdat}; foreach my $key (@as) { $ct = $sdat->{$key}{createdTm}; - $img = $sdat->{$key}{imageData}; + $img = $sdat->{$key}{".imageData"}; $fname = $sdat->{$key}{fileName}; $fh = '$fh'.$key; $decoded = MIME::Base64::decode_base64($img); @@ -7757,6 +7843,7 @@ return ($str);
  • Start a Recording
  • Stop a Recording (using command or automatically after the <RecordTime> period
  • Trigger of snapshots and optionally send them alltogether by Email using the integrated Email client
  • +
  • Trigger snapshots of all defined cams and optionally send them alltogether by Email using the integrated Email client
  • Deaktivate a Camera in Synology Surveillance Station
  • Activate a Camera in Synology Surveillance Station
  • Control of the exposure modes day, night and automatic
  • @@ -9284,6 +9371,7 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>
  • Start einer Aufnahme
  • Stop einer Aufnahme (per Befehl bzw. automatisch nach Ablauf der Aufnahmedauer)
  • Auslösen von Schnappschnüssen und optionaler Email-Versand mittels integrierten Email-Client
  • +
  • Auslösen von Schnappschnüssen aller definierten Kameras und optionaler gemeinsamer Email-Versand mittels integrierten Email-Client
  • Deaktivieren einer Kamera in Synology Surveillance Station
  • Aktivieren einer Kamera in Synology Surveillance Station
  • Steuerung der Belichtungsmodi Tag, Nacht bzw. Automatisch
  • @@ -10117,6 +10205,64 @@ attr <name> genericStrmHtmlTag <video $HTMLATTR controls autoplay>

    +
      +
    • set <name> snapCams [<Anzahl>] [<Zeitabstand>] [CAM:"<Kamera>, <Kamera>, ..."]     (gilt für SVS)

    • + + Ein oder mehrere Schnappschüsse der angegebenen Kamera-Devices werden ausgelöst. Sind keine Kamera-Devices angegeben, + werden die Schnappschüsse bei allen in FHEM definierten Kamera-Devices getriggert. + 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 jeweiligen Kamera gespeichert.
      + Der Email-Versand wird durch das Setzen des Attributs "snapEmailTxt" im SVS-Device UND + in den Kamera-Devices, deren Schnappschüsse versendet werden sollen, aktiviert. Es wird ausschließlich der im Attribut + "snapEmailTxt" des SVS-Devices hinterlegte Email-Text verwendet. Der Text im Attribut "snapEmailTxt" der einzelnen + Kameras wird ignoriert !!

      + + Email-Versand

      + Die getriggerten Schnappschüsse aller Kameras können nach der Erstellung per Email gemeinsam versendet werden. + Dazu enthält das Modul einen eigenen Email-Client. + Zur Verwendung dieser Funktion muss das Perl-Modul MIME::Lite installiert sein. Auf Debian-System kann + es mit

      + +
        + sudo apt-get install libmime-lite-perl +
      +
      + + installiert werden.

      + + Für die Verwendung des globalen Email-Versands müssen einige Attribute im SVS-Device gesetzt oder können optional genutzt werden.
      + Die Credentials für den Zugang zum Email-Server müssen mit dem Befehl "set <name> smtpcredentials <user> <password>" + 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. + Ist das Attribut "smtpSSLPort" definiert, erfolgt der Verbindungsaufbau zum Email-Server sofort verschlüsselt. + Optionale Attribute sind gekennzeichnet:

      + +
        + + + + + + + + + + + +
        snapEmailTxt - Aktiviert den Email-Versand. Die Eingabe hat die Form:
        + subject => <Betreff-Text>, body => <Mitteilung-Text>
        + Es können die Platzhalter $CAM, $DATE und $TIME verwendet werden. $CAM wird + durch den Device-Alias bzw. den Device-Namen des SVS-Devices ersetzt. + $DATE und $TIME werden durch das aktuelle Datum und Zeit ersetzt.
        smtpHost - Hostname oder IP-Adresse des Postausgangsservers (z.B. securesmtp.t-online.de)
        smtpFrom - Absenderadresse (<name>@<domain>)
        smtpTo - Empfängeradresse(n) (<name>@<domain>)
        smtpPort - (optional) Port des Postausgangsservers (default: 25)
        smtpCc - (optional) Carbon-Copy Empfängeradresse(n) (<name>@<domain>)
        smtpNoUseSSL - (optional) "1" wenn kein SSL beim Email-Versand verwendet werden soll (default: 0)
        smtpSSLPort - (optional) SSL-Port des Postausgangsservers (default: 465)
        smtpDebug - (optional) zum Debugging der SMTP-Verbindung setzen
        +
      +
      + + Zur näheren Erläuterung siehe Beschreibung der Attribute.
      +
    +

    +
    • set <name> snapGallery [1-10]     (gilt für CAM)