diff --git a/fhem/CHANGED b/fhem/CHANGED index 58e391a60..fa852d782 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -30,6 +30,7 @@ - feature: shutdown parameter restart added - feature: usb scan/create command added (part of autocreate). - feature: SaveAs added to FHEMWEB Edit-Files + - feature: EnOcean ElTako dimmer by Marc. - 2011-07-08 (5.1) diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm index 87771237c..08dacc511 100755 --- a/fhem/FHEM/10_EnOcean.pm +++ b/fhem/FHEM/10_EnOcean.pm @@ -66,8 +66,8 @@ EnOcean_Initialize($) $hash->{SetFn} = "EnOcean_Set"; $hash->{AttrList} = "IODev do_not_notify:1,0 ignore:0,1 " . "showtime:1,0 loglevel:0,1,2,3,4,5,6 model " . - "subType:switch,contact,sensor,windowHandle,SR04,MD15 ". - "actualTemp"; + "subType:switch,contact,sensor,windowHandle,SR04,MD15,". + "dimmer,dimmCtrl actualTemp"; for(my $i=0; $i<@ptm200btn;$i++) { $ptm200btn{$ptm200btn[$i]} = "$i:30"; @@ -140,6 +140,31 @@ EnOcean_Set($@) $hash->{READINGS}{$cmd}{TIME} = $tn; $hash->{READINGS}{$cmd}{VAL} = $arg; + } elsif($st eq "dimmCtrl") { # Tested for Eltako-Dimmer + if($cmd eq "teach") { + my $data=sprintf("A502000000%s00", $hash->{DEF}); + Log $ll2, "dimmCtrl.Teach: " . $data; + IOWrite($hash, "000A0001", $data); # len:000a optlen:00 pakettype:1(radio) + + } elsif($cmd eq "dimm") { + return "Usage: dimm percent [time 01-FF FF:slowest] [on/off]" if(@a<2); + my $time=0; + my $onoff=1; + # for eltako relative (0-100) (but not compliant to EEP because DB0.2 is 0) + my $dimVal=$a[1]; + shift(@a); + if(defined($a[1])) { $time=$a[1]; shift(@a); } + if(defined($a[1])) { $onoff=($a[1] eq "off") ? 0 : 1; shift(@a); } + # EEP: A5/38/08 Central Command ->Typ 0x02: Dimming + my $data=sprintf("A502%02X%02X%02X%s00", $dimVal, $time, $onoff|0x08, $hash->{DEF}); + IOWrite($hash, "000A0001", $data); + Log $ll2, "dimmCtrl.dimm: " . $data; + + } else { + return "Unknown argument $cmd, choose one of: teach, dimm" + + } + ########################### } else { # Simulate a PTM my ($c1,$c2) = split(",", $cmd, 2); @@ -319,6 +344,26 @@ EnOcean_Parse($$) push @event, "3:measured-temp:". sprintf "%.1f", ($db_1*40/255); EnOcean_MD15Cmd($hash, $name, $db_1); + + } elsif($st eq "dimmer") { + # todo: create a more general solution for the central-command responses + + # response command from (Eltako-)Actor ( Central-Command:A5/38/08 ) + if($db_3 eq 0x01) { # switch + push @event, "3:state:" . (($db_0 & 0x01) ? "on": "off"); + push @event, "3:time:" . ($db_2<<8 + $db_1); + push @event, "3:timeType:" . (($db_0 & 0x02) ? "delay": "duration"); + + } elsif($db_3 eq 0x02) { # dimm + push @event, "3:state:" . (($db_0 & 0x01) ? "on": "off"); + push @event, "3:dimmValue:$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 { push @event, "3:state:$db_3"; push @event, "3:sensor1:$db_3";