Enocean: eltakoDimmer: new commands 'dimup' and 'dimdown'
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user