Hallo pah,
ich mache hier einen neuen Thread auf, da der bisherige Hauptthread zum Alarm-Modul geschlossen ist.
Bei einer Performance-Analyse ist mir aufgefallen, dass die vom Alarm-Modul dynamisch erzeugten at bei größeren Aktionsketten erhebliche Laufzeit verursachen.
Zur Größenordnung: Das Alarm-Modul verwaltet bei mir 41 (bereits gruppierte) Sensoren und 9 Aktoren über 8 Alarmlevel; Level 2 allein umfasst 12 Sensoren und 8 Aktoren.
Bei Level 2 lag alarm2.on.N dadurch bei rund 10 s. Da die Verarbeitung synchron im FHEM-Mainloop erfolgt, ist das auch praktisch deutlich spürbar und ich konnte mir das teilweise "merkwürdige" Verhalten meiner EnOcean-Geräte nach dem Raised oder Disarmed nie erklären. Nun ist es nachvollziehbar.
Ich habe jetzt zunächst die erzeugten at auf define -temporary umgestellt. Das reduziert die Laufzeit bereits deutlich; 9 solcher Definitionen benötigen bei mir aber immer noch ca. 1,7 s.
Testweise habe ich deshalb die verzögerten Aktionen auf named sleep umgestellt. Der Start einer vergleichbaren Kette benötigt damit nur noch < 1 ms. Dasselbe habe ich für arm.dly, autocancel und disarm.T umgesetzt. Bisher funktioniert das einschließlich Abbruch der Aktionen problemlos.
Spricht aus Deiner Sicht etwas dagegen, die dynamischen at im Modul generell durch named sleep zu ersetzen? Keine Ahnung, ob du überhaupt noch Anpassungen machst / machen möchtest.
Falls interessant, kann ich die Änderungen gerne zur Verfügung stellen.
Grüße
Chris