From df27046f473e1cf9cdcd0055ec5fc1567e5a880c Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Mon, 2 Mar 2015 19:15:59 +0000 Subject: [PATCH] CUL_HM:low-battery detection RT, git-svn-id: https://svn.fhem.de/fhem/trunk@8137 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_CUL_HM.pm | 173 ++++++++++++++++++++++++----------------- fhem/FHEM/HMConfig.pm | 1 + 2 files changed, 102 insertions(+), 72 deletions(-) diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index c0f2909ea..0d62713eb 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -386,7 +386,7 @@ sub CUL_HM_updateConfig($){ if ($md =~ m/HM-CC-RT-DN/) {$webCmd.=":burstXmit";} } elsif($st eq "blindActuator"){ - if ($hash->{helper}{role}{chn}){$webCmd="statusRequest:toggle:on:off:up:down:stop";} + if ($hash->{helper}{role}{chn}){$webCmd="statusRequest:toggleDir:on:off:up:down:stop";} else{ $webCmd="statusRequest:getConfig:clear msgEvents";} } elsif($st eq "dimmer" ){ @@ -1323,11 +1323,11 @@ sub CUL_HM_Parse($$) {######################################################### else{ $chn = $mI[1]; $setTemp = ($setTemp ); + $lBat = $err&0x80?"low":"ok"; # prior to changes of $err! $err = ($err >> 1); $shash = $modules{CUL_HM}{defptr}{"$src$chn"} if($modules{CUL_HM}{defptr}{"$src$chn"}); $actTemp = ReadingsVal($name,"measured-temp",""); $vp = ReadingsVal($name,"actuator",""); - $lBat = $err&0x80?"low":"ok"; } delete $devH->{helper}{getBatState}; $setTemp =(($setTemp ) & 0x3f )/2; @@ -1763,11 +1763,11 @@ sub CUL_HM_Parse($$) {######################################################### } } if ($st ne "switch"){ - my $dir = $err & 0x30; - if ($dir == 0x10){push @evtEt,[$shash,1,"$eventName:up:$vs" ];} - elsif($dir == 0x20){push @evtEt,[$shash,1,"$eventName:down:$vs"];} - elsif($dir == 0x00){push @evtEt,[$shash,1,"$eventName:stop:$vs"];} - elsif($dir == 0x30){push @evtEt,[$shash,1,"$eventName:err:$vs" ];} + my $dir = ($err >> 4) & 3; + my %dirName = ( 0=>"stop" ,1=>"up" ,2=>"down" ,3=>"err" ); + push @evtEt,[$shash,1,"$eventName:$dirName{$dir}:$vs" ]; + $shash->{helper}{dir}{rct} = $shash->{helper}{dir}{cur} if($shash->{helper}{dir}{cur} ne $dirName{$dir}); + $shash->{helper}{dir}{cur} = $dirName{$dir}; } if (!$rSUpdt){#dont touch if necessary for dimmer if(($err&0x70) == 0x10 || ($err&0x70) == 0x20){ @@ -3753,6 +3753,32 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++ CUL_HM_PushCmdStack($hash,$hash->{helper}{dlvlCmd}); $hash = $chnHash; # report to channel if defined } + elsif($cmd eq "toggleDir") { ################################################ + if ($hash->{helper}{dir}{cur} && $hash->{helper}{dir}{cur} ne "err"){ + my $old = $hash->{helper}{dir}{cur}; + $hash->{helper}{dir}{cur} = $hash->{helper}{dir}{cur} eq "stop" ?(($hash->{helper}{dir}{rct} + && $hash->{helper}{dir}{rct} eq "up")?"down" + :"up") + :"stop"; + $hash->{helper}{dir}{rct} = $old; + } + else{ + $hash->{helper}{dir}{rct} = "stop"; + $hash->{helper}{dir}{cur} = "up"; + } + if ($hash->{helper}{dir}{cur} eq "up" ){ + $hash->{helper}{dlvl} = "C8"; + $hash->{helper}{dlvlCmd} = "++$flag"."11$id$dst"."02$chn".'C80000'; + CUL_HM_PushCmdStack($hash,$hash->{helper}{dlvlCmd}); + }elsif ($hash->{helper}{dir}{cur} eq "down"){ + $hash->{helper}{dlvl} = "00"; + $hash->{helper}{dlvlCmd} = "++$flag"."11$id$dst"."02$chn".'000000'; + CUL_HM_PushCmdStack($hash,$hash->{helper}{dlvlCmd}); + }else { + delete $hash->{helper}{dlvl}; + CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'03'.$chn); + } + } elsif($cmd =~ m/^(on-for-timer|on-till)$/) { ################################ my (undef,undef,$duration,$ramp) = @a; #date prepared extention to entdate if ($cmd eq "on-till"){ @@ -8011,48 +8037,48 @@ sub CUL_HM_tempListTmpl(@) { ################################################## subType dependent commands: