2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-03-10 03:06:37 +00:00

10_EnOcean: PID: readings parameter variable

git-svn-id: https://svn.fhem.de/fhem/trunk@22959 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
klaus.schauer 2020-10-12 15:20:29 +00:00
parent 81c2c243a8
commit 408def515c

View File

@ -1,13 +1,4 @@
# $Id$
# 2020-09-28
# Added new EEP:
# Remote Management:
# EEP changed: environmentApp: windStrength calculation corrected, readings renamed
# GP changed:
# Secure:
# EnOcean_Notify():
# EnOcean_Attr():
# commandref: further explanations added
package main;
use strict;
@ -1128,7 +1119,7 @@ sub EnOcean_Define($$) {
# device specific actions
if (exists($attr{$name}{subType}) && $attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# pid parameter
@{$hash->{helper}{calcPID}} = (undef, $hash, 'defined', '');
@{$hash->{helper}{calcPID}} = (undef, $hash, 'defined', '', 'temperature', 'setpoint', 'Temp');
$hash->{helper}{stopped} = 0;
#delete $hash->{helper}{adjust};
}
@ -2847,7 +2838,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@ -2866,7 +2857,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@ -2881,7 +2872,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd";
@ -2905,7 +2896,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@ -2924,7 +2915,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'on') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@ -2938,7 +2929,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd";
@ -2964,7 +2955,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointTempSet");
Log3 $name, 3, "EnOcean set $name $cmd $a[1]";
shift(@a);
@ -2983,7 +2974,7 @@ sub EnOcean_Set($@)
readingsEndUpdate($hash, 0);
# PID regulator active
my $activatePID = AttrVal($name, 'pidCtrl', 'off') eq 'on' ? 'start' : 'stop';
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
Log3 $name, 3, "EnOcean set $name $cmd $setpointTemp";
shift(@a);
@ -2998,7 +2989,7 @@ sub EnOcean_Set($@)
readingsBulkUpdate($hash, "waitingCmds", $cmd);
readingsEndUpdate($hash, 0);
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTempSet");
CommandDeleteReading(undef, "$name alarm");
@ -8012,7 +8003,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8028,7 +8019,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "valveOpens") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8067,14 +8058,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 0x10;
}
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8093,7 +8084,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "liftSet") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8112,7 +8103,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
$db[2] = 0x20;
@ -8134,7 +8125,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8145,11 +8136,11 @@ sub EnOcean_Parse($$)
} else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4;
@ -8165,7 +8156,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8182,7 +8173,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
$db[2] = 0x20;
@ -8201,7 +8192,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8212,11 +8203,11 @@ sub EnOcean_Parse($$)
} else {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature
$setpointSet = $setpointTempSet * 255 / 40;
$setpointSelect = 4;
@ -8231,7 +8222,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = $setpointSummerMode;
$db[2] = (40 - $temperature) * 255 / 40;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8241,7 +8232,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8256,7 +8247,7 @@ sub EnOcean_Parse($$)
} elsif ($maintenanceMode eq "valveClosed") {
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 0;
$db[2] = 0x20;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8419,7 +8410,7 @@ sub EnOcean_Parse($$)
if ($waitingCmds eq "valveOpens") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:valveOpend:runInit";
@ -8446,14 +8437,14 @@ sub EnOcean_Parse($$)
$waitingCmds = 3;
}
# stop PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
CommandDeleteReading(undef, "$name setpointSet");
CommandDeleteReading(undef, "$name setpointTemp");
CommandDeleteReading(undef, "$name setpointTempSet");
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit";
@ -8466,7 +8457,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8486,7 +8477,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:runInit";
@ -8494,7 +8485,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2;
} else {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
$setpointTemp = $setpointTempSet;
push @event, "3:setpointTemp:$setpointTemp";
@ -8508,7 +8499,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@ -8521,7 +8512,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($maintenanceMode eq "valveOpend:runInit") {
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
@ -8541,7 +8532,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if ($maintenanceMode eq "valveOpend:runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@ -8549,7 +8540,7 @@ sub EnOcean_Parse($$)
$waitingCmds = 2;
} else {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, $activatePID, undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
push @event, "3:setpointTemp:$setpointTemp";
push @event, "3:maintenanceMode:off";
@ -8562,7 +8553,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = 100;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@ -8724,7 +8715,7 @@ sub EnOcean_Parse($$)
if (AttrVal($name, 'windowOpenCtrl', 'disable') eq 'enable' && $window eq 'open') {
# valve will be closed if the window is open
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8739,7 +8730,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "runInit") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8752,7 +8743,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "standby") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8766,7 +8757,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint";
CommandDeleteReading(undef, "$name setpointTemp");
@ -8777,11 +8768,11 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpoint);
} else {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature
$setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4;
@ -8796,7 +8787,7 @@ sub EnOcean_Parse($$)
} elsif ($waitingCmds eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
if ($operationMode eq 'setpoint') {
readingsSingleUpdate($hash, 'setpointSetRestore', $setpointSet, 1);
}
@ -8812,7 +8803,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpoint") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
push @event, "3:maintenanceMode:off";
push @event, "3:operationMode:setpoint";
$waitingCmds = 0;
@ -8820,11 +8811,11 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "setpointTemp") {
if (AttrVal($name, "pidCtrl", 'on') eq 'on') {
# activate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'actuator', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = ReadingsVal($name, "setpointSet", $setpointSet);
} else {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
# setpoint temperature
$setpointSet = int($setpointTempSet * 2);
$setpointSelect = 4;
@ -8837,7 +8828,7 @@ sub EnOcean_Parse($$)
} elsif ($operationMode eq "summerMode") {
# deactivate PID regulator
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
($err, $logLevel, $response) = EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
$setpointSet = $setpointSummerMode;
readingsSingleUpdate($hash, 'setpointSet', $setpointSet, 1);
push @event, "3:maintenanceMode:off";
@ -13781,9 +13772,9 @@ sub EnOcean_Attr(@)
if (!defined $attrVal){
} elsif (lc($attrVal) eq "on") {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} elsif (lc($attrVal) eq "off") {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
} else {
$err = "attribute-value [$attrName] = $attrVal wrong";
}
@ -14406,9 +14397,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14432,9 +14423,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14460,9 +14451,9 @@ sub EnOcean_Notify(@)
if ($attr{$name}{subType} =~ m/^hvac\.0(1|4|6)$/) {
# control PID regulatior
if (AttrVal($name, 'pidCtrl', 'on') eq 'on' && ReadingsVal($name, 'maintenanceMode', 'off') eq 'off') {
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature');
EnOcean_setPID(undef, $hash, 'start', ReadingsVal($name, "setpoint", undef), 'temperature', 'setpoint', 'Temp');
} else {
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature');
EnOcean_setPID(undef, $hash, 'stop', undef, 'temperature', 'setpoint', 'Temp');
}
} elsif ($attr{$name}{subType} eq 'environmentApp' && AttrVal($name, 'devMode', 'slave') eq 'master') {
@{$hash->{helper}{periodic}{time}} = ($hash, 'time', $attr{$name}{sendTimePeriodic}, 30, -1, undef);
@ -14781,11 +14772,11 @@ EnOcean_Encapsulation($$$$)
}
# set PID regulator
sub EnOcean_setPID($$$$$) {
my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @_;
sub EnOcean_setPID($$$$$$$) {
my ($ctrl, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar) = @_;
my $name = $hash->{NAME};
my ($err, $response, $logLevel) = (undef, 'start', 5);
@{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust, $actualVar);
@{$hash->{helper}{calcPID}} = (undef, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar);
if ($cmd eq 'stop' || AttrVal($name, 'pidCtrl', 'on') eq 'off') {
$hash->{helper}{stopped} = 1;
readingsSingleUpdate($hash, "pidState", 'stopped', 0);
@ -14803,7 +14794,7 @@ sub EnOcean_setPID($$$$$) {
# calc valve setpoint (PID regulator)
sub EnOcean_calcPID($) {
my ($pidParam) = @_;
my ($ctrl, $hash, $cmd, $adjust, $actualVar) = @$pidParam;
my ($ctrl, $hash, $cmd, $adjust, $actualVar, $actuationVar, $desiredVar) = @$pidParam;
my $name = $hash->{NAME};
my ($err, $response, $logLevel, $setpoint) = (undef, $cmd, 5, 0);
my $reUINT = '^([\\+]?\\d+)$'; # uint without whitespaces
@ -14815,8 +14806,8 @@ sub EnOcean_calcPID($) {
#my $reading = $actualVar;
my $regexp = $reFloat;
my $actuation = "";
my $actuationDone = ReadingsVal($name,'setpointSet', ReadingsVal($name, 'setpoint', ""));
my $actuationCalc = ReadingsVal($name, 'setpointCalc', "");
my $actuationDone = ReadingsVal($name, $actuationVar . 'Set', ReadingsVal($name, $actuationVar, ""));
my $actuationCalc = ReadingsVal($name, $actuationVar . 'Calc', "");
my $actuationCalcOld = $actuationCalc;
my $actorTimestamp = $hash->{helper}{actorTimestamp} ? $hash->{helper}{actorTimestamp} : FmtDateTime(gettimeofday() - 3600 * 24);
my $desired = '';
@ -14870,7 +14861,7 @@ sub EnOcean_calcPID($) {
last;
}
$desired = ReadingsVal( $name, 'setpointTempSet', ReadingsVal($name, 'setpointTemp', ""));
$desired = ReadingsVal( $name, 'setpoint' . $desiredVar . 'Set', ReadingsVal($name, 'setpoint' . $desiredVar, ""));
if (!$sensorStr && !$stateStr) {
$stateStr = "alarm";
$err = 'no_temperature_value';
@ -15029,13 +15020,13 @@ sub EnOcean_calcPID($) {
readingsBulkUpdate($hash, 'p_p', $pPortion) if ($pPortion ne "");
readingsBulkUpdate($hash, 'p_d', $dPortion) if ($dPortion ne "");
readingsBulkUpdate($hash, 'p_i', $iPortion) if ($iPortion ne "");
readingsBulkUpdate($hash, 'setpointCalc', $actuationCalc) if ($actuationCalc ne "");
readingsBulkUpdate($hash, $actuationVar . 'Calc', $actuationCalc) if ($actuationCalc ne "");
if ($actuationByThreshold) {
readingsBulkUpdate($hash, 'setpointSet', $actuation) if ($actuation ne "");
readingsBulkUpdate($hash, $actuationVar . 'Set', $actuation) if ($actuation ne "");
$setpoint = $actuation;
$actuationDone = $actuation;
} else {
readingsBulkUpdate($hash, 'setpointSet', $actuationDone) if ($actuationDone ne "");
readingsBulkUpdate($hash, $actuationVar . 'Set', $actuationDone) if ($actuationDone ne "");
$setpoint = $actuationDone;
}
readingsEndUpdate($hash, 1);
@ -15051,7 +15042,7 @@ sub EnOcean_calcPID($) {
readingsBulkUpdate($hash, 'pidAlarm', $err) if (defined $err);
readingsEndUpdate($hash, 1);
Log3($name, 5, "EnOcean $name EnOcean_calcPID Cmd: $cmd pidState: $stateStr T: $sensorValue SP: $setpoint SPT: $desired");
@{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef, $actualVar);
@{$hash->{helper}{calcPID}} = (undef, $hash, 'periodic', undef, $actualVar, $actuationVar, $desiredVar);
RemoveInternalTimer($hash->{helper}{calcPID});
InternalTimer(gettimeofday() + $hash->{helper}{calcInterval} * 1.02, "EnOcean_calcPID", $hash->{helper}{calcPID}, 0);
return ($err, $logLevel, $response);