From dfa16d169f1a936788a5bf4f99ae4ceaf6f84b76 Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Wed, 13 Aug 2014 18:33:04 +0000 Subject: [PATCH] improve dummy handling git-svn-id: https://svn.fhem.de/fhem/trunk@6403 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_HMLAN.pm | 13 +++++++++---- fhem/FHEM/10_CUL_HM.pm | 12 ++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index e5a5c2aa5..bde9221eb 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -275,9 +275,15 @@ sub HMLAN_Attr(@) {############################################################ RemoveInternalTimer( "keepAliveCk:".$name); RemoveInternalTimer( "keepAlive:".$name); DevIo_CloseDev($defs{$name}); - HMLAN_condUpdate($defs{$name},251);#set dummy + HMLAN_condUpdate($defs{$name},251);#state: dummy } else{ + if ($cmd eq "set"){ + $attr{$name}{$aName} = $aVal; + } + else{ + delete $attr{$name}{$aName}; + } DevIo_OpenDev($defs{$name}, 1, "HMLAN_DoInit"); } } @@ -433,7 +439,7 @@ sub HMLAN_Write($$$) {######################################################### HMLAN_SimpleWrite($hash,$msg); return; } - elsif (length($msg)>22){ + elsif (length($msg)>21){ my ($mtype,$src,$dst) = (substr($msg, 8, 2), substr($msg, 10, 6), substr($msg, 16, 6)); @@ -752,8 +758,7 @@ sub HMLAN_Ready($) {########################################################### } sub HMLAN_SimpleWrite(@) {##################################################### my ($hash, $msg, $nonl) = @_; - - return if(!$hash || AttrVal($hash->{NAME}, "dummy", undef)); + return if(!$hash || AttrVal($hash->{NAME}, "dummy", 0) != 0); my $name = $hash->{NAME}; my $len = length($msg); diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index d8d772b16..c14f7a5a1 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -4824,7 +4824,7 @@ sub CUL_HM_ProcessCmdStack($) { if (!$hash->{helper}{prt}{rspWait}{cmd}){ if($hash->{cmdStack} && @{$hash->{cmdStack}}){ - CUL_HM_SndCmd($hash, shift @{$hash->{cmdStack}}); + CUL_HM_SndCmd($hash, shift @{$hash->{cmdStack}}); } elsif($hash->{helper}{prt}{sProc} != 0){ CUL_HM_protState($hash,"CMDs_done"); @@ -5028,8 +5028,11 @@ sub CUL_HM_sndIfOpen($) { sub CUL_HM_SndCmd($$) { my ($hash, $cmd) = @_; $hash = CUL_HM_getDeviceHash($hash); - return if( AttrVal($hash->{NAME},"ignore","") - || AttrVal($hash->{NAME},"dummy","")); + if( AttrVal($hash->{NAME},"ignore",0) != 0 + || AttrVal($hash->{NAME},"dummy" ,0) != 0){ + CUL_HM_eventP($hash,"dummy"); + return; + } CUL_HM_assignIO($hash) ; if(!defined $hash->{IODev} ||!defined $hash->{IODev}{NAME}){ CUL_HM_eventP($hash,"IOerr"); @@ -5397,7 +5400,7 @@ sub CUL_HM_eventP($$) {#handle protocol events my ($evntCnt,undef) = split(' last_at:',$evnt); $nAttr->{"prot".$evntType} = ++$evntCnt." last_at:".TimeNow(); - if ($evntType =~ m/(Nack|ResndFail|IOerr)/){# unrecoverable Error + if ($evntType =~ m/(Nack|ResndFail|IOerr|dummy)/){# unrecoverable Error CUL_HM_UpdtReadSingle($hash,"state",$evntType,1); $hash->{helper}{prt}{bErr}++; $nAttr->{protCmdDel} = 0 if(!$nAttr->{protCmdDel}); @@ -5423,6 +5426,7 @@ sub CUL_HM_eventP($$) {#handle protocol events sub CUL_HM_protState($$){ my ($hash,$state) = @_; my $name = $hash->{NAME}; + my $sProcIn = $hash->{helper}{prt}{sProc}; if ($sProcIn == 3){#FW update processing # do not change state - commandstack is bypassed