From f271e0d03fefa6c0913bc44014a421df1bd7aec9 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Thu, 7 Jul 2016 15:00:43 +0000 Subject: [PATCH] 00_ZWDongle.pm: serialize neighborUpdate (Forum #54574) git-svn-id: https://svn.fhem.de/fhem/trunk@11759 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_ZWDongle.pm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/fhem/FHEM/00_ZWDongle.pm b/fhem/FHEM/00_ZWDongle.pm index 867f86dc8..81a78ad78 100755 --- a/fhem/FHEM/00_ZWDongle.pm +++ b/fhem/FHEM/00_ZWDongle.pm @@ -13,6 +13,7 @@ sub ZWDongle_ReadAnswer($$$); sub ZWDongle_Ready($); sub ZWDongle_Write($$$); sub ZWDongle_ProcessSendStack($); +sub ZWDongle_NUCheck($$$$); # See also: @@ -466,12 +467,40 @@ ZWDongle_DoInit($) return undef; } + +##################################### +# neighborUpdate special: have to serialize. Forum #54574 +my @nuStack; +sub +ZWDongle_NUCheck($$$$) +{ + my($hash, $fn, $msg, $isWrite) = @_; + + if($isWrite) { + return 0 if($msg !~ m/^0048/ || $hash->{calledFromNuCheck}); + push @nuStack, "$fn/$msg"; + return (@nuStack > 1); + + } else { + return if($msg !~ m/^0048..(..)$/ || $1 eq "21"); # 21: started + shift @nuStack; + return if(@nuStack == 0); + + my @a = split("/", $nuStack[0]); + $hash->{calledFromNuCheck} = 1; + ZWDongle_Write($hash, $a[0], $a[1]); + delete($hash->{calledFromNuCheck}); + } +} + ##################################### sub ZWDongle_Write($$$) { my ($hash,$fn,$msg) = @_; + return if(ZWDongle_NUCheck($hash, $fn, $msg, 1)); + Log3 $hash, 5, "ZWDongle_Write $msg ($fn)"; # assemble complete message $msg = sprintf("%02x%s", length($msg)/2+1, $msg); @@ -753,6 +782,7 @@ ZWDongle_Parse($$$) my %addvals = (RAWMSG => $rmsg); + ZWDongle_NUCheck($hash, undef, $rmsg, 0); Dispatch($hash, $rmsg, \%addvals); }