FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Superklaus am 14 Februar 2024, 12:18:28

Titel: [Gelöst] - Wie komme ich an das Tagesdatum
Beitrag von: Superklaus am 14 Februar 2024, 12:18:28
Hallo,
ich habe folgendes Device definiert:
defmod doif_Heizung_Urlaub DOIF (([doif_Anwesenheit_Handy_Caro:state] eq "present") or \
([doif_Anwesenheit_Handy_Leo:state] eq "present") or \
([doif_Anwesenheit_Handy_Petra:state] eq "present") or \
([doif_Anwesenheit_Handy_Klaus:state] eq "present"))\
   (set vitoconnect Urlaub_unschedule)\
DOELSEIF (([doif_Anwesenheit_Handy_Caro:state] eq "absent") and \
([doif_Anwesenheit_Handy_Leo:state] eq "absent") and \
([doif_Anwesenheit_Handy_Petra:state] eq "absent") and \
([doif_Anwesenheit_Handy_Klaus:state] eq "absent"))\
   ((set vitoconnect Urlaub_Start 2024-02-12)\
    (set vitoconnect Urlaub_Ende 2024-12-01))
attr doif_Heizung_Urlaub cmdState normal|urlaub
attr doif_Heizung_Urlaub room Heizungskeller

setstate doif_Heizung_Urlaub normal
setstate doif_Heizung_Urlaub 2024-02-14 11:08:27 Device doif_Anwesenheit_Handy_Caro
setstate doif_Heizung_Urlaub 2024-02-13 19:35:45 cmd 1
setstate doif_Heizung_Urlaub 2024-02-13 19:35:45 cmd_event doif_Heizung_Urlaub
setstate doif_Heizung_Urlaub 2024-02-13 19:35:45 cmd_nr 1
setstate doif_Heizung_Urlaub 2024-02-14 11:08:27 e_doif_Anwesenheit_Handy_Caro_state present
setstate doif_Heizung_Urlaub 2024-02-14 07:08:27 e_doif_Anwesenheit_Handy_Klaus_state present
setstate doif_Heizung_Urlaub 2024-02-14 11:03:27 e_doif_Anwesenheit_Handy_Leo_state present
setstate doif_Heizung_Urlaub 2024-02-14 08:08:27 e_doif_Anwesenheit_Handy_Petra_state absent
setstate doif_Heizung_Urlaub 2024-02-13 19:35:37 mode enabled
setstate doif_Heizung_Urlaub 2024-02-13 19:35:45 state normal
Funktioniert auch soweit. Aber:
statt
(set vitoconnect Urlaub_Ende 2024-12-01)möchte ich so etwas wie
(set vitoconnect Urlaub_Ende $today)haben, sprich dass das aktuelle Tagesdatum statt dem konstanten Text verwendet wird.
Klappt aber leider nicht, bei allen Versuchen, die ich unternommen habe, wird der Wert nicht verwendet, sondern der Programmtext.
Eigentlich sollte das doch sehr einfach sein, daher sorry schon einmal, wenn es wirklich eine blöde Frage ist.
Danke schon einmal für eure Hilfe
Klaus

Titel: Aw: Wie komme ich an das Tagesdatum
Beitrag von: rabehd am 14 Februar 2024, 13:09:41
Wie wäre das als Anstoß?

https://forum.fhem.de/index.php?msg=1208322 (https://forum.fhem.de/index.php?msg=1208322)
https://forum.fhem.de/index.php?msg=1043489 (https://forum.fhem.de/index.php?msg=1043489)
Titel: Aw: Wie komme ich an das Tagesdatum
Beitrag von: Superklaus am 14 Februar 2024, 15:16:22
Hallo rabehd,
Danke erstmal für die schnelle Antwort.
Ich hatte schon lange gesucht, aber diese beiden Beiträge nicht gefunden.
Geholfen haben sie leider nicht: Wenn ich den Code so übernehme
(set vitoconnect Urlaub_Start {(localtime)})dann stürzt das Webinterface von FHEM ab, im Logfile finde ich nur die Zeile
Error parsing time at /usr/lib/x86_64-linux-gnu/perl/5.32/Time/Piece.pm line 598.Nach einem Neustart des Docker-Containers läuft dann alles wieder, natürlich ohne die Änderung.
Diese Fehler hatte ich gestern auch bei meinen Versuchen, habe also doch nicht alles falsch gemacht.
Ich nehme mal an, dass die Zeichenkette, die localtime ergibt, nicht sauber verarbeitet wird.
Titel: Aw: Wie komme ich an das Tagesdatum
Beitrag von: rabehd am 14 Februar 2024, 15:36:32
Also {(localtime)} liefert schon mal nicht das Format welches Du oben angezeigt hast.
Hast Du absichtlich die Formatierung weggelassen?

Hast Du (set vitoconnect Urlaub_Start {(localtime)})in der Befehlszeile eingegeben oder im DOIF?

Wie wäre das?
https://forum.fhem.de/index.php?msg=735064 (https://forum.fhem.de/index.php?msg=735064)
(set vitoconnect Urlaub_Start {(TimeNow)})ungetestet


Ich glaube Du musst an Deinen Suchen noch arbeiten. ;-)
Titel: Aw: Wie komme ich an das Tagesdatum
Beitrag von: Superklaus am 14 Februar 2024, 18:09:27
Ich habs  :)
Es muss heissen
(set vitoconnect Urlaub_Start {(substr(TimeNow,0,10))})Dann wird das Tagesdatum passend generiert.
Vielen Dank für die Hilfe
Klaus
Titel: Aw: Wie komme ich an das Tagesdatum
Beitrag von: Otto123 am 14 Februar 2024, 18:11:50
Zitat von: Superklaus am 14 Februar 2024, 15:16:22Geholfen haben sie leider nicht: Wenn ich den Code so übernehme
Du musst weiter lesen und nicht den ersten Satz stumpf kopieren :)
Kurzform heute:
{(strftime("%F",localtime))}Oder in 14 Tagen
{(strftime("%F",localtime(time+60*60*24*14)))}
@rabehd er woll doch nur die Datumskette und nicht die gesamte Ausgabe von TimeNow!?

Zitat von: Superklaus am 14 Februar 2024, 18:09:27Dann wird das Tagesdatum passend generiert.
Viele Wege ... ;D
Titel: Aw: [Gelöst] - Wie komme ich an das Tagesdatum
Beitrag von: betateilchen am 14 Februar 2024, 19:57:34
Zitat von: Otto123 am 14 Februar 2024, 18:11:50{(strftime("%F",localtime(time+60*60*24*14)))}

{strftime("%F",localtime(time+DAYSECONDS*14))}
Titel: Aw: [Gelöst] - Wie komme ich an das Tagesdatum
Beitrag von: Otto123 am 14 Februar 2024, 20:00:16
@betateilchen Meine "Formel" war hier als "Erklärbär" gedacht ;)
Titel: Aw: [Gelöst] - Wie komme ich an das Tagesdatum
Beitrag von: betateilchen am 14 Februar 2024, 20:05:18
Und meine "Formel" sollte lediglich eine perfomantere Variante Deines Vorschlags zeigen.