diff --git a/FHEM/98_telnet.pm b/FHEM/98_telnet.pm
index e3c9b4a42..a2d31d498 100644
--- a/FHEM/98_telnet.pm
+++ b/FHEM/98_telnet.pm
@@ -21,9 +21,32 @@ telnet_Initialize($)
$hash->{AttrFn} = "telnet_Attr";
$hash->{NotifyFn}= "telnet_SecurityCheck";
$hash->{AttrList} = "loglevel:0,1,2,3,4,5,6 globalpassword password ".
- "allowfrom SSL connectTimeout connectInterval";
+ "allowfrom SSL connectTimeout connectInterval ".
+ "encoding:utf8,latin1";
$hash->{ActivateInformFn} = "telnet_ActivateInform";
+ my %lhash = ( Fn=>"CommandTelnetEncoding",
+ ClientFilter => "telnet",
+ Hlp=>"[utf8|latin1],query and set the character encoding for the current telnet session" );
+ $cmds{encoding} = \%lhash;
+}
+sub
+CommandTelnetEncoding($$)
+{
+ my ($hash, $param) = @_;
+
+ my $ret = "";
+
+ if( !$param ) {
+ $ret = "current encoding is $hash->{encoding}";
+ } elsif( $param eq "utf8" || $param eq "latin1" ) {
+ $hash->{encoding} = $param;
+ $ret = "encoding changed to $param";
+ } else {
+ $ret = "unknown encoding >>$param<<";
+ }
+
+ return $ret;
}
#####################################
@@ -160,6 +183,7 @@ telnet_Read($)
if($hash->{SERVERSOCKET}) { # Accept and create a child
my $chash = TcpServer_Accept($hash, "telnet");
return if(!$chash);
+ $chash->{encoding} = AttrVal($name, "encoding", "utf8");
syswrite($chash->{CD}, sprintf("%c%c%cPassword: ", 255, 251, 1)) # WILL ECHO
if(telnet_pw($name, $chash->{NAME}));
return;
@@ -251,6 +275,7 @@ telnet_Read($)
$ret .= ($hash->{prevlines} ? "> " : "fhem> ")
if($gotCmd && $hash->{prompt} && !$hash->{rcvdQuit});
if($ret) {
+ $ret = utf8ToLatin1($ret) if( $hash->{encoding} eq "latin1" );
$ret =~ s/\n/\r\n/g if($pw); # only for DOS telnet
for(;;) {
my $l = syswrite($hash->{CD}, $ret);
@@ -429,6 +454,11 @@ telnet_ActivateInform($)
try to connect again after this many seconds. Default is 60.
+
+