FHEM Forum

FHEM => Automatisierung => Thema gestartet von: betateilchen am 01 März 2022, 17:51:39

Titel: 98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 01 März 2022, 17:51:39
Zitat


Attributes
interval
set <name> interval <*/15 * * * *>
utilize a cron expression to define the interval at which the source file will be loaded. Default is one hour.



Da sollte vermutlich "attr" statt "set" stehen.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 01 März 2022, 17:55:44
da liegst du richtig:) Danke, wird korrigiert.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 01 März 2022, 20:46:52
Wo wir gerade beim Thema Intervall sind...

interval */10 8-19 * * *

Berechnet aktuell (20:45 Uhr) den nächsten Ausführungszeitpunkt auf 08:10 Uhr morgen früh.
Meine Erwartung war eigentlich, dass die erste Ausführung damit um 08:00 Uhr erfolgt.

Edit:

interval 0/10 8-19 * * *

bewirkt keine Änderung, auch hier wird die Ausführung auf 08:10 Uhr berechnet.

Vorübergehend habe ich nun

interval 1/10 8-19 * * *

gesetzt, damit erfolgt die Ausführung erstmalig um 08:01 Uhr. Das ist unschön, aber immerhin nur 1 Minute "falsch".
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 01 März 2022, 23:19:00
Hallo Jörg,

kannst Du das mal bitte prüfen?
Mit dem patch erfolgt bei mir die Berechnung der Startzeit augenscheinlich korrekt.
Ob das gleiche Problem auch in parseHourEntry() auftritt, habe ich nicht geprüft.



Index: 98_JsonMod.pm
===================================================================
--- 98_JsonMod.pm       (revision 25757)
+++ 98_JsonMod.pm       (working copy)
@@ -1557,7 +1557,7 @@
        $res = $now + $res;

        return $start + 60 if ($res > $stop); # carry over
-       return $res; # regular next
+       return $start; # regular next
};

sub parseHourEntry {
@@ -1875,4 +1875,4 @@
</ul>
=end html

-=cut
\ No newline at end of file
+=cut
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 02 März 2022, 01:49:04
Danke für die Fehlersuche, liegt aber tiefer. So wie unten müsste es passen. Es gibt einen Nebeneffekt:

Wenn ich um 20:45:30 einen Timer hole, welcher auf "45 Minuten" matched (zb '*/5') würde der Cron jetzt 20:45:00 liefern, ergo sofort wieder laufen. Der JSON File würde also in der Minute mehrfach abgeholt, das soll so nicht sein. Damit das nicht passiert, muss noch die Zeile #526 geändert werden:

my @t = localtime(Time::HiRes::time() +60);

parseMinuteEntry:

sub parseMinuteEntry {
  my ($self, $in, $now) = @_;
  my ($res, $start, $stop, $step);

  ($step) = ($in =~ m/\/([0-9]|[0-5][0-9])$/);
  ($start, $stop) = ($in =~ m/^([*]|[0-9]|[0-5][0-9])(?:-([0-9]|[0-5][0-9]))?(?:\/(?:[0-9]|[0-5][0-9]))?$/);
  return if (not defined($start) or ($start eq '*' and defined($stop))); # syntax error

  $stop = (defined($step) or ($start eq '*'))?59:$start if (not defined($stop));
  $start = 0 if $start eq '*';
  return if ($start > $stop); # syntax error
  return $start if ($now  < $start); # literal start

  $res = $step //= 1;
  $res = ($now - $start) % $res;

  return $now if ($res == 0) and ($now <= $stop); # current minute
  $res = $now + $step - $res;
  return $start + 60 if ($res > $stop); # carry over
  return $res; # regular next
};


Magst Du das testen? Danke!
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 02 März 2022, 10:55:09
Moin, danke für die schnelle Reaktion.

Die vorgeschlagene Änderungen habe ich eingebaut. Getestet mit dem Intervall "0/10 8-10 * * *" ergab sich das gewünschte Verhalten.
Genau so hatte ich mir das vorgestellt. Super!
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 02 März 2022, 10:59:09
perfekt, dank zurück.

Ich teste das nochmal gründlich gegen diverse mögliche und unmögliche cron expressions. Falls das alles ok ist checke ich das dann die kommenden Tage ein. Zusätzliche Tests Deinerseits natürlich ebenfalls hoch willkommen. ("0/10 8-10 * * *" sollte gleich "*/10 8-10 * * *", das meine ich gestern Abend auch getestet zu haben)
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 02 März 2022, 11:13:14
wart mal, 8-10 ... dann müsste die letzte Ausführung vmtl 9:50 sein, nicht 10:50 (?).

Edit: ne, das macht eigentlich keinen Sinn. Hour darf 0-23 sein. Ergo muss STOP inkludiert sein, sonst würde ich nie auf 23:30 kommen. Gleiches für "30 23 * * *" da ist die auch drin. Passt.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 02 März 2022, 15:30:49
Im Moment läuft das Ganze unauffällig.
*/10 funktioniert mit den Änderungen auch wie gewünscht.

Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: yersinia am 04 März 2022, 09:09:02
Hi herrmannj,

beinhaltet der fix auch die erweitertete cron-notation (https://forum.fhem.de/index.php/topic,111487.msg1057145.html#msg1057145)?
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 04 März 2022, 15:51:13
Zitat von: herrmannj am 02 März 2022, 10:59:09
Ich teste das nochmal gründlich gegen diverse mögliche und unmögliche cron expressions.

dann teste doch mal

1,59 0-7,20-23 * * *

da wird aktuell (15:50) die nächste Ausführung auf 20:59 berechnet anstatt auf 20:01  8)
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 04 März 2022, 16:14:26
@yersinia. nein noch nicht

@betateilchen, ja weil Kommata (so wie Wochentage) nicht berücksichtigt werden.

Aber gut, ich wollte das eh noch für was anderes nehmen, dann bau ich mal den syntax auf eure corner cases aus ;)
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 04 März 2022, 16:23:16
https://crontab.guru/#5/5,28/5,53-55_4_*_*_*

5/5,28/5,53-55 4 * * *

"At every 5th minute from 5 through 59, every 5th minute from 28 through 59, and every minute from 53 through 55 past hour 4."


message to me: einfach mal die Klappe halten
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: yersinia am 04 März 2022, 16:31:36
Zitat von: herrmannj am 04 März 2022, 16:14:26Aber gut, ich wollte das eh noch für was anderes nehmen, dann bau ich mal den syntax auf eure corner cases aus ;)
pff, corner case ;D

aber mal [OT]: die cron-Notation und die dazugehörige Funktion hätte ich -neben JsonMod- auch gern für at, DOIF, HTTPMOD, Calendar, ABFALL und alles andere was irgendwie mit Interval arbeitet. Das wäre geil und mächtig. imho.
Gibt es Ambitionen/Möglichkeiten die cron-Notation außerhalb von JsonMod zur Verfügung zu stellen?[/OT]
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 04 März 2022, 16:43:27
CRON (.pm oder was auch immer) so zur Verfügung zu stellen wäre mein Ziel. Ob die maintainer der genannten Module das dann nutzen, das liegt nicht bei mir.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: yersinia am 04 März 2022, 16:50:35
Kann man denn nicht Schedule::Cron (https://metacpan.org/pod/Schedule::Cron) (ja, ich kann eine Suchmaschine benutzen ^^) nutzen? Oder weicht deine Implementierung ab?
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 04 März 2022, 16:59:14
eher schwierig
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 04 März 2022, 17:20:51
Zitat von: herrmannj am 04 März 2022, 16:14:26
@betateilchen, ja weil Kommata (so wie Wochentage) nicht berücksichtigt werden.

Nur mal so (ja ich habe Deinen Folgekommentar gelesen): meine Intervalldefinition funktioniert grundsätzlich von 20-07:59 wie gewünscht.
Nur der erste Zeitpunkt stimmt nicht. Soll: 20:01, Ist: 20:59
Danach wird um 21:01 Uhr korrekt weitergearbeitet.

"1,30,59 0-7,20-23 * * *" funktioniert auch, dann wird der erste Ausführungszeitpunkt auf 20:30 Uhr berechnet.
Es scheint so, dass der erste Eintrag in der Komma-Liste verlorengeht.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 04 März 2022, 17:27:31
Zitat von: yersinia am 04 März 2022, 16:31:36
aber mal [OT]: die cron-Notation und die dazugehörige Funktion hätte ich -neben JsonMod- auch gern für at, DOIF, HTTPMOD, Calendar, ABFALL und alles andere was irgendwie mit Interval arbeitet.

Das hätte ich auch gerne.

Zitat von: herrmannj am 04 März 2022, 16:43:27
CRON (.pm oder was auch immer) so zur Verfügung zu stellen wäre mein Ziel. Ob die maintainer der genannten Module das dann nutzen, das liegt nicht bei mir.

Naja, es muss halt möglichst einfach zu verwenden sein. Es gab vor einiger Zeit schonmal den Versuch, mit computeAlignTime() in fhem.pl die Berechnung von align-Attributen zu vereinfachen/vereinheitlichen. Aber ausser dem at selbst kenne ich kein Modul, das diese Funktion tatsächlich benutzt.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 04 März 2022, 23:54:39
Zitat von: betateilchen am 04 März 2022, 17:20:51
Nur mal so (ja ich habe Deinen Folgekommentar gelesen): meine Intervalldefinition funktioniert grundsätzlich von 20-07:59 wie gewünscht.
Nur der erste Zeitpunkt stimmt nicht. Soll: 20:01, Ist: 20:59
Danach wird um 21:01 Uhr korrekt weitergearbeitet.

"1,30,59 0-7,20-23 * * *" funktioniert auch, dann wird der erste Ausführungszeitpunkt auf 20:30 Uhr berechnet.
Es scheint so, dass der erste Eintrag in der Komma-Liste verlorengeht.
du hast recht, Kommata hatte ich bereits implementiert. ist dann offensichtlich ein bug, danke fürs aufspüren, ich arbeite dran
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 04 März 2022, 23:56:43
Ja, mach Dir keinen Streß. Ich bin da auch nur zufällig drauf gestoßen, ist aber eher unkritisch.

Eigentlich wollte ich nur einen Tippfehler melden  :D

Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 05 März 2022, 00:00:11
den ignoriere ich erstmal  :D hat ja zu zwei (echten) bug meldungen geführt, da gilts nachzuarbeiten
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 05 März 2022, 12:12:50
Bezüglich des ignorierten Tippfehler könnte man auch darüber nachdenken, ob "interval" die richtige Bezeichnung für das Attribut ist. Mit crontab-ähnlichen Einträgen werden ja nicht Ausführungsintervalle definiert, sondern Ausführungszeitpunkte. Vielleicht wäre "schedule" oder "crontab" als Attributname klarer in ihrer Bedeutung.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: betateilchen am 07 März 2022, 00:21:26
Ich habe keine Ahnung wieso, aber die eingebauten Änderungen funktionieren heute nicht mehr.

*/10 7-20 * * *

liefert aktuell 07:20 als nächsten Ausführungszeitpunkt.
Aber vielleicht übersehe ich auch gerade irgendwas aufgrund der späten Uhrzeit.
Titel: Antw:98_JsonMod.pm - typo in commandref
Beitrag von: herrmannj am 07 März 2022, 00:42:49
Danke fürs bescheid sagen. Steck nicht zu viel rein, sobald die kommende version fertig ist, wären ausführliche tests nochmals sehr hilfreich. da dann auch im 'at'