mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-28 17:12:32 +00:00
50_SSChatBot: contrib 1.7.0
git-svn-id: https://svn.fhem.de/fhem/trunk@22035 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
a9af0c5c5b
commit
b6afc96886
@ -49,6 +49,7 @@ eval "use Net::Domain qw(hostname hostfqdn hostdomain domainname);1" or my $SSC
|
|||||||
|
|
||||||
# Versions History intern
|
# Versions History intern
|
||||||
my %SSChatBot_vNotesIntern = (
|
my %SSChatBot_vNotesIntern = (
|
||||||
|
"1.7.0" => "26.05.2020 send SVG Plots ",
|
||||||
"1.6.1" => "22.05.2020 changes according to PBP ",
|
"1.6.1" => "22.05.2020 changes according to PBP ",
|
||||||
"1.6.0" => "22.05.2020 replace \" H\" with \"%20H\" in attachments due to problem in HttpUtils ",
|
"1.6.0" => "22.05.2020 replace \" H\" with \"%20H\" in attachments due to problem in HttpUtils ",
|
||||||
"1.5.0" => "15.03.2020 slash commands set in interactive answer field 'value' will be executed ",
|
"1.5.0" => "15.03.2020 slash commands set in interactive answer field 'value' will be executed ",
|
||||||
@ -365,8 +366,9 @@ sub SSChatBot_Set { ## no critic 'complexity'
|
|||||||
# text="<https://www.synology.com>" users="user1"
|
# text="<https://www.synology.com>" users="user1"
|
||||||
# text="Check this!! <https://www.synology.com|Click here> for details!" users="user1,user2"
|
# text="Check this!! <https://www.synology.com|Click here> for details!" users="user1,user2"
|
||||||
# text="a fun image" fileUrl="http://imgur.com/xxxxx" users="user1,user2"
|
# text="a fun image" fileUrl="http://imgur.com/xxxxx" users="user1,user2"
|
||||||
|
# text="aktuelles SVG-Plot" svg="<SVG-Device>" users="user1,user2"
|
||||||
return if(!$hash->{HELPER}{USERFETCHED});
|
return if(!$hash->{HELPER}{USERFETCHED});
|
||||||
my ($text,$users);
|
my ($text,$users,$svgdev);
|
||||||
my ($fileUrl,$attachment) = ("","");
|
my ($fileUrl,$attachment) = ("","");
|
||||||
my $cmd = join(" ", map { my $p = $_; $p =~ s/\s//g; $p; } @items);
|
my $cmd = join(" ", map { my $p = $_; $p =~ s/\s//g; $p; } @items);
|
||||||
my ($arr,$h) = parseParams($cmd);
|
my ($arr,$h) = parseParams($cmd);
|
||||||
@ -374,7 +376,8 @@ sub SSChatBot_Set { ## no critic 'complexity'
|
|||||||
if($h) {
|
if($h) {
|
||||||
$text = $h->{text} if(defined $h->{text});
|
$text = $h->{text} if(defined $h->{text});
|
||||||
$users = $h->{users} if(defined $h->{users});
|
$users = $h->{users} if(defined $h->{users});
|
||||||
$fileUrl = $h->{fileUrl} if(defined $h->{fileUrl});
|
$fileUrl = $h->{fileUrl} if(defined $h->{fileUrl}); # ein File soll über einen Link hochgeladen und versendet werden
|
||||||
|
$svgdev = $h->{svg} if(defined $h->{svg}); # ein SVG-Plot soll versendet werden
|
||||||
$attachment = SSChatBot_formString($h->{attachments}, "attachement") if(defined $h->{attachments});
|
$attachment = SSChatBot_formString($h->{attachments}, "attachement") if(defined $h->{attachments});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,7 +387,20 @@ sub SSChatBot_Set { ## no critic 'complexity'
|
|||||||
$text = join(" ", @t) if(!$text);
|
$text = join(" ", @t) if(!$text);
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Your sendstring is incorrect. It must contain at least text with the \"text=\" tag like text=\"...\"\nor only some text like \"this is a test\" without the \"text=\" tag." if(!$text);
|
if($svgdev) { # Versenden eines Plotfiles
|
||||||
|
my ($err, $file) = SSChatBot_PlotToFile ($name, $svgdev);
|
||||||
|
return if($err);
|
||||||
|
|
||||||
|
my $FW = $hash->{FW};
|
||||||
|
my $csrf = $defs{$FW}{CSRFTOKEN} // "";
|
||||||
|
$fileUrl = (split("sschat", $hash->{OUTDEF}))[0];
|
||||||
|
$fileUrl .= "sschat/www/images/$file?&fwcsrf=$csrf";
|
||||||
|
|
||||||
|
$fileUrl = SSChatBot_formString($fileUrl, "text");
|
||||||
|
$text = $svgdev if(!$text); # Name des SVG-Plots als Standardtext
|
||||||
|
}
|
||||||
|
|
||||||
|
return qq{Your sendstring is incorrect. It must contain at least text with the "text=" tag like text="..."\nor only some text like "this is a test" without the "text=" tag.} if(!$text);
|
||||||
|
|
||||||
$text = SSChatBot_formString($text, "text");
|
$text = SSChatBot_formString($text, "text");
|
||||||
|
|
||||||
@ -628,14 +644,14 @@ sub SSChatBot_initonboot {
|
|||||||
|
|
||||||
my $host = hostname(); # eigener Host
|
my $host = hostname(); # eigener Host
|
||||||
my $fqdn = hostfqdn(); # MYFQDN eigener Host
|
my $fqdn = hostfqdn(); # MYFQDN eigener Host
|
||||||
chop($fqdn) if($fqdn =~ /^.*\.$/); # eventuellen "." nach dem FQDN entfernen
|
chop($fqdn) if($fqdn =~ /\.$/); # eventuellen "." nach dem FQDN entfernen
|
||||||
my $FWchatport = $defs{$FW}{PORT};
|
my $FWchatport = $defs{$FW}{PORT};
|
||||||
my $FWprot = AttrVal($FW, "HTTPS", 0);
|
my $FWprot = AttrVal($FW, "HTTPS", 0);
|
||||||
$FWname = AttrVal($FW, "webname", 0);
|
$FWname = AttrVal($FW, "webname", 0);
|
||||||
CommandAttr(undef, "$FW csrfToken none") if(!AttrVal($FW, "csrfToken", ""));
|
CommandAttr(undef, "$FW csrfToken none") if(!AttrVal($FW, "csrfToken", ""));
|
||||||
$csrf = $defs{$FW}{CSRFTOKEN}?$defs{$FW}{CSRFTOKEN}:"";
|
$csrf = $defs{$FW}{CSRFTOKEN} // "";
|
||||||
|
|
||||||
$hash->{OUTDEF} = ($FWprot?"https":"http")."://".($fqdn?$fqdn:$host).":".$FWchatport."/".$FWname."/outchat?botname=".$name."&fwcsrf=".$csrf;
|
$hash->{OUTDEF} = ($FWprot ? "https" : "http")."://".($fqdn // $host).":".$FWchatport."/".$FWname."/outchat?botname=".$name."&fwcsrf=".$csrf;
|
||||||
|
|
||||||
SSChatBot_addExtension($name, "SSChatBot_CGI", "outchat");
|
SSChatBot_addExtension($name, "SSChatBot_CGI", "outchat");
|
||||||
$hash->{HELPER}{INFIX} = "outchat";
|
$hash->{HELPER}{INFIX} = "outchat";
|
||||||
@ -658,13 +674,10 @@ sub SSChatBot_addQueue ($$$$$$$$) {
|
|||||||
my $hash = $defs{$name};
|
my $hash = $defs{$name};
|
||||||
|
|
||||||
if(!$text && $opmode !~ /chatUserlist|chatChannellist/) {
|
if(!$text && $opmode !~ /chatUserlist|chatChannellist/) {
|
||||||
Log3($name, 2, "$name - ERROR - can't add message to queue: \"text\" is empty");
|
my $err = qq{can't add message to queue: "text" is empty};
|
||||||
|
Log3($name, 2, "$name - ERROR - $err");
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $err);
|
||||||
readingsBulkUpdateIfChanged ($hash,"Errorcode", "none");
|
|
||||||
readingsBulkUpdateIfChanged ($hash,"Error", "can't add message to queue: \"text\" is empty");
|
|
||||||
readingsBulkUpdate ($hash,"state", "Error");
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -847,13 +860,9 @@ sub SSChatBot_getapisites_parse {
|
|||||||
# wenn ein Fehler bei der HTTP Abfrage aufgetreten ist
|
# wenn ein Fehler bei der HTTP Abfrage aufgetreten ist
|
||||||
Log3($name, 2, "$name - ERROR message: $err");
|
Log3($name, 2, "$name - ERROR message: $err");
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $err);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Error", $err);
|
SSChatBot_checkretry ($name,1);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Errorcode", "none");
|
|
||||||
readingsBulkUpdate ($hash, "state", "Error");
|
|
||||||
readingsEndUpdate ($hash,1);
|
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} elsif ($myjson ne "") {
|
} elsif ($myjson ne "") {
|
||||||
@ -902,13 +911,8 @@ sub SSChatBot_getapisites_parse {
|
|||||||
$errorcode = "805";
|
$errorcode = "805";
|
||||||
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $error, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash,"Errorcode", $errorcode);
|
SSChatBot_checkretry ($name,1);
|
||||||
readingsBulkUpdateIfChanged ($hash,"Error", $error);
|
|
||||||
readingsBulkUpdate ($hash,"state", "Error");
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -916,12 +920,7 @@ sub SSChatBot_getapisites_parse {
|
|||||||
$errorcode = "806";
|
$errorcode = "806";
|
||||||
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $error, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Errorcode", $errorcode);
|
|
||||||
readingsBulkUpdateIfChanged ($hash, "Error", $error);
|
|
||||||
readingsBulkUpdate ($hash,"state", "Error");
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
|
|
||||||
Log3($name, 2, "$name - ERROR - the API-Query couldn't be executed successfully");
|
Log3($name, 2, "$name - ERROR - the API-Query couldn't be executed successfully");
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
SSChatBot_checkretry($name,1);
|
||||||
@ -952,12 +951,7 @@ sub SSChatBot_chatop {
|
|||||||
$errorcode = "810";
|
$errorcode = "810";
|
||||||
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $error, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Errorcode", $errorcode);
|
|
||||||
readingsBulkUpdateIfChanged ($hash, "Error", $error);
|
|
||||||
readingsBulkUpdate ($hash,"state", "Error");
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
|
|
||||||
Log3($name, 2, "$name - ERROR - $error");
|
Log3($name, 2, "$name - ERROR - $error");
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
SSChatBot_checkretry($name,1);
|
||||||
@ -1040,13 +1034,8 @@ sub SSChatBot_chatop_parse { ## no critic
|
|||||||
$errorcode = "none";
|
$errorcode = "none";
|
||||||
$errorcode = "800" if($err =~ /:\smalformed\sor\sunsupported\sURL$/xs);
|
$errorcode = "800" if($err =~ /:\smalformed\sor\sunsupported\sURL$/xs);
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $err, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Error", $err);
|
SSChatBot_checkretry ($name,1);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Errorcode", $errorcode);
|
|
||||||
readingsBulkUpdate ($hash, "state", "Error");
|
|
||||||
readingsEndUpdate ($hash,1);
|
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} elsif ($myjson ne "") {
|
} elsif ($myjson ne "") {
|
||||||
@ -1190,15 +1179,10 @@ sub SSChatBot_chatop_parse { ## no critic
|
|||||||
$cherror = $data->{'error'}->{'errors'}; # vom Chat gelieferter Fehler
|
$cherror = $data->{'error'}->{'errors'}; # vom Chat gelieferter Fehler
|
||||||
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
$error = SSChatBot_experror($hash,$errorcode); # Fehlertext zum Errorcode ermitteln
|
||||||
if ($error =~ /not found/) {
|
if ($error =~ /not found/) {
|
||||||
$error .= " New error: ".($cherror?$cherror:"");
|
$error .= " New error: ".($cherror // "");
|
||||||
}
|
}
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $error, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash,"Errorcode", $errorcode);
|
|
||||||
readingsBulkUpdateIfChanged ($hash,"Error", $error);
|
|
||||||
readingsBulkUpdate ($hash,"state", "Error");
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
|
|
||||||
Log3($name, 2, "$name - ERROR - Operation $opmode was not successful. Errorcode: $errorcode - $error");
|
Log3($name, 2, "$name - ERROR - Operation $opmode was not successful. Errorcode: $errorcode - $error");
|
||||||
|
|
||||||
SSChatBot_checkretry($name,1);
|
SSChatBot_checkretry($name,1);
|
||||||
@ -1229,10 +1213,7 @@ sub SSChatBot_evaljson {
|
|||||||
# Fehlertext zum Errorcode ermitteln
|
# Fehlertext zum Errorcode ermitteln
|
||||||
$error = SSChatBot_experror($hash,$errorcode);
|
$error = SSChatBot_experror($hash,$errorcode);
|
||||||
|
|
||||||
readingsBeginUpdate ($hash);
|
SSChatBot_setErrorState ($hash, $error, $errorcode);
|
||||||
readingsBulkUpdateIfChanged ($hash, "Errorcode", $errorcode);
|
|
||||||
readingsBulkUpdateIfChanged ($hash, "Error", $error);
|
|
||||||
readingsEndUpdate ($hash, 1);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return($hash,$success,$myjson);
|
return($hash,$success,$myjson);
|
||||||
@ -1504,6 +1485,27 @@ sub SSChatBot_formString {
|
|||||||
return ($txt);
|
return ($txt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
####################################################################################
|
||||||
|
# zentrale Funktion Error State in Readings setzen
|
||||||
|
# $error = Fehler als Text
|
||||||
|
# $errc = Fehlercode gemäß %SSChatBot_errlist
|
||||||
|
####################################################################################
|
||||||
|
sub SSChatBot_setErrorState {
|
||||||
|
my $hash = shift;
|
||||||
|
my $error = shift;
|
||||||
|
my $errc = shift;
|
||||||
|
|
||||||
|
my $errcode = $errc // "none";
|
||||||
|
|
||||||
|
readingsBeginUpdate ($hash);
|
||||||
|
readingsBulkUpdateIfChanged ($hash, "Error", $error);
|
||||||
|
readingsBulkUpdateIfChanged ($hash, "Errorcode", $errcode);
|
||||||
|
readingsBulkUpdate ($hash, "state", "Error");
|
||||||
|
readingsEndUpdate ($hash,1);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
# Clienthash übernehmen oder zusammenstellen
|
# Clienthash übernehmen oder zusammenstellen
|
||||||
# Identifikation ob über FHEMWEB ausgelöst oder nicht -> erstellen $hash->CL
|
# Identifikation ob über FHEMWEB ausgelöst oder nicht -> erstellen $hash->CL
|
||||||
@ -1567,6 +1569,40 @@ sub SSChatBot_delclhash {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
####################################################################################
|
||||||
|
# Ausgabe der SVG-Funktion "plotAsPng" in eine Datei schreiben
|
||||||
|
# Die Datei wird im Verzeichnis "/opt/fhem/www/images" erstellt
|
||||||
|
#
|
||||||
|
####################################################################################
|
||||||
|
sub SSChatBot_PlotToFile {
|
||||||
|
my $name = shift;
|
||||||
|
my $svgdev = shift;
|
||||||
|
my $hash = $defs{$name};
|
||||||
|
my $file = $name."_SendPlot.png";
|
||||||
|
my $path = $attr{global}{modpath}."/www/images";
|
||||||
|
my $err = "";
|
||||||
|
|
||||||
|
if(!$defs{$svgdev}) {
|
||||||
|
my $err = qq{SVG device "$svgdev" doesn't exist};
|
||||||
|
Log3($name, 1, "$name - ERROR - $err !");
|
||||||
|
|
||||||
|
SSChatBot_setErrorState ($hash, $err);
|
||||||
|
return $err;
|
||||||
|
}
|
||||||
|
|
||||||
|
open (my $FILE, ">", "$path/$file") or do {
|
||||||
|
my $err = qq{>PlotToFile< can't open $path/$file for write access};
|
||||||
|
Log3($name, 1, "$name - ERROR - $err !");
|
||||||
|
SSChatBot_setErrorState ($hash, $err);
|
||||||
|
return $err;
|
||||||
|
};
|
||||||
|
binmode $FILE;
|
||||||
|
print $FILE plotAsPng($svgdev);
|
||||||
|
close $FILE;
|
||||||
|
|
||||||
|
return ($err, $file);
|
||||||
|
}
|
||||||
|
|
||||||
#############################################################################################
|
#############################################################################################
|
||||||
# Versionierungen des Moduls setzen
|
# Versionierungen des Moduls setzen
|
||||||
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
|
# Die Verwendung von Meta.pm und Packages wird berücksichtigt
|
||||||
|
Loading…
x
Reference in New Issue
Block a user