2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

49_SSCam: Telegram send attributes: new key option => silent, peer can be fetched from r:<reading>

git-svn-id: https://svn.fhem.de/fhem/trunk@27242 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2023-02-17 09:02:46 +00:00
parent ff973d0a6b
commit de901959c8
2 changed files with 4683 additions and 4542 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.
- feature: 49_SSCam: Telegram send attributes: new key option => silent,
peer can be fetched from r:<reading>
- feature: 72_FRITZBOX: Anzeigen aus luaInfo verschönert - feature: 72_FRITZBOX: Anzeigen aus luaInfo verschönert
Fehlh. Lod-Eintrag gefixed Fehlh. Lod-Eintrag gefixed
- feature: 76_SMAInverter: read PV-Power (Hybridinverter) - feature: 76_SMAInverter: read PV-Power (Hybridinverter)

View File

@ -31,6 +31,12 @@
# Example of defining a Cam-device: define CamCP1 SSCAM Carport 192.168.2.20 [5000] [HTTP(S)] # Example of defining a Cam-device: define CamCP1 SSCAM Carport 192.168.2.20 [5000] [HTTP(S)]
# Example of defining a SVS-device: define SDS1 SSCAM SVS 192.168.2.20 [5000] [HTTP(S)] # Example of defining a SVS-device: define SDS1 SSCAM SVS 192.168.2.20 [5000] [HTTP(S)]
# #
#########################################################################################################################
#
# Leerzeichen entfernen: sed -i 's/[[:space:]]*$//' FHEM/49_SSCam.pm
# Commandref prüfen: sudo perl contrib/commandref_join.pl FHEM/49_SSCam.pm
#
#########################################################################################################################
package FHEM::SSCam; ## no critic 'package' package FHEM::SSCam; ## no critic 'package'
@ -186,6 +192,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"9.11.0" => "14.02.2023 Telegram send attributes extended by key option => silent, peer can be fetch from r:<reading> ",
"9.10.9" => "22.01.2023 substitution of \$#TIME corrected ", "9.10.9" => "22.01.2023 substitution of \$#TIME corrected ",
"9.10.8" => "14.01.2023 add blank line in setter runView, goPreset, runPatrol ", "9.10.8" => "14.01.2023 add blank line in setter runView, goPreset, runPatrol ",
"9.10.7" => "02.08.2022 allow placeholders #CAM, #DATE, #TIME, #FILE, #CTIME (also for Email) ", "9.10.7" => "02.08.2022 allow placeholders #CAM, #DATE, #TIME, #FILE, #CTIME (also for Email) ",
@ -1786,6 +1793,7 @@ return;
################################################################ ################################################################
sub _setsnap { ## no critic "not used" sub _setsnap { ## no critic "not used"
my $paref = shift; my $paref = shift;
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my $name = $paref->{name}; my $name = $paref->{name};
my $prop = $paref->{prop} // q{}; my $prop = $paref->{prop} // q{};
@ -1812,7 +1820,7 @@ sub _setsnap { ## no critic "not used"
($hash->{HELPER}{INFORM}) = $spec =~ m/STRM:(.*)/xi; # Snap by SSCamSTRM-Device ($hash->{HELPER}{INFORM}) = $spec =~ m/STRM:(.*)/xi; # Snap by SSCamSTRM-Device
} }
my $emtxt = AttrVal($name, "snapEmailTxt", ""); my $emtxt = AttrVal ($name, "snapEmailTxt", "");
if($spec =~ /snapEmailTxt:/x) { if($spec =~ /snapEmailTxt:/x) {
($emtxt) = $spec =~ m/snapEmailTxt:"(.*)"/xi; ($emtxt) = $spec =~ m/snapEmailTxt:"(.*)"/xi;
} }
@ -1824,7 +1832,7 @@ sub _setsnap { ## no critic "not used"
$hash->{HELPER}{SMTPMSG} = $emtxt; $hash->{HELPER}{SMTPMSG} = $emtxt;
} }
my $teletxt = AttrVal($name, "snapTelegramTxt", ""); my $teletxt = AttrVal ($name, "snapTelegramTxt", "");
if($spec =~ /snapTelegramTxt:/x) { if($spec =~ /snapTelegramTxt:/x) {
($teletxt) = $spec =~ m/snapTelegramTxt:"(.*)"/xi; ($teletxt) = $spec =~ m/snapTelegramTxt:"(.*)"/xi;
} }
@ -1833,7 +1841,7 @@ sub _setsnap { ## no critic "not used"
$hash->{HELPER}{TELEMSG} = $teletxt; $hash->{HELPER}{TELEMSG} = $teletxt;
} }
my $chattxt = AttrVal($name, "snapChatTxt", ""); my $chattxt = AttrVal ($name, "snapChatTxt", "");
if($spec =~ /snapChatTxt:/x) { if($spec =~ /snapChatTxt:/x) {
($chattxt) = $spec =~ m/snapChatTxt:"(.*)"/xi; ($chattxt) = $spec =~ m/snapChatTxt:"(.*)"/xi;
} }
@ -1900,8 +1908,8 @@ sub _setsnapCams { ## no critic "not used"
my $emtxt; my $emtxt;
my $teletxt = ""; my $teletxt = "";
my $rawet = AttrVal($name, "snapEmailTxt", ""); my $rawet = AttrVal ($name, "snapEmailTxt", "");
my $bt = join " ",@$aref; my $bt = join " ", @$aref;
if($bt =~ /snapEmailTxt:/x) { if($bt =~ /snapEmailTxt:/x) {
($rawet) = $bt =~ m/snapEmailTxt:"(.*)"/xi; ($rawet) = $bt =~ m/snapEmailTxt:"(.*)"/xi;
@ -1915,13 +1923,13 @@ sub _setsnapCams { ## no critic "not used"
my ($csnap,$cmail) = ("",""); my ($csnap,$cmail) = ("","");
for my $key (keys%{$hash->{HELPER}{ALLSNAPREF}}) { for my $key (keys%{$hash->{HELPER}{ALLSNAPREF}}) {
if(!AttrVal($key, "snapEmailTxt", "")) { if(!AttrVal ($key, "snapEmailTxt", "")) {
delete $hash->{HELPER}{ALLSNAPREF}->{$key}; # Snap dieser Kamera auslösen aber nicht senden delete $hash->{HELPER}{ALLSNAPREF}->{$key}; # Snap dieser Kamera auslösen aber nicht senden
$csnap .= $csnap?", $key":$key; $csnap .= $csnap ? ", $key" : $key;
$emtxt = ""; $emtxt = "";
} }
else { else {
$cmail .= $cmail?", $key":$key; $cmail .= $cmail ? ", $key" : $key;
$emtxt = $rawet; $emtxt = $rawet;
} }
__camSnap("$key!_!$num!_!$lag!_!$ncount!_!$emtxt!_!$teletxt"); __camSnap("$key!_!$num!_!$lag!_!$ncount!_!$emtxt!_!$teletxt");
@ -9589,14 +9597,15 @@ sub prepareSendData {
### Schnappschüsse mit Telegram versenden ### Schnappschüsse mit Telegram versenden
# snapTelegramTxt aus $hash->{HELPER}{TELEMSG} # snapTelegramTxt aus $hash->{HELPER}{TELEMSG}
# Format in $hash->{HELPER}{TELEMSG} muss sein: tbot => <teleBot Device>, #
# peers => <peer1 peer2 ..>, subject => <Beschreibungstext> # Format in $hash->{HELPER}{TELEMSG} muss sein:
############################################################################ # tbot => <teleBot Device>, peers => <peer1 peer2 ..>, subject => <Beschreibungstext>
################################################################################################
if($OpMode =~ /^getsnap/x && $hash->{HELPER}{CANTELESNAP}) { if($OpMode =~ /^getsnap/x && $hash->{HELPER}{CANTELESNAP}) {
delete $hash->{HELPER}{CANTELESNAP}; delete $hash->{HELPER}{CANTELESNAP};
$data{SSCam}{$name}{SENDCOUNT}{$tac}++; $data{SSCam}{$name}{SENDCOUNT}{$tac}++;
Log3($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0)); Log3 ($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
my $mt = delete $hash->{HELPER}{TELEMSG}; my $mt = delete $hash->{HELPER}{TELEMSG};
@ -9617,6 +9626,7 @@ sub prepareSendData {
'tac' => $tac, 'tac' => $tac,
'telebot' => $telemsg->{tbot}, 'telebot' => $telemsg->{tbot},
'peers' => $telemsg->{peers}, 'peers' => $telemsg->{peers},
'option' => $telemsg->{option}, # Versandoptionen
'MediaStream' => '-1', # Code für MediaStream im TelegramBot (png/jpg = -1) 'MediaStream' => '-1', # Code für MediaStream im TelegramBot (png/jpg = -1)
} }
); );
@ -9626,9 +9636,10 @@ sub prepareSendData {
### Aufnahmen mit Telegram versenden ### Aufnahmen mit Telegram versenden
# recTelegramTxt aus $hash->{HELPER}{TELERECMSG} # recTelegramTxt aus $hash->{HELPER}{TELERECMSG}
# Format in $hash->{HELPER}{TELEMSG} muss sein: tbot => <teleBot Device>, #
# peers => <peer1 peer2 ..>, subject => <Beschreibungstext> # Format in $hash->{HELPER}{TELEMSG} muss sein:
########################################################################### # tbot => <teleBot Device>, peers => <peer1 peer2 ..>, subject => <Beschreibungstext>
#################################################################################################
if($OpMode =~ /^GetRec/x && $hash->{HELPER}{CANTELEREC}) { if($OpMode =~ /^GetRec/x && $hash->{HELPER}{CANTELEREC}) {
delete $hash->{HELPER}{CANTELEREC}; delete $hash->{HELPER}{CANTELEREC};
$data{SSCam}{$name}{SENDCOUNT}{$tac}++; $data{SSCam}{$name}{SENDCOUNT}{$tac}++;
@ -9653,6 +9664,7 @@ sub prepareSendData {
'opmode' => $OpMode, 'opmode' => $OpMode,
'telebot' => $telemsg->{tbot}, 'telebot' => $telemsg->{tbot},
'peers' => $telemsg->{peers}, 'peers' => $telemsg->{peers},
'option' => $telemsg->{option}, # Versandoptionen
'tac' => $tac, 'tac' => $tac,
'MediaStream' => '-30', # Code für MediaStream im TelegramBot (png/jpg = -1) 'MediaStream' => '-30', # Code für MediaStream im TelegramBot (png/jpg = -1)
} }
@ -9810,7 +9822,7 @@ sub _sendChat {
$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);
Log3($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne ''); Log3($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne '');
} }
@ -10062,24 +10074,28 @@ return ($subject,$fname);
############################################################################### ###############################################################################
sub _prepSendTelegram { sub _prepSendTelegram {
my $paref = shift; my $paref = shift;
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my $calias = $paref->{calias}; my $calias = $paref->{calias};
my $mt = $paref->{mt}; my $mt = $paref->{mt};
my $date = $paref->{date}; my $date = $paref->{date};
my $time = $paref->{time}; my $time = $paref->{time};
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my ($tbott,$peert,$subjt); my ($tbott,$peert,$subjt,$optt);
$mt =~ s/['"]//gx; $mt =~ s/['"]//gx;
my ($telebot,$peers,$subj) = split(",", $mt, 3 ); my ($telebot, $peers, $subj, $opt) = split ",", $mt, 4;
$tbott = (split("=>", $telebot))[1] if($telebot);
$peert = (split("=>", $peers ))[1] if($peers);
$subjt = (split("=>", $subj ))[1] if($subj);
$tbott = trim($tbott) if($tbott); $tbott = (split "=>", $telebot)[1] if($telebot);
$peert = trim($peert) if($peert); $peert = (split "=>", $peers )[1] if($peers);
$subjt = (split "=>", $subj )[1] if($subj);
$optt = (split "=>", $opt )[1] if($opt);
$tbott = trim ($tbott) if($tbott);
$peert = trim ($peert) if($peert);
if($subjt) { if($subjt) {
$subjt = trim($subjt); $subjt = trim($subjt);
@ -10092,6 +10108,7 @@ sub _prepSendTelegram {
$telemsg{tbot} = "$tbott" if($tbott); $telemsg{tbot} = "$tbott" if($tbott);
$telemsg{peers} = "$peert" if($peert); $telemsg{peers} = "$peert" if($peert);
$telemsg{subject} = "$subjt" if($subjt); $telemsg{subject} = "$subjt" if($subjt);
$telemsg{option} = "$optt" if($optt);
return \%telemsg; return \%telemsg;
} }
@ -10110,34 +10127,35 @@ sub _sendTelegram {
Log3($name, 4, "$name - ####################################################"); Log3($name, 4, "$name - ####################################################");
my %teleparams = ( my %teleparams = (
'subject' => { 'default'=>'', 'required'=>0, 'set'=>1}, 'subject' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1},
'part1type' => { 'default'=>'text/html; charset=UTF-8', 'required'=>1, 'set'=>1}, 'part1type' => {'attr'=>'', 'default'=>'text/html; charset=UTF-8', 'required'=>1, 'set'=>1},
'part1txt' => { 'default'=>'', 'required'=>0, 'set'=>1}, 'part1txt' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1},
'part2type' => { 'default'=>'', 'required'=>0, 'set'=>1}, 'part2type' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1},
'sdat' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Hashref der Bilddaten (Bilddaten base64 codiert), wenn gesetzt muss 'part2type' auf 'image/jpeg' gesetzt sein 'sdat' => {'attr'=>'', '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 'image' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # Daten als File, wenn gesetzt muss 'part2type' auf 'image/jpeg' gesetzt sein
'fname' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Filename für "image" 'fname' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # Filename für "image"
'lsnaptime' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel der Bilddaten 'lsnaptime' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # Zeitstempel der Bilddaten
'opmode' => { 'default'=>'', 'required'=>1, 'set'=>1}, # OpMode muss gesetzt sein 'opmode' => {'attr'=>'', 'default'=>'', 'required'=>1, 'set'=>1}, # OpMode muss gesetzt sein
'tac' => { 'default'=>'', 'required'=>0, 'set'=>1}, # übermittelter Transaktionscode der ausgewerteten Transaktion 'tac' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # übermittelter Transaktionscode der ausgewerteten Transaktion
'vdat' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Hashref der Videodaten 'vdat' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # Hashref der Videodaten
'telebot' => { 'default'=>'', 'required'=>1, 'set'=>1}, # TelegramBot-Device welches zum Senden verwendet werden soll 'telebot' => {'attr'=>'', 'default'=>'', 'required'=>1, 'set'=>1}, # TelegramBot-Device welches zum Senden verwendet werden soll
'peers' => { 'default'=>'', 'required'=>0, 'set'=>1}, # TelegramBot Peers 'peers' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # TelegramBot Peers
'MediaStream' => { 'default'=>'', 'required'=>0, 'set'=>1}, # Code für MediaStream im TelegramBot (png/jpg = -1) 'option' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # TelegramBot Sendeoptionen
'MediaStream' => {'attr'=>'', 'default'=>'', 'required'=>0, 'set'=>1}, # Code für MediaStream im TelegramBot (png/jpg = -1)
); );
my $tac = $extparamref->{tac}; my $tac = $extparamref->{tac};
for my $key (keys %teleparams) { for my $key (keys %teleparams) {
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal($name, $teleparams{$key}->{attr}, $teleparams{$key}->{default}) $data{SSCam}{$name}{PARAMS}{$tac}{$key} = AttrVal ($name, $teleparams{$key}->{attr}, $teleparams{$key}->{default})
if(exists $teleparams{$key}->{attr}); if($teleparams{$key}->{attr});
if($teleparams{$key}->{set}) { 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} = $teleparams{$key}->{default} if(!$extparamref->{$key} && !$teleparams{$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($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);
Log3($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne ''); Log3 ($name, 4, "$name - param $key is set") if($key =~ /[sv]dat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne '');
} }
$data{SSCam}{$name}{PARAMS}{$tac}{name} = $name; $data{SSCam}{$name}{PARAMS}{$tac}{name} = $name;
@ -10146,33 +10164,52 @@ sub _sendTelegram {
for my $key (keys(%teleparams)) { for my $key (keys(%teleparams)) {
push(@err, $key) if ($teleparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key}); push(@err, $key) if ($teleparams{$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");
readingsBeginUpdate($hash); Log3 ($name, 2, "$name - $ret");
readingsBulkUpdate($hash,"sendTeleState",$ret);
readingsEndUpdate($hash, 1); readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, 'sendTeleState', $ret);
readingsEndUpdate ($hash, 1);
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1; $data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
return $ret; return $ret;
} }
my $telebot = $data{SSCam}{$name}{PARAMS}{$tac}{telebot}; my $telebot = $data{SSCam}{$name}{PARAMS}{$tac}{telebot};
my $peers = $data{SSCam}{$name}{PARAMS}{$tac}{peers};
if(!$defs{$telebot}) { if(!$defs{$telebot}) {
$ret = "No TelegramBot device \"$telebot\" available"; $ret = "No TelegramBot device \"$telebot\" available";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1); readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 2, "$name - $ret");
Log3 ($name, 2, "$name - $ret");
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1; $data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
return; return;
} }
my $peers = $data{SSCam}{$name}{PARAMS}{$tac}{peers};
if ($peers =~ /^r:/xs) { # Reading mit Empfängern ist hinterlegt
my $pr = (split ':', $peers)[1];
$peers = ReadingsVal ($name, $pr, '');
Log3 ($name, 4, "$name - peers was fetched from reading >$pr<: $peers");
}
if(!$peers) { if(!$peers) {
$peers = AttrVal($telebot,"defaultPeer", ""); $peers = AttrVal ($telebot, 'defaultPeer', '');
if(!$peers) { if(!$peers) {
$ret = "No peers of TelegramBot device \"$telebot\" found"; $ret = "No peers of TelegramBot device \"$telebot\" found";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1); readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 2, "$name - $ret");
Log3 ($name, 2, "$name - $ret");
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1; $data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
return; return;
} }
@ -10180,83 +10217,110 @@ sub _sendTelegram {
if(!$data{SSCam}{$name}{PARAMS}{$tac}{sdat} && !$data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { if(!$data{SSCam}{$name}{PARAMS}{$tac}{sdat} && !$data{SSCam}{$name}{PARAMS}{$tac}{vdat}) {
$ret = "no video or image data existing for send process by TelegramBot \"$telebot\" "; $ret = "no video or image data existing for send process by TelegramBot \"$telebot\" ";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1); readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 2, "$name - $ret");
Log3 ($name, 2, "$name - $ret");
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1; $data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
return; return;
} }
my ($msg,$subject,$MediaStream,$fname,@as,%seen,@unique); my $options = '';
my @opta = split ' ', $data{SSCam}{$name}{PARAMS}{$tac}{option};
$cache = cache($name, "c_init"); # Cache initialisieren if (@opta) {
Log3($name, 1, "$name - Fall back to internal Cache due to preceding failure.") if(!$cache); for my $o (@opta) {
$options .= " -$o-"
}
if(!$cache || $cache eq "internal" ) { $options .= ' ';
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}};
} 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}};
}
for my $key (@as) {
($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");
}
else {
$ret = "Telegram message [$key] of transaction \"$tac\" sent to \"$peers\" by \"$telebot\" ";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 3, "$name - $ret");
}
}
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
Log3($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
} my ($msg,$subject,$MediaStream,$fname,@as,%seen,@unique);
else {
# 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
extractTIDfromCache ( { name => $name,
tac => $tac,
media => "SENDSNAPS",
mode => "serial",
aref => \@as
}
);
} elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor $cache = cache($name, "c_init"); # Cache initialisieren
extractTIDfromCache ( { name => $name,
tac => $tac,
media => "SENDRECS",
mode => "serial",
aref => \@as
}
);
}
@unique = sort{$b<=>$a} grep { !$seen{$_}++ } @as; # distinct / unique the keys Log3 ($name, 1, "$name - Fall back to internal Cache due to preceding failure.") if(!$cache);
for my $key (@unique) { if(!$cache || $cache eq "internal" ) {
($msg,$subject,$MediaStream,$fname) = __extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac}); if($data{SSCam}{$name}{PARAMS}{$tac}{sdat}) { # Images liegen in einem Hash (Ref in $sdat) base64-codiert vor
$ret = __TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, ""); @as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{sdat}};
if($ret) { }
readingsSingleUpdate($hash, "sendTeleState", $ret, 1); elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
Log3($name, 2, "$name - ERROR: $ret"); @as = sort{$b<=>$a}keys%{$data{SSCam}{$name}{PARAMS}{$tac}{vdat}};
} }
else {
$ret = "Telegram message [$key] of transaction \"$tac\" sent to \"$peers\" by \"$telebot\" ";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3($name, 3, "$name - $ret");
}
}
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
Log3($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
}
undef %teleparams; for my $key (@as) {
undef %{$extparamref}; ($msg,$subject,$MediaStream,$fname) = __extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
undef $msg; $ret = __TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, $options);
if($ret) {
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3 ($name, 2, "$name - ERROR: $ret");
}
else {
$ret = "Telegram message [$key] of transaction \"$tac\" sent to \"$peers\" by \"$telebot\" ";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3 ($name, 3, "$name - $ret");
}
}
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
Log3 ($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
}
else {
# 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
extractTIDfromCache ( { name => $name,
tac => $tac,
media => "SENDSNAPS",
mode => "serial",
aref => \@as
}
);
}
elsif($data{SSCam}{$name}{PARAMS}{$tac}{vdat}) { # Aufnahmen liegen in einem Hash-Ref in $vdat vor
extractTIDfromCache ( { name => $name,
tac => $tac,
media => "SENDRECS",
mode => "serial",
aref => \@as
}
);
}
@unique = sort{$b<=>$a} grep { !$seen{$_}++ } @as; # distinct / unique the keys
for my $key (@unique) {
($msg,$subject,$MediaStream,$fname) = __extractForTelegram($name,$key,$data{SSCam}{$name}{PARAMS}{$tac});
$ret = __TBotSendIt($defs{$telebot}, $name, $fname, $peers, $msg, $subject, $MediaStream, undef, $options);
if($ret) {
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3 ($name, 2, "$name - ERROR: $ret");
}
else {
$ret = "Telegram message [$key] of transaction \"$tac\" sent to \"$peers\" by \"$telebot\" ";
readingsSingleUpdate($hash, "sendTeleState", $ret, 1);
Log3 ($name, 3, "$name - $ret");
}
}
$data{SSCam}{$name}{SENDCOUNT}{$tac} -= 1;
Log3 ($name, 1, "$name - Send Counter transaction \"$tac\": ".$data{SSCam}{$name}{SENDCOUNT}{$tac}) if(AttrVal($name,"debugactivetoken",0));
}
undef %teleparams;
undef %{$extparamref};
undef $msg;
return; return;
} }
@ -10628,18 +10692,20 @@ return (0,undef);
############################################################################### ###############################################################################
sub _prepSendMail { sub _prepSendMail {
my $paref = shift; my $paref = shift;
my $hash = $paref->{hash}; my $hash = $paref->{hash};
my $calias = $paref->{calias}; my $calias = $paref->{calias};
my $mt = $paref->{mt}; my $mt = $paref->{mt};
my $date = $paref->{date}; my $date = $paref->{date};
my $time = $paref->{time}; my $time = $paref->{time};
my $name = $hash->{NAME}; my $name = $hash->{NAME};
$mt =~ s/['"]//gx; $mt =~ s/['"]//gx;
my($subj,$body) = split ",", $mt, 2; my ($subj,$body) = split ",", $mt, 2;
my $subjt = (split "=>", $subj)[1]; my $subjt = (split "=>", $subj)[1];
my $bodyt = (split "=>", $body)[1]; my $bodyt = (split "=>", $body)[1];
$subjt = trim($subjt); $subjt = trim($subjt);
$subjt =~ s/[\$#]CAM/$calias/gx; $subjt =~ s/[\$#]CAM/$calias/gx;
@ -10711,9 +10777,9 @@ sub _sendEmail {
return $ret; return $ret;
} }
Log3($name, 4, "$name - version of loaded module \"$m1\" is \"$vm1\""); Log3 ($name, 4, "$name - version of loaded module \"$m1\" is \"$vm1\"");
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 \"$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\""); Log3 ($name, 4, "$name - version of loaded module \"$m2\" is \"$vm2\"");
my %mailparams = ( my %mailparams = (
'smtpFrom' => {'attr'=>'smtpFrom', 'default'=>'', 'required'=>1, 'set'=>1}, 'smtpFrom' => {'attr'=>'smtpFrom', 'default'=>'', 'required'=>1, 'set'=>1},
@ -10748,8 +10814,9 @@ sub _sendEmail {
$data{SSCam}{$name}{PARAMS}{$tac}{$key} = $mailparams{$key}->{default} if (!$extparamref->{$key} && !$mailparams{$key}->{attr}); $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}); $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/x);
Log3($name, 4, "$name - param $key is set") if($key =~ /sdat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne ''); Log3 ($name, 4, "$name - param $key is now >".$data{SSCam}{$name}{PARAMS}{$tac}{$key}."< ") if($key !~ /sdat/x);
Log3 ($name, 4, "$name - param $key is set") if($key =~ /sdat/x && $data{SSCam}{$name}{PARAMS}{$tac}{$key} ne '');
} }
$data{SSCam}{$name}{PARAMS}{$tac}{name} = $name; $data{SSCam}{$name}{PARAMS}{$tac}{name} = $name;
@ -10758,6 +10825,7 @@ sub _sendEmail {
for my $key (keys(%mailparams)) { for my $key (keys(%mailparams)) {
push(@err, $key) if ($mailparams{$key}->{required} && !$data{SSCam}{$name}{PARAMS}{$tac}{$key}); push(@err, $key) if ($mailparams{$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");
@ -12501,11 +12569,11 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<br><br> <br><br>
<ul> <ul>
<li><b>set &lt;name&gt; on [&lt;rectime&gt;] <br> <li><b> on [&lt;rectime&gt;] <br>
[recEmailTxt:"subject => &lt;subject text&gt;, body => &lt;message text&gt;"] <br> [recEmailTxt:"subject => &lt;subject text&gt;, body => &lt;message text&gt;"] <br>
[recTelegramTxt:"tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br> [recTelegramTxt:"tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;], option => [silent]"] <br>
[recChatTxt:"chatbot => &lt;SSChatBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br> [recChatTxt:"chatbot => &lt;SSChatBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br>
</b> &nbsp;&nbsp;&nbsp;&nbsp;(valid for CAM)</li> <br> </b> &nbsp;&nbsp;&nbsp;&nbsp;(valid for CAM)</li> <br>
A recording will be started. The default recording time is 15 seconds. It can be individually changed by A recording will be started. The default recording time is 15 seconds. It can be individually changed by
the <a href="#SSCamattr">attribute</a> "rectime". the <a href="#SSCamattr">attribute</a> "rectime".
@ -12560,13 +12628,17 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<b>Examples: </b> <br><br> <b>Examples: </b> <br><br>
set &lt;name&gt; on [rectime] <br> set &lt;name&gt; on [rectime] <br>
# starts a recording, stops automatically after [rectime] <br> # starts a recording, stops automatically after [rectime] <br><br>
<code> set &lt;name&gt; on 0 </code><br> <code> set &lt;name&gt; on 0 </code><br>
# starts a permanent record which must be stopped with the "off"-command. <br> # starts a permanent record which must be stopped with the "off"-command. <br><br>
<code> set &lt;name&gt; on recEmailTxt:"subject => New recording for $CAM created, body => The last recording of $CAM is atteched." </code><br> <code> set &lt;name&gt; on recEmailTxt:"subject => New recording for $CAM created, body => The last recording of $CAM is atteched." </code><br>
# starts a recording and send it after completion by Email. <br> # starts a recording and send it after completion by Email. <br><br>
<code> set &lt;name&gt; on recTelegramTxt:"tbot => teleBot, peers => @xxxx , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME" </code><br>
# starts a recording and send it after completion by Telegram. <br> <code> set &lt;name&gt; on recTelegramTxt:"tbot => teleBot, peers => @xxxx , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME, option => silent" </code><br>
# starts a recording and send it after completion by Telegram in silent-mode. <br><br>
<code> set &lt;name&gt; on recChatTxt:"chatbot => SynChatBot, peers => , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME." </code><br> <code> set &lt;name&gt; on recChatTxt:"chatbot => SynChatBot, peers => , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME." </code><br>
# starts a recording and send it after completion by Synology Chat. <br> # starts a recording and send it after completion by Synology Chat. <br>
</ul> </ul>
@ -12731,7 +12803,7 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<li><b> snap [&lt;number&gt;] [&lt;time difference&gt;] <br> <li><b> snap [&lt;number&gt;] [&lt;time difference&gt;] <br>
[snapEmailTxt:"subject => &lt;subject text&gt;, body => &lt;message text&gt;"] <br> [snapEmailTxt:"subject => &lt;subject text&gt;, body => &lt;message text&gt;"] <br>
[snapTelegramTxt:"tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br> [snapTelegramTxt:"tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;], option => [silent]"] <br>
[snapChatTxt:"chatbot => &lt;SSChatBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br> [snapChatTxt:"chatbot => &lt;SSChatBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;]"] <br>
</b> &nbsp;&nbsp;&nbsp;&nbsp;(valid for CAM)</li> <br> </b> &nbsp;&nbsp;&nbsp;&nbsp;(valid for CAM)</li> <br>
@ -12771,7 +12843,7 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
set &lt;name&gt; snap set &lt;name&gt; snap
set &lt;name&gt; snap 4 set &lt;name&gt; snap 4
set &lt;name&gt; snap 3 3 snapEmailTxt:"subject => Movement alarm $CAM, body => A movement was recognised at Carport" set &lt;name&gt; snap 3 3 snapEmailTxt:"subject => Movement alarm $CAM, body => A movement was recognised at Carport"
set &lt;name&gt; snap 2 snapTelegramTxt:"tbot => teleBot, peers => , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME" set &lt;name&gt; snap 2 snapTelegramTxt:"tbot => teleBot, peers => , subject => Movement alarm by $CAM. The snapshot $FILE was created at $CTIME, option => silent"
set &lt;name&gt; snap 2 snapChatTxt:"chatbot => SynChatBot , peers => Frodo Sam, subject => Movement alarm by $CAM. At $CTIME the snapshot $FILE was created. Now it is: $TIME." set &lt;name&gt; snap 2 snapChatTxt:"chatbot => SynChatBot , peers => Frodo Sam, subject => Movement alarm by $CAM. At $CTIME the snapshot $FILE was created. Now it is: $TIME."
</pre> </pre>
</ul> </ul>
@ -13484,13 +13556,26 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
</li> </li>
<a name="recTelegramTxt"></a> <a name="recTelegramTxt"></a>
<li><b>recTelegramTxt tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;] </b><br> <li><b>recTelegramTxt tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Text&gt;], option => [silent] </b><br>
Activates the permanent shipping of recordings by TelegramBot after their creation. <br> Enables permanent sending of recordings after their creation via TelegramBot. <br>
The attribute has to be definied in the form as described. With key "tbot" the TelegramBot device is specified, The attribute must be defined in the specified form.
which is used for shipping the data. Of course, the <a href="http://fhem.de/commandref.html#TelegramBot">TelegramBot device</a> For optional specifications, the key must be specified >empty<. <br><br>
must be available and has to be running well. <br>
The setting of "peers" and "subject" is optional, but the keys must (empty) specified. Meaning of the keys: <br><br>
If "peer" is empty, the default peer of the TelegramBot device is used. <br><br>
<ul>
<table>
<colgroup> <col width=20%> <col width=80%> </colgroup>
<tr><td> tbot </td><td> Name of the <a href="http://fhem.de/commandref.html#TelegramBot">TelegramBot-Device</a> </td></tr>
<tr><td> peers </td><td> List of recipients separated by spaces (optional). </td></tr>
<tr><td> </td><td> It can be specified <b>r:&lt;Reading&gt;</b> to read the recipients from the &lt;Reading&gt;. </td></tr>
<tr><td> </td><td> If peers is not specified, the default peer of the TelegramBot device is used. </td></tr>
<tr><td> subject </td><td> the text to be transmitted (optional) </td></tr>
<tr><td> option </td><td> possible TelegramBot sending options described below (optional) </td></tr>
<tr><td> </td><td> <b>silent</b> : the signaling at the receiver is suppressed </td></tr>
</table>
</ul>
<br>
You can use the following placeholders within "subject". <br><br> You can use the following placeholders within "subject". <br><br>
@ -13512,6 +13597,8 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; r:peerTelegram, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; without signalization, option =&gt; silent <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Motion alarm from $CAM. At $CTIME the recording $FILE was created. Now it is $TIME. <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Motion alarm from $CAM. At $CTIME the recording $FILE was created. Now it is $TIME. <br>
<br> <br>
</li><br> </li><br>
@ -13651,14 +13738,27 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
</li> </li>
<a name="snapTelegramTxt"></a> <a name="snapTelegramTxt"></a>
<li><b>snapTelegramTxt tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;] </b><br> <li><b>snapTelegramTxt tbot => &lt;TelegramBot device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;subject text&gt;], option => [silent] </b><br>
Activates the permanent shipping of snapshots by TelegramBot after their creation. If several snapshots were triggert, Enables permanent sending of snapshots after their creation via TelegramBot.
they will be sequentially delivered.<br> If several snapshots were triggered, they are sent sequentially. <br>
The attribute has to be defined in the form as described. With key "tbot" the TelegramBot device is specified, The attribute must be defined in the specified form.
which is used for shipping the data. Of course, the <a href="http://fhem.de/commandref.html#TelegramBot">TelegramBot device</a> For optional specifications, the key must be specified >empty<. <br><br>
must be available and has to be running well. <br>
The setting of "peers" and "subject" is optional, but the keys must (empty) specified. Meaning of the keys: <br><br>
If "peer" is empty, the default peer of the TelegramBot device is used. <br><br>
<ul>
<table>
<colgroup> <col width=20%> <col width=80%> </colgroup>
<tr><td> tbot </td><td> Name of the <a href="http://fhem.de/commandref.html#TelegramBot">TelegramBot-Device</a> </td></tr>
<tr><td> peers </td><td> List of recipients separated by spaces (optional). </td></tr>
<tr><td> </td><td> It can be specified <b>r:&lt;Reading&gt;</b> to read the recipients from the &lt;Reading&gt;. </td></tr>
<tr><td> </td><td> If peers is not specified, the default peer of the TelegramBot device is used. </td></tr>
<tr><td> subject </td><td> the text to be transmitted (optional) </td></tr>
<tr><td> option </td><td> possible TelegramBot sending options described below (optional) </td></tr>
<tr><td> </td><td> <b>silent</b> : the signaling at the receiver is suppressed </td></tr>
</table>
</ul>
<br>
You can use the following placeholders within "subject". <br><br> You can use the following placeholders within "subject". <br><br>
@ -13680,6 +13780,8 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; r:peerTelegram, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; without signalization, option =&gt; silent <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Motion alarm from $CAM. At $CTIME the snapshot $FILE was created <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Motion alarm from $CAM. At $CTIME the snapshot $FILE was created <br>
<br> <br>
</li><br> </li><br>
@ -14493,10 +14595,10 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<ul> <ul>
<li><b> on [&lt;rectime&gt;] <br> <li><b> on [&lt;rectime&gt;] <br>
[recEmailTxt:"subject => &lt;Betreff-Text&gt;, body => &lt;Mitteilung-Text&gt;"] <br> [recEmailTxt:"subject => &lt;Betreff-Text&gt;, body => &lt;Mitteilung-Text&gt;"] <br>
[recTelegramTxt:"tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] <br> [recTelegramTxt:"tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;], option => [silent]"] <br>
[recChatTxt:"chatbot => &lt;SSChatBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] </b> <br> [recChatTxt:"chatbot => &lt;SSChatBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] </b> <br>
&nbsp;&nbsp;&nbsp;&nbsp;(gilt für CAM) &nbsp;&nbsp;&nbsp;&nbsp;(gilt für CAM)
</li> </li>
<br> <br>
@ -14554,13 +14656,17 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<b>Beispiele </b>: <br> <b>Beispiele </b>: <br>
<code> set &lt;name&gt; on [rectime] </code><br> <code> set &lt;name&gt; on [rectime] </code><br>
# startet die Aufnahme der Kamera &lt;name&gt;, automatischer Stop der Aufnahme nach Ablauf der Zeit [rectime] # startet die Aufnahme der Kamera &lt;name&gt;, automatischer Stop der Aufnahme nach Ablauf der Zeit [rectime]
(default 15s oder wie im <a href="#SSCamattr">Attribut</a> "rectime" angegeben) <br> (default 15s oder wie im <a href="#SSCamattr">Attribut</a> "rectime" angegeben) <br><br>
<code> set &lt;name&gt; on 0 </code><br> <code> set &lt;name&gt; on 0 </code><br>
# startet eine Daueraufnahme die mit "off" gestoppt werden muss. <br> # startet eine Daueraufnahme die mit "off" gestoppt werden muss. <br><br>
<code> set &lt;name&gt; on recEmailTxt:"subject => Neue Aufnahme $CAM, body => Die aktuelle Aufnahme von $CAM ist angehängt." </code><br> <code> set &lt;name&gt; on recEmailTxt:"subject => Neue Aufnahme $CAM, body => Die aktuelle Aufnahme von $CAM ist angehängt." </code><br>
# startet eine Aufnahme und versendet sie nach Beendigung per Email. <br> # startet eine Aufnahme und versendet sie nach Beendigung per Email. <br><br>
<code> set &lt;name&gt; on recTelegramTxt:"tbot => teleBot, peers => @xxxx , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt" </code><br>
# startet eine Aufnahme und versendet sie nach Beendigung per Telegram. <br> <code> set &lt;name&gt; on recTelegramTxt:"tbot => teleBot, peers => @xxxx , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt, option => silent" </code><br>
# startet eine Aufnahme und versendet sie nach Beendigung per Telegram im Silent-Mode. <br><br>
<code> set &lt;name&gt; on recChatTxt:"chatbot => SynChatBot, peers => , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt. Jetzt ist es $TIME." </code><br> <code> set &lt;name&gt; on recChatTxt:"chatbot => SynChatBot, peers => , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt. Jetzt ist es $TIME." </code><br>
# startet eine Aufnahme und versendet sie nach Beendigung per Synology Chat. <br> # startet eine Aufnahme und versendet sie nach Beendigung per Synology Chat. <br>
@ -14738,7 +14844,7 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<ul> <ul>
<li><b> snap [&lt;Anzahl&gt;] [&lt;Zeitabstand&gt;] <br> <li><b> snap [&lt;Anzahl&gt;] [&lt;Zeitabstand&gt;] <br>
[snapEmailTxt:"subject => &lt;Betreff-Text&gt;, body => &lt;Mitteilung-Text&gt;"] <br> [snapEmailTxt:"subject => &lt;Betreff-Text&gt;, body => &lt;Mitteilung-Text&gt;"] <br>
[snapTelegramTxt:"tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] <br> [snapTelegramTxt:"tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;], option => [silent]"] <br>
[snapChatTxt:"chatbot => &lt;SSChatBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] <br> [snapChatTxt:"chatbot => &lt;SSChatBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;]"] <br>
</b> &nbsp;&nbsp;&nbsp;&nbsp;(gilt für CAM)</li> <br> </b> &nbsp;&nbsp;&nbsp;&nbsp;(gilt für CAM)</li> <br>
@ -14766,19 +14872,21 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
gezeigt, temporär überschrieben bzw. geändert werden. Sollte das Attribut "snapEmailTxt" nicht gesetzt sein, wird durch Angabe dieses Tags gezeigt, temporär überschrieben bzw. geändert werden. Sollte das Attribut "snapEmailTxt" nicht gesetzt sein, wird durch Angabe dieses Tags
der Email-Versand einmalig aktiviert. (die Tag-Syntax entspricht dem "snapEmailTxt"-Attribut) <br><br> der Email-Versand einmalig aktiviert. (die Tag-Syntax entspricht dem "snapEmailTxt"-Attribut) <br><br>
Ein <b>Telegram-Versand</b> der Schnappschüsse kann durch Setzen des Attributs <a href="#snapTelegramTxt">snapTelegramTxt</a> permanent aktiviert Ein <b>Telegram-Versand</b> der Schnappschüsse kann durch Setzen des Attributs
werden. Das zu verwendende <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> muss natürlich <a href="#snapTelegramTxt">snapTelegramTxt</a> permanent aktiviert werden.
Das zu verwendende <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> muss natürlich
funktionstüchtig eingerichtet sein. <br> funktionstüchtig eingerichtet sein. <br>
Der Text im Attribut "snapTelegramTxt" kann durch die Spezifikation des optionalen "snapTelegramTxt:"-Tags, wie oben Der Text im Attribut "snapTelegramTxt" kann durch die Spezifikation des optionalen "snapTelegramTxt:"-Tags, wie oben
gezeigt, temporär überschrieben bzw. geändert werden. Sollte das Attribut "snapTelegramTxt" nicht gesetzt sein, wird durch Angabe dieses Tags gezeigt, temporär überschrieben bzw. geändert werden. Sollte das Attribut "snapTelegramTxt" nicht gesetzt sein, wird
der Telegram-Versand einmalig aktiviert. (die Tag-Syntax entspricht dem "snapTelegramTxt"-Attribut) <br><br> durch Angabe dieses Tags der Telegram-Versand einmalig aktiviert.
(die Tag-Syntax entspricht dem "snapTelegramTxt"-Attribut) <br><br>
<b>Beispiele:</b> <b>Beispiele:</b>
<pre> <pre>
set &lt;name&gt; snap set &lt;name&gt; snap
set &lt;name&gt; snap 4 set &lt;name&gt; snap 4
set &lt;name&gt; snap 3 3 snapEmailTxt:"subject => Bewegungsalarm $CAM, body => Eine Bewegung wurde am Carport registriert" set &lt;name&gt; snap 3 3 snapEmailTxt:"subject => Bewegungsalarm $CAM, body => Eine Bewegung wurde am Carport registriert"
set &lt;name&gt; snap 2 snapTelegramTxt:"tbot => teleBot, peers => , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt" set &lt;name&gt; snap 2 snapTelegramTxt:"tbot => teleBot, peers => , subject => Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt, option => silent"
set &lt;name&gt; snap 2 snapChatTxt:"chatbot => SynChatBot , peers => Frodo Sam, subject => Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt. Jetzt ist es: $TIME." set &lt;name&gt; snap 2 snapChatTxt:"chatbot => SynChatBot , peers => Frodo Sam, subject => Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt. Jetzt ist es: $TIME."
</pre> </pre>
</ul> </ul>
@ -15518,13 +15626,26 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
</li> </li>
<a name="recTelegramTxt"></a> <a name="recTelegramTxt"></a>
<li><b>recTelegramTxt tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;] </b><br> <li><b>recTelegramTxt tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Text&gt;], option => [silent] </b><br>
Aktiviert den permanenten Versand von Aufnahmen nach deren Erstellung per TelegramBot. <br> Aktiviert den permanenten Versand von Aufnahmen nach deren Erstellung per TelegramBot. <br>
Das Attribut muß in der angegebenen Form definiert werden. Im Schlüssel "tbot" ist das TelegramBot-Device Das Attribut muß in der angegebenen Form definiert werden.
anzugeben, welches für den Versand der Daten verwendet werden soll. Bei optionalen Angaben muß der Schlüssel >leer< angegeben werden. <br><br>
Das <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> muss natürlich vorhanden und funktionstüchtig sein. <br>
Die Angabe von "peers" und "subject" ist optional, jedoch muß der Schlüssel (leer) angegeben werden. Bedeutung der Schlüssel: <br><br>
Wurde "peers" leer gelassen, wird der Default-Peer des TelegramBot-Device verwendet. <br><br>
<ul>
<table>
<colgroup> <col width=20%> <col width=80%> </colgroup>
<tr><td> tbot </td><td> Name des <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> </td></tr>
<tr><td> peers </td><td> Durch Leerzeichen getrennte Liste der Empfänger (optional). </td></tr>
<tr><td> </td><td> Es kann <b>r:&lt;Reading&gt;</b> angegeben werden um die Empfänger aus dem &lt;Reading&gt; zu lesen. </td></tr>
<tr><td> </td><td> Ist peers nicht angegeben, wird der Default-Peer des TelegramBot-Device verwendet. </td></tr>
<tr><td> subject </td><td> der zu übermittelnde Text (optional) </td></tr>
<tr><td> option </td><td> mögliche nachfolgend beschriebene TelegramBot Sendeoptionen (optional) </td></tr>
<tr><td> </td><td> <b>silent</b> : die Signalisierung beim Empfänger wird unterdrückt </td></tr>
</table>
</ul>
<br>
Es können die folgenden Platzhalter im subject verwendet werden. <br><br> Es können die folgenden Platzhalter im subject verwendet werden. <br><br>
@ -15546,6 +15667,8 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; r:peerTelegram, subject =&gt; <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; ohne Signalisierung, option =&gt; silent <br>
attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt. Jetzt ist es $TIME. <br> attr &lt;device&gt; recTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Bewegungsalarm bei $CAM. Es wurde $CTIME die Aufnahme $FILE erstellt. Jetzt ist es $TIME. <br>
<br> <br>
</li><br> </li><br>
@ -15687,14 +15810,27 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
</li> </li>
<a name="snapTelegramTxt"></a> <a name="snapTelegramTxt"></a>
<li><b>snapTelegramTxt tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;] </b><br> <li><b>snapTelegramTxt tbot => &lt;TelegramBot-Device&gt;, peers => [&lt;peer1 peer2 ...&gt;], subject => [&lt;Betreff-Text&gt;], option => [silent] </b><br>
Aktiviert den permanenten Versand von Schnappschüssen nach deren Erstellung per TelegramBot. Wurden mehrere Schnappschüsse ausgelöst, Aktiviert den permanenten Versand von Schnappschüssen nach deren Erstellung per TelegramBot.
werden sie sequentiell versendet.<br> Wurden mehrere Schnappschüsse ausgelöst, werden sie sequentiell versendet.<br>
Das Attribut muß in der angegebenen Form definiert werden. Im Schlüssel "tbot" ist das TelegramBot-Device Das Attribut muß in der angegebenen Form definiert werden.
anzugeben, welches für den Versand der Daten verwendet werden soll. Bei optionalen Angaben muß der Schlüssel >leer< angegeben werden. <br><br>
Das <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> muss natürlich vorhanden und funktionstüchtig sein. <br>
Die Angabe von "peers" und "subject" ist optional, jedoch muß der Schlüssel (leer) angegeben werden. Bedeutung der Schlüssel: <br><br>
Wurde "peer" leer gelassen, wird der Default-Peer des TelegramBot-Devices verwendet. <br><br>
<ul>
<table>
<colgroup> <col width=20%> <col width=80%> </colgroup>
<tr><td> tbot </td><td> Name des <a href="http://fhem.de/commandref_DE.html#TelegramBot">TelegramBot-Device</a> </td></tr>
<tr><td> peers </td><td> Durch Leerzeichen getrennte Liste der Empfänger (optional). </td></tr>
<tr><td> </td><td> Es kann <b>r:&lt;Reading&gt;</b> angegeben werden um die Empfänger aus dem &lt;Reading&gt; zu lesen. </td></tr>
<tr><td> </td><td> Ist peers nicht angegeben, wird der Default-Peer des TelegramBot-Device verwendet. </td></tr>
<tr><td> subject </td><td> der zu übermittelnde Text (optional) </td></tr>
<tr><td> option </td><td> mögliche nachfolgend beschriebene TelegramBot Sendeoptionen (optional) </td></tr>
<tr><td> </td><td> <b>silent</b> : die Signalisierung beim Empfänger wird unterdrückt </td></tr>
</table>
</ul>
<br>
Es können folgende Platzhalter im subject verwendet werden. <br><br> Es können folgende Platzhalter im subject verwendet werden. <br><br>
@ -15716,9 +15852,12 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; #nabugroup, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; -123456, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; r:peerTelegram, subject =&gt; <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; ohne Signalisierung, option =&gt; silent <br>
attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt <br> attr &lt;device&gt; snapTelegramTxt tbot =&gt; teleBot, peers =&gt; , subject =&gt; Bewegungsalarm bei $CAM. Es wurde $CTIME der Schnappschuss $FILE erstellt <br>
<br> <br>
</li><br> <br>
</li>
<a name="snapGalleryBoost"></a> <a name="snapGalleryBoost"></a>
<li><b>snapGalleryBoost</b><br> <li><b>snapGalleryBoost</b><br>