From 2ff24811309f1eb3a16a9dad43891dc13bf135ca Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Mon, 16 Sep 2019 18:04:03 +0000 Subject: [PATCH] 00_MQTT2_CLIENT.pm: add sslargs, remove clientid restrictions (Forum #103717) git-svn-id: https://svn.fhem.de/fhem/trunk/fhem@20174 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- FHEM/00_MQTT2_CLIENT.pm | 23 +++++++++++++++++------ FHEM/DevIo.pm | 1 + 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/FHEM/00_MQTT2_CLIENT.pm b/FHEM/00_MQTT2_CLIENT.pm index d08231745..9c4ab4d8a 100644 --- a/FHEM/00_MQTT2_CLIENT.pm +++ b/FHEM/00_MQTT2_CLIENT.pm @@ -50,6 +50,7 @@ MQTT2_CLIENT_Initialize($) rawEvents subscriptions SSL + sslargs username ); use warnings 'qw'; @@ -68,9 +69,7 @@ MQTT2_CLIENT_Define($$) MQTT2_CLIENT_Undef($hash, undef) if($hash->{OLDDEF}); # modify $hash->{DeviceName} = $host; - $hash->{clientId} = $hash->{NAME}; - $hash->{clientId} =~ s/[^0-9a-zA-Z]//g; - $hash->{clientId} = "MQTT2_CLIENT" if(!$hash->{clientId}); + $hash->{clientId} = AttrVal($hash->{NAME}, "clientId", $hash->{NAME}); $hash->{connecting} = 1; InternalTimer(1, "MQTT2_CLIENT_connect", $hash, 0); # need attributes @@ -210,8 +209,14 @@ MQTT2_CLIENT_Attr(@) if($attrName eq "clientId") { $hash->{clientId} = $param[0]; - $hash->{clientId} =~ s/[^0-9a-zA-Z]//g; - $hash->{clientId} = "MQTT2_CLIENT" if(!$hash->{clientId}); + } + + if($attrName eq "sslargs") { + $hash->{sslargs} = {}; + for my $kv (split(" ",$param[0])) { + my ($k, $v) = split(":", $kv, 2); + $hash->{sslargs}{$k} = $v; + } } my %h = (clientId=>1,lwt=>1,lwtRetain=>1,subscriptions=>1,SSL=>1,username=>1); @@ -356,7 +361,7 @@ MQTT2_CLIENT_Read($@) my $ac = AttrVal($name, "autocreate", "no"); $ac = $ac eq "1" ? "simple" : ($ac eq "0" ? "no" : $ac); # backward comp. - my $cid = $hash->{clientId}; + my $cid = makeDeviceName($hash->{clientId}); $tp =~ s/:/_/g; # 96608 Dispatch($hash, "autocreate=$ac\0$cid\0$tp\0$val", undef, $ac eq "no"); @@ -608,6 +613,12 @@ MQTT2_CLIENT_getStr($$) Enable SSL (i.e. TLS)
+ +
  • sslargs
    + a list of space separated tuples of key:value, where key is one of the + possible options documented in perldoc IO::Socket::SSL +

  • +
  • username <username>
    set the username. The password is set via the set command, and is stored diff --git a/FHEM/DevIo.pm b/FHEM/DevIo.pm index 4753ec427..6609ec23c 100644 --- a/FHEM/DevIo.pm +++ b/FHEM/DevIo.pm @@ -374,6 +374,7 @@ DevIo_OpenDev($$$;$) timeout => $timeout, url => $hash->{SSL} ? "https://$dev/" : "http://$dev/", NAME => $hash->{NAME}, + sslargs => $hash->{sslargs} ? $hash->{sslargs} : {}, noConn2 => 1, callback=> sub() { my ($h, $err, undef) = @_;