HM-CC-RT-DN per Button für 1 Stunde in den Party Modus versetzen

Begonnen von wopper, 26 April 2014, 17:33:14

Vorheriges Thema - Nächstes Thema

wopper

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!

Thorsten Pferdekaemper

Hi,
vielleicht so:
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
Siehe auch http://www.perlhowto.com/working_with_date_time
Gruß,
    Thorsten
FUIP

wopper

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

strauch

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.
FHEM 5.6 VMware mit Debian. 1 CUL für FS20 und HMLAN für Homematic, HM-CC-RT-DN, HM-LC_Sw1PBU-FM, HM-LC-Bl1PBU-FM,  HM-SEC-SC, HM-SEC-SC-2, HM-LC-Sw1-Pl2, HM-Sec-RHS, ASH2200, FHT80B, S20KSE, Sonos, XBMC, FB_Callmonitor, SMLUSB, Arduino Firmata, uvm.

martinp876

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.

wopper

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.

mcbo

@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

mcbo

@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

mcbo

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

Gruß

Marcel