Enocean: eltakoDimmer: new commands 'dimup' and 'dimdown'

This commit is contained in:
Marc Hoppe
2012-02-04 22:41:27 +01:00
committed by Marc Hoppe
parent b422b35553
commit 6ec7ca22a8

View File

@@ -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) {