Rechnen mit timespecs

1,058 views
Skip to first unread message

UliM

unread,
Nov 18, 2012, 3:30:47 PM11/18/12
to fhem-...@googlegroups.com
Hi,
ich möchte gerade mit Zeiten rechnen - allerdings nicht mit time oder ReadingsTimestamp.  time_str2num ist mir bekannt.


Mit timeslider setze ich einen neue Zeit auf einem dummy.  Value("dummy") liefert also sowas wie "06:30"
Nun möchte ich zB eine halbe Stunde abziehen.
Value("dummy") -30*60 liefert nix sinnvolles.
time_str2num kann ich nicht nutzen, da der Startwert eben nicht ReadingsTimestamp ist, sondern 06:30 (also ohne Datum)

Ich meine hier mal gesehen zu haben, dass man sowas machen kann wie
Value("dummy") - "00:30"

finde es aber nicht wieder.

Hat jemand eine Idee?

Gruß, Uli

Andreas Schaller

unread,
Nov 18, 2012, 5:02:48 PM11/18/12
to fhem-...@googlegroups.com
Aber Hallo , das klingt fuer mich nach einer Idee fuer eine Loesung um die Heizung 30 min eher zu starten bevor der FB Wecker klingelt ! Das waere super.

Rudolf Koenig

unread,
Nov 18, 2012, 5:21:22 PM11/18/12
to fhem-...@googlegroups.com
> Hat jemand eine Idee?

Ja, perl-funktion dafuer bauen.

LaLeLu

unread,
Nov 18, 2012, 5:45:40 PM11/18/12
to fhem-...@googlegroups.com
Hi,

ich versuche mich auch gerade daran. Mit dem folgenden Code kann ich eine gegebene Uhrzeit um eine beliebige Anzahl von Minuten (Offset) addieren oder subtrahieren.

z.B.: 23:30 -10Minuten => 23:20

Hier meine Lösung:

my $NextAlarmTime = "23:30";
my  $Poffset = -10;

# Zur Übernahme des Datums und der Zeit von heute:    
my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime;

#  Nun umgekehrt die zu verändernde Stunde und Minute (z.B. Weckzeit) einspielen. Steht bei mir in $NextAlarmTime als hh:mm:
my $NextAlarmTimeP = mktime(0,substr($NextAlarmTime,3,2),substr($NextAlarmTime,0,2),$mday,$month,$year,$wday,$yday,$isdst);

# Die Zeitverschiebung berechnen. Steht bei mir in $Poffset (als Minuten): 
my $NextAlarmTimePM = $NextAlarmTimeP + $Poffset * 60;

# Nun wieder zurück in Stunde und Minute etc. umändern:
my ($Psec,$Pmin,$Phour,$Pmday,$Pmonth,$Pyear,$Pwday,$Pyday,$Pisdst) = localtime($NextAlarmTimePM);

# Jetzt noch in eine Uhrzeit konvertieren. Tag, Monat und Jahr müsste auch richtig berechnet werden:
my $NextAlarmTimePHM = $Phour.':'.$Pmin; 
# hier: 23:20

Ich hoffe, es hilft.
Bald will ich auch meine Lösung für die Übernahme der Weckzeit von der FritzBox posten. Ich bin bald soweit :-)

LaLeLu 

UliM

unread,
Nov 19, 2012, 2:38:53 PM11/19/12
to fhem-...@googlegroups.com
Hi,
seeehr schön, danke!
Hab's grad in ne Routine verpackt. Werd's noch etwas testen und dann hier posten.

Mein Anwendungszweck:
- getriggered durch wakeupChange (timeslider)
- setzt wakeup eine viertel Stunde vor wakeup
- setzt den Heizbeginn auf 30 Minuten vor Zielzeit, plus 3 Minuten je Minusgrad Aussentemperatur -> je kälter, desto früher wird hochgeheizt

So long,
Uli
 

LaLeLu

unread,
Nov 19, 2012, 3:42:39 PM11/19/12
to fhem-...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages