";
@@ -7559,7 +7663,7 @@ sub SSCam_ptzpanel {
###############################################################################
# spezielle Attribute für PTZ-ControlPanel verfügbar machen
###############################################################################
-sub SSCam_addptzattr {
+sub addptzattr {
my $name = shift;
my $hash = $defs{$name};
my $actvs;
@@ -7623,7 +7727,7 @@ sub SSCam_addptzattr {
if(!AttrVal($name,"ptzPanel_row04",undef));
$hash->{HELPER}{OLDPTZHOME} = $home;
- $hash->{".ptzhtml"} = ""; # SSCam_ptzpanel wird neu durchlaufen
+ $hash->{".ptzhtml"} = ""; # ptzPanel wird neu durchlaufen
return;
}
@@ -7638,7 +7742,7 @@ return;
# $fmt = Streaming Format
#
######################################################################################
-sub SSCam_StreamDev {
+sub streamDev {
my ($camname,$strmdev,$fmt,$ftui) = @_;
my $hash = $defs{$camname};
my $wltype = $hash->{HELPER}{WLTYPE};
@@ -7660,7 +7764,7 @@ sub SSCam_StreamDev {
my $hdrAlign = "center";
my ($cause,$ret,$link,$audiolink,$devWlink,$wlhash,$wlalias);
- # Kontext des SSCamSTRM-Devices speichern für SSCam_refresh
+ # Kontext des SSCamSTRM-Devices speichern für roomRefresh
$hash->{HELPER}{STRMDEV} = $strmdev; # Name des aufrufenden SSCamSTRM-Devices
$hash->{HELPER}{STRMROOM} = $FW_room?$FW_room:""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
$hash->{HELPER}{STRMDETAIL} = $FW_detail?$FW_detail:""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
@@ -7739,31 +7843,31 @@ sub SSCam_StreamDev {
my ($ttrefresh, $ttrecstart, $ttrecstop, $ttsnap, $ttcmdstop, $tthlsreact, $ttmjpegrun, $tthlsrun, $ttlrrun, $tth264run, $ttlmjpegrun, $ttlsnaprun);
if(AttrVal("global","language","EN") =~ /EN/) {
- $ttrefresh = $SSCam_ttips_en{"ttrefresh"}; $ttrefresh =~ s/§NAME§/$calias/g;
- $ttrecstart = $SSCam_ttips_en{"ttrecstart"}; $ttrecstart =~ s/§NAME§/$calias/g;
- $ttrecstop = $SSCam_ttips_en{"ttrecstop"}; $ttrecstop =~ s/§NAME§/$calias/g;
- $ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$calias/g;
- $ttcmdstop = $SSCam_ttips_en{"ttcmdstop"}; $ttcmdstop =~ s/§NAME§/$calias/g;
- $tthlsreact = $SSCam_ttips_en{"tthlsreact"}; $tthlsreact =~ s/§NAME§/$calias/g;
- $ttmjpegrun = $SSCam_ttips_en{"ttmjpegrun"}; $ttmjpegrun =~ s/§NAME§/$calias/g;
- $tthlsrun = $SSCam_ttips_en{"tthlsrun"}; $tthlsrun =~ s/§NAME§/$calias/g;
- $ttlrrun = $SSCam_ttips_en{"ttlrrun"}; $ttlrrun =~ s/§NAME§/$calias/g;
- $tth264run = $SSCam_ttips_en{"tth264run"}; $tth264run =~ s/§NAME§/$calias/g;
- $ttlmjpegrun= $SSCam_ttips_en{"ttlmjpegrun"}; $ttlmjpegrun =~ s/§NAME§/$calias/g;
- $ttlsnaprun = $SSCam_ttips_en{"ttlsnaprun"}; $ttlsnaprun =~ s/§NAME§/$calias/g;
+ $ttrefresh = $ttips_en{"ttrefresh"}; $ttrefresh =~ s/§NAME§/$calias/g;
+ $ttrecstart = $ttips_en{"ttrecstart"}; $ttrecstart =~ s/§NAME§/$calias/g;
+ $ttrecstop = $ttips_en{"ttrecstop"}; $ttrecstop =~ s/§NAME§/$calias/g;
+ $ttsnap = $ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$calias/g;
+ $ttcmdstop = $ttips_en{"ttcmdstop"}; $ttcmdstop =~ s/§NAME§/$calias/g;
+ $tthlsreact = $ttips_en{"tthlsreact"}; $tthlsreact =~ s/§NAME§/$calias/g;
+ $ttmjpegrun = $ttips_en{"ttmjpegrun"}; $ttmjpegrun =~ s/§NAME§/$calias/g;
+ $tthlsrun = $ttips_en{"tthlsrun"}; $tthlsrun =~ s/§NAME§/$calias/g;
+ $ttlrrun = $ttips_en{"ttlrrun"}; $ttlrrun =~ s/§NAME§/$calias/g;
+ $tth264run = $ttips_en{"tth264run"}; $tth264run =~ s/§NAME§/$calias/g;
+ $ttlmjpegrun= $ttips_en{"ttlmjpegrun"}; $ttlmjpegrun =~ s/§NAME§/$calias/g;
+ $ttlsnaprun = $ttips_en{"ttlsnaprun"}; $ttlsnaprun =~ s/§NAME§/$calias/g;
} else {
- $ttrefresh = $SSCam_ttips_de{"ttrefresh"}; $ttrefresh =~ s/§NAME§/$calias/g;
- $ttrecstart = $SSCam_ttips_de{"ttrecstart"}; $ttrecstart =~ s/§NAME§/$calias/g;
- $ttrecstop = $SSCam_ttips_de{"ttrecstop"}; $ttrecstop =~ s/§NAME§/$calias/g;
- $ttsnap = $SSCam_ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$calias/g;
- $ttcmdstop = $SSCam_ttips_de{"ttcmdstop"}; $ttcmdstop =~ s/§NAME§/$calias/g;
- $tthlsreact = $SSCam_ttips_de{"tthlsreact"}; $tthlsreact =~ s/§NAME§/$calias/g;
- $ttmjpegrun = $SSCam_ttips_de{"ttmjpegrun"}; $ttmjpegrun =~ s/§NAME§/$calias/g;
- $tthlsrun = $SSCam_ttips_de{"tthlsrun"}; $tthlsrun =~ s/§NAME§/$calias/g;
- $ttlrrun = $SSCam_ttips_de{"ttlrrun"}; $ttlrrun =~ s/§NAME§/$calias/g;
- $tth264run = $SSCam_ttips_de{"tth264run"}; $tth264run =~ s/§NAME§/$calias/g;
- $ttlmjpegrun= $SSCam_ttips_de{"ttlmjpegrun"}; $ttlmjpegrun =~ s/§NAME§/$calias/g;
- $ttlsnaprun = $SSCam_ttips_de{"ttlsnaprun"}; $ttlsnaprun =~ s/§NAME§/$calias/g;
+ $ttrefresh = $ttips_de{"ttrefresh"}; $ttrefresh =~ s/§NAME§/$calias/g;
+ $ttrecstart = $ttips_de{"ttrecstart"}; $ttrecstart =~ s/§NAME§/$calias/g;
+ $ttrecstop = $ttips_de{"ttrecstop"}; $ttrecstop =~ s/§NAME§/$calias/g;
+ $ttsnap = $ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$calias/g;
+ $ttcmdstop = $ttips_de{"ttcmdstop"}; $ttcmdstop =~ s/§NAME§/$calias/g;
+ $tthlsreact = $ttips_de{"tthlsreact"}; $tthlsreact =~ s/§NAME§/$calias/g;
+ $ttmjpegrun = $ttips_de{"ttmjpegrun"}; $ttmjpegrun =~ s/§NAME§/$calias/g;
+ $tthlsrun = $ttips_de{"tthlsrun"}; $tthlsrun =~ s/§NAME§/$calias/g;
+ $ttlrrun = $ttips_de{"ttlrrun"}; $ttlrrun =~ s/§NAME§/$calias/g;
+ $tth264run = $ttips_de{"tth264run"}; $tth264run =~ s/§NAME§/$calias/g;
+ $ttlmjpegrun= $ttips_de{"ttlmjpegrun"}; $ttlmjpegrun =~ s/§NAME§/$calias/g;
+ $ttlsnaprun = $ttips_de{"ttlsnaprun"}; $ttlsnaprun =~ s/§NAME§/$calias/g;
}
$ret = "";
@@ -7814,15 +7918,15 @@ sub SSCam_StreamDev {
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "$imgrecendless ";
- } else {
+ } else {
# Aufnahmebutton Stop
$ret .= "$imgrecstop ";
- }
+ }
$ret .= "$imgdosnap ";
}
$ret .= "";
if(AttrVal($camname,"ptzPanel_use",1)) {
- my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
+ my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
if($ptz_ret) {
$ret .= "$ptz_ret | ";
}
@@ -7839,12 +7943,12 @@ sub SSCam_StreamDev {
} elsif ($fmt =~ /lastsnap/) {
# $link = $hash->{HELPER}{".LASTSNAP"};
- my $cache = SSCam_cache($camname, "c_init"); # Cache initialisieren
+ my $cache = cache($camname, "c_init"); # Cache initialisieren
Log3($camname, 1, "$camname - Fall back to internal Cache due to preceding failure.") if(!$cache);
if(!$cache || $cache eq "internal" ) {
$link = $data{SSCam}{$camname}{LASTSNAP};
} else {
- $link = SSCam_cache($camname, "c_read", "{LASTSNAP}");
+ $link = cache($camname, "c_read", "{LASTSNAP}");
}
my $gattr = (AttrVal($camname,"snapGallerySize","Icon") eq "Full")?$ha:"";
@@ -7904,15 +8008,15 @@ sub SSCam_StreamDev {
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "$imgrecendless ";
- } else {
+ } else {
# Aufnahmebutton Stop
$ret .= "$imgrecstop ";
- }
+ }
$ret .= "$imgdosnap ";
}
$ret .= "";
if(AttrVal($camname,"ptzPanel_use",1)) {
- my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
+ my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
if($ptz_ret) {
$ret .= "$ptz_ret | ";
}
@@ -7941,7 +8045,7 @@ sub SSCam_StreamDev {
}
$ret .= " ";
- $ret .= SSCam_bindhlsjs ($camname, $strmdev, $m3u8, $d);
+ $ret .= bindhlsjs ($camname, $strmdev, $m3u8, $d);
$streamHash->{HELPER}{STREAM} = ""; # Stream für "set popupStream" speichern
$streamHash->{HELPER}{STREAMACTIVE} = 1; # Statusbit wenn ein Stream aktiviert ist
@@ -7951,15 +8055,15 @@ sub SSCam_StreamDev {
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "$imgrecendless ";
- } else {
+ } else {
# Aufnahmebutton Stop
$ret .= "$imgrecstop ";
- }
+ }
$ret .= "$imgdosnap ";
}
$ret .= " | ";
if(AttrVal($camname,"ptzPanel_use",1)) {
- my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
+ my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
if($ptz_ret) {
$ret .= "$ptz_ret | ";
}
@@ -7988,15 +8092,15 @@ sub SSCam_StreamDev {
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "$imgrecendless ";
- } else {
+ } else {
# Aufnahmebutton Stop
$ret .= "$imgrecstop ";
- }
+ }
$ret .= "$imgdosnap ";
}
$ret .= "";
if(AttrVal($camname,"ptzPanel_use",1) && $hash->{HELPER}{RUNVIEW} =~ /live_fw/) {
- my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
+ my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
if($ptz_ret) {
$ret .= "$ptz_ret | ";
}
@@ -8075,7 +8179,7 @@ sub SSCam_StreamDev {
$ret .= $imgblank;
$ret .= "$imgdosnap ";
$ret .= "";
-
+
} elsif($wltype =~ /embed/) {
if(!$ftui) {
$ret .= " | " if($link);
@@ -8104,14 +8208,14 @@ sub SSCam_StreamDev {
if(ReadingsVal($camname, "Record", "Stop") eq "Stop") {
# Aufnahmebutton endlos Start
$ret .= "$imgrecendless ";
- } else {
+ } else {
# Aufnahmebutton Stop
$ret .= "$imgrecstop ";
- }
+ }
$ret .= "$imgdosnap ";
$ret .= "";
if(AttrVal($camname,"ptzPanel_use",1)) {
- my $ptz_ret = SSCam_ptzpanel($camname,$strmdev,'',$ftui);
+ my $ptz_ret = ptzPanel($camname,$strmdev,'',$ftui);
if($ptz_ret) {
$ret .= "$ptz_ret | ";
}
@@ -8124,7 +8228,7 @@ sub SSCam_StreamDev {
$cause = "Playback cam \"$cam\" switched off";
$ret .= " $cause
";
$ret .= "$imgmjpegrun ";
- $ret .= "$imghlsrun " if(SSCam_IsCapHLS($hash));
+ $ret .= "$imghlsrun " if(IsCapHLS($hash));
$ret .= "$imglrirun ";
$ret .= "$imglh264run ";
$ret .= "$imglmjpegrun ";
@@ -8151,7 +8255,7 @@ return $ret;
# $m3u8 - ein .m3u8-File oder ein entsprechender Link
# $d - ein Unique-Name zur Codeableitung (darf keinen . enthalten)
#############################################################################################
-sub SSCam_bindhlsjs {
+sub bindhlsjs {
my ($camname, $strmdev, $m3u8, $d) = @_;
my $hlsjs = "sscam_hls.js"; # hls.js Release von Projekteite https://github.com/video-dev/hls.js/releases
my $ret;
@@ -8196,14 +8300,13 @@ return $ret;
# Schnappschußgalerie zusammenstellen
# Verwendung durch SSCamSTRM-Devices
###############################################################################
-sub SSCam_composegallery {
+sub composeGallery {
my ($name,$strmdev,$model,$ftui) = @_;
my $hash = $defs{$name};
my $camname = $hash->{CAMNAME};
my $sgc = AttrVal($name,"snapGalleryColumns",3); # Anzahl der Images in einer Tabellenzeile
my $lss = ReadingsVal($name, "LastSnapTime", ""); # Zeitpunkt neueste Aufnahme
my $lang = AttrVal("global","language","EN"); # Systemsprache
- # my $limit = $hash->{HELPER}{SNAPLIMIT}; # abgerufene Anzahl Snaps
my $limit = AttrVal($name,"snapGalleryNumber",3); # abgerufene Anzahl Snaps
my $totalcnt = $hash->{HELPER}{TOTALCNT}; # totale Anzahl Snaps
$limit = $totalcnt if ($limit > $totalcnt); # wenn weniger Snaps vorhanden sind als $limit -> Text in Anzeige korrigieren
@@ -8212,20 +8315,20 @@ sub SSCam_composegallery {
my $hdrAlign = "center";
my $lupt = ((ReadingsTimestamp($name,"LastSnapTime"," ") gt ReadingsTimestamp($name,"LastUpdateTime"," "))
? ReadingsTimestamp($name,"LastSnapTime"," ")
- : ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
+ : ReadingsTimestamp($name,"LastUpdateTime"," ")); # letzte Aktualisierung
$lupt =~ s/ / \/ /;
my ($alias,$dlink,$hb) = ("","","");
my ($cache,$imgdat,$imgTm);
- # Kontext des SSCamSTRM-Devices speichern für SSCam_refresh
+ # Kontext des SSCamSTRM-Devices speichern für roomRefresh
$hash->{HELPER}{STRMDEV} = $strmdev; # Name des aufrufenden SSCamSTRM-Devices
$hash->{HELPER}{STRMROOM} = $FW_room?$FW_room:""; # Raum aus dem das SSCamSTRM-Device die Funktion aufrief
$hash->{HELPER}{STRMDETAIL} = $FW_detail?$FW_detail:""; # Name des SSCamSTRM-Devices (wenn Detailansicht)
if($strmdev) {
- my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
- $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
- delete $streamHash->{HELPER}{STREAM};
+ my $streamHash = $defs{$strmdev}; # Hash des SSCamSTRM-Devices
+ $uuid = $streamHash->{FUUID}; # eindeutige UUID des Streamingdevices
+ delete $streamHash->{HELPER}{STREAM};
$alias = AttrVal($strmdev, "alias", $strmdev); # Linktext als Aliasname oder Devicename setzen
if(AttrVal($strmdev, "noLink", 0)) {
$dlink = $alias; # keine Links im Stream-Dev generieren
@@ -8244,7 +8347,7 @@ sub SSCam_composegallery {
my $ha = AttrVal($name, "snapGalleryHtmlAttr", AttrVal($name, "htmlattr", 'width="500" height="325"'));
- # falls "SSCam_composegallery" durch ein SSCamSTRM-Device aufgerufen wird
+ # falls "composeGallery" durch ein SSCamSTRM-Device aufgerufen wird
my $pws = "";
if ($strmdev) {
$pws = AttrVal($strmdev, "popupWindowSize", ""); # Größe eines Popups (umgelegt: Forum:https://forum.fhem.de/index.php/topic,45671.msg927912.html#msg927912)
@@ -8260,15 +8363,15 @@ sub SSCam_composegallery {
my $sgbnote = " ";
if($strmdev && !AttrVal($name,"snapGalleryBoost",0)) {
$sgbnote = "CAUTION - No snapshots can be retrieved. Please set the attribute \"snapGalleryBoost=1\" in device $name" if ($lang eq "EN");
- $sgbnote = "ACHTUNG - Es können keine Schnappschüsse abgerufen werden. Bitte setzen sie das Attribut \"snapGalleryBoost=1\" im Device $name" if ($lang eq "DE");
+ $sgbnote = "ACHTUNG - Es können keine Schnappschüsse abgerufen werden. Bitte setzen sie das Attribut \"snapGalleryBoost=1\" im Device $name" if ($lang eq "DE");
}
# Javascript Bibliothek für Tooltips (http://www.walterzorn.de/tooltip/tooltip.htm#download) und Texte
my $ttjs = "/fhem/pgm2/sscam_tooltip.js";
- my $ttsnap = $SSCam_ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
+ my $ttsnap = $ttips_en{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
if(AttrVal("global","language","EN") =~ /DE/) {
- $ttsnap = $SSCam_ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
+ $ttsnap = $ttips_de{"ttsnap"}; $ttsnap =~ s/§NAME§/$camname/g;
}
# Header Generierung
@@ -8283,12 +8386,12 @@ sub SSCam_composegallery {
if ($lang eq "EN") {
$header .= "Snapshots ($limit/$totalcnt) of camera $camname - newest Snapshot: $lss ";
- $header .= " (Possibly another snapshots are available. Last recall: $lupt) " if(AttrVal($name,"snapGalleryBoost",0));
+ $header .= " (Possibly another snapshots are available. Last recall: $lupt) " if(AttrVal($name,"snapGalleryBoost",0));
} else {
$header .= "Schnappschüsse ($limit/$totalcnt) von Kamera $camname - neueste Aufnahme: $lss ";
$lupt =~ /(\d+)-(\d\d)-(\d\d)\s+(.*)/;
- $lupt = "$3.$2.$1 $4";
- $header .= " (Eventuell sind neuere Aufnahmen verfügbar. Letzter Abruf: $lupt) " if(AttrVal($name,"snapGalleryBoost",0));
+ $lupt = "$3.$2.$1 $4";
+ $header .= " (Eventuell sind neuere Aufnahmen verfügbar. Letzter Abruf: $lupt) " if(AttrVal($name,"snapGalleryBoost",0));
}
$header .= $sgbnote;
@@ -8306,7 +8409,7 @@ sub SSCam_composegallery {
my $cell = 1;
my $idata = "";
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
Log3($name, 1, "$name - Fall back to internal Cache due to preceding failure.") if(!$cache);
if(!$cache || $cache eq "internal" ) {
foreach my $key (sort{$a<=>$b}keys %{$data{SSCam}{$name}{SNAPHASH}}) {
@@ -8328,7 +8431,7 @@ sub SSCam_composegallery {
}
} else {
my @as;
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SNAPHASH\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SNAPHASH\}\{(\d+)\}\{.*\}/$1/;
push @as,$_ if($_=~/^(\d+)$/);
@@ -8336,8 +8439,8 @@ sub SSCam_composegallery {
my %seen;
my @unique = sort{$a<=>$b} grep { !$seen{$_}++ } @as; # distinct / unique the keys
foreach my $key (@unique) {
- $imgdat = SSCam_cache($name, "c_read", "{SNAPHASH}{$key}{imageData}");
- $imgTm = SSCam_cache($name, "c_read", "{SNAPHASH}{$key}{createdTm}");
+ $imgdat = cache($name, "c_read", "{SNAPHASH}{$key}{imageData}");
+ $imgTm = cache($name, "c_read", "{SNAPHASH}{$key}{createdTm}");
if(!$ftui) {
$idata = "onClick=\"FW_okDialog(' ')\"" if(AttrVal($name,"snapGalleryBoost",0));
}
@@ -8380,15 +8483,15 @@ return $htmlCode;
# Auflösung Errorcodes bei Login / Logout
# Übernahmewerte sind $hash, $errorcode
##############################################################################
-sub SSCam_experrorauth {
+sub expErrorsAuth {
my ($hash,$errorcode) = @_;
my $device = $hash->{NAME};
my $error;
- unless (exists($SSCam_errauthlist{"$errorcode"})) {$error = "Message of errorcode \"$errorcode\" not found. Please turn to Synology Web API-Guide."; return ($error);}
+ unless (exists($errauthlist{"$errorcode"})) {$error = "Message of errorcode \"$errorcode\" not found. Please turn to Synology Web API-Guide."; return ($error);}
# Fehlertext aus Hash-Tabelle %errorauthlist ermitteln
- $error = $SSCam_errauthlist{"$errorcode"};
+ $error = $errauthlist{"$errorcode"};
return ($error);
}
@@ -8397,15 +8500,15 @@ return ($error);
# Auflösung Errorcodes SVS API
# Übernahmewerte sind $hash, $errorcode
##############################################################################
-sub SSCam_experror {
+sub expErrors {
my ($hash,$errorcode) = @_;
my $device = $hash->{NAME};
my $error;
- unless (exists($SSCam_errlist{"$errorcode"})) {$error = "Message of errorcode \"$errorcode\" not found. Please turn to Synology Web API-Guide."; return ($error);}
+ unless (exists($errlist{"$errorcode"})) {$error = "Message of errorcode \"$errorcode\" not found. Please turn to Synology Web API-Guide."; return ($error);}
# Fehlertext aus Hash-Tabelle %errorlist ermitteln
- $error = $SSCam_errlist{"$errorcode"};
+ $error = $errlist{"$errorcode"};
return ($error);
}
@@ -8415,13 +8518,13 @@ return ($error);
# Schwartzian Transform and the GRT transform
# Übergabe: "asc | desc",
################################################################
-sub SSCam_sortVersion {
+sub sortVersion {
my ($sseq,@versions) = @_;
my @sorted = map {$_->[0]}
- sort {$a->[1] cmp $b->[1]}
- map {[$_, pack "C*", split /\./]} @versions;
-
+ sort {$a->[1] cmp $b->[1]}
+ map {[$_, pack "C*", split /\./]} @versions;
+
@sorted = map {join ".", unpack "C*", $_}
sort
map {pack "C*", split /\./} @versions;
@@ -8437,7 +8540,7 @@ return @sorted;
# Zusätzliche Redings in Rotation erstellen
# Sub ($hash,,,,)
##############################################################################
-sub SSCam_rotateReading {
+sub rotateReading {
my ($hash,$readingName,$val,$rotnum,$do_trigger) = @_;
my $name = $hash->{NAME};
@@ -8473,7 +8576,7 @@ return;
# $OpMode = aktueller Operation Mode zur Unterscheidung was versendet werden soll
# $dat = zu versendende Daten, evtl. als Hash Referenz
#############################################################################################
-sub SSCam_prepareSendData {
+sub prepareSendData {
my ($hash, $OpMode, $dat) = @_;
my $name = $hash->{NAME};
my $calias = AttrVal($name,"alias",$hash->{CAMNAME}); # Alias der Kamera wenn gesetzt oder Originalname aus SVS
@@ -8505,7 +8608,7 @@ sub SSCam_prepareSendData {
} else {
# alle Serial Numbers "{$sn}" der Transaktion ermitteln
# Muster: {SENDSNAPS}{2222}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDSNAPS\}\{.*\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDSNAPS\}\{.*\}\{(\d+)\}\{.*\}/$1/;
push @as,$_ if($_=~/^(\d+)$/);
@@ -8514,11 +8617,11 @@ sub SSCam_prepareSendData {
my @unique = sort{$a<=>$b} grep { !$seen{$_}++ } @as; # distinct / unique the keys
foreach $pkey (@unique) {
- next if(!SSCam_cache($name, "c_isvalidkey", "$dat"."{$pkey}{imageData}"));
+ next if(!cache($name, "c_isvalidkey", "$dat"."{$pkey}{imageData}"));
$nkey = time()+int(rand(1000));
- $asref->{$nkey.$pkey}{createdTm} = SSCam_cache($name, "c_read", "$dat"."{$pkey}{createdTm}"); # Aufnahmezeit der Kamera werden im summarischen Snaphash eingefügt
- $asref->{$nkey.$pkey}{imageData} = SSCam_cache($name, "c_read", "$dat"."{$pkey}{imageData}"); # Bilddaten der Kamera werden im summarischen Snaphash eingefügt
- $asref->{$nkey.$pkey}{fileName} = SSCam_cache($name, "c_read", "$dat"."{$pkey}{fileName}"); # Filenamen der Kamera werden im summarischen Snaphash eingefügt
+ $asref->{$nkey.$pkey}{createdTm} = cache($name, "c_read", "$dat"."{$pkey}{createdTm}"); # Aufnahmezeit der Kamera werden im summarischen Snaphash eingefügt
+ $asref->{$nkey.$pkey}{imageData} = cache($name, "c_read", "$dat"."{$pkey}{imageData}"); # Bilddaten der Kamera werden im summarischen Snaphash eingefügt
+ $asref->{$nkey.$pkey}{fileName} = cache($name, "c_read", "$dat"."{$pkey}{fileName}"); # Filenamen der Kamera werden im summarischen Snaphash eingefügt
Log3($_, 4, "$_ - Central Snaphash filled up with snapdata of cam \"$name\" and key [".$nkey.$pkey."]");
}
}
@@ -8538,7 +8641,7 @@ sub SSCam_prepareSendData {
$name = $svshash->{NAME}; # Name des auslösenden SVS-Devices wird eingesetzt
Log3($name, 4, "$name - Central Snaphash fillup completed by all selected cams. Send it now ...");
- my $cache = SSCam_cache($name, "c_init"); # Cache initialisieren (im SVS Device)
+ my $cache = cache($name, "c_init"); # Cache initialisieren (im SVS Device)
if(!$cache || $cache eq "internal" ) {
delete $data{SSCam}{RS};
foreach my $key (keys%{$asref}) { # Referenz zum summarischen Hash einsetzen
@@ -8546,11 +8649,11 @@ sub SSCam_prepareSendData {
}
$dat = $data{SSCam}{RS}; # Referenz zum summarischen Hash einsetzen
} else {
- SSCam_cache($name, "c_clear");
+ cache($name, "c_clear");
foreach my $key (keys%{$asref}) {
- SSCam_cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{createdTm}", delete $asref->{$key}{createdTm});
- SSCam_cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{imageData}", delete $asref->{$key}{imageData});
- SSCam_cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{fileName}", delete $asref->{$key}{fileName});
+ cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{createdTm}", delete $asref->{$key}{createdTm});
+ cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{imageData}", delete $asref->{$key}{imageData});
+ cache($name, "c_write", "{RS}{multiple_snapsend}{$key}{fileName}", delete $asref->{$key}{fileName});
}
$dat = "{RS}{multiple_snapsend}"; # Referenz zum summarischen Hash einsetzen
}
@@ -8577,7 +8680,7 @@ sub SSCam_prepareSendData {
$tac = $hash->{HELPER}{TRANSACTION}; # Code der laufenden Transaktion
$data{SSCam}{$name}{SENDCOUNT}{$tac} = 0; # Hilfszähler Senden, init -> +1 , done -> -1, keine Daten
- # d. Transaktion werden gelöscht bis Zähler wieder 0 !! (siehe SSCam_closeTrans)
+ # d. Transaktion werden gelöscht bis Zähler wieder 0 !! (siehe closeTrans)
Log3($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
### Schnappschüsse als Email versenden wenn $hash->{HELPER}{CANSENDSNAP} definiert ist
@@ -8591,13 +8694,13 @@ sub SSCam_prepareSendData {
my($subj,$body) = split(",", $mt, 2);
my($subjk,$subjt) = split("=>", $subj);
my($bodyk,$bodyt) = split("=>", $body);
- $subjk = SSCam_trim($subjk);
- $subjt = SSCam_trim($subjt);
+ $subjk = trim($subjk);
+ $subjt = 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);
+ $bodyk = trim($bodyk);
+ $bodyt = trim($bodyt);
$bodyt =~ s/\$CAM/$calias/g;
$bodyt =~ s/\$DATE/$date/g;
$bodyt =~ s/\$TIME/$time/g;
@@ -8605,7 +8708,7 @@ sub SSCam_prepareSendData {
$smtpmsg{$subjk} = "$subjt";
$smtpmsg{$bodyk} = "$bodyt";
- $ret = SSCam_sendEmail($hash, {'subject' => $smtpmsg{subject},
+ $ret = sendEmail($hash, {'subject' => $smtpmsg{subject},
'part1txt' => $smtpmsg{body},
'part2type' => 'image/jpeg',
'smtpport' => $sp,
@@ -8631,13 +8734,13 @@ sub SSCam_prepareSendData {
my($subj,$body) = split(",", $mt, 2);
my($subjk,$subjt) = split("=>", $subj);
my($bodyk,$bodyt) = split("=>", $body);
- $subjk = SSCam_trim($subjk);
- $subjt = SSCam_trim($subjt);
+ $subjk = trim($subjk);
+ $subjt = 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);
+ $bodyk = trim($bodyk);
+ $bodyt = trim($bodyt);
$bodyt =~ s/\$CAM/$calias/g;
$bodyt =~ s/\$DATE/$date/g;
$bodyt =~ s/\$TIME/$time/g;
@@ -8645,7 +8748,7 @@ sub SSCam_prepareSendData {
$smtpmsg{$subjk} = "$subjt";
$smtpmsg{$bodyk} = "$bodyt";
- $ret = SSCam_sendEmail($hash, {'subject' => $smtpmsg{subject},
+ $ret = sendEmail($hash, {'subject' => $smtpmsg{subject},
'part1txt' => $smtpmsg{body},
'part2type' => 'video/mpeg',
'smtpport' => $sp,
@@ -8675,24 +8778,24 @@ sub SSCam_prepareSendData {
my($peerk,$peert) = split("=>", $peers) if($peers);
my($subjk,$subjt) = split("=>", $subj) if($subj);
- $tbotk = SSCam_trim($tbotk) if($tbotk);
- $tbott = SSCam_trim($tbott) if($tbott);
- $peerk = SSCam_trim($peerk) if($peerk);
- $peert = SSCam_trim($peert) if($peert);
- $subjk = SSCam_trim($subjk) if($subjk);
+ $tbotk = trim($tbotk) if($tbotk);
+ $tbott = trim($tbott) if($tbott);
+ $peerk = trim($peerk) if($peerk);
+ $peert = trim($peert) if($peert);
+ $subjk = trim($subjk) if($subjk);
if($subjt) {
- $subjt = SSCam_trim($subjt);
+ $subjt = trim($subjt);
$subjt =~ s/\$CAM/$calias/g;
$subjt =~ s/\$DATE/$date/g;
$subjt =~ s/\$TIME/$time/g;
}
my %telemsg = ();
- $telemsg{$tbotk} = "$tbott" if($tbott);
- $telemsg{$peerk} = "$peert" if($peert);
+ $telemsg{$tbotk} = "$tbott" if($tbott);
+ $telemsg{$peerk} = "$peert" if($peert);
$telemsg{$subjk} = "$subjt" if($subjt);
- $ret = SSCam_sendTelegram($hash, {'subject' => $telemsg{subject},
+ $ret = sendTelegram($hash, {'subject' => $telemsg{subject},
'part2type' => 'image/jpeg',
'sdat' => $dat,
'opmode' => $OpMode,
@@ -8720,25 +8823,25 @@ sub SSCam_prepareSendData {
my($peerk,$peert) = split("=>", $peers) if($peers);
my($subjk,$subjt) = split("=>", $subj) if($subj);
- $tbotk = SSCam_trim($tbotk) if($tbotk);
- $tbott = SSCam_trim($tbott) if($tbott);
- $peerk = SSCam_trim($peerk) if($peerk);
- $peert = SSCam_trim($peert) if($peert);
- $subjk = SSCam_trim($subjk) if($subjk);
+ $tbotk = trim($tbotk) if($tbotk);
+ $tbott = trim($tbott) if($tbott);
+ $peerk = trim($peerk) if($peerk);
+ $peert = trim($peert) if($peert);
+ $subjk = trim($subjk) if($subjk);
if($subjt) {
- $subjt = SSCam_trim($subjt);
+ $subjt = trim($subjt);
$subjt =~ s/\$CAM/$calias/g;
$subjt =~ s/\$DATE/$date/g;
$subjt =~ s/\$TIME/$time/g;
}
my %telemsg = ();
- $telemsg{$tbotk} = "$tbott" if($tbott);
- $telemsg{$peerk} = "$peert" if($peert);
+ $telemsg{$tbotk} = "$tbott" if($tbott);
+ $telemsg{$peerk} = "$peert" if($peert);
$telemsg{$subjk} = "$subjt" if($subjt);
$vdat = $dat;
- $ret = SSCam_sendTelegram($hash, {'subject' => $telemsg{subject},
+ $ret = sendTelegram($hash, {'subject' => $telemsg{subject},
'vdat' => $vdat,
'opmode' => $OpMode,
'telebot' => $telemsg{$tbotk},
@@ -8765,24 +8868,24 @@ sub SSCam_prepareSendData {
my($peerk,$peert) = split("=>", $peers) if($peers);
my($subjk,$subjt) = split("=>", $subj) if($subj);
- $cbotk = SSCam_trim($cbotk) if($cbotk);
- $cbott = SSCam_trim($cbott) if($cbott);
- $peerk = SSCam_trim($peerk) if($peerk);
- $peert = SSCam_trim($peert) if($peert);
- $subjk = SSCam_trim($subjk) if($subjk);
+ $cbotk = trim($cbotk) if($cbotk);
+ $cbott = trim($cbott) if($cbott);
+ $peerk = trim($peerk) if($peerk);
+ $peert = trim($peert) if($peert);
+ $subjk = trim($subjk) if($subjk);
if($subjt) {
- $subjt = SSCam_trim($subjt);
+ $subjt = trim($subjt);
$subjt =~ s/\$CAM/$calias/g;
$subjt =~ s/\$DATE/$date/g;
$subjt =~ s/\$TIME/$time/g;
}
my %chatmsg = ();
- $chatmsg{$cbotk} = "$cbott" if($cbott);
- $chatmsg{$peerk} = "$peert" if($peert);
+ $chatmsg{$cbotk} = "$cbott" if($cbott);
+ $chatmsg{$peerk} = "$peert" if($peert);
$chatmsg{$subjk} = "$subjt" if($subjt);
- $ret = SSCam_sendChat($hash, {'subject' => $chatmsg{subject},
+ $ret = sendChat($hash, {'subject' => $chatmsg{subject},
'opmode' => $OpMode,
'tac' => $tac,
'sdat' => $dat,
@@ -8808,24 +8911,24 @@ sub SSCam_prepareSendData {
my($peerk,$peert) = split("=>", $peers) if($peers);
my($subjk,$subjt) = split("=>", $subj) if($subj);
- $cbotk = SSCam_trim($cbotk) if($cbotk);
- $cbott = SSCam_trim($cbott) if($cbott);
- $peerk = SSCam_trim($peerk) if($peerk);
- $peert = SSCam_trim($peert) if($peert);
- $subjk = SSCam_trim($subjk) if($subjk);
+ $cbotk = trim($cbotk) if($cbotk);
+ $cbott = trim($cbott) if($cbott);
+ $peerk = trim($peerk) if($peerk);
+ $peert = trim($peert) if($peert);
+ $subjk = trim($subjk) if($subjk);
if($subjt) {
- $subjt = SSCam_trim($subjt);
+ $subjt = trim($subjt);
$subjt =~ s/\$CAM/$calias/g;
$subjt =~ s/\$DATE/$date/g;
$subjt =~ s/\$TIME/$time/g;
}
my %chatmsg = ();
- $chatmsg{$cbotk} = "$cbott" if($cbott);
- $chatmsg{$peerk} = "$peert" if($peert);
+ $chatmsg{$cbotk} = "$cbott" if($cbott);
+ $chatmsg{$peerk} = "$peert" if($peert);
$chatmsg{$subjk} = "$subjt" if($subjt);
- $ret = SSCam_sendChat($hash, {'subject' => $chatmsg{subject},
+ $ret = sendChat($hash, {'subject' => $chatmsg{subject},
'opmode' => $OpMode,
'tac' => $tac,
'vdat' => $dat,
@@ -8836,7 +8939,7 @@ sub SSCam_prepareSendData {
readingsSingleUpdate($hash, "sendChatState", $ret, 1) if ($ret);
}
- SSCam_closeTrans($hash) if($hash->{HELPER}{TRANSACTION} eq "multiple_snapsend"); # Transaction Sammelversand (SVS) schließen, Daten bereinigen
+ closeTrans($hash) if($hash->{HELPER}{TRANSACTION} eq "multiple_snapsend"); # Transaction Sammelversand (SVS) schließen, Daten bereinigen
return;
}
@@ -8844,7 +8947,7 @@ return;
#############################################################################################
# Synology Chat-Versand
#############################################################################################
-sub SSCam_sendChat {
+sub sendChat {
my ($hash, $extparamref) = @_;
my $name = $hash->{NAME};
my $type = AttrVal($name,"cacheType","internal");
@@ -8855,7 +8958,7 @@ sub SSCam_sendChat {
Log3($name, 4, "$name - ### start send snapshot by SSChatBot ");
Log3($name, 4, "$name - ####################################################");
- my %SSCam_chatparams = (
+ my %chatparams = (
'subject' => { 'default'=>'', 'required'=>1, 'set'=>1},
'opmode' => { 'default'=>'', 'required'=>1, 'set'=>1}, # OpMode muss gesetzt sein
'tac' => { 'default'=>'', 'required'=>0, 'set'=>1}, # übermittelter Transaktionscode der ausgewerteten Transaktion
@@ -8868,13 +8971,13 @@ sub SSCam_sendChat {
my $tac = $extparamref->{tac};
- foreach my $key (keys %SSCam_chatparams) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $SSCam_chatparams{$key}->{attr}, $SSCam_chatparams{$key}->{default})
- if(exists $SSCam_chatparams{$key}->{attr});
- if($SSCam_chatparams{$key}->{set}) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $SSCam_chatparams{$key}->{default} if (!$extparamref->{$key} && !$SSCam_chatparams{$key}->{attr});
+ foreach my $key (keys %chatparams) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $chatparams{$key}->{attr}, $chatparams{$key}->{default})
+ if(exists $chatparams{$key}->{attr});
+ if($chatparams{$key}->{set}) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $chatparams{$key}->{default} if (!$extparamref->{$key} && !$chatparams{$key}->{attr});
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = delete $extparamref->{$key} if(exists $extparamref->{$key});
- }
+ }
no warnings 'uninitialized';
Log3($name, 4, "$name - param $key is now \"".$data{SSCam}{$name}{PARAMS}{$tac}{$key}."\" ") if($key !~ /[sv]dat/);
Log3($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/ && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne '');
@@ -8884,8 +8987,8 @@ sub SSCam_sendChat {
$data{SSCam}{$name}{PARAMS}{$tac}{name} = $name;
my @err = ();
- foreach my $key (keys(%SSCam_chatparams)) {
- push(@err, $key) if ($SSCam_chatparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
+ foreach my $key (keys(%chatparams)) {
+ push(@err, $key) if ($chatparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
}
if ($#err >= 0) {
$ret = "Missing at least one required parameter or attribute: ".join(', ',@err);
@@ -8935,7 +9038,7 @@ sub SSCam_sendChat {
no strict "refs";
my ($subject,$fileUrl,$uid,$fname,@as,%seen,@unique);
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
Log3($name, 1, "$name - Fall back to internal Cache due to preceding failure.") if(!$cache);
if(!$cache || $cache eq "internal" ) {
@@ -8947,7 +9050,7 @@ sub SSCam_sendChat {
$mtype = $hash->{CAMNAME};
}
foreach my $key (@as) {
- ($subject,$fname) = SSCam_extractForChat($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
+ ($subject,$fname) = extractForChat($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
# User aufsplitten und zu jedem die ID ermitteln
my @ua = split(",", $peers);
@@ -8985,7 +9088,7 @@ sub SSCam_sendChat {
# alle Serial Numbers "{$sn}" der Transaktion ermitteln
if($data{SSCam}{$name}{PARAMS}{$tac}{sdat}) { # Images liegen in einem Hash (Ref in $sdat) base64-codiert vor
# Muster: {SENDSNAPS}{2222}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDSNAPS\}\{.*\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDSNAPS\}\{(\d+)\}\{(\d+)\}\{.*\}/$2/;
next if $1 != $tac;
@@ -8996,7 +9099,7 @@ sub SSCam_sendChat {
} elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
# Muster: {SENDRECS}{305}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/$2/;
next if $1 != $tac;
@@ -9007,7 +9110,7 @@ sub SSCam_sendChat {
}
foreach my $key (@unique) {
- ($subject,$fname) = SSCam_extractForChat($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
+ ($subject,$fname) = extractForChat($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
# User aufsplitten und zu jedem die ID ermitteln
my @ua = split(/,/, $peers);
@@ -9046,7 +9149,7 @@ sub SSCam_sendChat {
SSChatBot_getapisites($chatbot); # Übertragung Sendqueue starten
use strict "refs";
- undef %SSCam_chatparams;
+ undef %chatparams;
undef %{$extparamref};
return;
@@ -9055,7 +9158,7 @@ return;
####################################################################################################
# Daten extrahieren für SSChatBot Versand
####################################################################################################
-sub SSCam_extractForChat {
+sub extractForChat {
my ($name,$key,$paref) = @_;
my $hash = $defs{$name};
my $subject = $paref->{subject};
@@ -9064,26 +9167,26 @@ sub SSCam_extractForChat {
my ($fname,$tdir,$ct,$cache);
if($sdat) {
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{sdat}{$key}{createdTm};
- $fname = SSCam_trim(delete $paref->{sdat}{$key}{fileName});
+ $fname = trim(delete $paref->{sdat}{$key}{fileName});
} else {
- $ct = SSCam_cache($name, "c_read", "$sdat"."{$key}{createdTm}");
- $fname = SSCam_trim( SSCam_cache($name, "c_read", "$sdat"."{$key}{fileName}") );
+ $ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}");
+ $fname = trim( cache($name, "c_read", "$sdat"."{$key}{fileName}") );
}
}
if($vdat) {
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{vdat}{$key}{createdTm};
- $fname = SSCam_trim(delete $paref->{vdat}{$key}{fileName});
- $tdir = SSCam_trim(delete $paref->{vdat}{$key}{tdir});
+ $fname = trim(delete $paref->{vdat}{$key}{fileName});
+ $tdir = trim(delete $paref->{vdat}{$key}{tdir});
} else {
- $ct = SSCam_cache($name, "c_read", "$vdat"."{$key}{createdTm}");
- $fname = SSCam_trim( SSCam_cache($name, "c_read", "$vdat"."{$key}{fileName}") );
- $tdir = SSCam_trim( SSCam_cache($name, "c_read", "$vdat"."{$key}{tdir}") );
+ $ct = cache($name, "c_read", "$vdat"."{$key}{createdTm}");
+ $fname = trim( cache($name, "c_read", "$vdat"."{$key}{fileName}") );
+ $tdir = trim( cache($name, "c_read", "$vdat"."{$key}{tdir}") );
}
$fname = $tdir."/".$fname;
}
@@ -9097,7 +9200,7 @@ return ($subject,$fname);
#############################################################################################
# Telegram-Versand
#############################################################################################
-sub SSCam_sendTelegram {
+sub sendTelegram {
my ($hash, $extparamref) = @_;
my $name = $hash->{NAME};
my $type = AttrVal($name,"cacheType","internal");
@@ -9107,7 +9210,7 @@ sub SSCam_sendTelegram {
Log3($name, 4, "$name - ### start send snapshot by TelegramBot ");
Log3($name, 4, "$name - ####################################################");
- my %SSCam_teleparams = (
+ my %teleparams = (
'subject' => { 'default'=>'', 'required'=>0, 'set'=>1},
'part1type' => { 'default'=>'text/plain; charset=UTF-8', 'required'=>1, 'set'=>1},
'part1txt' => { 'default'=>'', 'required'=>0, 'set'=>1},
@@ -9126,13 +9229,13 @@ sub SSCam_sendTelegram {
my $tac = $extparamref->{tac};
- foreach my $key (keys %SSCam_teleparams) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $SSCam_teleparams{$key}->{attr}, $SSCam_teleparams{$key}->{default})
- if(exists $SSCam_teleparams{$key}->{attr});
- if($SSCam_teleparams{$key}->{set}) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $SSCam_teleparams{$key}->{default} if (!$extparamref->{$key} && !$SSCam_teleparams{$key}->{attr});
+ foreach my $key (keys %teleparams) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $teleparams{$key}->{attr}, $teleparams{$key}->{default})
+ if(exists $teleparams{$key}->{attr});
+ if($teleparams{$key}->{set}) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $teleparams{$key}->{default} if (!$extparamref->{$key} && !$teleparams{$key}->{attr});
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = delete $extparamref->{$key} if(exists $extparamref->{$key});
- }
+ }
no warnings 'uninitialized';
Log3($name, 4, "$name - param $key is now \"".$data{SSCam}{$name}{PARAMS}{$tac}{$key}."\" ") if($key !~ /[sv]dat/);
Log3($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/ && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne '');
@@ -9142,8 +9245,8 @@ sub SSCam_sendTelegram {
$data{SSCam}{$name}{PARAMS}{$tac}{name} = $name;
my @err = ();
- foreach my $key (keys(%SSCam_teleparams)) {
- push(@err, $key) if ($SSCam_teleparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
+ foreach my $key (keys(%teleparams)) {
+ push(@err, $key) if ($teleparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
}
if ($#err >= 0) {
$ret = "Missing at least one required parameter or attribute: ".join(', ',@err);
@@ -9188,7 +9291,7 @@ sub SSCam_sendTelegram {
no strict "refs";
my ($msg,$subject,$MediaStream,$fname,@as,%seen,@unique);
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
Log3($name, 1, "$name - Fall back to internal Cache due to preceding failure.") if(!$cache);
if(!$cache || $cache eq "internal" ) {
@@ -9198,8 +9301,8 @@ sub SSCam_sendTelegram {
@as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{vdat}};
}
foreach my $key (@as) {
- ($msg,$subject,$MediaStream,$fname) = SSCam_extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
- $ret = SSCam_TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, "");
+ ($msg,$subject,$MediaStream,$fname) = extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
+ $ret = TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, "");
if($ret) {
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 2, "$name - ERROR: $ret");
@@ -9216,7 +9319,7 @@ sub SSCam_sendTelegram {
# alle Serial Numbers "{$sn}" der Transaktion ermitteln
if($data{SSCam}{$name}{PARAMS}{$tac}{sdat}) { # Images liegen in einem Hash (Ref in $sdat) base64-codiert vor
# Muster: {SENDSNAPS}{2222}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDSNAPS\}\{.*\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDSNAPS\}\{(\d+)\}\{(\d+)\}\{.*\}/$2/;
next if $1 != $tac;
@@ -9226,7 +9329,7 @@ sub SSCam_sendTelegram {
} elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
# Muster: {SENDRECS}{305}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/$2/;
next if $1 != $tac;
@@ -9236,8 +9339,8 @@ sub SSCam_sendTelegram {
}
foreach my $key (@unique) {
- ($msg,$subject,$MediaStream,$fname) = SSCam_extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
- $ret = SSCam_TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, "");
+ ($msg,$subject,$MediaStream,$fname) = extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
+ $ret = TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, "");
if($ret) {
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 2, "$name - ERROR: $ret");
@@ -9252,7 +9355,7 @@ sub SSCam_sendTelegram {
}
use strict "refs";
- undef %SSCam_teleparams;
+ undef %teleparams;
undef %{$extparamref};
undef $msg;
@@ -9262,7 +9365,7 @@ return;
####################################################################################################
# Bilddaten extrahieren für Telegram Versand
####################################################################################################
-sub SSCam_extractForTelegram {
+sub extractForTelegram {
my ($name,$key,$paref) = @_;
my $hash = $defs{$name};
my $subject = $paref->{subject};
@@ -9272,35 +9375,35 @@ sub SSCam_extractForTelegram {
my ($data,$fname,$ct,$img,$cache);
if($sdat) {
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{sdat}{$key}{createdTm};
$img = delete $paref->{sdat}{$key}{imageData};
- $fname = SSCam_trim(delete $paref->{sdat}{$key}{fileName});
+ $fname = trim(delete $paref->{sdat}{$key}{fileName});
$data = MIME::Base64::decode_base64($img);
Log3($name, 4, "$name - Image data sequence [$key] decoded from internal Cache for TelegramBot prepare");
undef $img;
} else {
- $ct = SSCam_cache($name, "c_read", "$sdat"."{$key}{createdTm}");
- $img = SSCam_cache($name, "c_read", "$sdat"."{$key}{imageData}");
- $fname = SSCam_trim( SSCam_cache($name, "c_read", "$sdat"."{$key}{fileName}") );
+ $ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}");
+ $img = cache($name, "c_read", "$sdat"."{$key}{imageData}");
+ $fname = trim( cache($name, "c_read", "$sdat"."{$key}{fileName}") );
$data = MIME::Base64::decode_base64($img);
Log3($name, 4, "$name - Image data sequence [$key] decoded from CHI-Cache for TelegramBot prepare");
}
}
if($vdat) {
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{vdat}{$key}{createdTm};
$data = delete $paref->{vdat}{$key}{imageData};
- $fname = SSCam_trim(delete $paref->{vdat}{$key}{fileName});
+ $fname = trim(delete $paref->{vdat}{$key}{fileName});
Log3($name, 4, "$name - Video data sequence [$key] got from internal Cache for TelegramBot prepare");
} else {
- $ct = SSCam_cache($name, "c_read", "$vdat"."{$key}{createdTm}");
- $data = SSCam_cache($name, "c_read", "$vdat"."{$key}{imageData}");
- $fname = SSCam_trim( SSCam_cache($name, "c_read", "$vdat"."{$key}{fileName}") );
+ $ct = cache($name, "c_read", "$vdat"."{$key}{createdTm}");
+ $data = cache($name, "c_read", "$vdat"."{$key}{imageData}");
+ $fname = trim( cache($name, "c_read", "$vdat"."{$key}{fileName}") );
Log3($name, 4, "$name - Video data sequence [$key] got from CHI-Cache for TelegramBot prepare");
}
}
@@ -9317,20 +9420,20 @@ return ($data,$subject,$MediaStream,$fname);
# $hash = Hash des verwendeten TelegramBot-Devices !
# $isMedia = -1 wenn Foto, -30 wenn Aufnahme
####################################################################################################
-sub SSCam_TBotSendIt {
+sub TBotSendIt {
my ($hash, $camname, $fname, @args) = @_;
my ($peers, $msg, $addPar, $isMedia, $replyid, $options, $retryCount) = @args;
my $name = $hash->{NAME};
- my $SSCam_TBotHeader = "agent: TelegramBot/1.0\r\nUser-Agent: TelegramBot/1.0\r\nAccept: application/json\r\nAccept-Charset: utf-8";
- my $SSCam_TBotArgRetrycnt = 6;
+ my $TBotHeader = "agent: TelegramBot/1.0\r\nUser-Agent: TelegramBot/1.0\r\nAccept: application/json\r\nAccept-Charset: utf-8";
+ my $TBotArgRetrycnt = 6;
$retryCount = 0 if (!defined($retryCount));
$options = "" if (!defined($options));
# increase retrycount for next try
- $args[$SSCam_TBotArgRetrycnt] = $retryCount+1;
+ $args[$TBotArgRetrycnt] = $retryCount+1;
- Log3($camname, 5, "$camname - SSCam_TBotSendIt: called ");
+ Log3($camname, 5, "$camname - TBotSendIt: called ");
# ignore all sends if disabled
return if (AttrVal($name,"disable",0));
@@ -9340,7 +9443,7 @@ sub SSCam_TBotSendIt {
if ((defined( $hash->{sentMsgResult})) && ($hash->{sentMsgResult} =~ /^WAITING/) && ($retryCount == 0) ){
# add to queue
- Log3($camname, 4, "$camname - SSCam_TBotSendIt: add send to queue :$peers: -:".
+ Log3($camname, 4, "$camname - TBotSendIt: add send to queue :$peers: -:".
TelegramBot_MsgForLog($msg, ($isMedia<0)).": - :".(defined($addPar)?$addPar:"").":");
push(@{$hash->{sentQueue}}, \@args);
return;
@@ -9359,10 +9462,10 @@ sub SSCam_TBotSendIt {
# remove msgid from options and also replyid reset
my $sepoptions = $options;
$sepoptions =~ s/-msgid-//;
- SSCam_TBotSendIt($hash,$camname,$fname,$peers,$msg,$addPar,$isMedia,undef,$sepoptions);
+ TBotSendIt($hash,$camname,$fname,$peers,$msg,$addPar,$isMedia,undef,$sepoptions);
}
- Log3($camname, 5, "$camname - SSCam_TBotSendIt: try to send message to :$peer: -:".
+ Log3($camname, 5, "$camname - TBotSendIt: try to send message to :$peer: -:".
TelegramBot_MsgForLog($msg, ($isMedia<0) ).": - add :".(defined($addPar)?$addPar:"").
": - replyid :".(defined($replyid)?$replyid:"").
":".": options :".$options.":");
@@ -9382,7 +9485,7 @@ sub SSCam_TBotSendIt {
# init param hash
$hash->{HU_DO_PARAMS}->{hash} = $hash;
- $hash->{HU_DO_PARAMS}->{header} = $SSCam_TBotHeader;
+ $hash->{HU_DO_PARAMS}->{header} = $TBotHeader;
delete $hash->{HU_DO_PARAMS}{args};
delete $hash->{HU_DO_PARAMS}{boundary};
delete $hash->{HU_DO_PARAMS}{data};
@@ -9394,7 +9497,7 @@ sub SSCam_TBotSendIt {
# Start Versand
if (!defined($ret)) {
# add chat / user id (no file) --> this will also do init
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "chat_id", undef, $peer2, 0 ) if ( $peer );
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "chat_id", undef, $peer2, 0 ) if ( $peer );
if (abs($isMedia) == 1) {
# Foto send
@@ -9406,14 +9509,14 @@ sub SSCam_TBotSendIt {
$addPar =~ s/(?{HU_DO_PARAMS}, "caption", undef, $addPar, 0 ) if (!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "caption", undef, $addPar, 0 ) if (!defined($ret));
$addPar = undef;
}
# add msg or file or stream
- Log3($camname, 4, "$camname - SSCam_TBotSendIt: Filename for image file :".
+ Log3($camname, 4, "$camname - TBotSendIt: Filename for image file :".
TelegramBot_MsgForLog($msg, ($isMedia<0) ).":");
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "photo", undef, $msg, $isMedia) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "photo", undef, $msg, $isMedia) if(!defined($ret));
} elsif ( abs($isMedia) == 30 ) {
# Video send
@@ -9425,13 +9528,13 @@ sub SSCam_TBotSendIt {
$addPar =~ s/(?{HU_DO_PARAMS}, "caption", undef, $addPar, 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "caption", undef, $addPar, 0) if(!defined($ret));
$addPar = undef;
}
# add msg or file or stream
- Log3($camname, 4, "$camname - SSCam_TBotSendIt: Filename for image file :".$fname.":");
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "video", undef, $msg, $isMedia) if(!defined($ret));
+ Log3($camname, 4, "$camname - TBotSendIt: Filename for image file :".$fname.":");
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "video", undef, $msg, $isMedia) if(!defined($ret));
} else {
# nur Message senden
@@ -9460,7 +9563,7 @@ sub SSCam_TBotSendIt {
$parseMode = 0;
}
- Log3($camname, 4, "$camname - SSCam_TBotSendIt: parseMode $parseMode");
+ Log3($camname, 4, "$camname - TBotSendIt: parseMode $parseMode");
if (length($msg) > 1000) {
$hash->{sentMsgText} = substr($msg, 0, 1000)."...";
@@ -9472,37 +9575,37 @@ sub SSCam_TBotSendIt {
$msg =~ s/(?{HU_DO_PARAMS}, "text", undef, $msg, 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "text", undef, $msg, 0) if(!defined($ret));
# add parseMode
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "parse_mode", undef, $parseMode, 0) if((!defined($ret)) && ($parseMode));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "parse_mode", undef, $parseMode, 0) if((!defined($ret)) && ($parseMode));
# add disable_web_page_preview
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "disable_web_page_preview", undef, \1, 0)
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "disable_web_page_preview", undef, \1, 0)
if ((!defined($ret))&&(!AttrVal($name,'webPagePreview',1)));
}
if (defined($replyid)) {
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_to_message_id", undef, $replyid, 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_to_message_id", undef, $replyid, 0) if(!defined($ret));
}
if (defined($addPar)) {
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_markup", undef, $addPar, 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_markup", undef, $addPar, 0) if(!defined($ret));
} elsif ($options =~ /-force_reply-/) {
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_markup", undef, "{\"force_reply\":true}", 0 ) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "reply_markup", undef, "{\"force_reply\":true}", 0 ) if(!defined($ret));
}
if ($options =~ /-silent-/) {
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "disable_notification", undef, "true", 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, "disable_notification", undef, "true", 0) if(!defined($ret));
}
# finalize multipart
- $ret = SSCam_TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, undef, undef, undef, 0) if(!defined($ret));
+ $ret = TBotAddMultipart($hash, $fname, $hash->{HU_DO_PARAMS}, undef, undef, undef, 0) if(!defined($ret));
}
if (defined($ret)) {
- Log3($camname, 3, "$camname - SSCam_TBotSendIt: Failed with :$ret:");
+ Log3($camname, 3, "$camname - TBotSendIt: Failed with :$ret:");
TelegramBot_Callback($hash->{HU_DO_PARAMS}, $ret, "");
} else {
@@ -9510,11 +9613,11 @@ sub SSCam_TBotSendIt {
# if utf8 is set on string this will lead to length wrongly calculated in HTTPUtils (char instead of bytes) for some installations
if ((AttrVal($name,'utf8Special',0)) && (utf8::is_utf8($hash->{HU_DO_PARAMS}->{data}))) {
- Log3 $camname, 4, "$camname - SSCam_TBotSendIt: utf8 encoding for data in message ";
+ Log3 $camname, 4, "$camname - TBotSendIt: utf8 encoding for data in message ";
utf8::downgrade($hash->{HU_DO_PARAMS}->{data});
}
- Log3($camname, 4, "$camname - SSCam_TBotSendIt: timeout for sent :".$hash->{HU_DO_PARAMS}->{timeout}.": ");
+ Log3($camname, 4, "$camname - TBotSendIt: timeout for sent :".$hash->{HU_DO_PARAMS}->{timeout}.": ");
HttpUtils_NonblockingGet($hash->{HU_DO_PARAMS});
}
@@ -9537,7 +9640,7 @@ return $ret;
#
# returns string in case of error or undef
####################################################################################################
-sub SSCam_TBotAddMultipart {
+sub TBotAddMultipart {
my ($hash, $fname, $params, $parname, $parheader, $parcontent, $isMedia ) = @_;
my $name = $hash->{NAME};
@@ -9578,7 +9681,7 @@ sub SSCam_TBotAddMultipart {
}
} elsif ($isMedia < 0) {
- my ($im, $ext) = SSCam_TBotIdentifyStream($hash, $parcontent);
+ my ($im, $ext) = TBotIdentifyStream($hash, $parcontent);
$fname =~ s/.mp4$/.$ext/;
$parheader = "Content-Disposition: form-data; name=\"".$parname."\"; filename=\"".$fname."\"\r\n".$parheader."\r\n";
$finalcontent = $parcontent;
@@ -9603,7 +9706,7 @@ return;
# Adaption der Sub "IdentifyStream" aus TelegramBot
# $hash = Hash des verwendeten TelegramBot-Devices !
####################################################################################################
-sub SSCam_TBotIdentifyStream {
+sub TBotIdentifyStream {
my ($hash, $msg) = @_;
# signatures for media files are documented here --> https://en.wikipedia.org/wiki/List_of_file_signatures
@@ -9619,7 +9722,7 @@ return (0,undef);
#############################################################################################
# SMTP EMail-Versand
#############################################################################################
-sub SSCam_sendEmail {
+sub sendEmail {
my ($hash, $extparamref) = @_;
my $name = $hash->{NAME};
my $timeout = 60;
@@ -9637,7 +9740,7 @@ sub SSCam_sendEmail {
my ($vm1,$vm2,$vm3);
eval { require Net::SMTP;
Net::SMTP->import;
- $vm1 = $Net::SMTP::VERSION;
+ $vm1 = $Net::SMTP::VERSION;
# Version von Net::SMTP prüfen, wenn < 3.00 dann Net::SMTP::SSL verwenden
# (libnet-3.06 hat SSL inkludiert)
@@ -9650,9 +9753,9 @@ sub SSCam_sendEmail {
$sslfb = 1;
}
- require MIME::Lite;
- MIME::Lite->import;
- $vm2 = $MIME::Lite::VERSION;
+ require MIME::Lite;
+ MIME::Lite->import;
+ $vm2 = $MIME::Lite::VERSION;
};
if(!$vm1 || !$vm2 || ($sslfb && !$vm3)) {
@@ -9673,7 +9776,7 @@ sub SSCam_sendEmail {
Log3($name, 4, "$name - version of \"$m1\" is too old. Use SSL-fallback module \"$m3\" with version \"$vm3\"") if($sslfb && $vm3);
Log3($name, 4, "$name - version of loaded module \"$m2\" is \"$vm2\"");
- my %SSCam_mailparams = (
+ my %mailparams = (
'smtpFrom' => {'attr'=>'smtpFrom', 'default'=>'', 'required'=>1, 'set'=>1},
'smtpTo' => {'attr'=>'smtpTo', 'default'=>'', 'required'=>1, 'set'=>1},
'subject' => {'attr'=>'subject', 'default'=>'', 'required'=>1, 'set'=>1},
@@ -9684,8 +9787,8 @@ sub SSCam_sendEmail {
'smtphost' => {'attr'=>'smtpHost', 'default'=>'', 'required'=>1, 'set'=>0},
'smtpport' => {'attr'=>'smtpPort', 'default'=>'25', 'required'=>1, 'set'=>0},
'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},
+ 'smtpnousessl' => {'attr'=>'smtpNoUseSSL','default'=>'0', 'required'=>0, 'set'=>1},
+ 'smtpdebug' => {'attr'=>'smtpDebug', 'default'=>'0', 'required'=>0, 'set'=>0},
'sdat' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Hashref der Bilddaten (Bilddaten base64 codiert), wenn gesetzt muss 'part2type' auf 'image/jpeg' gesetzt sein
'image' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Daten als File, wenn gesetzt muss 'part2type' auf 'image/jpeg' gesetzt sein
'fname' => { 'default'=>'image.jpg', 'required'=>0, 'set'=>1}, # Filename für "image"
@@ -9699,11 +9802,11 @@ sub SSCam_sendEmail {
my $tac = $extparamref->{tac};
- foreach my $key (keys %SSCam_mailparams) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $SSCam_mailparams{$key}->{attr}, $SSCam_mailparams{$key}->{default})
- if(exists $SSCam_mailparams{$key}->{attr});
- if($SSCam_mailparams{$key}->{set}) {
- $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $SSCam_mailparams{$key}->{default} if (!$extparamref->{$key} && !$SSCam_mailparams{$key}->{attr});
+ foreach my $key (keys %mailparams) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $mailparams{$key}->{attr}, $mailparams{$key}->{default})
+ if(exists $mailparams{$key}->{attr});
+ if($mailparams{$key}->{set}) {
+ $data{SSCam}{$name}{PARAMS}{$tac}{$key} = $mailparams{$key}->{default} if (!$extparamref->{$key} && !$mailparams{$key}->{attr});
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = delete $extparamref->{$key} if (exists $extparamref->{$key});
}
Log3($name, 4, "$name - param $key is now \"".$data{SSCam}{$name}{PARAMS}{$tac}{$key}."\" ") if($key !~ /sdat/);
@@ -9713,8 +9816,8 @@ sub SSCam_sendEmail {
$data{SSCam}{$name}{PARAMS}{$tac}{name} = $name;
my @err = ();
- foreach my $key (keys(%SSCam_mailparams)) {
- push(@err, $key) if ($SSCam_mailparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
+ foreach my $key (keys(%mailparams)) {
+ push(@err, $key) if ($mailparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
}
if ($#err >= 0) {
$ret = "Missing at least one required parameter or attribute: ".join(', ',@err);
@@ -9725,10 +9828,10 @@ sub SSCam_sendEmail {
return $ret;
}
- $hash->{HELPER}{RUNNING_PID} = BlockingCall("SSCam_sendEmailblocking", $data{SSCam}{$name}{PARAMS}{$tac}, "SSCam_sendEmaildone", $timeout, "SSCam_sendEmailto", $hash);
+ $hash->{HELPER}{RUNNING_PID} = BlockingCall("FHEM::SSCam::sendEmailblocking", $data{SSCam}{$name}{PARAMS}{$tac}, "FHEM::SSCam::sendEmaildone", $timeout, "FHEM::SSCam::sendEmailto", $hash);
$hash->{HELPER}{RUNNING_PID}{loglevel} = 5 if($hash->{HELPER}{RUNNING_PID}); # Forum #77057
- undef %SSCam_mailparams;
+ undef %mailparams;
undef %$extparamref;
return;
@@ -9737,8 +9840,8 @@ return;
####################################################################################################
# nichtblockierendes Send EMail
####################################################################################################
-sub SSCam_sendEmailblocking {
- my ($paref) = @_; # der Referent wird in SSCam_cleanData gelöscht
+sub sendEmailblocking {
+ my ($paref) = @_; # der Referent wird in cleanData gelöscht
my $name = delete $paref->{name};
my $cc = delete $paref->{smtpCc};
my $from = delete $paref->{smtpFrom};
@@ -9768,21 +9871,21 @@ sub SSCam_sendEmailblocking {
my ($err,$smtp,@as,$cache);
# Credentials abrufen
- my ($success, $username, $password) = SSCam_getcredentials($hash,0,"smtp");
+ my ($success, $username, $password) = getCredentials($hash,0,"smtp");
unless ($success) {
$err = "SMTP credentials couldn't be retrieved successfully - make sure you've set it with \"set $name smtpcredentials \"";
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
$subject = decode_utf8($subject);
my $mailmsg = MIME::Lite->new(
From => $from,
- To => $to,
- Subject => $subject,
- Type => 'multipart/mixed', #'multipart/mixed', # was 'text/plain'
+ To => $to,
+ Subject => $subject,
+ Type => 'multipart/mixed', #'multipart/mixed', # was 'text/plain'
);
### Add the text message part:
@@ -9807,7 +9910,7 @@ sub SSCam_sendEmailblocking {
if($sdat) {
### Images liegen in einem Hash (Ref in $sdat) base64-codiert vor
my ($ct,$img,$decoded);
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
@as = sort{$a<=>$b}keys%{$sdat};
foreach my $key (@as) {
@@ -9823,12 +9926,12 @@ sub SSCam_sendEmailblocking {
);
Log3($name, 4, "$name - Image data sequence [$key] decoded from internal Cache for Email attachment") if($decoded);
}
- BlockingInformParent("SSCam_subaddFromBlocking", [$name, "-", $tac], 0);
+ BlockingInformParent("subaddFromBlocking", [$name, "-", $tac], 0);
} else {
# alle Serial Numbers "{$sn}" der Transaktion ermitteln
# Muster: {SENDSNAPS|RS}{2222|multiple_snapsend}{0|1572995404.125580}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{(SENDSNAPS|RS)\}\{.*\}\{.*\}\{.*\}/;
$_ =~ s/\{(SENDSNAPS|RS)\}\{(.*)\}\{(\d+|\d+.\d+)\}\{.*\}/$3/;
next if $2 ne $tac;
@@ -9839,10 +9942,10 @@ sub SSCam_sendEmailblocking {
# attach mail
foreach my $key (@unique) {
- next if(!SSCam_cache($name, "c_isvalidkey", "$sdat"."{$key}{imageData}"));
- $ct = SSCam_cache($name, "c_read", "$sdat"."{$key}{createdTm}");
- $img = SSCam_cache($name, "c_read", "$sdat"."{$key}{imageData}");
- $fname = SSCam_cache($name, "c_read", "$sdat"."{$key}{fileName}");
+ next if(!cache($name, "c_isvalidkey", "$sdat"."{$key}{imageData}"));
+ $ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}");
+ $img = cache($name, "c_read", "$sdat"."{$key}{imageData}");
+ $fname = cache($name, "c_read", "$sdat"."{$key}{fileName}");
$decoded = MIME::Base64::decode_base64($img);
$mailmsg->attach(
Type => $part2type,
@@ -9852,14 +9955,14 @@ sub SSCam_sendEmailblocking {
);
Log3($name, 4, "$name - Image data sequence [$key] decoded from CHI-Cache for Email attachment");
}
- BlockingInformParent("SSCam_subaddFromBlocking", [$name, "-", $tac], 0);
+ BlockingInformParent("subaddFromBlocking", [$name, "-", $tac], 0);
}
}
if($vdat) {
### Videodaten (mp4) wurden geliefert
my ($ct,$video);
- $cache = SSCam_cache($name, "c_init"); # Cache initialisieren
+ $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) {
@as = sort{$a<=>$b}keys%{$vdat};
foreach my $key (@as) {
@@ -9874,12 +9977,12 @@ sub SSCam_sendEmailblocking {
);
Log3($name, 4, "$name - Video data sequence [$key] decoded from internal Cache for Email attachment");
}
- BlockingInformParent("SSCam_subaddFromBlocking", [$name, "-", $tac], 0);
+ BlockingInformParent("subaddFromBlocking", [$name, "-", $tac], 0);
} else {
# alle Serial Numbers "{$sn}" der Transaktion ermitteln
# Muster: {SENDRECS}{305}{0}{imageData}
- for(SSCam_cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
+ for(cache($name, "c_getkeys")) { # relevant keys aus allen vorkommenden selektieren
next if $_ !~ /\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/;
$_ =~ s/\{SENDRECS\}\{(\d+)\}\{(\d+)\}\{.*\}/$2/;
next if $1 != $tac;
@@ -9890,10 +9993,10 @@ sub SSCam_sendEmailblocking {
# attach mail
foreach my $key (@unique) {
- next if(!SSCam_cache($name, "c_isvalidkey", "$vdat"."{$key}{imageData}"));
- $ct = SSCam_cache($name, "c_read", "$vdat"."{$key}{createdTm}");
- $video = SSCam_cache($name, "c_read", "$vdat"."{$key}{imageData}");
- $fname = SSCam_cache($name, "c_read", "$vdat"."{$key}{fileName}");
+ next if(!cache($name, "c_isvalidkey", "$vdat"."{$key}{imageData}"));
+ $ct = cache($name, "c_read", "$vdat"."{$key}{createdTm}");
+ $video = cache($name, "c_read", "$vdat"."{$key}{imageData}");
+ $fname = cache($name, "c_read", "$vdat"."{$key}{fileName}");
$mailmsg->attach(
Type => $part2type,
Data => $video,
@@ -9902,7 +10005,7 @@ sub SSCam_sendEmailblocking {
);
Log3($name, 4, "$name - Video data sequence [$key] decoded from CHI-Cache for Email attachment");
}
- BlockingInformParent("SSCam_subaddFromBlocking", [$name, "-", $tac], 0);
+ BlockingInformParent("subaddFromBlocking", [$name, "-", $tac], 0);
}
}
@@ -9958,14 +10061,14 @@ sub SSCam_sendEmailblocking {
unless( $smtp->auth($username, $password) ) {
$err = "SMTP Error authentication: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
unless( $smtp->mail($from) ) {
$err = "SMTP Error setting sender: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
@@ -9973,7 +10076,7 @@ sub SSCam_sendEmailblocking {
unless( $smtp->to(@r) ) {
$err = "SMTP Error setting receiver: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
@@ -9982,7 +10085,7 @@ sub SSCam_sendEmailblocking {
unless( $smtp->cc(@c) ) {
$err = "SMTP Error setting carbon-copy $cc: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
}
@@ -9990,28 +10093,28 @@ sub SSCam_sendEmailblocking {
unless( $smtp->data() ) {
$err = "SMTP Error setting data: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
unless( $smtp->datasend(encode('utf8',$mailmsg->as_string)) ) {
$err = "SMTP Error sending email: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
unless( $smtp->dataend() ) {
$err = "SMTP Error ending transaction: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
unless( $smtp->quit() ) {
$err = "SMTP Error saying good-bye: ".$smtp->message();
Log3($name, 2, "$name - $err");
- $err = encode_base64($err,"");
+ $err = encode_base64($err,"");
return "$name|$err|''";
}
@@ -10029,7 +10132,7 @@ return "$name|''|$ret";
####################################################################################################
# Auswertungsroutine nichtblockierendes Send EMail
####################################################################################################
-sub SSCam_sendEmaildone {
+sub sendEmaildone {
my ($string) = @_;
my @a = split("\\|",$string);
my $hash = $defs{$a[0]};
@@ -10056,7 +10159,7 @@ return;
####################################################################################################
# Abbruchroutine Send EMail
####################################################################################################
-sub SSCam_sendEmailto {
+sub sendEmailto {
my ($hash,$cause) = @_;
my $name = $hash->{NAME};
@@ -10075,7 +10178,7 @@ return;
#############################################################################################
# Token setzen
#############################################################################################
-sub SSCam_setActiveToken {
+sub setActiveToken {
my ($hash) = @_;
my $name = $hash->{NAME};
@@ -10090,7 +10193,7 @@ return;
#############################################################################################
# Token freigeben
#############################################################################################
-sub SSCam_delActiveToken {
+sub delActiveToken {
my ($hash) = @_;
my $name = $hash->{NAME};
@@ -10105,7 +10208,7 @@ return;
#############################################################################################
# Transaktion starten oder vorhandenen TA Code zurück liefern
#############################################################################################
-sub SSCam_openOrgetTrans {
+sub openOrgetTrans {
my ($hash) = @_;
my $name = $hash->{NAME};
my $tac = "";
@@ -10126,13 +10229,13 @@ return $tac;
#############################################################################################
# Transaktion freigeben
#############################################################################################
-sub SSCam_closeTrans {
+sub closeTrans {
my ($hash) = @_;
my $name = $hash->{NAME};
my $tac = delete $hash->{HELPER}{TRANSACTION}; # diese Transaktion beenden
$tac = $tac?$tac:"";
- SSCam_cleanData("$name:$tac"); # %data Hash & Cache bereinigen
+ cleanData("$name:$tac"); # %data Hash & Cache bereinigen
return if(!$tac);
Log3($name, 1, "$name - Transaction \"$tac\" closed") if(AttrVal($name,"debugactivetoken",0));
@@ -10143,16 +10246,16 @@ return;
####################################################################################################
# $data Hash bereinigen
####################################################################################################
-sub SSCam_cleanData {
+sub cleanData {
my ($str) = @_;
my ($name,$tac) = split(":",$str);
my $hash = $defs{$name};
my $del = 0;
- RemoveInternalTimer($hash, "SSCam_cleanData");
+ RemoveInternalTimer($hash, "FHEM::SSCam::cleanData");
if($data{SSCam}{$name}{SENDCOUNT}{$tac} && $data{SSCam}{$name}{SENDCOUNT}{$tac} > 0) { # Cacheinhalt erst löschen wenn Sendezähler 0
- InternalTimer(gettimeofday()+1, "SSCam_cleanData", "$name:$tac", 0);
+ InternalTimer(gettimeofday()+1, "FHEM::SSCam::cleanData", "$name:$tac", 0);
return;
}
@@ -10191,11 +10294,11 @@ sub SSCam_cleanData {
} else {
# Caching mit CHI
- my @as = SSCam_cache($name, "c_getkeys");
+ my @as = cache($name, "c_getkeys");
if($tac) {
foreach my $k (@as) {
if ($k =~ /$tac/) {
- SSCam_cache($name, "c_remove", $k);
+ cache($name, "c_remove", $k);
$del = 1;
}
}
@@ -10204,7 +10307,7 @@ sub SSCam_cleanData {
}
} else {
- SSCam_cache($name, "c_clear");
+ cache($name, "c_clear");
if (AttrVal($name,"debugactivetoken",0)) {
Log3($name, 1, "$name - Data of CHI-Cache removed");
}
@@ -10218,7 +10321,7 @@ return;
# {SENDCOUNT} aus BlockingCall heraus um 1 subtrahieren/addieren
# $tac =
#############################################################################################
-sub SSCam_subaddFromBlocking {
+sub subaddFromBlocking {
my ($name,$op,$tac) = @_;
my $hash = $defs{$name};
@@ -10238,7 +10341,7 @@ return;
#############################################################################################
# Leerzeichen am Anfang / Ende eines strings entfernen
#############################################################################################
-sub SSCam_trim {
+sub trim {
my $str = shift;
$str =~ s/^\s+|\s+$//g;
@@ -10248,7 +10351,7 @@ return ($str);
#############################################################################################
# Check ob "sscam" im iconpath des FHEMWEB Devices enthalten ist
#############################################################################################
-sub SSCam_checkIconpath {
+sub checkIconpath {
my $name = shift;
my $FW_wname = shift // return;
@@ -10262,10 +10365,10 @@ return;
#############################################################################################
# Cache Handling
-# SSCam_cache ($name, [, , ])
+# cache ($name, [, , ])
# return 1 = ok , return 0 = nok
#############################################################################################
-sub SSCam_cache {
+sub cache {
my ($name,$op,$key,$dat) = @_;
my $hash = $defs{$name};
my $type = AttrVal($name,"cacheType","internal");
@@ -10284,24 +10387,24 @@ sub SSCam_cache {
return $type;
}
- if($SScamMMCHI) {
- Log3($name, 1, "$name - Perl cache module ".$SScamMMCHI." is missing. You need to install it with the FHEM Installer for example.");
- return 0;
- }
- if($type eq "redis" && $SScamMMCHIRedis) {
- Log3($name, 1, "$name - Perl cache module ".$SScamMMCHIRedis." is missing. You need to install it with the FHEM Installer for example.");
- return 0;
- }
- if($type eq "filecache" && $SScamMMCacheCache) {
- Log3($name, 1, "$name - Perl cache module ".$SScamMMCacheCache." is missing. You need to install it with the FHEM Installer for example.");
- return 0;
- }
+ if($SScamMMCHI) {
+ Log3($name, 1, "$name - Perl cache module ".$SScamMMCHI." is missing. You need to install it with the FHEM Installer for example.");
+ return 0;
+ }
+ if($type eq "redis" && $SScamMMCHIRedis) {
+ Log3($name, 1, "$name - Perl cache module ".$SScamMMCHIRedis." is missing. You need to install it with the FHEM Installer for example.");
+ return 0;
+ }
+ if($type eq "filecache" && $SScamMMCacheCache) {
+ Log3($name, 1, "$name - Perl cache module ".$SScamMMCacheCache." is missing. You need to install it with the FHEM Installer for example.");
+ return 0;
+ }
if ($hash->{HELPER}{CACHEKEY}) {
Log3($name, 4, "$name - Cache \"$type\" is already initialized ");
return $type;
}
-
+
if($type eq "mem") {
# This cache driver stores data on a per-process basis. This is the fastest of the cache implementations,
# but data can not be shared between processes. Data will remain in the cache until cleared, expired,
@@ -10314,11 +10417,11 @@ sub SSCam_cache {
global => 0
);
}
-
+
if($type eq "rawmem") {
# This is a subclass of CHI::Driver::Memory that stores references to data structures directly instead
- # of serializing / deserializing. This makes the cache faster at getting and setting complex data structures,
- # but unlike most drivers, modifications to the original data structure will affect the data structure stored
+ # of serializing / deserializing. This makes the cache faster at getting and setting complex data structures,
+ # but unlike most drivers, modifications to the original data structure will affect the data structure stored
# in the cache.
# https://metacpan.org/pod/CHI::Driver::RawMemory
$cache = CHI->new( driver => 'RawMemory',
@@ -10408,11 +10511,11 @@ sub SSCam_cache {
$hash->{HELPER}{CACHEKEY} = $cache;
$brt = tv_interval($bst);
Log3($name, 1, "$name - Cache time to create \"$type\": ".$brt) if(AttrVal($name,"debugCachetime",0));
- return $type;
+ return $type;
} else {
Log3($name, 3, "$name - no cache \"$type\" available.");
}
- return 0;
+ return 0;
}
### Test Operationen ###
@@ -10421,7 +10524,7 @@ sub SSCam_cache {
if($hash->{HELPER}{CACHEKEY}) {
$cache = $hash->{HELPER}{CACHEKEY};
} else {
- return 0;
+ return 0;
}
if($type eq "redis") {
@@ -10453,13 +10556,13 @@ sub SSCam_cache {
# in Cache schreiben
if($op eq "c_write") {
if (!defined $dat) {
- Log3($name, 1, "$name - ERROR - No data for Cache with key: $key ");
- }
+ Log3($name, 1, "$name - ERROR - No data for Cache with key: $key ");
+ }
if($key) {
$cache->set($key,$dat);
$brt = tv_interval($bst);
Log3($name, 1, "$name - Cache time write key \"$key\": ".$brt) if(AttrVal($name,"debugCachetime",0));
- return 1;
+ return 1;
} else {
Log3($name, 1, "$name - ERROR - no key for \"$type\" cache !");
}
@@ -10483,14 +10586,14 @@ sub SSCam_cache {
$brt = tv_interval($bst);
Log3($name, 1, "$name - Cache time remove key \"$key\": ".$brt) if(AttrVal($name,"debugCachetime",0));
Log3($name, 4, "$name - Cache key \"$key\" removed ");
- return 1;
+ return 1;
}
# alle Einträge aus Cache (Namespace) entfernen
if($op eq "c_clear") {
$cache->clear();
Log3($name, 4, "$name - All entries removed from \"$type\" cache ");
- return 1;
+ return 1;
}
# alle Keys aus Cache zurück liefern
@@ -10506,9 +10609,9 @@ sub SSCam_cache {
# Cache entfernen
if($op eq "c_destroy") {
$cache->clear();
- delete $hash->{HELPER}{CACHEKEY};
- Log3($name, 3, "$name - Cache \"$type\" destroyed ");
- return 1;
+ delete $hash->{HELPER}{CACHEKEY};
+ Log3($name, 3, "$name - Cache \"$type\" destroyed ");
+ return 1;
}
return 0;
@@ -10518,32 +10621,32 @@ return 0;
# Versionierungen des Moduls setzen
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
#############################################################################################
-sub SSCam_setVersionInfo {
+sub setVersionInfo {
my ($hash) = @_;
my $name = $hash->{NAME};
- my $v = (SSCam_sortVersion("desc",keys %SSCam_vNotesIntern))[0];
+ my $v = (sortVersion("desc",keys %vNotesIntern))[0];
my $type = $hash->{TYPE};
$hash->{HELPER}{PACKAGE} = __PACKAGE__;
$hash->{HELPER}{VERSION} = $v;
if($modules{$type}{META}{x_prereqs_src} && !$hash->{HELPER}{MODMETAABSENT}) {
- # META-Daten sind vorhanden
- $modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}}
- if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCam.pm 22073 2020-05-30 06:50:20Z DS_Starter $ im Kopf komplett! vorhanden )
- $modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
- } else {
- $modules{$type}{META}{x_version} = $v;
- }
- return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22073 2020-05-30 06:50:20Z DS_Starter $ im Kopf komplett! vorhanden )
- if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
- # es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
- # mit {->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
- use version 0.77; our $VERSION = FHEM::Meta::Get( $hash, 'version' );
+ # META-Daten sind vorhanden
+ $modules{$type}{META}{version} = "v".$v; # Version aus META.json überschreiben, Anzeige mit {Dumper $modules{SMAPortal}{META}}
+ if($modules{$type}{META}{x_version}) { # {x_version} ( nur gesetzt wenn $Id: 49_SSCam.pm 22263 2020-06-25 16:48:36Z DS_Starter $ im Kopf komplett! vorhanden )
+ $modules{$type}{META}{x_version} =~ s/1.1.1/$v/g;
+ } else {
+ $modules{$type}{META}{x_version} = $v;
+ }
+ return $@ unless (FHEM::Meta::SetInternals($hash)); # FVERSION wird gesetzt ( nur gesetzt wenn $Id: 49_SSCam.pm 22263 2020-06-25 16:48:36Z DS_Starter $ im Kopf komplett! vorhanden )
+ if(__PACKAGE__ eq "FHEM::$type" || __PACKAGE__ eq $type) {
+ # es wird mit Packages gearbeitet -> Perl übliche Modulversion setzen
+ # mit {->VERSION()} im FHEMWEB kann Modulversion abgefragt werden
+ use version 0.77; our $VERSION = FHEM::Meta::Get( $hash, 'version' );
}
} else {
- # herkömmliche Modulstruktur
- $hash->{VERSION} = $v;
+ # herkömmliche Modulstruktur
+ $hash->{VERSION} = $v;
}
return;
@@ -10552,7 +10655,7 @@ return;
#############################################################################################
# Hint Hash EN
#############################################################################################
-%SSCam_vHintsExt_en = (
+%vHintsExt_en = (
"9" => "Further infomations about sending snapshots and recordings by Synology Chat server in our ".
"Wiki. ".
"In addition here is provided the link to the Chat knowledgebase.
",
@@ -10574,25 +10677,25 @@ return;
"If attribute \"smtpSSLPort\" is defined, the established connection to the Email server will be encrypted immediately.
".
"Attributes which are optional are marked:
".
"".
- "- snapEmailTxt - Activates the Email shipping. This attribute has the format:
".
- "subject => <subject text>, body => <message text> ".
- "The placeholder \$CAM, \$DATE and \$TIME can be used. ".
- "\$CAM is replaced by the device name, 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. ".
- "- smtpHost - Hostname or IP-address of outgoing Email server (e.g. securesmtp.t-online.de)
".
- "- smtpFrom - Return address (<name>@<domain>)
".
- "- smtpTo - Receiving address(es) (<name>@<domain>)
".
- "- smtpPort - (optional) Port of outgoing Email server (default: 25)
".
- "- smtpCc - (optional) carbon-copy receiving address(es) (<name>@<domain>)
".
- "- smtpNoUseSSL - (optional) \"1\" if no SSL encryption should be used for Email shipping (default: 0)
".
- "- smtpSSLPort - (optional) Port for SSL encrypted connection (default: 465)
".
- "- smtpDebug - (optional) switch on the debugging of SMTP connection
".
+ "- snapEmailTxt - Activates the Email shipping. This attribute has the format:
".
+ "subject => <subject text>, body => <message text> ".
+ "The placeholder \$CAM, \$DATE and \$TIME can be used. ".
+ "\$CAM is replaced by the device name, 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. ".
+ "- smtpHost - Hostname or IP-address of outgoing Email server (e.g. securesmtp.t-online.de)
".
+ "- smtpFrom - Return address (<name>@<domain>)
".
+ "- smtpTo - Receiving address(es) (<name>@<domain>)
".
+ "- smtpPort - (optional) Port of outgoing Email server (default: 25)
".
+ "- smtpCc - (optional) carbon-copy receiving address(es) (<name>@<domain>)
".
+ "- smtpNoUseSSL - (optional) \"1\" if no SSL encryption should be used for Email shipping (default: 0)
".
+ "- smtpSSLPort - (optional) Port for SSL encrypted connection (default: 465)
".
+ "- smtpDebug - (optional) switch on the debugging of SMTP connection
".
" ".
"For further information please see description of the attributes.".
"
",
"6" => "There are some Icons in directory www/images/sscam available for SSCam. Thereby the system can use the icons please do: ".
"- in FHEMWEB device attribute iconPath complete with \"sscam\". e.g.: attr WEB iconPath default:fhemSVG:openautomation:sscam
".
- "After that execute \"rereadicons\" or restart FHEM. ".
+ "After that execute \"rereadicons\" or restart FHEM. ".
"
",
"5" => "Find more Informations about manage users and the appropriate privilege profiles in ".
"Surveillance Station online help ".
@@ -10615,7 +10718,7 @@ return;
#############################################################################################
# Hint Hash DE
#############################################################################################
-%SSCam_vHintsExt_de = (
+%vHintsExt_de = (
"9" => "Weitere Informationen zum Versand von Schnappschüssen und Aufnahmen mit dem Synology Chat Server findet man im ".
"Wiki. ".
"Ergänzend dazu Hinweise zur Einrichtung und Administration des Synology Chat Servers im ".
@@ -10639,26 +10742,26 @@ return;
"Ist das Attribut \"smtpSSLPort\" definiert, erfolgt der Verbindungsaufbau zum Email-Server sofort verschlüsselt.
".
"Optionale Attribute sind gekennzeichnet:
".
"".
- "- snapEmailTxt - Aktiviert den Email-Versand. Das Attribut hat das Format:
".
- "subject => <Betreff-Text>, body => <Mitteilung-Text> ".
- "Es können die Platzhalter \$CAM, \$DATE und \$TIME verwendet werden. ".
- "\$CAM wird durch den Device-Namen, 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. ".
- "- 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
".
+ "- snapEmailTxt - Aktiviert den Email-Versand. Das Attribut hat das Format:
".
+ "subject => <Betreff-Text>, body => <Mitteilung-Text> ".
+ "Es können die Platzhalter \$CAM, \$DATE und \$TIME verwendet werden. ".
+ "\$CAM wird durch den Device-Namen, 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. ".
+ "- 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.".
"
",
"6" => "Für SSCam wird ein Satz Icons im Verzeichnis www/images/sscam zur Verfügung gestellt. Damit das System sie findet bitte setzen: ".
"- im FHEMWEB Device Attribut iconPath um \"sscam\" ergänzen. z.B.: attr WEB iconPath default:fhemSVG:openautomation:sscam
".
- "Danach ein \"rereadicons\" bzw. einen FHEM restart ausführen.".
+ "Danach ein \"rereadicons\" bzw. einen FHEM restart ausführen.".
"
",
"5" => "Informationen zum Management von Usern und entsprechenden Rechte-Profilen sind in der ".
"Surveillance Station Online-Hilfe zu finden.".
@@ -10712,15 +10815,15 @@ return;
start and stop of camera livestreams incl. audio replay, show the last recording and snapshot
fetch of livestream-Url's with key (login not needed in that case)
playback of last recording and playback the last snapshot
- switch the Surveillance Station HomeMode on/off and retrieve the HomeModeState
- show the stored credentials of a device
- fetch the Surveillance Station Logs, exploit the newest entry as reading
- create a gallery of the last 1-10 snapshots (as Popup or in a discrete device)
- Start/Stop Object Tracking (only supported PTZ-Cams with this capability)
+ switch the Surveillance Station HomeMode on/off and retrieve the HomeModeState
+ show the stored credentials of a device
+ fetch the Surveillance Station Logs, exploit the newest entry as reading
+ create a gallery of the last 1-10 snapshots (as Popup or in a discrete device)
+ Start/Stop Object Tracking (only supported PTZ-Cams with this capability)
set/delete a Preset (at PTZ-cameras)
set a Preset or current position as Home Preset (at PTZ-cameras)
provides a panel for camera control (at PTZ-cameras)
- create different types of discrete Streaming-Devices (createStreamDev)
+ create different types of discrete Streaming-Devices (createStreamDev)
Activation / Deactivation of a camera integrated PIR sensor
Creation of a readingsGroup device to display an overview of all defined SSCam devices (createReadingsGroup)
automatized definition of all in SVS available cameras in FHEM (autocreateCams)
@@ -10739,20 +10842,20 @@ return;
Integration into FHEM TabletUI:
There is a widget provided for integration of SSCam-Streaming devices (Type SSCamSTRM) into FTUI. For further information please be informed by the
(german) FHEM Wiki article:
- FTUI Widget für SSCam Streaming Devices (SSCamSTRM).
+ FTUI Widget für SSCam Streaming Devices (SSCamSTRM).
Prerequisites
This module uses the Perl-modules JSON and MIME::Lite which are usually have to be installed in addition.
- On Debian-Linux based systems these modules can be installed by:
+ On Debian-Linux based systems these modules can be installed by:
sudo apt-get install libjson-perl
- sudo apt-get install libmime-lite-perl
-
+ sudo apt-get install libmime-lite-perl
+
SSCam is completely using the nonblocking functions of HttpUtils respectively HttpUtils_NonblockingGet.
In DSM respectively in Synology Surveillance Station an User has to be created. The login credentials are needed later when using a set-command to assign the login-data to a device.
- Further informations could be find among Credentials.
+ Further informations could be find among Credentials.
Overview which Perl-modules SSCam is using:
@@ -10774,7 +10877,7 @@ return;
Cache::Cache | (if Cache is used) |
|