HM-CC-RT-DN für eine bestimmte Zeit in den Party Modus versetzen

Begonnen von mcbo, 21 Oktober 2014, 23:30:51

Vorheriges Thema - Nächstes Thema

mcbo

Ich habe mal diese Funktion erweitert.

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")};

}

Mathias R

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/;   

mcbo