From a63c53ffa1fb2a3510ded15297cfa9b3dbfac306 Mon Sep 17 00:00:00 2001 From: rudolfkoenig Date: Thu, 31 Jan 2013 20:52:11 +0000 Subject: [PATCH] Patch from Klaus git-svn-id: https://svn.fhem.de/fhem/trunk@2620 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/10_EnOcean.pm | 53 ++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 17 deletions(-) diff --git a/fhem/FHEM/10_EnOcean.pm b/fhem/FHEM/10_EnOcean.pm index 20f162c4f..124ae6dfa 100755 --- a/fhem/FHEM/10_EnOcean.pm +++ b/fhem/FHEM/10_EnOcean.pm @@ -1,5 +1,10 @@ ############################################## # $Id$ +# 2013-01-31 klaus.schauer +# eltakoDimmer: dimspeed corrections ($dimTime) +# Log $ll2: patch Rocker Switch logging +# attr subDef: $subDef = $hash->{DEF} if attr subDef is not defined +# Rocker Switch (PTM200): enable attr subDef package main; use strict; @@ -172,12 +177,12 @@ EnOcean_Set($@) my $sendDimCmd=0; my $dimTime=AttrVal($name, "dimTime", 0); my $onoff=1; - my $subDef = AttrVal($name, "subDef", ""); + my $subDef = AttrVal($name, "subDef", "$hash->{DEF}"); my $dimVal=$hash->{READINGS}{dimValue}{VAL}; if($cmd eq "teach") { my $data=sprintf("A502000000%s00", $subDef); - Log $ll2, "EnOcean: set $name $cmd SenderID: $subDef"; + Log $ll2, "EnOcean: set $name $cmd DefID: $hash->{DEF} SenderID: $subDef"; # len:000a optlen:00 pakettype:1(radio) IOWrite($hash, "000A0001", $data); @@ -188,7 +193,7 @@ EnOcean_Set($@) $dimVal=$a[1]; shift(@a); if(defined($a[1])) { - $dimTime=sprintf("%x",(($a[1]*2.55)-255)*-1); + $dimTime=sprintf("%X",(($a[1]*2.55)-255)*-1); shift(@a); } $sendDimCmd=1; @@ -198,7 +203,7 @@ EnOcean_Set($@) $dimVal+=$a[1]; shift(@a); if(defined($a[1])) { - $dimTime=$a[1]; + $dimTime=sprintf("%X",(($a[1]*2.55)-255)*-1); shift(@a); } $sendDimCmd=1; @@ -207,7 +212,10 @@ EnOcean_Set($@) return "Usage: $cmd percent [dimspeed 1-100]" if(@a<2 or $a[1]>100); $dimVal-=$a[1]; shift(@a); - if(defined($a[1])) { $dimTime=$a[1]; shift(@a); } + if(defined($a[1])) { + $dimTime=sprintf("%X",(($a[1]*2.55)-255)*-1); + shift(@a); + } $sendDimCmd=1; } elsif($cmd eq "on" || $cmd eq "B0") { @@ -243,11 +251,11 @@ EnOcean_Set($@) ########################### } elsif($st eq "eltakoShutter") { my $shutTime=AttrVal($name, "shutTime", 0); - my $subDef = AttrVal($name, "subDef", ""); + my $subDef = AttrVal($name, "subDef", "$hash->{DEF}"); my $shutCmd = 0x00; if($cmd eq "teach") { my $data=sprintf("A5FFF80D80%s00", $subDef); - Log $ll2, "EnOcean: set $name $cmd SenderID: $subDef"; + Log $ll2, "EnOcean: set $name $cmd DefID: $hash->{DEF} SenderID: $subDef"; # len:000a optlen:00 pakettype:1(radio) IOWrite($hash, "000A0001", $data); @@ -289,15 +297,14 @@ EnOcean_Set($@) } ########################### - } else { # Simulate a PTM + # Rocker Switch, simulate a PTM200 switch module + } else { my ($c1,$c2) = split(",", $cmd, 2); - if(!defined($EnO_ptm200btn{$c1}) || ($c2 && !defined($EnO_ptm200btn{$c2}))) { my $list = join(" ", sort keys %EnO_ptm200btn); return SetExtensions($hash, $list, $name, @a); } - my ($db_3, $status) = split(":", $EnO_ptm200btn{$c1}, 2); $db_3 <<= 5; $db_3 |= 0x10 if($c1 ne "released"); # set the pressed flag @@ -305,9 +312,9 @@ EnOcean_Set($@) my ($d2, undef) = split(":", $EnO_ptm200btn{$c2}, 2); $db_3 |= ($d2<<1) | 0x01; } - IOWrite($hash, "", - sprintf("6B05%02X000000%s%s", $db_3, $hash->{DEF}, $status)); - + my $subDef = AttrVal($name, "subDef", "$hash->{DEF}"); + IOWrite($hash, "", sprintf("6B05%02X000000%s%s", $db_3, $subDef, $status)); + Log $ll2, "EnOcean: set $name $cmd"; } select(undef, undef, undef, 0.2); # Tested by joerg. He prefers 0.3 :) @@ -670,8 +677,9 @@ EnOcean_A5Cmd($$$) issue switch off command. - -
  • subType eltakoShutter, tested with Eltako devices only + Note: set extensions are supported + +
  • subType eltakoShutter, tested with Eltako devices only (additionally set attr model to FSB61)
    @@ -761,12 +778,14 @@ EnOcean_A5Cmd($$$)
  • <BtnX,BtnY> where BtnX and BtnY is one of the above, e.g. A0,BI or D0,CI
  • buttons:released
  • -
  • buttons: released
  • +
  • buttons:<BtnX> released

  • FSB61/FSM61 (set model to FSB61 or FSM61 manually)
    -