Ich habe mal diese Funktion erweitert.
http://forum.fhem.de/index.php/topic,22936.msg162893.html#msg162893 (http://forum.fhem.de/index.php/topic,22936.msg162893.html#msg162893)
Damit kann man einen HM-CC-RT-DN für eine bestimmte Zeit in den Party Modus versetzen.
Das funktioniert auch über den Tageswechsel (24:00 Uhr).
Die Funktion wird mit den Parametern: "Device, Temperatur, Stunden" aufgerufen.
Ich verwende diesen Code zum Aufheizen des Badezimmers per Button.
Gruß
Marcel
Zitat
#############################################################
# HM-CC-RT-DN für bestimmte Zeit in Party-Modus setzen
# Aufrufen mit {aufheizen("Device","Temperatur","Stunden")}
# Aufrufen mit {aufheizen("hk.bad","22.5","2")}
#############################################################
my $aufheizen;
sub
aufheizen($$$)
{
use POSIX;
use strict;
use warnings;
# aufgerufene Parameter
my ($device,$temperatur,$stunden) = @_;
my $device = $device."_Clima";
# hole die aktuelle Zeit und Datum
my($sec1,$min1,$hour1,$day1,$mon1,$year1,$wday1,$yday1,$isdst1) = localtime(time);
# in UnixTime umwandeln
my $unixstarttime = mktime (localtime(time));
# Unix Endzeit berechnen
my $unixendtime = $unixstarttime + (3600 * $stunden);
# Unix Endzeit in "lesbare Zeit" umwandeln
my ($sec2,$min2,$hour2,$day2,$mon2,$year2,$wday2,$yday2,$isdst2) = localtime($unixendtime);
# Setzte Variablen für Start- und Endpunkt
my $startTime = sprintf("%02d:%02d",$hour1,$min1);
my $endTime = sprintf("%02d:%02d",$hour2,$min2);
my $startDate = sprintf("%02d.%02d.%02d",$day1,$mon1 + 1,$year1 % 100);
my $endDate = sprintf("%02d.%02d.%02d",$day2,$mon2 + 1,$year2 % 100);
# HM-CC-RT-DN akzeptiert nur Minute auf 00 oder 30 enden, daher $startTime abrunden und $endTime aurfunden
$startTime =~ s/\:[0-2].$/:00/;
$startTime =~ s/\:[3-5].$/:30/;
$endTime =~ s/\:[0-2].$/:30/;
$endTime =~ s/\:[3-5].$/:00/;
# Sendebefehl für HM-CC-RT-DN
{ fhem ("set $device controlParty $temperatur $startDate $startTime $endDate $endTime")};
}
Hallo,
das "aufrunden" der Endzeit funktioniert so nicht.
Daher besser die Endzeit um 15 oder 30 Minuten verlängern und anschließend abrunden. Mit 15 Minuten (900 Sekunden) wird korrekt gerundet (eine Stunde = 45 bis 75 Minuten), mit 1800 Sekunden immer zur nächsten halben Stunde aufgerundet.
# Unix Endzeit berechnen
my $unixendtime = $unixstarttime + (3600 * $stunden)+ 900;
...
# HM-CC-RT-DN akzeptiert nur Minute auf 00 oder 30 enden, daher $startTime abrunden und $endTime runden.
$startTime =~ s/\:[0-2].$/:00/;
$startTime =~ s/\:[3-5].$/:30/;
$endTime =~ s/\:[0-2].$/:00/;
$endTime =~ s/\:[3-5].$/:30/;
Danke,
werde es testen.
Gruß
Marcel