1
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-05-07 22:29:19 +00:00

improvements: disable state, state format, expanded documentation

git-svn-id: https://svn.fhem.de/fhem/trunk@4589 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
damian-s 2014-01-08 19:05:44 +00:00
parent b5d3d13ca6
commit edb65dbea0

View File

@ -16,6 +16,7 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with fhem. If not, see <http://www.gnu.org/licenses/>. # along with fhem. If not, see <http://www.gnu.org/licenses/>.
# #
# $Id: 98_THRESHOLD.PM Damian $
############################################################################## ##############################################################################
@ -32,6 +33,7 @@ THRESHOLD_Initialize($)
my ($hash) = @_; my ($hash) = @_;
$hash->{DefFn} = "THRESHOLD_Define"; $hash->{DefFn} = "THRESHOLD_Define";
$hash->{SetFn} = "THRESHOLD_Set"; $hash->{SetFn} = "THRESHOLD_Set";
$hash->{AttrFn} = "THRESHOLD_Attr";
$hash->{NotifyFn} = "THRESHOLD_Notify"; $hash->{NotifyFn} = "THRESHOLD_Notify";
$hash->{AttrList} = "disable:0,1 loglevel:0,1,2,3,4,5,6 state_format state_cmd1_gt state_cmd2_lt"; $hash->{AttrList} = "disable:0,1 loglevel:0,1,2,3,4,5,6 state_format state_cmd1_gt state_cmd2_lt";
} }
@ -279,43 +281,17 @@ THRESHOLD_Set($@)
readingsBeginUpdate ($hash); readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "mode", $mode); readingsBulkUpdate ($hash, "mode", $mode);
readingsBulkUpdate ($hash, "state", $state_format) if ($state_format); readingsBulkUpdate ($hash, "state", $state_format) if (!($state_format =~/^[ ]*$/));
readingsBulkUpdate ($hash, "threshold_min",$value-$hash->{hysteresis}+$offset); readingsBulkUpdate ($hash, "threshold_min",$value-$hash->{hysteresis}+$offset);
readingsBulkUpdate ($hash, "threshold_max", $value+$offset); readingsBulkUpdate ($hash, "threshold_max", $value+$offset);
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);
} elsif ($arg eq "deactivated" ) { } elsif ($arg eq "deactivated" ) {
return "$pn: set deactivated, set desired value first" if ($desired_value eq "");
$ret=CommandAttr(undef, "$pn disable 1"); $ret=CommandAttr(undef, "$pn disable 1");
if (!$ret) {
readingsBeginUpdate ($hash);
$mode = "deactivated";
$state_format =~ s/\_m/$mode/g;
$state_format =~ s/\_dv//g;
$state_format =~ s/\_s1v//g;
$state_format =~ s/\_s2s//g;
$state_format =~ s/\_sc//g;
readingsBulkUpdate ($hash, "state", $state_format) if ($state_format);
readingsBulkUpdate ($hash, "mode", "deactivated");
readingsEndUpdate ($hash, 1);
}
} elsif ($arg eq "active" ) { } elsif ($arg eq "active" ) {
return "$pn: set active, set desired value first" if ($desired_value eq ""); return "$pn: set active, set desired value first" if ($desired_value eq "");
$ret=CommandDeleteAttr(undef, "$pn disable"); $ret=CommandDeleteAttr(undef, "$pn disable");
if (!$ret) {
$mode="active";
readingsBeginUpdate ($hash);
$state_format =~ s/\_m/$mode/g;
$state_format =~ s/\_dv//g;
$state_format =~ s/\_s1v//g;
$state_format =~ s/\_s2s//g;
$state_format =~ s/\_sc//g;
readingsBulkUpdate ($hash, "mode", $mode);
readingsBulkUpdate ($hash, "state", $state_format) if ($state_format);
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
}
} elsif ($arg eq "external" ) { } elsif ($arg eq "external" ) {
$ret=CommandDeleteAttr(undef, "$pn disable"); $ret=CommandDeleteAttr(undef, "$pn disable");
if (!$ret) { if (!$ret) {
@ -328,7 +304,7 @@ THRESHOLD_Set($@)
$state_format =~ s/\_s2s//g; $state_format =~ s/\_s2s//g;
$state_format =~ s/\_sc//g; $state_format =~ s/\_sc//g;
readingsBulkUpdate ($hash, "mode", $mode); readingsBulkUpdate ($hash, "mode", $mode);
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);
} }
@ -469,7 +445,7 @@ THRESHOLD_Notify($$)
} }
my $cmd_now=""; my $cmd_now="";
if (($sensor_min ne "") and ($sensor_max ne "")) if (($sensor_min ne "") and ($sensor_max ne "") and ($s_value ne ""))
{ {
my $cmd_default = $hash->{cmd_default}; my $cmd_default = $hash->{cmd_default};
if (!$hash->{operator}) { if (!$hash->{operator}) {
@ -509,6 +485,36 @@ THRESHOLD_Notify($$)
return ""; return "";
} }
sub
THRESHOLD_Attr(@)
{
my @a = @_;
my $hash = $defs{$a[1]};
if($a[0] eq "set" && $a[2] eq "disable")
{
if($a[3] eq "0") {
readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "state", "initialized");
readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
} elsif($a[3] eq "1") {
readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "state", "disabled");
readingsBulkUpdate ($hash, "mode", "deactivated");
readingsEndUpdate ($hash, 1);
}
} elsif($a[0] eq "del" && $a[2] eq "disable") {
readingsBeginUpdate ($hash);
readingsBulkUpdate ($hash, "state", "initialized");
readingsBulkUpdate ($hash, "mode", "active");
readingsBulkUpdate ($hash, "cmd","wait for next cmd");
readingsEndUpdate ($hash, 1);
}
return undef;
}
sub sub
THRESHOLD_set_state($) THRESHOLD_set_state($)
{ {
@ -709,9 +715,9 @@ THRESHOLD_setValue($$)
<br> <br>
Example for heating with multiple window contacts:<br> Example for heating with multiple window contacts:<br>
<br> <br>
<code>define W_ALL structure <TYPE> W1 W2 W3 ...</code><br> <code>define W_ALL structure W_type W1 W2 W3 ....</code><br>
<code>attr W_ALL clientstate_behavior relative</code><br> <code>attr W_ALL clientstate_behavior relative</code><br>
<code>attr W_ALL clientstate_priority closed open</code><br> <code>attr W_ALL clientstate_priority open closed</code><br>
<br> <br>
then: <br> then: <br>
<br> <br>
@ -858,12 +864,11 @@ THRESHOLD_setValue($$)
Nach der Definition eines THRESHOLD-Moduls und der Vorgabe eines Sollwertes beginnt bereits das definierte Modul mit der Steuerung. Im einfachsten Fall liest das Modul einen Sensor aus, der Werte als Dezimalzahlen liefert Nach der Definition eines THRESHOLD-Moduls und der Vorgabe eines Sollwertes beginnt bereits das definierte Modul mit der Steuerung. Im einfachsten Fall liest das Modul einen Sensor aus, der Werte als Dezimalzahlen liefert
und schaltet beim Überschreiten einer definierten Schwellen-Obergrenze (Sollwert) und schaltet beim Überschreiten einer definierten Schwellen-Obergrenze (Sollwert)
bzw. beim Unterschreiten einer Schwellen-Untergrenze einen Aktor oder führt beliebige FHEM/Perl-Befehle aus. bzw. beim Unterschreiten einer Schwellen-Untergrenze einen Aktor oder führt beliebige FHEM/Perl-Befehle aus.
Typisches Anwendungsgebiet ist z. B. die Nachbildung eines Thermostats oder Hygrostats.<br> Typisches Anwendungsgebiet ist z. B. die Nachbildung eines Thermostats oder Hygrostats - auch Zweipunktregler genannt.<br>
<br> <br>
Mit Hilfe des Moduls, bzw. vieler solcher Module, lassen sich einfache oder auch komplexe Steuerungen für Heizung, Kühlung, Lüftung, Entfeuchtung, Beschattung oder z. B. einfache Benachrichtung Mit Hilfe des Moduls, bzw. vieler solcher Module, lassen sich einfache oder auch komplexe Steuerungen für Heizung, Kühlung, Lüftung, Entfeuchtung, Beschattung oder z. B. einfache Benachrichtung
beim Über- oder Unterschreiten eines bestimmten Wertes realisieren. Dabei müssen keine If-Abfragen in Perl oder Notify-Definitionen vorgenommen werden. beim Über- oder Unterschreiten eines bestimmten Wertes realisieren. Dabei müssen keine If-Abfragen in Perl oder Notify-Definitionen vorgenommen werden.
Das führt, nicht nur bei FHEM-Anfängern, zu schnell erstellten und übersichtlichen Steuerungen, ohne zwingend in die Perl-Materie einsteigen zu müssen. Das führt, nicht nur bei FHEM-Anfängern, zu schnell erstellten und übersichtlichen Steuerungen, ohne zwingend in die Perl-Materie einsteigen zu müssen.<br>
Am Ende der Beschreibung befinden sich einige Anwendungsbeipiele des Moduls.<br>
<br> <br>
Nach der Definition eines Moduls vom Typ THRESHOLD z. B. mit: <br> Nach der Definition eines Moduls vom Typ THRESHOLD z. B. mit: <br>
<br> <br>
@ -875,15 +880,176 @@ THRESHOLD_setValue($$)
<br> <br>
Das Modul beginnt mit der Steuerung erst dann, wenn ein Sollwert gesetzt wird!<br> Das Modul beginnt mit der Steuerung erst dann, wenn ein Sollwert gesetzt wird!<br>
<br> <br>
Alternativ kann die Vorgabe des Sollwertes von einem weiteren Sensor kommen. Damit kann eine Steuerung durch den Vergleich zweier Sensoren stattfinden. Die Vorgabe des Sollwertes kann bereits bei der Definition des Moduls angegeben werden. Alternativ kann der Sollwert von einem weiteren Sensor kommen.
Damit kann eine Steuerung durch den Vergleich zweier Sensoren stattfinden.
Typisches Anwendungsbeispiel ist z. B. die Steuerung von Umwälz- oder Zirkulationspumpen.<br> Typisches Anwendungsbeispiel ist z. B. die Steuerung von Umwälz- oder Zirkulationspumpen.<br>
<br> <br>
Ebenso können beliebige Wandthermostate (z. B. HM, MAX, FHT) für die Vorgabe der Solltemperatur genutzt werden.<br> Die Vorgabe der Solltemperatur kann auch von beliebigen Wandthermostaten (z. B. HM, MAX, FHT) genutzt werden.<br>
<br> <br>
Optional kann das Schaltverhalten zusätzlich durch einen weiteren Sensor oder eine Sensorgruppe, Das Schaltverhalten des THRESHOLD-Moduls kann zusätzlich durch einen weiteren Sensor oder eine Sensorgruppe,
definiert über structure (z. B. Fensterkontakte), über eine AND- bzw. OR-Verknüpfung beeinflusst werden.<br> definiert über structure (z. B. Fensterkontakte), über eine AND- bzw. OR-Verknüpfung beeinflusst werden.<br>
<br> <br>
Auch die Kombination mehrerer THRESHOLD-Module miteinander ist möglich, siehe Beispiele unten.<br> Ebenfalls ist die Kombination mehrerer THRESHOLD-Module miteinander möglich.<br>
<br>
<br>
<b><u>Beispiele für Heizungssteuerung:</u></b><br>
<br>
<b>Einfaches Heizungsthermostat:</b><br>
<br>
Es soll bis 20 Grad geheizt werden. Beim Unterschreiten der Untergrenze von 19=20-1 Grad (Sollwert-Hysterese) wird die Heizung wieder eingeschaltet.<br>
<br>
<code>define TH_room THRESHOLD temp_room heating</code><br>
<code>set TH_room desired 20</code><br>
<br>
<b>Zeitgesteuertes Heizen mit Hilfe des Heating_Control-Moduls:</b><br>
<br>
<code>define TH_room THRESHOLD temp_room heating</code><br>
<code>define HC_room Heating_Control TH_room 06:00|22 22:00|18 set @ desired %</code><br>
<br>
<b>Steuerung einer Heizung durch ein Wandthermostat mit Übernahme der Soll- und Ist-Temperatur vom Wandthermostat:</b><br>
<br>
<code>define TH_Heizung THRESHOLD WT_ch1:measured-temp:1:WT_ch2:desired-temp Heizung</code><br>
<br>
Mit <code>set TH_Heizung desired 17</code> wird die Vorgabe vom Wandthermostat übersteuert bis <code>set TH_Heizung external</code> aufgerufen wird.<br>
<br>
<b>Heizung in Kombination mit einem Fensterkontakt mit Zuständen: open, closed:</b><br>
<br>
<code>define TH_room THRESHOLD temp_room OR win_sens heating</code><br>
<br>
<b>Heizung in Kombination mit mehreren Fensterkontakten:</b><br>
<br>
<code>define W_ALL structure W_type W1 W2 W3 ....</code><br>
<code>attr W_ALL clientstate_behavior relative</code><br>
<code>attr W_ALL clientstate_priority open closed</code><br>
<br>
<code>define thermostat THRESHOLD S1 OR W_ALL heating</code><br>
<br>
<b>Kombination mehrerer THRESHOLD-Module miteinander:</b><br>
<br>
Es soll bis 21 Grad geheizt werden, aber nur, wenn die Außentemperatur unter 15 Grad ist:<br>
<br>
<code>define TH_outdoor THRESHOLD outdoor:temperature:0:15</code><br>
<code>define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating</code><br>
<code>set TH_room desired 21</code><br>
<br>
<br>
<b><u>Beispiele für Belüftung:</u></b><br>
<br>
<b>Einfache Belüftung anhand der Luftfeuchtigkeit:</b><br>
<br>
Es soll gelüftet werden, wenn die Feuchtigkeit im Zimmer über 70 % ist; bei 60 % geht der Lüfter wieder aus.<br>
<br>
<code>define TH_hum THRESHOLD sens:humidity:10:70 Luefter|set @ on|set @ off|1</code><br>
<br>
<b>Belüftung anhand des Taupunktes, abhängig von der Luftfeuchtigkeit innen:</b><br>
<br>
Es soll gelüftet werden, wenn die Luftfeuchtigkeit im Zimmer über 70 % ist und der Taupunkt innen höher ist als außen.<br>
<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 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>
<br>
<b>Belüftung in Kombination mit einem Lichtschalter mit Nachlaufsteuerung:</b><br>
<br>
Der Lüfter soll angehen, wenn das Licht mindestens 2 Minuten lang brennt oder die Luftfeuchtigkeit 65 % überschreitet,<br>
der Lüfter soll ausgehen, wenn die die Luftfeuchtigkeit unter 60 % fällt und das Licht mindestens 3 Minuten lang aus ist.<br>
<br>
<code>define ventilator_state dummy</code><br>
<code>define w_ventilator_state_off watchdog light_switch:off 00:03 light_switch:on set ventilator_state off;; trigger w_ventilator_state_off .</code><br>
<code>define w_ventilator_state_on watchdog light_switch:on 00:02 light_switch:off set ventilator_state on;; trigger w_ventilator_state_on .</code><br>
<code>define TH_ventilator THRESHOLD humsensor:humidity:5:65 OR ventilator_state:state:on ventilator|set @ on|set @ off|1</code><br>
<br>
<br>
<b><u>Beispiele für die Steuerung der Warmwasserzirkulation:</u></b><br>
<br>
<b>Zeitgesteuerte Warmwasserzirkulation:</b><br>
<br>
In der Hauptzeit soll die Wassertemperatur im Rücklauf mindestens 38 Grad betragen.<br>
<br>
<code>define TH_circ TRHESHOLD return_w:temperature:0 circ_pump</code><br>
<code>define HC_circ Heating_Control TH_circ 12345|05:30|38 67|07:00|38 23:00|15 set @ desired %</code><br>
<br>
<b>Alternative Steuerung mit Sollwert-Vorgabe durch einen weiteren Sensor des Warmwasserspeichers:</b><br>
<br>
Die Rücklauftemperatur soll 5 Grad (offset) unter der Warmwasserspeichertemperatur liegen und bis zu 4 Grad (Hysterese) schwanken dürfen.<br>
<br>
<code>define TH_circ THRESHOLD return_w:temperature:4:water_storage:temperature:-5 circ_pump</code><br>
<br>
<br>
<b><u>Beispiele für Beschattung:</u></b><br>
<br>
<b>Beispiel für einfache Beschattung im Sommer:</b><br>
<br>
Zwischen 12:00 und 20:00 Uhr (potenzielle Sonnengefahr auf der Südseite) wird der Rolladen auf 30 % heruntergefahren,<br>
wenn die Raumtemperatur über 23 Grad ist und die Sonne scheint. Im Winter, wenn die Zimmertemperatur niedriger ist (< 23),<br>
will man von der Sonnenenergie profitieren und den Rollladen oben lassen.<br>
<br>
<code>define TH_shutter_room THRESHOLD T_room AND sun:state:on shutter_room|set @ 30||2</code><br>
<code>define HC_R_Keller Heating_Control TH_shutter_room 12:00|23 20:00|30 set @ desired %</code><br>
<br>
<b>Beispiel für Beschattung im Sommer mit Verzögerung und automatischem Hochfahren des Rollladens:</b><br>
<br>
Zusätzlich zum obigen Beispiel wird der Rollladen erst heruntergefahren, wenn die Sonne mindestens 15 Minuten scheint<br>
und wieder hochgefahren, wenn die Sonne mindesten 30 Minuten nicht mehr scheint.<br>
<br>
<code>define sun_state dummy</code><br>
<code>define w_sun_state_off watchdog sun:off 00:30 sun:on set sun_state off;; trigger w_sun_state_off .</code><br>
<code>define w_sun state_on watchdog sun:on 00:15 sun:off set sun_state on;; trigger w_sun_state_on .</code><br>
<code>define TH_shutter_room THRESHOLD T_room AND sun_state:state:on shutter_room|set @ 30|set @ 100|2</code><br>
<code>define HC_R_Keller Heating_Control TH_shutter_room 12:00|23 20:00|30 set @ desired %</code><br>
<br>
<b>Beispiel für Beschattung mit Verzögerung mit Hilfe eines Helligkeitssensors:</b><br>
<br>
Der Rollladen soll herunterfahren, wenn der Helligkeitssensor mindesten 15 Minuten einen Schwellenwert von 10000 überschreitet<br>
und wieder hochfahren, wenn der Schwellenwert 10000 mindestens 30 Minuten lang unterschritten wird.<br>
<br>
<code>define sun dummy</code><br>
<code>define sun_state dummy</code><br>
<code>define TH_lightness THRESHOLD lightness_sensor:0:10000 sun||||on:off|_sc</code><br>
<code>define w_sun_state_off watchdog sun:off 00:30 sun:on set sun_state off;; trigger w_sun_state_off .</code><br>
<code>define w_sun state_on watchdog sun:on 00:15 sun:off set sun_state on;; trigger w_sun_state_on .</code><br>
<code>define TH_shutter_room THRESHOLD T_room AND sun_state:state:on shutter_room|set @ 30|set @ 100|2</code><br>
<br>
<br>
<b><u>Beispiele für die Ausführung beliebiger FHEM/Perl-Befehlsketten:</u></b><br>
<br>
<code>define thermostat THRESHOLD sensor |set Switch1 on;;set Switch2 on|set Switch1 off;;set Switch2 off|1</code><br>
<code>define thermostat THRESHOLD sensor alarm|{Log 2,"Wert überschritten"}|set @ off|</code><br>
<code>define thermostat THRESHOLD sensor ||{Log 2,"Wert unterschritten"}|</code><br>
<br>
<br>
<b><u>Einige weitere Bespiele für Entfeuchtung, Klimatisierung, Bewässerung:</u></b><br>
<br>
<code>define hygrostat THRESHOLD hym_sens:humidity dehydrator|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity AND Sensor2:state:closed dehydrator|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens:temperature:1 aircon|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens AND Sensor2:state:closed aircon|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity:20 watering|set @ off|set @ on|2</code><br>
<br>
<br>
<b><u>Beispiele für angepasste Statusanzeige des THRESHOLD-Moduls:</u></b><br>
<br>
<code>define thermostat THRESHOLD sensor aircon|set @ on|set @ off|2|on:off</code><br>
<br>
<b>Beispiel für reine Zustandanzeige (z. B. für Zustandsauswertung in anderen Modulen) ohne Ausführung von Code:</b><br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30</code><br>
<br>
entspricht wegen Defaultwerte:<br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30||||off:on|_sc</code><br>
<br>
<b>Es soll der Modus (mode), Status (state_cmd), Sollvorgabewert (desired_value) und Wert des ersten Sensors (sensor_value) angezeigt werden:</b><br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating|set @ off|set @ on|2|off:on|_m _sc _dv _s1v</code><br>
<br>
oder<br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating</code><br>
<code>attr TH_living_room state_cmd1_gt off</code><br>
<code>attr TH_living_room state_cmd2_lt on</code><br>
<code>attr TH_living_room state_format _m _sc _dv _s1v</code><br>
<br> <br>
</ul> </ul>
<a name="THRESHOLDdefine"></a> <a name="THRESHOLDdefine"></a>
@ -984,103 +1150,6 @@ THRESHOLD_setValue($$)
</li> </li>
<br> <br>
<br> <br>
<b><u>Beispiele:</u></b><br>
<br>
Beispiel für ein einfaches Heizungsthermostat:<br>
<br>
Es soll bis 20 Grad geheizt werden. Beim Unterschreiten der Untergrenze von 19 Grad (Sollwert-Hysterese) wird die Heizung wieder eingeschaltet.<br>
<br>
<code>define TH_room THRESHOLD temp_room heating</code><br>
<br>
<code>set TH_room desired 20</code><br>
<br>
<br>
Beispiel für Heizung mit Fensterkontakt:<br>
<br>
<code>define TH_room THRESHOLD temp_room OR win_sens heating</code><br>
<br>
<br>
Beispiel für Heizung mit mehreren Fensterkontakten:<br>
<br>
<code>define W_ALL structure <TYPE-Deiner-Kontakte> W1 W2 W3 ....</code><br>
<code>attr W_ALL clientstate_behavior relative</code><br>
<code>attr W_ALL clientstate_priority closed open</code><br>
<br>
<code>define thermostat THRESHOLD S1 OR W_ALL heating</code><br>
<br>
<br>
Einige weitere Bespiele für Entfeuchtung, Klimatisierung, Bewässerung:<br>
<br>
<code>define hygrostat THRESHOLD hym_sens:humidity dehydrator|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity AND Sensor2:state:close dehydrator|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens:temperature:1 aircon|set @ on|set @ off|1</code><br>
<code>define thermostat THRESHOLD temp_sens AND Sensor2:state:close aircon|set @ on|set @ off|1</code><br>
<code>define hygrostat THRESHOLD hym_sens:humidity:20 watering|set @ off|set @ on|2</code><br>
<br>
<br>
Beispiele für die Ausführung beliebiger FHEM/Perl-Befehlsketten:<br>
<br>
<code>define thermostat THRESHOLD sensor |set Switch1 on;;set Switch2 on|set Switch1 off;;set Switch2 off|1</code><br>
<code>define thermostat THRESHOLD sensor alarm|{Log 2,"Wert überschritten"}|set @ on;;set Switch2 on</code><br>
<code>define thermostat THRESHOLD sensor ||{Log 2,"Wert unterschritten"}|</code><br>
<br>
<br>
Beispiele für die Sollwert-Vorgabe durch einen weiteren Sensor:<br>
<br>
Warmwasserzirkulation: Die Rücklauftemperatur soll 5 Grad (offset) unter der Warmwasserspeichertemperatur liegen und bis zu 4 Grad (Hysterese) schwanken können.<br>
<br>
<code>define TH_water_circulation THRESHOLD return_w:temperature:4:water_storage:temperature:-5 circualtion_pump</code><br>
<br>
<br>
Steuerung einer Heizung durch ein Wandthermostat mit Übernahme der Soll- und Ist-Temperatur vom Wandthermostat:<br>
<br>
<code>define TH_Heizung THRESHOLD WT:measured-temp:1:WT:desired-temp Heizung</code><br>
<br>
Mit <code>set TH_Heizung desired 17</code> wird die Vorgabe vom Wandthermostat übersteuert bis <code>set TH_Heizung external</code> aufgerufen wird.<br>
<br>
<br>
Beispiele mit angepasster Statusanzeige:<br>
<br>
<code>define thermostat THRESHOLD sensor aircon|set @ on|set @ off|2|on:off</code><br>
<br>
<br>
Beispiel für reine Zustandanzeige (z. B. für Zustandsauswertung in anderen Modulen) ohne Ausführung von Code:<br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30</code><br>
<br>
entspricht wegen Defaultwerte:<br>
<br>
<code>define thermostat THRESHOLD sensor:temperature:0:30||||off:on|_sc</code><br>
<br>
<br>
Beispiel für Kombination mehrerer THRESHOLD-Module miteinander:<br>
<br>
Es soll geheizt werden, wenn die Zimmertemperatur unter 21 Grad fällt und die Außentemperatur unter 15 Grad ist:<br>
<br>
<code>define TH_outdoor THRESHOLD outdoor:temperature:0:15</code><br>
<code>define TH_room THRESHOLD indoor OR TH_outdoor:state:off heating</code><br>
<code>set TH_room desired 21</code><br>
<br>
<br>
Beispiel für zeitabhängiges Heizen in Kombination mit Heating_Control-Modul:<br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating</code><br>
<code>define HC_living_room Heating_Control TH_living_room 06:00|22 22:00|18 set @ desired %</code><br>
<br>
<br>
Beispiele für Anpassung der Statusanzeige des Moduls:<br>
<br>
Anzeige von &lt;mode&gt; &lt;state_cmd&gt; &lt;desired_value&gt; &lt;sensor_value&gt;<br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating|set @ off|set @ on|2|off:on|_m _sc _dv _s1v</code><br>
<br>
oder<br>
<br>
<code>define TH_living_room THRESHOLD T_living_room heating</code><br>
<code>attr TH_living_room state_cmd1_gt off</code><br>
<code>attr TH_living_room state_cmd2_lt on</code><br>
<code>attr TH_living_room state_format _m _sc _dv _s1v</code><br>
<br>
</ul> </ul>
<a name="THRESHOLDset"></a> <a name="THRESHOLDset"></a>
<b>Set </b> <b>Set </b>