From 546a8236987fba6ff9f6698d5c6d6167536af46b Mon Sep 17 00:00:00 2001 From: rudolfkoenig <> Date: Sun, 13 Mar 2011 09:18:58 +0000 Subject: [PATCH] sign on/off tested & fixed git-svn-id: https://svn.fhem.de/fhem/trunk@860 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/00_HMLAN.pm | 1 + fhem/FHEM/10_CUL_HM.pm | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/fhem/FHEM/00_HMLAN.pm b/fhem/FHEM/00_HMLAN.pm index 058c448d4..4d348e1af 100755 --- a/fhem/FHEM/00_HMLAN.pm +++ b/fhem/FHEM/00_HMLAN.pm @@ -325,6 +325,7 @@ HMLAN_SimpleWrite(@) my $name = $hash->{NAME}; return if(!$hash || AttrVal($hash->{NAME}, "dummy", undef)); + select(undef, undef, undef, 0.01); Log GetLogLevel($name,5), "SW: $msg"; $msg .= "\r\n" unless($nonl); diff --git a/fhem/FHEM/10_CUL_HM.pm b/fhem/FHEM/10_CUL_HM.pm index 5cceb34f0..9a76f5f14 100755 --- a/fhem/FHEM/10_CUL_HM.pm +++ b/fhem/FHEM/10_CUL_HM.pm @@ -191,8 +191,11 @@ CUL_HM_Parse($$) $dname = "broadcast" if($dst eq "000000"); $dname = $iohash->{NAME} if($dst eq $id); - if($p =~ m/NACK$/) { + if($p =~ m/NACK$/) { # HMLAN special if($dhash) { + delete($dhash->{ackCmdSent}); + delete($dhash->{ackWaiting}); + delete($dhash->{cmdStack}); $dhash->{STATE} = "MISSING ACK"; DoTrigger($dname, "MISSING ACK"); } @@ -520,6 +523,12 @@ CUL_HM_Set($@) } elsif($cmd eq "reset") { ############################################ $sndcmd = sprintf("++A011%s%s0400", $id,$dst); + } elsif($cmd eq "pair") { ############################################# + my $serialNr = AttrVal($name, "serialNr", undef); + return "serialNr is not set" if(!$serialNr); + $sndcmd = sprintf("++A401%s000000010A%s", $id, unpack("H*",$serialNr)); + $shash->{hmPairSerial} = $serialNr; + } elsif($cmd eq "unpair") { ########################################### $sndcmd = sprintf("++A001%s%s00050000000000", $id,$dst); @@ -530,18 +539,12 @@ CUL_HM_Set($@) } elsif($cmd eq "sign") { ############################################ $sndcmd = - sprintf("++A001%s%s%s050000000000", $id,$dst, $chn); + sprintf("++A001%s%s%s0500000000%s", $id,$dst,$chn,$chn); CUL_HM_PushCmdStack($shash, - sprintf("++A001%s%s%s0808%s",$id,$dst, $chn, - ($a[2] eq "on" ? "01" : "02")); + sprintf("++A001%s%s%s0808%s",$id,$dst,$chn, + ($a[2] eq "on" ? "01" : "02"))); CUL_HM_PushCmdStack($shash, - sprintf("++A001%s%s%s06",$id,$dst, $chn)); - - } elsif($cmd eq "pair") { ############################################# - my $serialNr = AttrVal($name, "serialNr", undef); - return "serialNr is not set" if(!$serialNr); - $sndcmd = sprintf("++A401%s000000010A%s", $id, unpack("H*",$serialNr)); - $shash->{hmPairSerial} = $serialNr; + sprintf("++A001%s%s%s06",$id,$dst,$chn)); } elsif($cmd eq "statusRequest") { #################################### $sndcmd = sprintf("++A001%s%s%s0E", $id,$dst, $chn);