From 806efb4877e3f1dc9f77d2d4e02847135911d974 Mon Sep 17 00:00:00 2001 From: martinp876 <> Date: Thu, 24 Jul 2014 13:26:04 +0000 Subject: [PATCH] add lock as level to winmatic git-svn-id: https://svn.fhem.de/fhem/trunk@6312 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_HMLAN.pm | 24 ++++++++++++++++++++---- fhem/FHEM/10_CUL_HM.pm | 20 +++++++++++--------- fhem/FHEM/HMConfig.pm | 4 ++++ 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index 8282b0e1e..5da017fae 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -401,7 +401,11 @@ sub HMLAN_ReadAnswer($$$) {# This is a direct read for commands like get sub HMLAN_Write($$$) {######################################################### my ($hash,$fn,$msg) = @_; - if (length($msg)>22){ + if ($fn eq "cmd"){ + HMLAN_SimpleWrite($hash,$msg); + return; + } + elsif (length($msg)>22){ my ($mtype,$src,$dst) = (substr($msg, 8, 2), substr($msg, 10, 6), substr($msg, 16, 6)); @@ -661,9 +665,7 @@ sub HMLAN_Parse($$) {########################################################## Dispatch($hash, $dmsg, \%addvals); } elsif($mFld[0] eq 'HHM-LAN-IF'){#HMLAN version info - $hash->{serialNr} = $mFld[2]; - $hash->{firmware} = sprintf("%d.%d", (hex($mFld[1])>>12)&0xf, hex($mFld[1]) & 0xffff); - $hash->{owner} = $mFld[4]; + $hash->{uptime} = HMLAN_uptime($mFld[5],$hash); $hash->{assignedIDsReport}=hex($mFld[6]); $hash->{helper}{q}{keepAliveRec} = 1; @@ -674,6 +676,20 @@ sub HMLAN_Parse($$) {########################################################## .' O:' .$mFld[4].' t:'.$mFld[5].' IDcnt:'.$mFld[6]; my $myId = AttrVal($name, "hmId", ""); $myId = $attr{$name}{hmId} = $mFld[4] if (!$myId); + + my (undef,$info) = unpack('A11A29',$rmsg); + if (!$hash->{helper}{info} || $hash->{helper}{info} ne $info){ + my $fwVer = hex($mFld[1]); + $fwVer = sprintf("%d.%d", ($fwVer >> 12) & 0xf, $fwVer & 0xffff); + $hash->{owner} = $mFld[4]; + readingsBeginUpdate($hash); + readingsBulkUpdate($hash,"D-firmware" ,$fwVer); + readingsBulkUpdate($hash,"D-serialNr" ,$mFld[2]); + readingsBulkUpdate($hash,"D-HMIdOriginal",$mFld[3]); + readingsBulkUpdate($hash,"D-HMIdAssigned",$mFld[4]); + readingsEndUpdate($hash,1); + $hash->{helper}{info} = $info; + } if($mFld[4] ne $myId && !AttrVal($name, "dummy", 0)) { Log3 $hash, 1, 'HMLAN setting owner to '.$myId.' from '.$mFld[4]; diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 6111554c4..65fc19ebb 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -759,6 +759,8 @@ sub CUL_HM_prtInit($){ #setup protocol variables after define sub CUL_HM_hmInitMsg($){ #define device init msg for HMLAN #message to be send to HMLAN/USB to define device communication defails #bit-usage is widely unknown. + #p[1]: 00000001 = request AES + #p[1]: 00000010 = data pending - autosend wakeup if device send data my ($hash)=@_; my $rxt = CUL_HM_getRxType($hash); my $id = CUL_HM_hash2Id($hash); @@ -2226,16 +2228,15 @@ sub CUL_HM_parseCommon(@){##################################################### } elsif($subType eq "01"){ #ACKinfo################# $success = "yes"; - my $rssi = substr($p,8,2);# --calculate RSSI + my (undef,$chn,undef,undef,$rssi) = unpack '(A2)*',$p; + my $chnHash = CUL_HM_id2Hash($src.$chn); + push @evtEt,[$chnHash,0,"recentStateType:ack"]; CUL_HM_storeRssi( $shash->{NAME} ,($dhash?$dhash->{NAME}:$shash->{IODev}{NAME}) ,(-1)*(hex($rssi)) ,$mNo) if ($rssi && $rssi ne '00' && $rssi ne'80'); $reply = "ACKStatus"; - my $chnHash = CUL_HM_id2Hash($src.substr($p,2,2)); - push @evtEt,[$chnHash,0,"recentStateType:ack"]; - if ($shash->{helper}{tmdOn}){ if ((not hex(substr($p,6,2))&0x40) && # not timedOn, we have to repeat $shash->{helper}{tmdOn} eq substr($p,2,2) ){# virtual channels for dimmer may be incorrect @@ -2504,7 +2505,9 @@ sub CUL_HM_parseCommon(@){##################################################### $ret= "parsed"; } elsif($subType eq "06"){ #reply to status request======================= - my $rssi = substr($p,8,2);# --calculate RSSI + my (undef,$chn,undef,undef,$rssi) = unpack '(A2)*',$p; + my $chnHash = CUL_HM_id2Hash($src.$chn); + push @evtEt,[$chnHash,0,"recentStateType:info"]; CUL_HM_storeRssi( $shash->{NAME} ,($dhash?$dhash->{NAME}:$shash->{IODev}{NAME}) ,(-1)*(hex($rssi)) @@ -2512,8 +2515,6 @@ sub CUL_HM_parseCommon(@){##################################################### if ($rssi && $rssi ne '00' && $rssi ne'80'); @{$modules{CUL_HM}{helper}{qReqStat}} = grep { $_ ne $shash->{NAME} } @{$modules{CUL_HM}{helper}{qReqStat}}; - my $chnHash = CUL_HM_id2Hash($src.substr($p,2,2)); - push @evtEt,[$chnHash,0,"recentStateType:info"]; if ($pendType eq "StatusReq"){#it is the answer to our request my $chnSrc = $src.$shash->{helper}{prt}{rspWait}{forChn}; @@ -3508,8 +3509,9 @@ sub CUL_HM_Set($@) {#+++++++++++++++++ set command+++++++++++++++++++++++++++++ CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.'8001C8'.$delay);# OPEN } elsif($cmd eq "inhibit") { ################################################## - return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/); - my $val = ($a[2] eq "on") ? "01" : "00"; + return "$a[2] is not on or off" if($a[2] !~ m/^(on|off)$/); + my $val = ($a[2] eq "on") ? "01" : "00"; + CUL_HM_UpdtReadSingle($hash,"inhibit","set_$a[2]",1); CUL_HM_PushCmdStack($hash,'++'.$flag.'11'.$id.$dst.$val.$chn); # SET_LOCK } elsif($cmd =~ m/^(up|down|pct)$/) { ######################################### diff --git a/fhem/FHEM/HMConfig.pm b/fhem/FHEM/HMConfig.pm index 98fb30b8e..2b6d3aee1 100644 --- a/fhem/FHEM/HMConfig.pm +++ b/fhem/FHEM/HMConfig.pm @@ -1630,6 +1630,10 @@ $culHmChanSets{"ROTO_ZEL-STG-RM-FWT02"} = $culHmChanSets{"HM-CC-TC02"}; VALVE => "6,2", MODE => "6,2" } }, + "11;p01=00" => { txt => "INHIBIT0ff" , params => { + CHANNEL => "02,2" } }, + "11;p01=01" => { txt => "INHIBIT0n" , params => { + CHANNEL => "02,2" } }, "11;p01=02" => { txt => "SET" , params => { CHANNEL => "02,2", VALUE => "04,2",