From 776a4e28c5f92016c19fc9267520d3b80294c969 Mon Sep 17 00:00:00 2001 From: Marc Hoppe Date: Sun, 29 Jan 2012 18:41:51 +0100 Subject: [PATCH] ... --- FHEM/10_EnOcean.pm | 39 +++++++++++++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/FHEM/10_EnOcean.pm b/FHEM/10_EnOcean.pm index db090dc1e..6834ab79b 100755 --- a/FHEM/10_EnOcean.pm +++ b/FHEM/10_EnOcean.pm @@ -169,6 +169,28 @@ EnOcean_Set($@) } + ########################### + + } elsif($st eq "eltakoRollCtrl") { + if($cmd eq "teach") { + my $data=sprintf("A5FFF80D80%s00", $hash->{DEF}); + Log $ll2, "eltakoRollCtrl.Teach: " . $data; + IOWrite($hash, "000A0001", $data); # len:000a optlen:00 pakettype:1(radio) + + } else { + my %eltakoRollCtrlCommands = ( down=>0x02, up=>0x01, stop=>0x00 ); + my $usage = "Usage: (" . join("|", sort keys %eltakoRollCtrlCommands) . ") [time 0-255 sek]"; + my $rollcmd= $eltakoRollCtrlCommands{$cmd} + return $usage if( (!defined($rollcmd)) or (@a<1) ); + my $time=0; + if(defined($a[1])) { $time=$a[1]; } # time + shift(@a); + # EEP: A5/3F/7F Universal ??? + my $data=sprintf("A5%02X%02X%02X%02X%s00", 0, $time, $rollcmd, 0x08, $hash->{DEF}); + IOWrite($hash, "000A0001", $data); + Log $ll2, "eltakoRollCtrl.$cmd" . $data; + } + ########################### } else { # Simulate a PTM my ($c1,$c2) = split(",", $cmd, 2); @@ -180,14 +202,14 @@ EnOcean_Set($@) my ($db_3, $status) = split(":", $ptm200btn{$c1}, 2); $db_3 <<= 5; $db_3 |= 0x10 if($c1 ne "released"); # set the pressed flag - if($c2) { - my ($d2, undef) = split(":", $ptm200btn{$c2}, 2); - $db_3 |= ($d2<<1) | 0x01; - } - IOWrite($hash, "", - sprintf("6B05%02X000000%s%s", $db_3, $hash->{DEF}, $status)); + if($c2) { + my ($d2, undef) = split(":", $ptm200btn{$c2}, 2); + $db_3 |= ($d2<<1) | 0x01; + } + IOWrite($hash, "", + sprintf("6B05%02X000000%s%s", $db_3, $hash->{DEF}, $status)); - } + } select(undef, undef, undef, 0.1) if($i < int(@a)-1); } @@ -275,6 +297,8 @@ EnOcean_Parse($$) } } + # eltakoRoll: BI: unten / B0: oben / released:running/stopped + # released events are disturbing when using a remote, since it overwrites # the "real" state immediately @@ -348,7 +372,6 @@ EnOcean_Parse($$) push @event, "3:measured-temp:". sprintf "%.1f", ($db_1*40/255); EnOcean_MD15Cmd($hash, $name, $db_1); - } elsif($st eq "eltakoDimmer") { # response command from (Eltako-)Actor ( Central-Command:A5/38/08 ) if($db_3 eq 0x01) { # switch