Identifikation eines genauen Zeitpunktes per Skript

Liebes Forum,

bin „mal wieder“ auf ein Problem gestoßen und möchte euch gerne um Hilfe bitten:

Ich würde gerne innerhalb eines Skriptes einen genauen Zeitpunkt identifizieren, was ja z.B. über eine einfache Abfrage möglich wäre:


if (strtotime ("Now") == strtotime ("<gewünschter Zeitpunkt>")
	{
	// Zeitpunkt identifiziert
	}

Konkret wäre das z.B. der 1. Tag in einem Monat oder einer Woche etc.

Das würde in meinen Augen aber mind. einen sekündlichen Aufruf des Skriptes erfordern, und selbst dann ist nicht sichergestellt, ob durch z.B. höherpriore Systemtasks die Ausführung um wenige Millisekunden verzögert wird und ich „die“ genaue Sekunde, in der die Abfrage „wahr“ ist, verpasse.

Eine Lösung über einen Zeitbereich wäre prinzipiell ja möglich:


if (strtotime (("Now") > strtotime ("<gewünschter Zeitpunkt> - Offset") ||  (strtotime ("Now") > strtotime ("<gewünschter Zeitpunkt> + Offset"))
	{
	// Zeitpunkt identifiziert
	}

Zum einen finde ich diese Lösung „unschön“, zum anderen birgt sie je nach Konfiguration die Gefahr, den Code für einen bestimmten Zeitpunkt mehr als ein Mal aufzurufen, da je nach Frequenz des Aufrufs auch ein entsprechend großer Zeitbereich „definiert“ werden muss und damit ggfs. zwei Skriptaufrufe zwischen


strtotime ("<gewünschter Zeitpunkt> - Offset") < (strtotime ("Now") < strtotime ("<gewünschter Zeitpunkt> + Offset")

möglich sind. Eine „Anforderung“, die ich mir selbst gestellt habe ist gerade bei langsamen Vorgängen wie z.B. der Heizungsregelung, das Skript nur alle paar Minuten aufzurufen.

Für die „1 mit Stern“: Noch schwieriger wird es nach meiner Ansicht, wenn ein Skript Eventbezogen aufgerufen wird, d.h. ich keine Aussage über die Frequenz des Aufrufs treffen kann.

Hat jemand von euch eine bessere Lösung parat?

Danke für eure Hilfe, VG Olaf

Auf gut Deutsch, Du weißt selber nicht was Du willst?

Für was gibt es Event gesteuerte Aktionen?

Gesendet von iPad mit Tapatalk

Ich verstehe dich so, dass du ein Skript zu einem genauen Zeitpunkt aufrufen möchtest, z.B. für einen Wecker oder ähnliches…

Dafür ist eigentlich das ‚zyklische Ereignis‘ gedacht, dem du eine sekundengenaue Uhrzeit mitgeben kannst.

@bumaas: ja genau. Danke für die Antwort.

Im Detail geht es z.B. um eine Abrechnungsfunktion (Verbrauch, Laufzeit etc.), die dann z.B. den letzten Monat abrechnet. Mit dem zyklischen Ereignis kann ich zwar das Skript zeitgenau starten, habe aber dann innerhalb des Skriptes z.B. 12 Abfragen, ob es sich um Januar, Februar etc. handelt. Analog gilt das natürlich für andere Zeiträume (Tage bis hin zu Sekunden etc.) innerhalb des gleichen Skriptes.

Kurzum: Ein zyklisches Ereignis startet zwar das Skript nach definierten Bedingungen, ich habe dann aber nach wie vor das Problem, z.B. den passenden Zeitraum innerhalb des Skriptes sicher zu identifizieren und lande damit in meinen Augen wieder beim ursprünglichen Problem. Mein „Workaround“ aktuell ist, dass ich pro Abfrage ein Skript erstellt habe, dass dann zum definierten Zeitpunkt aufgerufen wird. D.h. die Januarabrechnung ist ein eigenes Skript und wird am 1.2. des aktuellen Jahres um 00:00:00 aufgerufen und berechnet den Januar, gleiches gilt dann analog für die anderen Zeiträume. Ist aber wie schon geschrieben in meinen Augen einfach „unschön“.

Vielleicht macht es ein Beispiel deutlicher:

Skriptaufruf mit Timer z.B. alle 10 Sek.

  1. Abfrage: Ist jetzt der 1.1. 00:10 des aktuellen Jahres
  2. Abfrage: ist jetzt die 5. Minute der aktuellen Stunde
  3. usw…

Ich hoffe, damit noch einmal verdeutlicht zu haben, was ich genau möchte.

Habe ich einen Knoten im Hirn?

Danke noch mal für die Hilfe.

VG Olaf

Hallo Olaf,

Komplett falsche Denkweise.

Du hast eine Datenbank in IPS wo deine Variablen zur Auswertung zur Verfügung stehen.
Diese kann man gezielt und genau abrufen mit den Begriffen aus der Doku.
Dafür braucht es kein Script was alle Nase lang läuft.

Nur als kleiner Hinweis. Zu Abrechnungszwecken egal welcher Art,
sind diese nicht geeignet. Intern ja, alles andere ist nicht recht sicher!

Hallo Rainer,

danke für deine Antwort.

Mit Datenbank meinst du vermutlich die csv Files, die per GetAggregatedValues ausgelesen werden. Ja, die Funktion nutze ich natürlich, mein Problem bezieht sich ja eher auf den Trigger der Analyse.

Anyway, scheinbar komme ich mit meinem ursprünglichen Ansatz nicht zum Ziel und werde das jetzt mit idate() und strtotime() lösen.

Trotzdem vielen herzlichen Dank für eure Hilfe!

VG Olaf