From de30a1332b97ca2259d5eeda97b3c96b8676100f Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Tue, 5 Nov 2013 22:20:37 +0000 Subject: [PATCH] obey slow write to wakeup devices git-svn-id: https://svn.fhem.de/fhem/trunk@4155 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_CUL_HM.pm | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 4ff195b86..c8166bc9c 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -383,6 +383,24 @@ sub CUL_HM_Rename($$$) {############################# $chnHash->{device} = $name; } } + if ($hash->{helper}{role}{chn}){ + my $HMidCh = substr($HMid."01",0,8); + foreach my $pId (keys %{$modules{CUL_HM}{defptr}}){ + my $pH = $modules{CUL_HM}{defptr}{$pId}; + my $pN = $pH->{NAME}; + my $pPeers = AttrVal($pN, "peerIDs", ""); + if ($pPeers =~ m/$HMidCh/){ + CUL_HM_ID2PeerList ($pN,"x",0); + foreach my $pR (grep /-$oldName-/,keys%{$pH->{READINGS}}){ + my $pRn = $pR; + $pRn =~ s/$oldName/$name/; + $pH->{READINGS}{$pRn}{VAL} = $pH->{READINGS}{$pR}{VAL}; + $pH->{READINGS}{$pRn}{TIME} = $pH->{READINGS}{$pR}{TIME}; + delete $pH->{READINGS}{$pR}; + } + } + } + } return; } sub CUL_HM_Attr(@) {################################# @@ -1559,7 +1577,8 @@ sub CUL_HM_parseCommon(@){##################################################### #General set timer return "done" } - $shash->{protCondBurst} = "on" if ($shash->{protCondBurst} !~ m/forced/); + $shash->{protCondBurst} = "on" if ( $shash->{protCondBurst} + && $shash->{protCondBurst} !~ m/forced/); $shash->{helper}{prt}{awake}=2;#awake } else{ @@ -1604,7 +1623,11 @@ sub CUL_HM_parseCommon(@){##################################################### } if ( $shash->{helper}{prt}{mmcS} - && $shash->{helper}{prt}{mmcS} == 3){ + && $shash->{helper}{prt}{mmcS} == 3){ + # after write device might need a break + # allow for wake types only - and if commands are pending + $shash->{helper}{prt}{try} = 1 if (CUL_HM_getRxType($shash) & 0x08 #wakeup + && $shash->{cmdStack}); if ($success eq 'yes'){ delete $shash->{helper}{prt}{mmcA}; delete $shash->{helper}{prt}{mmcS}; @@ -3649,8 +3672,8 @@ sub CUL_HM_respPendRm($) {#del response related entries in messageing entity $modules{CUL_HM}{prot}{rspPend}-- if($hash->{helper}{prt}{rspWait}{cmd}); delete ($hash->{helper}{prt}{rspWait}); delete $hash->{helper}{tmdOn}; - delete $hash->{helper}{prt}{mmcA}; - delete $hash->{helper}{prt}{mmcS}; +# delete $hash->{helper}{prt}{mmcA}; +# delete $hash->{helper}{prt}{mmcS}; RemoveInternalTimer($hash); # remove resend-timer RemoveInternalTimer("respPend:$hash->{DEF}");# remove responsePending timer $respRemoved = 1; @@ -3672,6 +3695,12 @@ sub CUL_HM_respPendTout($) { $pHash->{awake} = 0;# set to asleep CUL_HM_protState($hash,"CMDs_pending"); } + elsif ($pHash->{try}){# send was a try - revert and wait for wakeup + unshift (@{$hash->{cmdStack}}, "++".substr($pHash->{rspWait}{cmd},6)); + delete $pHash->{try}; + CUL_HM_respPendRm($hash);# do not count problems with wakeup try, just wait + CUL_HM_protState($hash,"CMDs_pending"); + } elsif ($hash->{IODev}->{STATE} !~ m/^(opened|Initialized)$/){#IO errors CUL_HM_eventP($hash,"IOdly"); CUL_HM_ProcessCmdStack($hash) if(CUL_HM_getRxType($hash) & 0x03);