2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-02-25 09:55:38 +00:00

10_EnOcean: subType roomCtrlPanel.01 changed

git-svn-id: https://svn.fhem.de/fhem/trunk@29065 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klaus.schauer 2024-08-14 12:21:56 +00:00
parent be601fd695
commit 882b07c81b

View File

@ -6307,21 +6307,21 @@ sub EnOcean_Set($@) {
if ($cmd eq "desired-temp"|| $cmd eq "setpointTemp") {
if (defined $a[1]) {
if ($a[1] =~ m/^\d+(\.\d)?$/ && $a[1] >= 5 && $a[1] <= 40) {
$a[1] = sprintf "%d", $a[1];
$a[1] = sprintf "%.1f", (int(0.5 + 2 * $a[1]) / 2);
readingsBeginUpdate($hash);
if ($a[1] < 15) {
$setpointBase = 15;
$setpointShift = $a[1] - $setpointBase;
$setpointShiftMax = $setpointBase - $a[1] if ($setpointShiftMax < -$setpointShift);
$setpointShiftMax = int(0.501 + $setpointBase - $a[1]) if ($setpointShiftMax < -$setpointShift);
readingsBulkUpdate($hash, "setpointShiftMax", $setpointShiftMax);
} elsif ($a[1] > 30) {
$setpointBase = 30;
$setpointShift = $a[1] - $setpointBase;
$setpointShiftMax = $a[1] - $setpointBase if ($setpointShiftMax < $setpointShift);
$setpointShiftMax = int(0.501 + $a[1] - $setpointBase) if ($setpointShiftMax < $setpointShift);
readingsBulkUpdate($hash, "setpointShiftMax", $setpointShiftMax);
} else {
$setpointBase = $a[1];
$setpointShift = 0;
$setpointBase = int($a[1]);
$setpointShift = ($a[1] > int($a[1])) ? 0.5 : 0;
}
readingsBulkUpdate($hash, "setpointShift", $setpointShift);
readingsBulkUpdate($hash, "setpointBase", $setpointBase);
@ -6344,10 +6344,9 @@ sub EnOcean_Set($@) {
if (defined $a[1]) {
if ($a[1] =~ m/^\d+$/ && $a[1] >= 1 && $a[1] <= 10) {
readingsBeginUpdate($hash);
if ($setpointTemp < 15 - $a[1]) {
$setpointShiftMax = 15 - $setpointTemp;
} elsif ($setpointTemp > 30 + $a[1]) {
$setpointShiftMax = $setpointTemp - 30;
my $requiredShiftMax = int(0.501 + abs($setpointShift));
if ($a[1] < $requiredShiftMax) {
$setpointShiftMax = $requiredShiftMax;
} else {
$setpointShiftMax = $a[1];
}
@ -6482,7 +6481,7 @@ sub EnOcean_Set($@) {
}
} else {
$cmdList .= "setpointTemp:slider,5,1,40 cooling:off,on desired-temp " .
$cmdList .= "setpointTemp:slider,5,0.5,40,1 cooling:off,on desired-temp " .
"fanSpeed:auto,off,1,2,3 heating:off,on occupancy:occupied,unoccupied " .
"setpointShiftMax:slider,1,1,10 setpointType:setpointShift,setpointTemp window:closed,open";
return "Unknown argument $cmd, choose one of $cmdList";
@ -6491,8 +6490,8 @@ sub EnOcean_Set($@) {
$heating = $heating eq 'on' ? 0x40 : 0;
$cooling = $cooling eq 'on' ? 0x20 : 0;
$window = $window eq 'open' ? 0x10 : 0;
$setpointShift = int(($setpointShift + $setpointShiftMax) * 255 / ($setpointShiftMax * 2));
#$setpointShift = unpack('C', pack('c', $setpointShift));
#$setpointShift = int(($setpointShift + $setpointShiftMax) * 255 / ($setpointShiftMax * 2));
$setpointShift = int(128 + 127.5 * $setpointShift / $setpointShiftMax);
my %fanSpeed = ('auto' => 0, 'off' => 1, 1 => 2, 2 => 3, 3 => 4);
$occupancy = $occupancy eq 'occupied' ? 1 : 0;
$data = sprintf "%02X%02X%02X%02X", $setpointType | $heating | $cooling | $window | 1,
@ -12453,7 +12452,8 @@ sub EnOcean_Parse($$) {
if (($waitingCmds & 3) == 0) {
my $setpointShiftMax = ($db[0] & 0xF0) >> 4;
push @event, "3:setpointShiftMax:$setpointShiftMax";
my $setpointShift = sprintf "%0.1f", (int(0.5 + $db[2] * $setpointShiftMax / 128 * 10) / 10 - $setpointShiftMax);
# my $setpointShift = sprintf "%0.1f", (int(0.5 + $db[2] * $setpointShiftMax / 128 * 10) / 10 - $setpointShiftMax);
my $setpointShift = sprintf "%0.1f", (int(0.5 + $db[2] * $setpointShiftMax / 128 * 2) / 2 - $setpointShiftMax);
push @event, "3:setpointShift:$setpointShift";
my $setpointBase = $db[1];
push @event, "3:setpointBase:$setpointBase";