From 0681438d89043c751891364b91fe019f27f6e5ef Mon Sep 17 00:00:00 2001
From: damian-s <>
Date: Sat, 25 Jan 2014 18:48:59 +0000
Subject: [PATCH] improved switching behavior
git-svn-id: https://svn.fhem.de/fhem/trunk@4740 2b470e98-0d58-463d-a4d8-8e2adae1ed80
---
fhem/FHEM/98_THRESHOLD.pm | 86 ++++++++++++++++++++++++---------------
1 file changed, 53 insertions(+), 33 deletions(-)
diff --git a/fhem/FHEM/98_THRESHOLD.pm b/fhem/FHEM/98_THRESHOLD.pm
index e28639340..c16102449 100644
--- a/fhem/FHEM/98_THRESHOLD.pm
+++ b/fhem/FHEM/98_THRESHOLD.pm
@@ -226,27 +226,29 @@ THRESHOLD_Define($$$)
$hash->{cmd2_lt} = SemicolonEscape($cmd2_lt);
$hash->{cmd_default} = $cmd_default;
$hash->{STATE} = 'initialized';
-
- readingsBeginUpdate ($hash);
-
- if (defined ($init_desired_value))
- {
- my $mode="active";
- readingsBulkUpdate ($hash, "threshold_min", $init_desired_value-$hysteresis+$offset);
- readingsBulkUpdate ($hash, "threshold_max", $init_desired_value+$offset);
- readingsBulkUpdate ($hash, "cmd","wait for next cmd");
- readingsBulkUpdate ($hash, "desired_value", $init_desired_value);
- readingsBulkUpdate ($hash, "mode", $mode);
- }
-
- if (defined ($target_sensor))
- {
- my $mode="external";
- readingsBulkUpdate ($hash, "cmd", "wait for next cmd");
- readingsBulkUpdate ($hash, "mode", "external");
- }
- readingsEndUpdate ($hash, 1);
-
+ if (defined ($init_desired_value) or defined ($target_sensor)) {
+ readingsBeginUpdate ($hash);
+ if (defined ($init_desired_value))
+ {
+ my $mode="active";
+ readingsBulkUpdate ($hash, "threshold_min", $init_desired_value-$hysteresis+$offset);
+ readingsBulkUpdate ($hash, "threshold_max", $init_desired_value+$offset);
+ readingsBulkUpdate ($hash, "cmd","wait for next cmd");
+ readingsBulkUpdate ($hash, "desired_value", $init_desired_value);
+ readingsBulkUpdate ($hash, "mode", $mode);
+ }
+ if (defined ($target_sensor))
+ {
+ my $mode="external";
+ readingsBulkUpdate ($hash, "cmd", "wait for next cmd");
+ readingsBulkUpdate ($hash, "mode", "external");
+ }
+ readingsEndUpdate ($hash, 1);
+# my $msg = THRESHOLD_Check($hash);
+# if ($msg ne "") {
+# return $msg;
+# }
+ }
return undef;
}
@@ -287,6 +289,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsBulkUpdate ($hash, "desired_value", $value);
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
} elsif ($arg eq "deactivated" ) {
$ret=CommandAttr(undef, "$pn disable 1");
} elsif ($arg eq "active" ) {
@@ -307,6 +310,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "state", $state_format) if (!($state_format =~/^[ ]*$/));
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
}
} elsif ($arg eq "hysteresis" ) {
return "$pn: set hysteresis value:$value, hysteresis needs a numeric parameter" if (@a != 3 || $value !~ m/^[\d\.]*$/ );
@@ -317,6 +321,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "threshold_max", $desired_value+$offset);
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
}
} elsif ($arg eq "offset" ) {
return "$pn: set offset value:$value, offset needs a numeric parameter" if (@a != 3 || $value !~ m/^[-\d\.]*$/ );
@@ -328,6 +333,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "threshold_max", $desired_value+$offset);
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
}
} elsif ($arg eq "cmd1_gt" ) {
readingsBeginUpdate ($hash);
@@ -352,19 +358,11 @@ THRESHOLD_Notify($$)
my ($hash, $dev) = @_;
my $pn = $hash->{NAME};
return "" if($attr{$pn} && $attr{$pn}{disable});
-
+ my $name = $dev->{NAME};
my $sensor = $hash->{sensor};
- my $reading = $hash->{sensor_reading};
my $target_sensor = $hash->{target_sensor};
- my $target_reading = $hash->{target_reading};
my $sensor2 = $hash->{sensor2};
- my $reading2 = $hash->{sensor2_reading};
- my $s_value;
- my $t_value;
- my $sensor_max;
- my $sensor_min;
- my $name = $dev->{NAME};
-
+
SELECT:{
if (($name eq $sensor) and (ReadingsVal($pn,"desired_value","") ne "")) {last SELECT;}
if ($sensor2) {
@@ -377,6 +375,26 @@ THRESHOLD_Notify($$)
}
return "";
}
+ return THRESHOLD_Check($hash);
+ #return THRESHOLD_Check(@_);
+}
+
+##########################
+sub
+THRESHOLD_Check($)
+{
+ my ($hash) = @_;
+ my $pn = $hash->{NAME};
+ my $sensor = $hash->{sensor};
+ my $reading = $hash->{sensor_reading};
+ my $target_sensor = $hash->{target_sensor};
+ my $target_reading = $hash->{target_reading};
+ my $sensor2 = $hash->{sensor2};
+ my $reading2 = $hash->{sensor2_reading};
+ my $s_value;
+ my $t_value;
+ my $sensor_max;
+ my $sensor_min;
if (!($defs{$sensor}{READINGS}{$reading})) {
my $msg = "$pn: no reading yet for $sensor $reading";
@@ -499,6 +517,7 @@ THRESHOLD_Attr(@)
readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
} elsif($a[3] eq "1") {
readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "state", "disabled");
@@ -511,6 +530,7 @@ THRESHOLD_Attr(@)
readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
+ return THRESHOLD_Check($hash);
}
return undef;
}
@@ -939,7 +959,7 @@ THRESHOLD_setValue($$)
Es soll gelüftet werden, wenn die Feuchtigkeit im Zimmer über 70 % ist; bei 60 % geht der Lüfter wieder aus.
- define TH_hum THRESHOLD sens:humidity:10:70 Luefter|set @ on|set @ off|1
+ define TH_hum THRESHOLD sens:humidity:10:70 ventilator|set @ on|set @ off|1
Belüftung anhand des Taupunktes, abhängig von der Luftfeuchtigkeit innen:
@@ -948,7 +968,7 @@ THRESHOLD_setValue($$)
define TH_hum THRESHOLD sens:humidity:10:70||||on:off|_sc
define dewpoint dewpoint indoor
define dewpoint dewpoint outdoor
- define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on Luefer|set @ on|set @ off|2
+ define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on ventilator|set @ on|set @ off|2
Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung: