2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 09:16:53 +00:00

49_SSCam: fix cannot send snaps/recs if snapTelegramTxt + snapChatTxt and no cacheType (cacheType=internal) is set

git-svn-id: https://svn.fhem.de/fhem/trunk@23259 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2020-11-29 20:00:31 +00:00
parent 52a925a3ac
commit 726440fd01
2 changed files with 46 additions and 45 deletions

View File

@ -1,5 +1,7 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 49_SSCam: fix cannot send snaps/recs if snapTelegramTxt +
snapChatTxt and no cacheType (cacheType=internal) is set
- bugfix: 50_SSChatBot: fix cannot send after receiving anything - bugfix: 50_SSChatBot: fix cannot send after receiving anything
- feature 76_SMAPortal: integrate SMA EV Charger - feature 76_SMAPortal: integrate SMA EV Charger
- change: 14_SD_BELL: revised code Perl::Critic - change: 14_SD_BELL: revised code Perl::Critic

View File

@ -184,6 +184,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"9.8.3" => "29.11.2020 fix cannot send snaps/recs if snapTelegramTxt + snapChatTxt and no cacheType (cacheType=internal) is set ",
"9.8.2" => "04.10.2020 use showStoredCredentials from SMUtils ", "9.8.2" => "04.10.2020 use showStoredCredentials from SMUtils ",
"9.8.1" => "28.09.2020 align getApiSites_Parse to other syno modules ", "9.8.1" => "28.09.2020 align getApiSites_Parse to other syno modules ",
"9.8.0" => "27.09.2020 optimize getApiSites_Parse, new getter apiInfo ", "9.8.0" => "27.09.2020 optimize getApiSites_Parse, new getter apiInfo ",
@ -9764,7 +9765,7 @@ sub _sendChat {
if(exists $chatparams{$key}->{attr}); if(exists $chatparams{$key}->{attr});
if($chatparams{$key}->{set}) { 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} = $chatparams{$key}->{default} if (!$extparamref->{$key} && !$chatparams{$key}->{attr});
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = delete $extparamref->{$key} if(exists $extparamref->{$key}); $data{SSCam}{$name}{PARAMS}{$tac}{$key} = delete $extparamref->{$key} if(exists $extparamref->{$key});
} }
Log3($name, 4, "$name - param $key is set to \"".($data{SSCam}{$name}{PARAMS}{$tac}{$key} // "")."\" ") if($key !~ /[sv]dat/x); Log3($name, 4, "$name - param $key is set to \"".($data{SSCam}{$name}{PARAMS}{$tac}{$key} // "")."\" ") if($key !~ /[sv]dat/x);
@ -9777,6 +9778,7 @@ sub _sendChat {
for my $key (keys(%chatparams)) { for my $key (keys(%chatparams)) {
push(@err, $key) if ($chatparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key}); push(@err, $key) if ($chatparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key});
} }
if ($#err >= 0) { if ($#err >= 0) {
$ret = "Missing at least one required parameter or attribute: ".join(', ',@err); $ret = "Missing at least one required parameter or attribute: ".join(', ',@err);
Log3($name, 2, "$name - $ret"); Log3($name, 2, "$name - $ret");
@ -9832,15 +9834,16 @@ sub _sendChat {
if($data{SSCam}{$name}{PARAMS}{$tac}{sdat}) { # Images liegen in einem Hash (Ref in $sdat) base64-codiert vor if($data{SSCam}{$name}{PARAMS}{$tac}{sdat}) { # Images liegen in einem Hash (Ref in $sdat) base64-codiert vor
@as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{sdat}}; @as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{sdat}};
$mtype = "\@Snapshot"; $mtype = "\@Snapshot";
} elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor }
elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
@as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{vdat}}; @as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{vdat}};
$mtype = $hash->{CAMNAME}; $mtype = $hash->{CAMNAME};
} }
for my $key (@as) { for my $key (@as) {
($subject,$fname) = __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); # User aufsplitten und zu jedem die ID ermitteln
my @ua = split(",", $peers);
for (@ua) { for (@ua) {
next if(!$_); next if(!$_);
$uid = $defs{$chatbot}{HELPER}{USERS}{$_}{id}; $uid = $defs{$chatbot}{HELPER}{USERS}{$_}{id};
@ -9894,8 +9897,8 @@ sub _sendChat {
} }
); );
$mtype = "\@Snapshot"; $mtype = "\@Snapshot";
}
} elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
extractTIDfromCache ( { name => $name, extractTIDfromCache ( { name => $name,
tac => $tac, tac => $tac,
media => "SENDRECS", media => "SENDRECS",
@ -9911,8 +9914,7 @@ sub _sendChat {
for my $key (@unique) { for my $key (@unique) {
($subject,$fname) = __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(/,/x, $peers); # User aufsplitten und zu jedem die ID ermitteln
my @ua = split(/,/x, $peers);
for (@ua) { for (@ua) {
next if(!$_); next if(!$_);
$uid = $defs{$chatbot}{HELPER}{USERS}{$_}{id}; $uid = $defs{$chatbot}{HELPER}{USERS}{$_}{id};
@ -9970,18 +9972,21 @@ return;
# Daten extrahieren für SSChatBot Versand # Daten extrahieren für SSChatBot Versand
#################################################################################################### ####################################################################################################
sub __extractForChat { sub __extractForChat {
my ($name,$key,$paref) = @_; my $name = shift;
my $hash = $defs{$name}; my $key = shift;
my $subject = $paref->{subject}; my $paref = shift;
my $sdat = $paref->{sdat}; # Hash von Imagedaten base64 codiert my $hash = $defs{$name};
my $vdat = $paref->{vdat}; # Hashref der Videodaten my $subject = $paref->{subject};
my $sdat = $paref->{sdat}; # Hash von Imagedaten base64 codiert
my $vdat = $paref->{vdat}; # Hashref der Videodaten
my ($fname,$tdir,$ct,$cache); my ($fname,$tdir,$ct,$cache);
if($sdat) { if($sdat) {
$cache = cache($name, "c_init"); # Cache initialisieren $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{sdat}{$key}{createdTm}; $ct = $paref->{sdat}{$key}{createdTm};
$fname = trim(delete $paref->{sdat}{$key}{fileName}); $fname = trim ($paref->{sdat}{$key}{fileName});
} }
else { else {
$ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}"); $ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}");
@ -9990,11 +9995,11 @@ sub __extractForChat {
} }
if($vdat) { if($vdat) {
$cache = cache($name, "c_init"); # Cache initialisieren $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{vdat}{$key}{createdTm}; $ct = $paref->{vdat}{$key}{createdTm};
$fname = trim(delete $paref->{vdat}{$key}{fileName}); $fname = trim ($paref->{vdat}{$key}{fileName});
$tdir = trim(delete $paref->{vdat}{$key}{tdir}); $tdir = trim ($paref->{vdat}{$key}{tdir});
} }
else { else {
$ct = cache($name, "c_read", "$vdat"."{$key}{createdTm}"); $ct = cache($name, "c_read", "$vdat"."{$key}{createdTm}");
@ -10229,9 +10234,9 @@ sub __extractForTelegram {
if($sdat) { if($sdat) {
$cache = cache($name, "c_init"); # Cache initialisieren $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{sdat}{$key}{createdTm}; $ct = $paref->{sdat}{$key}{createdTm};
$img = delete $paref->{sdat}{$key}{imageData}; $img = $paref->{sdat}{$key}{imageData};
$fname = trim(delete $paref->{sdat}{$key}{fileName}); $fname = trim ($paref->{sdat}{$key}{fileName});
$data = MIME::Base64::decode_base64($img); $data = MIME::Base64::decode_base64($img);
Log3($name, 4, "$name - Image data sequence [$key] decoded from internal Cache for TelegramBot prepare"); Log3($name, 4, "$name - Image data sequence [$key] decoded from internal Cache for TelegramBot prepare");
undef $img; undef $img;
@ -10249,9 +10254,9 @@ sub __extractForTelegram {
if($vdat) { if($vdat) {
$cache = cache($name, "c_init"); # Cache initialisieren $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
$ct = delete $paref->{vdat}{$key}{createdTm}; $ct = $paref->{vdat}{$key}{createdTm};
$data = delete $paref->{vdat}{$key}{imageData}; $data = $paref->{vdat}{$key}{imageData};
$fname = trim(delete $paref->{vdat}{$key}{fileName}); $fname = trim ($paref->{vdat}{$key}{fileName});
Log3($name, 4, "$name - Video data sequence [$key] got from internal Cache for TelegramBot prepare"); Log3($name, 4, "$name - Video data sequence [$key] got from internal Cache for TelegramBot prepare");
} }
else { else {
@ -10833,8 +10838,7 @@ sub __sendEmailblocking { ##
my %seen; my %seen;
my @unique = sort{$a<=>$b} grep { !$seen{$_}++ } @as; # distinct / unique the keys my @unique = sort{$a<=>$b} grep { !$seen{$_}++ } @as; # distinct / unique the keys
# attach mail for my $key (@unique) { # attach mail
for my $key (@unique) {
next if(!cache($name, "c_isvalidkey", "$sdat"."{$key}{imageData}")); next if(!cache($name, "c_isvalidkey", "$sdat"."{$key}{imageData}"));
$ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}"); $ct = cache($name, "c_read", "$sdat"."{$key}{createdTm}");
$img = cache($name, "c_read", "$sdat"."{$key}{imageData}"); $img = cache($name, "c_read", "$sdat"."{$key}{imageData}");
@ -10852,10 +10856,9 @@ sub __sendEmailblocking { ##
} }
} }
if($vdat) { if($vdat) { # Videodaten (mp4) wurden geliefert
### Videodaten (mp4) wurden geliefert
my ($ct,$video); my ($ct,$video);
$cache = cache($name, "c_init"); # Cache initialisieren $cache = cache($name, "c_init"); # Cache initialisieren
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
@as = sort{$a<=>$b}keys%{$vdat}; @as = sort{$a<=>$b}keys%{$vdat};
for my $key (@as) { for my $key (@as) {
@ -10913,12 +10916,10 @@ sub __sendEmailblocking { ##
} }
else { else {
# Verwendung neues Net::SMTP::SSL > 3.00 # Verwendung neues Net::SMTP::SSL > 3.00
if($sslfrominit) { if($sslfrominit) { # sofortiger SSL connect
# sofortiger SSL connect
$smtp = Net::SMTP->new(Host => $smtphost, Port => $smtpsslport, SSL => 1, Debug => $smtpdebug); $smtp = Net::SMTP->new(Host => $smtphost, Port => $smtpsslport, SSL => 1, Debug => $smtpdebug);
} }
else { else { # erst unverschlüsselt, danach switch zu encrypted
# erst unverschlüsselt, danach switch zu encrypted
$smtp = Net::SMTP->new(Host => $smtphost, Port => $smtpport, SSL => 0, Debug => $smtpdebug); $smtp = Net::SMTP->new(Host => $smtphost, Port => $smtpport, SSL => 0, Debug => $smtpdebug);
} }
} }
@ -10930,8 +10931,7 @@ sub __sendEmailblocking { ##
return "$name|$err|''"; return "$name|$err|''";
} }
if(!$sslfb && !$sslfrominit) { if(!$sslfb && !$sslfrominit) { # Aufbau unverschlüsselt -> switch zu verschlüsselt wenn nicht untersagt
# Aufbau unverschlüsselt -> switch zu verschlüsselt wenn nicht untersagt
if($smtp->can_ssl() && !$smtpnousessl) { if($smtp->can_ssl() && !$smtpnousessl) {
unless( $smtp->starttls ( SSL_verify_mode => 0, unless( $smtp->starttls ( SSL_verify_mode => 0,
SSL_version => "TLSv1_2:!TLSv1_1:!SSLv3:!SSLv23:!SSLv2", SSL_version => "TLSv1_2:!TLSv1_1:!SSLv3:!SSLv23:!SSLv2",
@ -11083,12 +11083,11 @@ return;
################################################################################################# #################################################################################################
sub extractTIDfromCache { sub extractTIDfromCache {
my $params = shift; my $params = shift;
my $name = $params->{name};
my $name = $params->{name}; my $tac = $params->{tac};
my $tac = $params->{tac}; my $media = $params->{media};
my $media = $params->{media}; my $mode = $params->{mode};
my $mode = $params->{mode}; my $aref = $params->{aref};
my $aref = $params->{aref};
if($mode eq "serial") { # Serial Nummern auslesen if($mode eq "serial") { # Serial Nummern auslesen
for my $ck (cache($name, "c_getkeys")) { for my $ck (cache($name, "c_getkeys")) {
@ -11168,7 +11167,7 @@ sub cleanData {
return; return;
} }
if(AttrVal($name,"cacheType","internal") eq "internal") { # internes Caching if(AttrVal($name, "cacheType", "internal") eq "internal") { # internes Caching
if($tac) { if($tac) {
if($data{SSCam}{RS}{$tac}) { if($data{SSCam}{RS}{$tac}) {
delete $data{SSCam}{RS}{$tac}; delete $data{SSCam}{RS}{$tac};