NEWS
Timer ungenau
-
Hallo,
ich habe einen Timer über einen CRON der jede Sekunde aufgerufen wird. Dieser ist aber sehr ungenau, woher kommt das?
Laut Timer war die Internet Nutzung 123 Minuten aktiv, die tatsächliche Zeit war aber 3 Stunden & 38 Minuten (218 Minuten), woher kommt diese riesige Differenz? Ich hatte auch schon versucht dies mit Intervall Timer zu lösen, aber das hat sich auch sehr häufig aufgehangen.
Auch der Verlauf ist sehr eigenartig, am Ende scheint die Steigung der Roten Kurve, abgelaufene Zeit zu stimmen. -
@mike2712
Es könnte sein, dass z.B. die Hardware überlastet ist und den Cronjob nicht im sekundentakt abarbeiten kann.Um das reaöistisvh sagen zu können, müsste man deutlich meht infos haben
-
@Homoran
iObroker läuft auf einer Windows 7 VM in einem QNAP NAS, der scheint nicht überlastet:
iObroker Systeminformationen
-
@mike2712
Dann musst du das skript mal loggen, ob es wirklich jede sekunde startet, und/oder sich der wert jede Sekunde ändert.Oder ob der falls vielleicht nicht auslöst,
Oder...
Oder... -
Vielleicht ist es auch so simple , dass man im Blockly aktualisiere anstatt steuere nimmt
-
@haselchen
Da wäre ich jetzt gespannt.Ich kenne das nur umgekehrt, dass ein gerätestate zwingend ein steuere benötigt, ein "variablen state" das aktualisiere "nur" damit der Wert nicht rot bleibt.
-
@Homoran
Das war mehr so ins Blaue getippt.
Manchmal sind es die unscheinbaren Dinge im IOBROKER, die dann funktionieren -
Ich denke aber auch das man diese Berechnung per Blockly eleganter hinbekommt , als mit einem 1 Sekunden Cronjob. Dazu müsste man aber mehr zu den Datenpunkte wissen.
-
@haselchen sagte in Timer ungenau:
Dazu müsste man aber mehr zu den Datenpunkte wissen.
Das gilt für alle Berechnungen.
Z.b. "Internetnutzung"
Wo kommt der wert her
Wie wird er erzeugt
Reagiert dieser wert überhaupt sekundengenau, oder dauert es ggf. Minuten bis er true/false ist
... -
Der Datenpunkt Internetnutzung wird konstat über VIS auf 0 oder 1 gesetzt, habe in einem Test dieses mit einer festen 1 verodert.
Den Test habe ich jetzt mit steuere und aktualisiere gemacht, tatsächlich läuft dieser Wert bei aktualisiere deutlich langsamer weg wie bei steuere.
Bei aktualisiere ist der Wert bei einer echten Laufzeit von 240 auf 230 gelaufen, vermutlich ist diese CRON einfach nicht so genau das man das für solche Zwecke benutzen kann. Ob es an der Hardeware oder Software liegt?Ich denke ich werde nach einen anderen Lösungsweg suchen müssen, mit Intervall Timern hatte ich es allerdings nicht hinbekommen, vielleicht baue ich die Geschichte soweit um das der CRON nur jede 30 Sekunden oder jede Minute gestartet wird um den schleichenden Fehler zu minimieren, andere Laufzeiten wie z.B. Einschaltzeiten von fernseher habe ich nach dem gleichen Prinzip gelöst, nur halt jede Minute, hier passt die Genauigkeit sehr gut.
Hätte mich aber schon interessiert wie genau so ein CRON in dem Sekundentakt ist, spielt die Bearbeitungszeit des Scripts selbst auch eine Rolle, oder warum ist die Abweichung bei aktualisiere deutlich geringer? Der Inhalt des Script selbst ist ja doch im Prinzip zu vernachlässigen, ist ja nichts drin. -
@mike2712 sagte in Timer ungenau:
Ich denke ich werde nach einen anderen Lösungsweg suchen müssen
Triggern auf Änderung des Wertes von Internetnutzung
Dann die Differenz aus aktueller zZeit und letztem timestamp -
@Homoran
Ja so ähnlich hatte ich es auch probiert, hatte immer ein Problem das es um 1 Stunde nicht passt, Sommer/Winterzeit Problem ? Aber eine gute Idee hier vielleicht nochmal anzusetzen. -
@mike2712 sagte in Timer ungenau:
das es um 1 Stunde nicht passt
Zeitzone in der vm?
Aber Differenz ist Differenz!
-
-
Ich muss den Wert zur Aktivierung in einem Datenpunkt schreiben, richtig? Wie muss ich diesen Datenpunkt konfigurieren, ich finde ein passendes Datenformat.
Wenn Internetnutzung auf 0 geht einfach die aktuelle Zeit - der gespeicherten Zeit rechnen, diese Differenz müsste dann idealerweise als Stunden:Minuten oder wie auch immer daraus kommen, so sollte der Ansatz sein, oder? -
@mike2712 sagte in Timer ungenau:
Ich muss den Wert zur Aktivierung in einem Datenpunkt schreiben
Was bitte ist denn "Internetnutzung " jetzt?
-
@Homoran ein einfacher Logik Datenpunkt
-
es gibt ein script für solche timer/laufzeit fragen - vielleicht kannst du es brauchen
in dem script wird nicht gezählt, sondern nach einem einstellbaren interval berechnet - damit stimmt es auch, wenn iobroker oder server neugestartet wird
-
@mike2712 sagte:
Wenn Internetnutzung auf 0 geht einfach die aktuelle Zeit - der gespeicherten Zeit rechnen
Vorschlag ohne Reset von summe / Datenpunkt Nutzungsdauer:
-
@mike2712 sagte in Timer ungenau:
ein einfacher Logik Datenpunkt
Und zu dem gibt es einenen timestamp der Änderung und einen last timestamp der letzten Änderung