From 669f32a3d9a6a426b59cca27e96604ec3ec5b4ff Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Fri, 18 Feb 2022 17:07:09 +0000 Subject: [PATCH] 00_MQTT2_CLIENT.pm: add encoding unicode support git-svn-id: https://svn.fhem.de/fhem/trunk@25700 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_MQTT2_CLIENT.pm | 10 +++++++++- fhem/fhem.pl | 8 ++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/fhem/FHEM/00_MQTT2_CLIENT.pm b/fhem/FHEM/00_MQTT2_CLIENT.pm index 4bffef3bf..bac66b408 100644 --- a/fhem/FHEM/00_MQTT2_CLIENT.pm +++ b/fhem/FHEM/00_MQTT2_CLIENT.pm @@ -500,6 +500,7 @@ MQTT2_CLIENT_Read($@) $off += 2; } $val = substr($pl, $off); + $val = Encode::decode('UTF-8', $val) if($unicodeEncoding); MQTT2_CLIENT_send($hash, pack("CCnC*", 0x40, 2, $pid)) if($qos); # PUBACK MQTT2_CLIENT_updateDisconnectTimer($hash); @@ -565,6 +566,11 @@ MQTT2_CLIENT_doPublish($@) push(@{$hash->{qosQueue}}, [$topic,$val,$retain]); $pi = pack("n",1+($hash->{qosCnt}++%65535)); # Packet Identifier, if QoS > 0 } + + if($unicodeEncoding) { + $topic = Encode::encode('UTF-8', $topic); + $val = Encode::encode('UTF-8', $val); + } my $msg = pack("C", $hdr). MQTT2_CLIENT_calcRemainingLength(2+length($topic)+length($val)+ length($pi)). @@ -660,7 +666,9 @@ MQTT2_CLIENT_getStr($$) { my ($in, $off) = @_; my $l = unpack("n", substr($in, $off, 2)); - return (substr($in, $off+2, $l), $off+2+$l); + my $r = substr($in, $off+2, $l); + $r = Encode::decode('UTF-8', $r) if($unicodeEncoding); + return ($r, $off+2+$l); } 1; diff --git a/fhem/fhem.pl b/fhem/fhem.pl index e89e2f034..4ead114ef 100755 --- a/fhem/fhem.pl +++ b/fhem/fhem.pl @@ -3862,8 +3862,12 @@ DoTrigger($$@) my $event = $events->[$i]; my $t = (($ct && $ct->[$i]) ? $ct->[$i] : $tn); next if($re && !($dev =~ m/$re/ || "$dev:$event" =~ m/$re/)); - addToWritebuffer($dc,($inform{$c}{type} eq "timer" ? "$t " : ""). - "$hash->{TYPE} $dev $event\n"); + + my $txt = ($inform{$c}{type} eq "timer" ? "$t " : ""). + "$hash->{TYPE} $dev $event\n"; + my $enc = $dc->{encoding} && $dc->{encoding} eq "latin1" ? "Latin1":"UTF-8"; + $txt = Encode::encode($enc, $txt); + addToWritebuffer($dc, $txt); } } }