Hi,
ohne jetzt den gesamten Rahmen der Anforderungen zu überblicken (da fehlen ein paar Details wie: welche/wieviele Aktoren, was senden die Auslöser, wie fahren die Tore etc) würde ich das mit DOIF-Perl lösen. Solltest Du DOIF (die fhem-Variante DOIF - DOELSEIF ...) kennen, dann vergiss bitte bis auf die [Device:Reading] Syntax (fast) alles zu DOIF.
Im DOIF-Perl schreibst Du Perl-Code. Das machst Du ja bei notify uns at in gewisser Weise auch. Im DOIF-Perl kannst Du beliebig viele Timer kreieren, auch so, dass sie sich gegenseitig aufrufen. Du kannst sie abfragen, ob sie gerade laufen und jedezeit löschen. Du kannst auch sehr simpel Schleifen mit den Timern bilden, die rauf/runterzählen. Weiterhin kannst Du Laufzeitvariablen anlegen (um "Zustände" deiner Schalterei abzubilden und/oder Readings innerhalb Deines DOIF sehr bequem schreiben, lesen, darauf triggern etc. Und auch eigene Unterroutinen kannst Du anlegen, falls Du wiederkehrenden Code hast.
allerdings: Du musst das alles selbst schreiben.
Aber: dafür bekommst Du einen performanten Code (dein DOIF wird beim "modify" kompiliert und läuft dann auf der perl-Ebene) und hast alles an genau einer Stelle. Wenn Du möchtest kannst Du das auch gleich visualisieren, alles in einem DOIF.
Denk mal drüber nach, lies mal in der cRef zu DOIF Perl Modus, ob das für Dich in Frage kommt. Ich sag mal so: Ein wenig Programmier-Übung, am besten mit Perl, sollte vorhanden sein, ein wenig Mut, da mal dranzugehen. Deine Aufgabe ist aber lösbar, weit weg von "Rocket-science"

Und wenn Du das geschafft hast, dann wirst Du mehr und mehr mit DOIF-Perl machen.
Gruß
Sany