From 2cfb5f7ceedfec7bf924a1e70f88dfc914d5e342 Mon Sep 17 00:00:00 2001 From: Marc Hoppe Date: Sun, 11 Mar 2012 17:36:18 +0100 Subject: [PATCH] ... --- FHEM/10_EnOcean.pm | 60 +++++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/FHEM/10_EnOcean.pm b/FHEM/10_EnOcean.pm index 2d6640849..28e9fbc7c 100755 --- a/FHEM/10_EnOcean.pm +++ b/FHEM/10_EnOcean.pm @@ -90,8 +90,9 @@ sub EnOcean_Attr($) if($a[2] eq "subType") { Log $ll2, "EO_Attr subtype"; - if($a[3] eq "eltakoDimmer") { - Log $ll2, "EO_Attr subtype dimmer"; + if( $a[3] eq "eltakoDimmer" + or $a[3] eq "eltakoSwitch") { + Log $ll2, "EO_Attr subtype dimmer/switch"; $attr{$name}{eventMap}="B0:on B1:off" } } @@ -163,6 +164,7 @@ EnOcean_Set($@) $hash->{READINGS}{$cmd}{TIME} = $tn; $hash->{READINGS}{$cmd}{VAL} = $arg; + ########################### } elsif($st eq "eltakoDimmer") { my $sendDimCmd=0; my $time=AttrVal($name, "time", 0); @@ -226,7 +228,7 @@ EnOcean_Set($@) 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 %eltakoRollCtrlCommands = ( down=>0x02, up=>0x01, stop=>0x00 ); my $usage = "Usage: (" . join("|", sort keys %eltakoRollCtrlCommands) . ")"; my $rollcmd= $eltakoRollCtrlCommands{$cmd}; return $usage if(!defined($rollcmd)); @@ -238,29 +240,37 @@ EnOcean_Set($@) Log $ll2, "eltakoRoll.$cmd" . $data; } - ########################### + ########################### + } elsif($st eq "eltakoSwitch") { + my $sendCmd=0; + my $onoff=1; - } elsif($st eq "eltakoRollCtrl") { if($cmd eq "teach") { - my $data=sprintf("A5FFF80D80%s00", $hash->{DEF}); - Log $ll2, "eltakoRollCtrl.Teach: " . $data; + my $idSrc=EnOcean_GetMyDeviceId($hash); + my $data=sprintf("A501000000%s00", $idSrc); + Log $ll2, "$st.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; - } + } elsif($cmd eq "on" or $cmd eq "B0") { + $sendCmd=1; - ########################### + } elsif($cmd eq "off" or $cmd eq "B1") { + $onoff=0; + $sendCmd=1; + + } else { + return "Unknown argument $cmd, choose one of: teach, on ,off"; + + } + if($sendDimCmd) { + # EEP: A5/38/08 Central Command ->Typ 0x01: Switch + my $idSrc=EnOcean_GetMyDeviceId($hash); + my $data=sprintf("A5010000%02X%s00", $onoff|0x08, $idSrc); + IOWrite($hash, "000A0001", $data); + Log $ll2, "$st.$cmd: " . $data; + } + + ########################### } else { # Simulate a PTM my ($c1,$c2) = split(",", $cmd, 2); return "Unknown argument $cmd, choose one of " . @@ -291,6 +301,7 @@ EnOcean_Set($@) return undef; } + ############################# sub EnOcean_Parse($$) @@ -440,7 +451,7 @@ EnOcean_Parse($$) push @event, "3:actuatorStatus:".(($db_2 & 0x01) ? "obstructed" : "ok"); push @event, "3:measured-temp:". sprintf "%.1f", ($db_1*40/255); EnOcean_MD15Cmd($hash, $name, $db_1); - + } elsif($st eq "PM101") { #################################### # Ratio Presence Sensor Eagle PM101, code by aicgazi @@ -462,11 +473,6 @@ EnOcean_Parse($$) } elsif($db_3 eq 0x02) { # dimm push @event, "3:state:" . (($db_0 & 0x01) ? "on": "off"); push @event, "3:value:$db_2"; - - } elsif($db_3 eq 0x03) { # setpoint-switch, todo - } elsif($db_3 eq 0x04) { # basic setpoint, todo - } elsif($db_3 eq 0x05) { # control-variable, todo - } elsif($db_3 eq 0x06) { # fan-stage, todo } } else {