98_Heating_Control.pm some improvements in the dokumentation because of german umlaute and changed the structure dealing with the unit of Celsius.

git-svn-id: https://svn.fhem.de/fhem/trunk@2753 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
dietmar63 2013-02-17 16:02:13 +00:00
parent a64c6d2c28
commit c35ebdb81e

View File

@ -95,13 +95,13 @@ Heating_Control_Define($$)
} }
for(my $i=0; $i<@a; $i++) { for(my $i=0; $i<@a; $i++) {
#prüfen auf Angabe eines Schaltpunktes #prüfen auf Angabe eines Schaltpunktes
my @t = split(/\|/, $a[$i]); my @t = split(/\|/, $a[$i]);
my $anzahl = @t; my $anzahl = @t;
if ( $anzahl ~~ [2,3]) { if ( $anzahl ~~ [2,3]) {
push(@switchingtimes, $a[$i]); push(@switchingtimes, $a[$i]);
} else { } else {
#der Rest ist das auzuführende Kommando/condition #der Rest ist das auzuführende Kommando/condition
$conditionOrCommand = trim(join(" ", @a[$i..@a-1])); $conditionOrCommand = trim(join(" ", @a[$i..@a-1]));
last; last;
} }
@ -145,13 +145,13 @@ Heating_Control_Define($$)
$dayNumber{$day} = $idx; $idx++; $dayNumber{$day} = $idx; $idx++;
} }
#Aufzählung 1234 ... #Aufzählung 1234 ...
if ( $daylist =~ m/^(\d){0,7}$/g) { if ( $daylist =~ m/^(\d){0,7}$/g) {
@days = split("", $daylist); @days = split("", $daylist);
@hdays{@days}=1; @hdays{@days}=1;
# Aufzählung Sa,So,... | Mo-Di,Do,Fr-Mo # Aufzählung Sa,So,... | Mo-Di,Do,Fr-Mo
} elsif ($daylist =~ m/^($daysRegExp(,|-|$)){0,7}$/g ) { } elsif ($daylist =~ m/^($daysRegExp(,|-|$)){0,7}$/g ) {
my $oldDay, my $oldDel; my $oldDay, my $oldDel;
@ -193,21 +193,25 @@ Heating_Control_Define($$)
} }
} }
# Profile sortiert aufbauen #desired-temp des Zieldevices auswählen
for (my $d=1; $d<=7; $d++) {
foreach my $st (sort (keys %{ $hash->{helper}{SWITCHINGTIME}{$d} })) {
my $temp = $hash->{helper}{SWITCHINGTIME}{$d}{$st};
$hash->{"PROFILE ".($d).": ".$Wochentage[$d-1]} .= sprintf("%s: %.1f°C, ", $st, $temp);
}
}
#desired-temp des Zieldevices auswählen
if($defs{$device}{TYPE} eq "MAX") { if($defs{$device}{TYPE} eq "MAX") {
$hash->{helper}{DESIRED_TEMP_READING} = "desiredTemperature" $hash->{helper}{DESIRED_TEMP_READING} = "desiredTemperature"
} else { } else {
$hash->{helper}{DESIRED_TEMP_READING} = "desired-temp"; $hash->{helper}{DESIRED_TEMP_READING} = "desired-temp";
} }
$hash->{helper}{UNIT} = "°C";
my $unit = $hash->{helper}{UNIT};
# Profile sortiert aufbauen
for (my $d=1; $d<=7; $d++) {
foreach my $st (sort (keys %{ $hash->{helper}{SWITCHINGTIME}{$d} })) {
my $temp = $hash->{helper}{SWITCHINGTIME}{$d}{$st};
$hash->{"PROFILE ".($d).": ".$Wochentage[$d-1]} .= sprintf("%s: %.1f%s, ", $st, $temp, $unit);
}
}
my $now = time(); my $now = time();
InternalTimer ($now+30, "Heating_Control_Update", $hash, 0); InternalTimer ($now+30, "Heating_Control_Update", $hash, 0);
@ -288,6 +292,7 @@ Heating_Control_Update($)
} }
my $name = $hash->{NAME}; my $name = $hash->{NAME};
my $unit = $hash->{helper}{UNIT};
my $command; my $command;
Log $loglevel, "NowSwitch: ".strftime('%d.%m.%Y %H:%M:%S',localtime($nowSwitch))." ; AktDesiredTemp: $AktDesiredTemp ; newDesTemperature: $newDesTemperature"; Log $loglevel, "NowSwitch: ".strftime('%d.%m.%Y %H:%M:%S',localtime($nowSwitch))." ; AktDesiredTemp: $AktDesiredTemp ; newDesTemperature: $newDesTemperature";
@ -315,8 +320,8 @@ Heating_Control_Update($)
InternalTimer($nextSwitch, "Heating_Control_Update", $hash, 0); InternalTimer($nextSwitch, "Heating_Control_Update", $hash, 0);
readingsBeginUpdate($hash); readingsBeginUpdate($hash);
readingsBulkUpdate ($hash, "nextUpdate", strftime("%d.%m.%Y %H:%M:%S",localtime($nextSwitch))); readingsBulkUpdate ($hash, "nextUpdate", strftime("%d.%m.%Y %H:%M:%S",localtime($nextSwitch)));
readingsBulkUpdate ($hash, "nextValue", $nextDesTemperature . "°C"); readingsBulkUpdate ($hash, "nextValue", $nextDesTemperature . $unit);
readingsBulkUpdate ($hash, "state", $newDesTemperature . "°C"); readingsBulkUpdate ($hash, "state", $newDesTemperature . $unit);
readingsEndUpdate ($hash, defined($hash->{LOCAL} ? 0 : 1)); readingsEndUpdate ($hash, defined($hash->{LOCAL} ? 0 : 1));
return 1; return 1;
@ -337,6 +342,7 @@ sub SortNumber {
=begin html =begin html
<a name="Heating_Control"></a> <a name="Heating_Control"></a>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<h3>Heating Control</h3> <h3>Heating Control</h3>
<ul> <ul>
<br> <br>
@ -388,14 +394,14 @@ sub SortNumber {
<b>Example:</b> <b>Example:</b>
<ul> <ul>
<code>define HCB Heating_Control Bad_Heizung 12345|05:20|21 12345|05:25|12 17:20|21 17:25|12</code><br> <code>define HCB Heating_Control Bad_Heizung 12345|05:20|21 12345|05:25|12 17:20|21 17:25|12</code><br>
Mo-Fr are setting the temperature at 05:20 to 21°C, and at 05:25 to 12°C. Mo-Fr are setting the temperature at 05:20 to 21&deg;C, and at 05:25 to 12&deg;C.
Every day will be set the temperature at 17:20 to 21°C and 17:25 to 12°C.<p> Every day will be set the temperature at 17:20 to 21&deg;C and 17:25 to 12&deg;C.<p>
<code>define HCW Heating_Control WZ_Heizung 07:00|16 Mo,Di,Do-Fr|16:00|18.5 20:00|12 <code>define HCW Heating_Control WZ_Heizung 07:00|16 Mo,Tu,Th-Fr|16:00|18.5 20:00|12
{fhem("set dummy on"); fhem("set @ desired-temp %");}</code><br> {fhem("set dummy on"); fhem("set @ desired-temp %");}</code><br>
At the given times and weekdays only(!) the command will be executed.<p> At the given times and weekdays only(!) the command will be executed.<p>
<code>define HCW Heating_Control WZ_Heizung Sa-So,Mi|08:00|21 (ReadingsVal("WeAreThere", "state", "no") eq "yes")</code><br> <code>define HCW Heating_Control WZ_Heizung Sa-Su,We|08:00|21 (ReadingsVal("WeAreThere", "state", "no") eq "yes")</code><br>
The temperature is only set if the dummy variable WeAreThere is "yes".<p> The temperature is only set if the dummy variable WeAreThere is "yes".<p>
</ul> </ul>
</ul> </ul>
@ -421,6 +427,7 @@ sub SortNumber {
=begin html_DE =begin html_DE
<a name="Heating_Control"></a> <a name="Heating_Control"></a>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<h3>Heating Control</h3> <h3>Heating Control</h3>
<ul> <ul>
<br> <br>
@ -430,12 +437,12 @@ sub SortNumber {
<code>define &lt;name&gt; Heating_Control &lt;device&gt; &lt;profile&gt; &lt;command&gt;|&lt;condition&gt;</code> <code>define &lt;name&gt; Heating_Control &lt;device&gt; &lt;profile&gt; &lt;command&gt;|&lt;condition&gt;</code>
<br><br> <br><br>
Bildet ein Wochenprofil für ein &lt;device&gt;, zb. Heizkörper, ab. Es können r jeden Tag unterschiedliche Bildet ein Wochenprofil f&uumlr ein &lt;device&gt;, zb. Heizk&oumlrper, ab. Es k&oumlnnen f&uumlr jeden Tag unterschiedliche
Schaltzeiten angegeben werden. Ist das &lt;device&gt; ein Heizkörperthermostat (zb. FHT8b, MAX) so wird die Schaltzeiten angegeben werden. Ist das &lt;device&gt; ein Heizk&oumlrperthermostat (zb. FHT8b, MAX) so wird die
zu setzende Temperatur im &lt;profile&gt; automatisch mittels <code>set &lt;device&gt; desired-temp &lt;temp&gt;</code> zu setzende Temperatur im &lt;profile&gt; automatisch mittels <code>set &lt;device&gt; desired-temp &lt;temp&gt;</code>
dem Device mitgeteilt. Ist eine &lt;condition&gt; angegeben und ist zum Schaltpunkt der Ausdruck unwahr, dem Device mitgeteilt. Ist eine &lt;condition&gt; angegeben und ist zum Schaltpunkt der Ausdruck unwahr,
so wird dieser Schaltpunkt nicht ausgeführt.<br> so wird dieser Schaltpunkt nicht ausgef&uumlhrt.<br>
Alternativ zur Automatik kann stattdessen eigener Perl-Code im &lt;command&gt; ausgeführt werden. Alternativ zur Automatik kann stattdessen eigener Perl-Code im &lt;command&gt; ausgef&uumlhrt werden.
<p> <p>
Folgende Parameter sind im Define definiert: Folgende Parameter sind im Define definiert:
<ul><b>device</b><br> <ul><b>device</b><br>
@ -446,8 +453,8 @@ sub SortNumber {
Angabe des Wochenprofils. Die einzelnen Schaltzeiten sind durch Leerzeichen getrennt Angabe des Wochenprofils. Die einzelnen Schaltzeiten sind durch Leerzeichen getrennt
Die Angabe der Schaltzeiten ist nach folgendem Muster definiert:<br> Die Angabe der Schaltzeiten ist nach folgendem Muster definiert:<br>
<ul><b>[&lt;Wochentage&gt;|]&lt;Uhrzeit&gt;|&lt;Temperatur&gt;</b></ul><br> <ul><b>[&lt;Wochentage&gt;|]&lt;Uhrzeit&gt;|&lt;Temperatur&gt;</b></ul><br>
<u>Wochentage:</u> optionale Angabe, falls nicht gesetzt wird der Schaltpunkt jeden Tag ausgeführt. <u>Wochentage:</u> optionale Angabe, falls nicht gesetzt wird der Schaltpunkt jeden Tag ausgef&uumlhrt.
Für die Tage an denen dieser Schaltpunkt aktiv sein soll, ist jeder Tag mit seiner F&uumlr die Tage an denen dieser Schaltpunkt aktiv sein soll, ist jeder Tag mit seiner
Tagesnummer (Mo=1, ..., So=7) oder Name des Tages (Mo, Di, ..., So) einzusetzen.<br> Tagesnummer (Mo=1, ..., So=7) oder Name des Tages (Mo, Di, ..., So) einzusetzen.<br>
<u>Uhrzeit:</u>Angabe der Uhrzeit an dem geschaltet werden soll, Format: HH:MM(HH im 24 Stunden format)<br> <u>Uhrzeit:</u>Angabe der Uhrzeit an dem geschaltet werden soll, Format: HH:MM(HH im 24 Stunden format)<br>
<u>Temperatur:</u>Angabe der zu setzenden Temperatur als Zahl<br> <u>Temperatur:</u>Angabe der zu setzenden Temperatur als Zahl<br>
@ -457,7 +464,7 @@ sub SortNumber {
Falls keine Condition in () angegeben wurde, so wird alles weitere als Command Falls keine Condition in () angegeben wurde, so wird alles weitere als Command
interpretiert. Perl-Code ist in {} zu setzen. <br> interpretiert. Perl-Code ist in {} zu setzen. <br>
Wichtig: Falls ein Command definiert ist, so wird zu den definierten Schaltzeiten Wichtig: Falls ein Command definiert ist, so wird zu den definierten Schaltzeiten
nur(!) das Command ausgeführt. Falls ein desired-temp Befehl abgesetzt werde soll, nur(!) das Command ausgef&uumlhrt. Falls ein desired-temp Befehl abgesetzt werde soll,
so muss dies explizit angegeben werden.<br> so muss dies explizit angegeben werden.<br>
Folgende Parameter werden ersetzt:<br> Folgende Parameter werden ersetzt:<br>
<ol> <ol>
@ -468,19 +475,19 @@ sub SortNumber {
<p> <p>
<ul><b>condition</b><br> <ul><b>condition</b><br>
Bei Angabe einer Condition ist diese in () zu setzen und mit validem Perl-Code zu versehen.<br> Bei Angabe einer Condition ist diese in () zu setzen und mit validem Perl-Code zu versehen.<br>
Der Rückgabedatentyp der condition muss boolean sein.<br> Der R&uumlckgabedatentyp der condition muss boolean sein.<br>
Die Parameter @ und % werden interpretiert. Die Parameter @ und % werden interpretiert.
</ul> </ul>
<p> <p>
<b>Beispiel:</b> <b>Beispiel:</b>
<ul> <ul>
<code>define HCB Heating_Control Bad_Heizung 12345|05:20|21 12345|05:25|12 17:20|21 17:25|12</code><br> <code>define HCB Heating_Control Bad_Heizung 12345|05:20|21 12345|05:25|12 17:20|21 17:25|12</code><br>
Mo-Fr wird die Temperatur um 05:20Uhr auf 21°C, und um 05:25Uhr auf 12°C gesetzt. Mo-Fr wird die Temperatur um 05:20Uhr auf 21&deg;C, und um 05:25Uhr auf 12&deg;C gesetzt.
Jeden Tag wird die Temperatur um 17:20Uhr auf 21°C und 17:25Uhr auf 12°C gesetzt.<p> Jeden Tag wird die Temperatur um 17:20Uhr auf 21&deg;C und 17:25Uhr auf 12&deg;C gesetzt.<p>
<code>define HCW Heating_Control WZ_Heizung 07:00|16 Mo,Di,Mi|16:00|18.5 20:00|12 <code>define HCW Heating_Control WZ_Heizung 07:00|16 Mo,Di,Mi|16:00|18.5 20:00|12
{fhem("set dummy on"); fhem("set @ desired-temp %");}</code><br> {fhem("set dummy on"); fhem("set @ desired-temp %");}</code><br>
Zu den definierten Schaltzeiten wird nur(!) der in {} angegebene Perl-Code ausgeführt.<p> Zu den definierten Schaltzeiten wird nur(!) der in {} angegebene Perl-Code ausgef&uumlhrt.<p>
<code>define HCW Heating_Control WZ_Heizung Sa-So,Mi|08:00|21 (ReadingsVal("WeAreThere", "state", "no") eq "yes")</code><br> <code>define HCW Heating_Control WZ_Heizung Sa-So,Mi|08:00|21 (ReadingsVal("WeAreThere", "state", "no") eq "yes")</code><br>
Die zu setzende Temperatur wird nur gesetzt, falls die Dummy Variable WeAreThere = "yes" ist.<p> Die zu setzende Temperatur wird nur gesetzt, falls die Dummy Variable WeAreThere = "yes" ist.<p>