mirror of
https://github.com/fhem/fhem-mirror.git
synced 2025-04-29 05:24:10 +00:00
10_EnOcean: # Added new EEP 2.6 profiles: D2-01-0A (VLD)
# subType actuator.01 (EEP D2-01-00 - D2-01-11) error corrections, readings added # commandref: further explanations added git-svn-id: https://svn.fhem.de/fhem/trunk@5332 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
parent
26ff4b1891
commit
19f30c8b62
@ -219,6 +219,7 @@ my %EnO_subType = (
|
|||||||
"D2.01.07" => "actuator.01",
|
"D2.01.07" => "actuator.01",
|
||||||
"D2.01.08" => "actuator.01",
|
"D2.01.08" => "actuator.01",
|
||||||
"D2.01.09" => "actuator.01",
|
"D2.01.09" => "actuator.01",
|
||||||
|
"D2.01.0A" => "actuator.01",
|
||||||
"D2.01.10" => "actuator.01",
|
"D2.01.10" => "actuator.01",
|
||||||
"D2.01.11" => "actuator.01",
|
"D2.01.11" => "actuator.01",
|
||||||
"D5.00.01" => "contact",
|
"D5.00.01" => "contact",
|
||||||
@ -321,11 +322,13 @@ EnOcean_Get ($@)
|
|||||||
my $name = $hash->{NAME};
|
my $name = $hash->{NAME};
|
||||||
my $data;
|
my $data;
|
||||||
my $destinationID = AttrVal($name, "destinationID", undef);
|
my $destinationID = AttrVal($name, "destinationID", undef);
|
||||||
if (!defined $destinationID || $destinationID eq "multicast") {
|
if (AttrVal($name, "comMode", "uniDir") eq "biDir") {
|
||||||
|
$destinationID = $hash->{DEF};
|
||||||
|
} elsif (!defined $destinationID || $destinationID eq "multicast") {
|
||||||
$destinationID = "FFFFFFFF";
|
$destinationID = "FFFFFFFF";
|
||||||
} elsif ($destinationID eq "unicast") {
|
} elsif ($destinationID eq "unicast") {
|
||||||
$destinationID = $hash->{DEF};
|
$destinationID = $hash->{DEF};
|
||||||
} elsif ($destinationID !~ m/^[\dA-F]{8}$/) {
|
} elsif ($destinationID !~ m/^[\dA-Fa-f]{8}$/) {
|
||||||
return "DestinationID $destinationID wrong, choose <8-digit-hex-code>.";
|
return "DestinationID $destinationID wrong, choose <8-digit-hex-code>.";
|
||||||
}
|
}
|
||||||
$destinationID = uc($destinationID);
|
$destinationID = uc($destinationID);
|
||||||
@ -406,7 +409,9 @@ EnOcean_Set($@)
|
|||||||
}
|
}
|
||||||
my $data;
|
my $data;
|
||||||
my $destinationID = AttrVal($name, "destinationID", undef);
|
my $destinationID = AttrVal($name, "destinationID", undef);
|
||||||
if (!defined $destinationID || $destinationID eq "multicast") {
|
if (AttrVal($name, "comMode", "uniDir") eq "biDir") {
|
||||||
|
$destinationID = $hash->{DEF};
|
||||||
|
} elsif (!defined $destinationID || $destinationID eq "multicast") {
|
||||||
$destinationID = "FFFFFFFF";
|
$destinationID = "FFFFFFFF";
|
||||||
} elsif ($destinationID eq "unicast") {
|
} elsif ($destinationID eq "unicast") {
|
||||||
$destinationID = $hash->{DEF};
|
$destinationID = $hash->{DEF};
|
||||||
@ -3664,7 +3669,7 @@ EnOcean_Parse($$)
|
|||||||
} elsif ($st eq "actuator.01") {
|
} elsif ($st eq "actuator.01") {
|
||||||
# Electronic switches and dimmers with Energy Measurement and Local Control
|
# Electronic switches and dimmers with Energy Measurement and Local Control
|
||||||
# (D2-01-00 - D2-01-11)
|
# (D2-01-00 - D2-01-11)
|
||||||
my $channel = (hex substr($data, 2, 2)) | 0x1F;
|
my $channel = (hex substr($data, 2, 2)) & 0x1F;
|
||||||
if ($channel == 31) {$channel = "Input";}
|
if ($channel == 31) {$channel = "Input";}
|
||||||
my $cmd = hex substr($data, 1, 1);
|
my $cmd = hex substr($data, 1, 1);
|
||||||
|
|
||||||
@ -3674,39 +3679,47 @@ EnOcean_Parse($$)
|
|||||||
my $error;
|
my $error;
|
||||||
my $localControl;
|
my $localControl;
|
||||||
my $dim;
|
my $dim;
|
||||||
if ( hex(substr($data, 2, 2)) | 0x80 == 1) {
|
push @event, "3:powerFailure" . $channel . ":" .
|
||||||
$overCurrentOff = "executed";
|
(($db[2] & 0x80) ? "enabled":"disabled");
|
||||||
} else {
|
push @event, "3:powerFailureDetection" . $channel . ":" .
|
||||||
|
(($db[2] & 0x40) ? "detected":"not_detected");
|
||||||
|
if (($db[1] & 0x80) == 0) {
|
||||||
$overCurrentOff = "ready";
|
$overCurrentOff = "ready";
|
||||||
|
} else {
|
||||||
|
$overCurrentOff = "executed";
|
||||||
}
|
}
|
||||||
push @event, "3:overCurrentOff" . $channel . ":" . $overCurrentOff;
|
push @event, "3:overCurrentOff" . $channel . ":" . $overCurrentOff;
|
||||||
if (substr($data, 2, 2) | 0x60 == 1) {
|
if ((($db[1] & 0x60) >> 5) == 1) {
|
||||||
$error = "warning";
|
$error = "warning";
|
||||||
} elsif (hex(substr($data, 2, 2)) | 0x60 == 2) {
|
} elsif (((hex(substr($data, 2, 2)) & 0x60) >> 5) == 2) {
|
||||||
$error = "failure";
|
$error = "failure";
|
||||||
} else {
|
} else {
|
||||||
$error = "ok";
|
$error = "ok";
|
||||||
}
|
}
|
||||||
push @event, "3:error" . $channel . ":" . $error;
|
push @event, "3:error" . $channel . ":" . $error;
|
||||||
if (hex(substr($data, 4, 2)) | 0x80 == 1) {
|
if (($db[0] & 0x80) == 0) {
|
||||||
$localControl = "enabled";
|
|
||||||
} else {
|
|
||||||
$localControl = "disabled";
|
$localControl = "disabled";
|
||||||
|
} else {
|
||||||
|
$localControl = "enabled";
|
||||||
}
|
}
|
||||||
push @event, "3:localControl" . $channel . ":" . $localControl;
|
push @event, "3:localControl" . $channel . ":" . $localControl;
|
||||||
my $dimValue = hex(substr($data, 4, 2)) | 0x1F;
|
my $dimValue = $db[0] & 0x7F;
|
||||||
if (hex(substr($data, 4, 2)) | 0x1F == 0) {
|
if ($dimValue == 0) {
|
||||||
push @event, "3:channel" . $channel . ":off";
|
push @event, "3:channel" . $channel . ":off";
|
||||||
push @event, "3:state:off";
|
push @event, "3:state:off";
|
||||||
} else {
|
} else {
|
||||||
push @event, "3:channel" . $channel . ":on";
|
push @event, "3:channel" . $channel . ":on";
|
||||||
push @event, "3:state:on";
|
push @event, "3:state:on";
|
||||||
}
|
}
|
||||||
push @event, "3:dim" . $channel . ":" . $dimValue;
|
if ($channel ne "input" && $channel == 0) {
|
||||||
|
push @event, "3:dim:" . $dimValue;
|
||||||
|
} else {
|
||||||
|
push @event, "3:dim" . $channel . ":" . $dimValue;
|
||||||
|
}
|
||||||
|
|
||||||
} elsif ($cmd == 7) {
|
} elsif ($cmd == 7) {
|
||||||
# actuator measurement response
|
# actuator measurement response
|
||||||
my $unit = hex(substr($data, 2, 2)) | 0xE0;
|
my $unit = $db[4] >> 5;
|
||||||
if ($unit == 1) {
|
if ($unit == 1) {
|
||||||
$unit = "Wh";
|
$unit = "Wh";
|
||||||
push @event, "3:energyUnit" . $channel . ":" . $unit;
|
push @event, "3:energyUnit" . $channel . ":" . $unit;
|
||||||
@ -5775,6 +5788,8 @@ EnOcean_Undef($$)
|
|||||||
<li>overCurrentShutdown<channel>: off|restart</li>
|
<li>overCurrentShutdown<channel>: off|restart</li>
|
||||||
<li>overCurrentShutdownReset<channel>: not_active|trigger</li>
|
<li>overCurrentShutdownReset<channel>: not_active|trigger</li>
|
||||||
<li>power<channel>: 1/[W|KW]</li>
|
<li>power<channel>: 1/[W|KW]</li>
|
||||||
|
<li>powerFailure<channel>: enabled|disabled</li>
|
||||||
|
<li>powerFailureDetection<channel>: detected|not_detected</li>
|
||||||
<li>powerUnit<channel>: W|KW</li>
|
<li>powerUnit<channel>: W|KW</li>
|
||||||
<li>rampTime<1...3l>: 1/s</li>
|
<li>rampTime<1...3l>: 1/s</li>
|
||||||
<li>responseTimeMax: 1/s</li>
|
<li>responseTimeMax: 1/s</li>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user