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