diff --git a/FHEM/10_EnOcean.pm b/FHEM/10_EnOcean.pm index bc93bf049..23cf375ae 100755 --- a/FHEM/10_EnOcean.pm +++ b/FHEM/10_EnOcean.pm @@ -67,7 +67,7 @@ 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,". + "subType:switch,contact,sensor,windowHandle,SR04,MD15," . "eltakoDimmer subId actualTemp"; for(my $i=0; $i<@ptm200btn;$i++) { @@ -142,6 +142,11 @@ EnOcean_Set($@) $hash->{READINGS}{$cmd}{VAL} = $arg; } elsif($st eq "eltakoDimmer") { + my $sendDimCmd=0; + my $time=0; + my $onoff=1; + my $dimVal=100; + if($cmd eq "teach") { my $idSrc=EnOcean_GetMyDeviceId($hash); my $data=sprintf("A502000000%s00", $idSrc); @@ -150,25 +155,41 @@ EnOcean_Set($@) } elsif($cmd eq "dimto") { return "Usage: $cmd 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]; + $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 $idSrc=EnOcean_GetMyDeviceId($hash); - #my $data=sprintf("A502%02X%02X%02X%s00", $dimVal, $time, $onoff|0x08, $hash->{DEF}); - my $data=sprintf("A502%02X%02X%02X%s00", $dimVal, $time, $onoff|0x08, $idSrc); - IOWrite($hash, "000A0001", $data); - Log $ll2, "$st.$cnd: " . $data; + $sendDimCmd=1; + + } elsif($cmd eq "dimup") { + return "Usage: $cmd percent" if(@a<2 or $a[1]>100); + $dimVal=$hash->{VALUE}+$a[1]; + Log $ll2, "$st.$cmd val:" . $hash->{VALUE} . " par:" . $a[1] . " val:" . $dimVal; + shift(@a); + $sendDimCmd=1; + + } elsif($cmd eq "dimdown") { + return "Usage: $cmd percent" if(@a<2 or $a[1]>100); + $dimVal=$hash->{VALUE}-$a[1]; + shift(@a); + $sendDimCmd=1; } else { - return "Unknown argument $cmd, choose one of: teach, dimto" + return "Unknown argument $cmd, choose one of: teach, dimto"; } - + if($sendDimCmd) { + Log $ll2, " val:" . $dimVal; + if($dimVal > 100) { $dimVal=100; } + if($dimVal < 0) { $dimVal=0; } + Log $ll2, " val:" . $dimVal; + # EEP: A5/38/08 Central Command ->Typ 0x02: Dimming + my $idSrc=EnOcean_GetMyDeviceId($hash); + my $data=sprintf("A502%02X%02X%02X%s00", $dimVal, $time, $onoff|0x08, $idSrc); + IOWrite($hash, "000A0001", $data); + Log $ll2, "$st.$cmd: " . $data; + } ########################### } else { # Simulate a PTM my ($c1,$c2) = split(",", $cmd, 2); @@ -402,10 +423,11 @@ EnOcean_Parse($$) if($vn eq "state") { $hash->{STATE} = $vv; push @changed, $vv; - + } elsif($vn eq "value") { + $hash->{VALUE} = $vv; + push @changed, "$vn: $vv"; } else { push @changed, "$vn: $vv"; - } } @@ -469,6 +491,7 @@ sub EnOcean_GetMyDeviceId($) { my ($hash) = @_; my $myId=0; # default: use Device-ID of EUL + my $name = $hash->{NAME}; my $baseId=hex($hash->{IODev}{BASEID}); my $subId = AttrVal($name, "subId", ""); if(defined $baseId and defined $subId) {