Willkommen im Forum!
Du denkst zu kompliziert
Aber zunächst ist die Frage, liefert der Motion Sensor wiederholt ON-Updates, oder sendet er gezielt ein OFF-Update, wenn er eine gewisse Zeit keine Bewegung erkennt? Davon hängt ab, wie man am günstigsten programmiert.
Was Du aber so oder so vermeiden willst (unter allen Umständen!) ist das jonglieren mit Datums- und Zeitangaben. Ja, das geht, aber es eine verfluchte Hölle, das korrekt umzusetzen.
Hier geht es ja nur um zwei voneinander unabhängige Timer. Timer eins soll fix nach 30 Minuten ablaufen, wenn der Schalter betätigt wurde. Ich nehme an, der Schalter ist mit einem Switch Item verlinkt? Nennen wir es der Einfachheit halber HUE_Switch. Editiere dieses Item und konfiguriere in den Metadaten einen Expire Timer. Den setzt Du auf Command OFF und 30 Minuten. In der Folge wird das Item, nachdem es vom Schalter den Befehl ON empfangen hat, selbst den Befehl OFF senden, und zwar nach 30 Minuten (genauer: 30 Minuten nach dem letzten ON-Befehl). Man kann auch manuell (mit dem Schalter) ein OFF senden, dann wird das Item nach 30 Minuten nichts tun (es hat ja bereits den Zustand OFF).
Dieses Item verlinkst Du mit der Gruppe.
Beim Bewegungsmelder kommt es drauf an, wie er sich verhält. Da er aber, solange der Schalter noch auf ON steht, keine Befehle an die Lampen senden darf, musst Du die Kopplung über eine Rule erledigen.
Am einfachsten über die UI... Trigger ist das Item, welches mit dem Motion Sensor verknüpft ist. Das Item bekommt ebenfalls einen Expire Timer, der in diesem Fall auf drei Minuten konfiguriert ist. Zusätzlich trägst Du bei "but only if" noch ein, dass das Item
HUE_Switch auf OFF stehen muss.
Sollte der Motion Sensor selbst auch OFF senden, wenn eine Zeit keine Bewegung erkannt wurde, muss man ein Proxy Item für den Timer verwenden und dieses über eine Rule einschalten, wenn Bewegung erkannt wurde. Sollte der Motion Sensor nur dann ein ON senden, wenn er vorher ein OFF gesendet hat, muss man das Problem anders lösen. der Drei-Minuten-Timer darf dann nur vom OFF des Bewegungsmelders gestartet werden, entsprechend wird man das Über eine Rule erledigen müssen.
Das Ganze geht auch über die DSL. Wenn Du nicht partout JavaScript verwenden willst (und ich lese aus Deinem Posting, dass Du eigentlich keinen Wert darauf legst) dann lass es bleiben. Es gibt keinen Grund für JavaScript, außer, man ist Javascript Fan.
Du kannst auch über die UI sehr bequem Blockly Rules erstellen, welche dann tatsächlich auch JavaScript als Output generieren (bzw. eine Unterart, ECMA). Aber zumindest musst Du Dich dann nicht mit der Sprache rumschlagen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet