2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-03 16:56:54 +00:00

Changed pairing to work with hmPairSerial

git-svn-id: https://svn.fhem.de/fhem/trunk@774 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
rudolfkoenig 2010-12-19 12:44:15 +00:00
parent 5ad11ebc4e
commit 94d24efc32
2 changed files with 55 additions and 37 deletions

View File

@ -206,6 +206,7 @@ CUL_Set($@)
$hash->{HM_CMDNR} = $hash->{HM_CMDNR} ? ($hash->{HM_CMDNR}+1)%256 : 1; $hash->{HM_CMDNR} = $hash->{HM_CMDNR} ? ($hash->{HM_CMDNR}+1)%256 : 1;
CUL_SimpleWrite($hash, sprintf("As15%02x8401F1%s000000010A%s", CUL_SimpleWrite($hash, sprintf("As15%02x8401F1%s000000010A%s",
$hash->{HM_CMDNR}, $hash->{FHTID}, unpack('H*', $arg))); $hash->{HM_CMDNR}, $hash->{FHTID}, unpack('H*', $arg)));
$hash->{hmPairSerial} = $arg;
} elsif($type eq "freq") { ######################################## MHz } elsif($type eq "freq") { ######################################## MHz

View File

@ -200,29 +200,30 @@ CUL_HM_Parse($$)
my $cm = "$channel$msgtype"; my $cm = "$channel$msgtype";
my $lcm = "$len$channel$msgtype"; my $lcm = "$len$channel$msgtype";
if($lcm eq "1A8400") { #### Pairing-Request if($lcm eq "1A8400" || $lcm eq "1A8000") { #### Pairing-Request
push @event, CUL_HM_Pair($name, $shash, @msgarr); push @event, CUL_HM_Pair($name, $shash, @msgarr);
} elsif($cm =~ m/A00[01]/ && #### Pairing-Request-Conversation } elsif($cm =~ m/^A0[01]{2}$/ && $dst eq $id) {#### Pairing-Request-Convers.
$dst eq $id) {
CUL_HM_SendCmd($shash, $msgcnt."8002".$id.$src."00", 1, 0); # Ack CUL_HM_SendCmd($shash, $msgcnt."8002".$id.$src."00", 1, 0); # Ack
push @event, ""; push @event, "";
} elsif($lcm eq "11A002") { } elsif($lcm eq "11A002") { # signing experiments
push @event, "signRequest:$p"; push @event, "signRequest:$p";
} elsif($lcm eq "19A003") { } elsif($lcm eq "19A003") { # signing experiments
push @event, "signAnswer:$p"; push @event, "signAnswer:$p";
} elsif(!$st) { # Will trigger unknown } elsif(!$st) { # Will trigger unknown
; ;
} elsif($cm eq "8002") { #### Ack } elsif($cm eq "8002" && $shash->{cmdStack}) { # Send next msg from the stack
CUL_HM_SendCmd($shash, shift @{$shash->{cmdStack}}, 1, 1);
delete($shash->{cmdStack}) if(!@{$shash->{cmdStack}});
$shash->{lastStackAck} = 1;
push @event, "";
if($shash->{cmdStack}) { } elsif($cm eq "8002" && $shash->{lastStackAck}) { # Ack of our last stack msg
CUL_HM_SendCmd($shash, shift @{$shash->{cmdStack}}, 1, 1); delete($shash->{lastStackAck});
delete($shash->{cmdStack}) if(!@{$shash->{cmdStack}});
}
push @event, ""; push @event, "";
} elsif($st eq "switch" || ############################################ } elsif($st eq "switch" || ############################################
@ -268,8 +269,11 @@ CUL_HM_Parse($$)
push @event, "state:on"; push @event, "state:on";
push @event, "smoke_detect:on"; push @event, "smoke_detect:on";
} elsif($p =~ m/^00..$/) { } elsif($p =~ m/^06010000$/) {
push @event, "test:$p"; push @event, "state:alive";
} elsif($p =~ m/^00(..)$/) {
push @event, "test:$1";
} }
@ -362,11 +366,10 @@ CUL_HM_Set($@)
} elsif($st eq "switch") { ############################################ } elsif($st eq "switch") { ############################################
my %scmd = (on => "02", off => "01", onLong => "42", offLong => "41") ; my %scmd = (on => "C8", off => "00");
if($scmd{$cmd}) { if($scmd{$cmd}) {
$state = $cmd; $state = $cmd;
$sndcmd = sprintf("++A440%s%s%s%02d", $id, $hash->{DEF}, $sndcmd = sprintf("++A011%s%s0201%s0000", $id,$hash->{DEF}, $scmd{$cmd});
$scmd{$cmd}, $hash->{"${cmd}MsgNr"}++);
} else { } else {
return "Unknown argument $cmd, choose one of " .join(" ",sort keys %scmd); return "Unknown argument $cmd, choose one of " .join(" ",sort keys %scmd);
@ -376,12 +379,17 @@ CUL_HM_Set($@)
} elsif($st eq "dimmer" || ############################################ } elsif($st eq "dimmer" || ############################################
$st eq "blindActuator") { $st eq "blindActuator") {
if($cmd =~ m/^\d+/ && $cmd >= 0 && $cmd <= 100) { my %scmd = (on => "C8", off => "00");
if($scmd{$cmd}) {
$state = $cmd;
$sndcmd = sprintf("++A011%s%s0201%s0000", $id,$hash->{DEF}, $scmd{$cmd});
} elsif($cmd =~ m/^\d+/ && $cmd >= 0 && $cmd <= 100) {
$state = "$cmd %"; $state = "$cmd %";
$sndcmd = sprintf("++A011%s%s0201%02X", $id, $hash->{DEF}, $cmd*2); $sndcmd = sprintf("++A011%s%s0201%02X0000", $id, $hash->{DEF}, $cmd*2);
} else { } else {
my @scmd = (0..100); my @scmd = ("on", "off", 0..100);
return "Unknown argument $cmd, choose one of " .join(" ",@scmd); return "Unknown argument $cmd, choose one of " .join(" ",@scmd);
} }
@ -466,6 +474,9 @@ CUL_HM_Pair(@)
my $iohash = $hash->{IODev}; my $iohash = $hash->{IODev};
my $id = CUL_HM_Id($iohash); my $id = CUL_HM_Id($iohash);
my $l4 = GetLogLevel($name,4); my $l4 = GetLogLevel($name,4);
my $isPairWithSerial;
my ($idstr, $s) = ($id, 0xA);
$idstr =~ s/(..)/sprintf("%02X%s",$s++,$1)/ge;
my $stc = substr($p, 26, 2); # subTypeCode my $stc = substr($p, 26, 2); # subTypeCode
my $model = substr($p, 2, 4); my $model = substr($p, 2, 4);
@ -494,7 +505,12 @@ CUL_HM_Pair(@)
} elsif($dst ne $id) { } elsif($dst ne $id) {
return "" ; return "" ;
} elsif($iohash->{hmPairSerial}) {
delete($iohash->{hmPairSerial});
$isPairWithSerial = 1;
} }
if($stn eq "unknown") { if($stn eq "unknown") {
Log GetLogLevel($name,1), "CUL_HM unknown subType $stc, cannot pair"; Log GetLogLevel($name,1), "CUL_HM unknown subType $stc, cannot pair";
@ -510,34 +526,34 @@ CUL_HM_Pair(@)
return ""; return "";
} }
my ($mystc, $mymodel, $mybtn, $myserNr); delete($hash->{cmdStack});
if($isSender) {
#if($isSender) { # emulate a switch for a remote/etc
if($stn eq "remote") {
my ($mystc, $mymodel, $mybtn, $myserNr);
$mymodel = "0011"; # Emulate a HM-LC-SW1-PL $mymodel = "0011"; # Emulate a HM-LC-SW1-PL
$mystc = "10"; # switch $mystc = "10"; # switch
$mybtn = "010100";# No buttons (?) $mybtn = "010100";# No buttons (?)
$myserNr = unpack('H*', "FHEM$id");
} else {
$mymodel = "0060"; # Emulate a HM-PB-4DIS-WM
$mystc = "40"; # remote
$mybtn = "940201";# Buttons 02 (on) & 01 (off)
}
$myserNr = unpack('H*', "FHEM$id");
CUL_HM_SendCmd($hash,
$msgcnt."A000".$id.$src."19".$mymodel.$myserNr.$mystc.$mybtn, 1, 0);
# switch emulation (actor/receiver is ack only);
if($isSender) {
$hash->{pairButtons} =~ m/(..)(..)/; $hash->{pairButtons} =~ m/(..)(..)/;
my ($b1, $b2, $cmd) = ($1, $2, ""); my ($b1, $b2) = ($1, $2);
delete($hash->{cmdStack});
CUL_HM_SendCmd($hash,
$msgcnt."A000".$id.$src."19".$mymodel.$myserNr.$mystc.$mybtn, 1, 1);
CUL_HM_SendCmd($hash, "++A001$id$src${b1}05$src${b1}04", 1, 1); CUL_HM_SendCmd($hash, "++A001$id$src${b1}05$src${b1}04", 1, 1);
CUL_HM_PushCmdStack($hash, "++A001$id$src${b1}07020201"); CUL_HM_PushCmdStack($hash, "++A001$id$src${b1}07020201");
CUL_HM_PushCmdStack($hash, "++A001$id$src${b1}06"); CUL_HM_PushCmdStack($hash, "++A001$id$src${b1}06");
CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}05$src${b1}04"); CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}05$src${b2}04");
CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}07020201"); CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}07020201");
CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}06"); CUL_HM_PushCmdStack($hash, "++A001$id$src${b2}06");
} else {
CUL_HM_SendCmd ($hash, "++A001$id${src}00050000000000", 1, 1);
CUL_HM_PushCmdStack($hash, "++A001$id${src}00080201$idstr");
CUL_HM_PushCmdStack($hash, "++A001$id${src}0006");
} }
return ""; return "";
} }
@ -596,6 +612,7 @@ CUL_HM_Resend($)
if($hash->{ackCmdSent} == 3) { if($hash->{ackCmdSent} == 3) {
delete($hash->{ackCmdSent}); delete($hash->{ackCmdSent});
delete($hash->{ackWaiting}); delete($hash->{ackWaiting});
delete($hash->{cmdStack});
$hash->{STATE} = "MISSING ACK"; $hash->{STATE} = "MISSING ACK";
DoTrigger($name, "MISSING ACK"); DoTrigger($name, "MISSING ACK");
return; return;