Liebe Community,
ich versuche gerade Lösung zu finden, mein Heizungsventil für eine Stunde (fester Zeitraum) in den Party-Modus zu versetzten.
Folgendes Skript habe ich dafür bis jetzt:
### Heizung Temperatur-Liste Essen (Urlaub-Modus) ###########################################
# Aufrufen mit {Essen ("25.04.14", "17:00", "25.04.14" ,"18:00")}
my $Essen;
sub
Essen($$$$)
{
# lokale Variablendeklaration
my ($startDate,$startTime,$endDate,$endTime) = @_;
# HM-CC-RT-DN akzeptiert nur Zeiten, die auf Minute 00 oder 30 enden.
# Daher $startTime und $endTime abrunden
$startTime =~ s/\:[0-2].$/:00/;
$startTime =~ s/\:[3-5].$/:30/;
$endTime =~ s/\:[0-2].$/:00/;
$endTime =~ s/\:[3-5].$/:30/;
# Sendebefehl für HM-CC-RT-DN
{ fhem ("set EZ.Heizung_Clima controlParty 21.5 $startDate $startTime $endDate $endTime")};
}
Mein Ziel ist es aber nur den Button zudrücken und nicht das Skript per Kommandozeile auszuführen.
Gibt es eine Möglichkeit im 99_myUtils.pm auf das aktuelle Datum bzw. Uhrzeit zuzugreifen?
Danke!
Hi,
vielleicht so:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
Siehe auch http://www.perlhowto.com/working_with_date_time (http://www.perlhowto.com/working_with_date_time)
Gruß,
Thorsten
Danke Thorsten!
Mit der Information konnte ich meine Aufgabe erfüllen. Mit Perl muss ich mich noch ein wenig anfreunden... :)
Hier meine Lösung:
### Heizung Temperatur-Liste Essen (Party-Modus) ###########################################
# Aufrufen mit {Essen}
# Setzt Heizung im Esszimmer ab sofort für 1h auf 21.5 Grad
my $Essen;
sub
Essen()
{
# hole die aktuelle Zeit und Datum
my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
# Setzte Variablen für Start- und Endpunkt
my $startTime = sprintf("%02d:%02d",$hour,$min);
my $endTime = sprintf("%02d:%02d",$hour + 1,$min);
my $startDate = sprintf("%02d.%02d.%02d",$mday,$mon + 1,$year % 100);
# ToDo: überprüfen ob 24h überschritten
my $endDate = $startDate;
# 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 EZ.Heizung_Clima controlParty 21.5 $startDate $startTime $endDate $endTime")};
}
Darf ich fragen wofür du das brauchst? Ich finde es ja immer interessant auf was für Ideen manche kommen und lass mich da gerne inspirieren.
nun, hoert sich doch garnicht schlecht an. Du hast dein Wochenprogramm und willst jetzt 1h etwas waermer - oder kaelter.... wenn du manuell umstellst ist der rueckschaltezeitpunkt variabel - beim naechsten schaltpunkt eben.
Es ist quasi ein change-for-timer. Sinnvoll, denke ich.
Das Skript ist für unser Esszimmer. Im Normalbetrieb ist nur das Frühstück per Temperaturliste eingegeben.
Das Abendessen bzw. Mittagessen am Wochenende findet immer zu unterschiedlichen Zeiten statt. Um Heizkosten zu sparen möchte ich nicht proforma die Heizung schalten.
Bevor wir das Essen zubereiten, drücke ich fix auf den Knopf und im Esszimmer wird es für mindestens eine Stunde angenehm war.
@wopper
Hast Du schon eine Lösung für das 24 Uhr Problem?
Wenn ich um 23:30Uhr das Script starte, läuft es auf Fehler.
Gruß
Marcel
@all
Ich finde dies Idee mit dem temporären Aufheizen auch sehr interessant.
Mein Anwendungsfall - kurzzeitiges Aufheizen des Badezimmers.
Leider bin ich absoluter Perl-Anfänger.
PHP wäre mir da lieber :-\
Aber könnte man das 24:00Uhr - Problem nicht mit dem Unix-Time Format lösen?
Also aktuelle Zeit in Unixtime umrechnen Bsp: 20.10.2014 23:15.00 = 1413839700
1413839700 + 3600s = 1413843300 und dann wieder umwandeln in 21.10.2014 00:15:00
Könnte das bitte jemand in Perl-Code fassen?
Gruß
Marcel
Nach mehreren Stunden Perl studieren, habe ich die Funktion mal umgebaut und hier gepostet.
http://forum.fhem.de/index.php/topic,28163.msg210459.html#msg210459 (http://forum.fhem.de/index.php/topic,28163.msg210459.html#msg210459)
Gruß
Marcel