2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-21 07:56:03 +00:00

improved switching behavior

git-svn-id: https://svn.fhem.de/fhem/trunk@4740 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
damian-s 2014-01-25 18:48:59 +00:00
parent 48d9b1c48d
commit 0681438d89

View File

@ -226,27 +226,29 @@ THRESHOLD_Define($$$)
$hash->{cmd2_lt} = SemicolonEscape($cmd2_lt); $hash->{cmd2_lt} = SemicolonEscape($cmd2_lt);
$hash->{cmd_default} = $cmd_default; $hash->{cmd_default} = $cmd_default;
$hash->{STATE} = 'initialized'; $hash->{STATE} = 'initialized';
if (defined ($init_desired_value) or defined ($target_sensor)) {
readingsBeginUpdate ($hash); readingsBeginUpdate ($hash);
if (defined ($init_desired_value))
if (defined ($init_desired_value)) {
{ my $mode="active";
my $mode="active"; readingsBulkUpdate ($hash, "threshold_min", $init_desired_value-$hysteresis+$offset);
readingsBulkUpdate ($hash, "threshold_min", $init_desired_value-$hysteresis+$offset); readingsBulkUpdate ($hash, "threshold_max", $init_desired_value+$offset);
readingsBulkUpdate ($hash, "threshold_max", $init_desired_value+$offset); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "desired_value", $init_desired_value);
readingsBulkUpdate ($hash, "desired_value", $init_desired_value); readingsBulkUpdate ($hash, "mode", $mode);
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;
# }
} }
if (defined ($target_sensor))
{
my $mode="external";
readingsBulkUpdate ($hash, "cmd", "wait for next cmd");
readingsBulkUpdate ($hash, "mode", "external");
}
readingsEndUpdate ($hash, 1);
return undef; return undef;
} }
@ -287,6 +289,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsBulkUpdate ($hash, "desired_value", $value); readingsBulkUpdate ($hash, "desired_value", $value);
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} elsif ($arg eq "deactivated" ) { } elsif ($arg eq "deactivated" ) {
$ret=CommandAttr(undef, "$pn disable 1"); $ret=CommandAttr(undef, "$pn disable 1");
} elsif ($arg eq "active" ) { } elsif ($arg eq "active" ) {
@ -307,6 +310,7 @@ THRESHOLD_Set($@)
readingsBulkUpdate ($hash, "state", $state_format) if (!($state_format =~/^[ ]*$/)); readingsBulkUpdate ($hash, "state", $state_format) if (!($state_format =~/^[ ]*$/));
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} }
} elsif ($arg eq "hysteresis" ) { } elsif ($arg eq "hysteresis" ) {
return "$pn: set hysteresis value:$value, hysteresis needs a numeric parameter" if (@a != 3 || $value !~ m/^[\d\.]*$/ ); 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, "threshold_max", $desired_value+$offset);
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} }
} elsif ($arg eq "offset" ) { } elsif ($arg eq "offset" ) {
return "$pn: set offset value:$value, offset needs a numeric parameter" if (@a != 3 || $value !~ m/^[-\d\.]*$/ ); 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, "threshold_max", $desired_value+$offset);
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} }
} elsif ($arg eq "cmd1_gt" ) { } elsif ($arg eq "cmd1_gt" ) {
readingsBeginUpdate ($hash); readingsBeginUpdate ($hash);
@ -352,18 +358,10 @@ THRESHOLD_Notify($$)
my ($hash, $dev) = @_; my ($hash, $dev) = @_;
my $pn = $hash->{NAME}; my $pn = $hash->{NAME};
return "" if($attr{$pn} && $attr{$pn}{disable}); return "" if($attr{$pn} && $attr{$pn}{disable});
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}; my $name = $dev->{NAME};
my $sensor = $hash->{sensor};
my $target_sensor = $hash->{target_sensor};
my $sensor2 = $hash->{sensor2};
SELECT:{ SELECT:{
if (($name eq $sensor) and (ReadingsVal($pn,"desired_value","") ne "")) {last SELECT;} if (($name eq $sensor) and (ReadingsVal($pn,"desired_value","") ne "")) {last SELECT;}
@ -377,6 +375,26 @@ THRESHOLD_Notify($$)
} }
return ""; 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})) { if (!($defs{$sensor}{READINGS}{$reading})) {
my $msg = "$pn: no reading yet for $sensor $reading"; my $msg = "$pn: no reading yet for $sensor $reading";
@ -499,6 +517,7 @@ THRESHOLD_Attr(@)
readingsBulkUpdate ($hash, "mode", "active"); readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} elsif($a[3] eq "1") { } elsif($a[3] eq "1") {
readingsBeginUpdate ($hash); readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "state", "disabled"); readingsBulkUpdate ($hash, "state", "disabled");
@ -511,6 +530,7 @@ THRESHOLD_Attr(@)
readingsBulkUpdate ($hash, "mode", "active"); readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd"); readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1); readingsEndUpdate ($hash, 1);
return THRESHOLD_Check($hash);
} }
return undef; return undef;
} }
@ -939,7 +959,7 @@ THRESHOLD_setValue($$)
<br> <br>
Es soll gelüftet werden, wenn die Feuchtigkeit im Zimmer über 70 % ist; bei 60 % geht der Lüfter wieder aus.<br> Es soll gelüftet werden, wenn die Feuchtigkeit im Zimmer über 70 % ist; bei 60 % geht der Lüfter wieder aus.<br>
<br> <br>
<code>define TH_hum THRESHOLD sens:humidity:10:70 Luefter|set @ on|set @ off|1</code><br> <code>define TH_hum THRESHOLD sens:humidity:10:70 ventilator|set @ on|set @ off|1</code><br>
<br> <br>
<b>Belüftung anhand des Taupunktes, abhängig von der Luftfeuchtigkeit innen:</b><br> <b>Belüftung anhand des Taupunktes, abhängig von der Luftfeuchtigkeit innen:</b><br>
<br> <br>
@ -948,7 +968,7 @@ THRESHOLD_setValue($$)
<code>define TH_hum THRESHOLD sens:humidity:10:70||||on:off|_sc</code><br> <code>define TH_hum THRESHOLD sens:humidity:10:70||||on:off|_sc</code><br>
<code>define dewpoint dewpoint indoor</code><br> <code>define dewpoint dewpoint indoor</code><br>
<code>define dewpoint dewpoint outdoor</code><br> <code>define dewpoint dewpoint outdoor</code><br>
<code>define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on Luefer|set @ on|set @ off|2</code><br> <code>define TH_room THRESHOLD indoor:dewpoint:0:outdoor:dewpoint AND TH_hum:state:on ventilator|set @ on|set @ off|2</code><br>
<br> <br>
<b>Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung:</b><br> <b>Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung:</b><br>
<br> <br>