AT mit variablem Datum ausführen füht zu unvorhergesehenen Problemen

Begonnen von Homalix99, 28 Januar 2021, 00:21:21

Vorheriges Thema - Nächstes Thema

Homalix99

Ich habe eine dummy-Variable mit datetimepicker, welche das Datum/Uhrzeit für eine Aktion festlegt.


Internals:
   FUUID      5ffc8478-f33f-5615-4e4f-4844391aa05a0879
   NAME       Fhem_cntr_summer
   NR         1864
   STATE      2021-01-07T01:00:36
   TYPE       dummy
   .attraggr:
   .attrminint:
   OLDREADINGS:
   READINGS:
     2021-01-27 23:31:57   state           2021-01-07T01:00:36
Attributes:
   DbLogExclude .*
   alias      Zeitpunkt Fhem Steuerung für Sommer aktiv
   comment    Soll dem absoluten at dienen, um den Zeitpunkt (Format: YYYY-MM-DD_hh:mm:ss)
zum Aktivieren von Kontrollstrukturen, die nur im Sommer relevant sind, festzulegen
   group      Allgemein
   icon       time_calendar@lightgreen
   room       Einstellungen
   setList    state:datetime,inline:true,theme:default,format:Y-m-d\TH:i:s
   webCmd     state

Das Format des dummy gibt das Zeitformat für ein AT m. E. richtig aus (YYYY-MM-DDThh:mm:ss)
Ein def at_name at {Value("Fhem_cntr_summer")} {....}
wird mit der Meldung: "the function "Value("Fhem_cntr_summer")" must return a timespec and not 2021-01-07T01:00:36. "
abgelehnt. Was übersehe ich da?
Wenn das dummy im state zum Beispiel nur einen Zeitstempel (hh:mm:ss) enthält, funktioniert es.
Laut Ref. "<datespec> ist entweder ISO8601 (YYYY-MM-DDTHH:MM:SS) oder Anzahl der Sekunden seit 1970 oder {perlfunc()}. " sollte es funktionieren.
Ich möchte das AT aber einmal zu einem bestimmten, variable festlegbaren Datum/Uhrzeit ausführen.

VG

Alex
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

betateilchen

Unabhängig vom Problem, dass die Zeitangabe nicht akzeptiert wird, stellt sich mir gerade folgende Frage:

Dir ist schon klar, dass der absolute Ausführungszeitpunkt des at beim DEFINE berechnet wird? Selbst wenn Du die Zeitangabe im at über eine perl Funktion berechnest, wird sich der Ausführungszeitpunkt des at nicht automatisch verändern, wenn Du die Parameter der Funktion änderst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: betateilchen am 28 Januar 2021, 11:54:26
Unabhängig vom Problem, dass die Zeitangabe nicht akzeptiert wird,

define test_at at 2021-01-07T01:00:36 {}

Das ist echt ein lustiges Problem. Ich habe auf zwei FHEM Systemen getestet.

Auf einem System funktioniert das Anlegen offenbar (!) wie im Screenshot zu sehen.
Aber in Wirklichkeit ist das device nicht vorhanden. Es kann weder gelöscht werden noch kann man seine raw definition anschauen.

Auf dem zweiten System funktioniert das Anlegen gar nicht und im Log steht nur die Meldung

2021.01.28 12:01:40 3: test_at: HASH(0x555cdfd00f48)

Das sollte sich Rudi mal anschauen. Dazu müsstest Du aber den Thread in das richtige Unterforum verschieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DeeSPe

Zitat von: betateilchen am 28 Januar 2021, 12:03:24
define test_at at 2021-01-07T01:00:36 {}

Das ist echt ein lustiges Problem. Ich habe auf zwei FHEM Systemen getestet.

Auf einem System funktioniert das Anlegen offenbar (!) wie im Screenshot zu sehen.
Aber in Wirklichkeit ist das device nicht vorhanden. Es kann weder gelöscht werden noch kann man seine raw definition anschauen.

Auf dem zweiten System funktioniert das Anlegen gar nicht und im Log steht nur die Meldung

2021.01.28 12:01:40 3: test_at: HASH(0x555cdfd00f48)

Das sollte sich Rudi mal anschauen. Dazu müsstest Du aber den Thread in das richtige Unterforum verschieben.

Weil der Zeitpunkt für die Ausführung des at in der Vergangenheit liegt wird es gar nicht wirklich erstellt bzw. gleich wieder gelöscht.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

betateilchen

Da hast Du natürlich völlig recht. Irgendwie war ich bei der Datumsangabe gedanklich die ganze Zeit beim 01.07. weil im device auch was von Sommer steht.

Zitat
Kontrollstrukturen, die nur im Sommer relevant sind,

Was für ein blöder Fehler von mir 8)
Sowas kommt davon, wenn man im Zug sitzt und nur ein Tablet zur Verfügung hat...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Homalix99

Okay das ist verständlich.
Aber : @ Betateilchen:
Zitat
Dir ist schon klar, dass der absolute Ausführungszeitpunkt des at beim DEFINE berechnet wird? Selbst wenn Du die Zeitangabe im at über eine perl Funktion berechnest, wird sich der Ausführungszeitpunkt des at nicht automatisch verändern, wenn Du die Parameter der Funktion änderst.
verstehe ich nicht so ganz:

Laut Referenz
Zitat
<datespec> ist entweder ISO8601 (YYYY-MM-DDTHH:MM:SS) oder Anzahl der Sekunden seit 1970 oder {perlfunc()}.
könnte ich doch den Ausführungszeitpunkt (der natürlich in der Zukunft liegen sollte) via perlfkt() bereitstellen, oder nicht?

Gruß

Alex
- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)

betateilchen

Zitat von: Homalix99 am 28 Januar 2021, 21:28:47
Laut Referenzkönnte ich doch den Ausführungszeitpunkt (der natürlich in der Zukunft liegen sollte) via perlfkt() bereitstellen, oder nicht?

Ja, aber die Funktion wird nur einmalig beim define ausgeführt, der tatsächliche AusführungsZeitpunkt wird dabei berechnet und FHEM-intern abgespeichert. Danach spielt die Funktion keine Rolle mehr.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Homalix99

- RPI 4 fhem in Docker, 2 x Arduino Uno, HM-GW, HM-Dev. (Fensterkontakte, HK-Thermostate, div. Aktoren), JeeLink,
- GPIOs, HM-LAN, ESPs (MQTT2)
-Überwachung Fenster/Türen/Licht, HK-Thermostatregelung, Rollosteuerung, Überw. Betriebstemperaturen Heizung, Erfassung Gas/Wasser, PV-Anl., Wetter (WS1600)