2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-04 05:16:45 +00:00

change: check IOType (MQTT, MQTT2x) slightly improved

git-svn-id: https://svn.fhem.de/fhem/trunk@23560 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
hexenmeister 2021-01-19 22:52:03 +00:00
parent 9f6c6918ce
commit dd79f9ee76

View File

@ -33,7 +33,7 @@
# 19.01.2021 1.2.9
# improvement: increment 'incoming-count' only if at least one device is affected
# bugfix : fix parse loop over MGB instances for the same IODev (MQTT2-IO only)
#
# change : check IOType (MQTT, MQTT2x) slightly improved
#
# 19.01.2021 1.2.9
# change : ParseFn gibt jetzt immer [NEXT] zurueck
@ -556,7 +556,8 @@ sub isConnected($);
sub ioDevConnect($);
sub ioDevDisconnect($);
sub updateDevCount($);
sub retrieveIODev($);
sub retrieveIODevName($);
sub retrieveIODevType($);
sub isIODevMQTT2($);
sub isIODevMQTT2_CLIENT($);
sub isIODevMQTT($);
@ -669,21 +670,33 @@ sub refreshUserAttr($) {
}
# liefert TYPE des IODev, wenn definiert (MQTT; MQTT2,..)
sub retrieveIODev($) {
sub retrieveIODevName($) {
my ($hash) = @_;
my $iodn = AttrVal($hash->{NAME}, "IODev", undef);
return $iodn;
}
# liefert TYPE des IODev, wenn definiert (MQTT; MQTT2,..)
sub retrieveIODevType($) {
my ($hash) = @_;
return $hash->{+HELPER}->{+IO_DEV_TYPE} if defined $hash->{+HELPER}->{+IO_DEV_TYPE};
my $iodn = AttrVal($hash->{NAME}, "IODev", undef);
my $iodt = undef;
if(defined($iodn) and defined($defs{$iodn})) {
$iodt = $defs{$iodn}{TYPE};
}
$hash->{+HELPER}->{+IO_DEV_TYPE} = $iodt;
return ($iodt, $iodn);
#return ($iodt, $iodn);
return $iodt;
#return $hash->{+HELPER}->{+IO_DEV_TYPE};
}
# prueft, ob IODev MQTT-Instanz ist
sub isIODevMQTT($) {
my ($hash) = @_;
my ($iodt, $iodn) = retrieveIODev($hash);
my $iodt = retrieveIODevType($hash);
return 0 unless defined $iodt;
return 0 unless $iodt eq 'MQTT';
return 1;
@ -707,14 +720,14 @@ sub checkIODevMQTT2_CLIENT($) {
# prueft, ob IODev MQTT2-Instanz ist
sub isIODevMQTT2($) {
my ($hash) = @_;
my ($iodt, $iodn) = retrieveIODev($hash);
my $iodt = retrieveIODevType($hash);
return checkIODevMQTT2($iodt);
}
# prueft, ob IODev MQTT2_CLIENT-Instanz ist
sub isIODevMQTT2_CLIENT($) {
my ($hash) = @_;
my ($iodt, $iodn) = retrieveIODev($hash);
my $iodt = retrieveIODevType($hash);
return checkIODevMQTT2_CLIENT($iodt);
}
@ -823,11 +836,11 @@ sub isConnected($) {
return 1 if isIODevMQTT2($hash);
# ich weiß nicht, ob das eine gute Idee ist, zu prüfen, evtl. wird FHEM-Standard-writeBuffef für das Senden nach dem Connect selbst sorgen
# in diesem Fall koenne wir annehmen, dass immer connected ist und keine eigene Warteschlangen verwenden
# my ($iodt, $iodn) = retrieveIODev($hash);
# my $iodt = retrieveIODevType($hash);
# return 0 unless defined $iodt;
# return 1 if $iodt eq 'MQTT2_SERVER'; # immer 'verbunden'
# if($iodt eq 'MQTT2_CLIENT') { # Status pruefen
# my $iodn = AttrVal($hash->{NAME}, "IODev", undef);
# my $iodn = retrieveIODevName($hash);
# return 1 if (ReadingsVal($iodn, "state", "") eq "opened");
# return 0;
# }
@ -2449,7 +2462,7 @@ sub doPublish($$$$$$$$) {
$hash->{message_ids}->{$msgid}++ if defined $msgid;
return 'empty topic or message';
} else {
my ($iodt, $iodn) = retrieveIODev($hash);
my $iodt = retrieveIODevType($hash);
$iodt = 'undef' unless defined $iodt;
Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE: [$hash->{NAME}] unknown IODev: ".$iodt);
return 'unknown IODev';
@ -2793,9 +2806,10 @@ sub Parse($$) {
foreach my $dev (@instances) {
my $hash = $defs{$dev};
# Name mit IODev vegleichen
my ($iiodt, $iiodn) = retrieveIODev($hash);
my $iiodn = retrieveIODevName($hash);
#Log3($hash->{NAME},1,"MQTT_GENERIC_BRIDGE: [$hash->{NAME}] Parse: test IODev: $iiodn vs. $ioname");
next unless $ioname eq $iiodn;
my $iiodt = retrieveIODevType($hash);
next unless checkIODevMQTT2($iiodt);
#next unless isIODevMQTT2($hash);