Hallo!
Bei all Deinem Frust muss ich Dir sagen, dass es buchstäblich tausende, wenn nicht gar zehntausende Beispiele für Rules gibt. Die Anzahl der offenen Fenster braucht überdies überhaupt kein Script(!) Selbst hier im Forum dürfte es etliche Beispiele für selbst gebastelte Alarmanlagen geben (und ich weise gleich darauf hin, dass openHAB dafür nicht gut geeignet ist).
Die Rules DSL von openHAB kann fast vollständig die Rules aus OH1 und OH2 ausführen.
Die Unterschiede sind der Umstellung von Joda Time zu JavaTime geschuldet, und einer Änderung der impliziten Variablen. Nichts, was man nicht mit überschaubarem Aufwand anpassen könnte.
Die Rules DSL ist übrigens nicht Java. Die DSL ist mit XTend entwickelt worden, welches in Java entwickelt wurde. Deshabl gibt es Ähnlichkeiten, aber an vielen Stellen weichen die beiden Sprachen voneinander ab. Die DSL ist aber für openHAB Belange optimiert.
Wenn Du nicht mit der DSL arbeiten willst, steht JavaScript zur Verfügung (auch kein Java). Und es gibt noch weitere Script Sprachen. C gehört nicht dazu, aber ganz ehrlich wäre das auch ziemlicher Stuss.
Natürlich muss man sich erst an eine Sprache gewöhnen, wichtig ist dabei aber, dass man nicht mit einer bestimmten Vorstellung an die Sache heran geht, denn dann wird man nur die ganze Zeit denken: "In C geht das aber so..." und am Ende ist man noch überzeugt, dass ca. 10.000 Zeilen Programmcode, verteilt auf drei Dutzend Dateien, die zuerst kompiliert werden müssen, eleganter und einfacher sind als zehn Zeilen in der verhassten DSL. (Die 10.000 Zeilen sind den notwendigen Imports geschuldet...)
Ein konkretes Beispiel für die Fenster:
Code: Alles auswählen
Group:Contact:OR(OPEN,CLOSED) gFenster "Offene Fenster [%d]"
Contact Fenster1 "Fenster 1 [%s]" (gFenster)
Contact Fenster2 "Fenster 2 [%s]" (gFenster)
Contact Fenster3 "Fenster 3 [%s]" (gFenster)
Contact Fenster4 "Fenster 4 [%s]" (gFenster)
Die vier Items Fenster1 bis Fenster4 sind in der Gruppe gFenster zusammengefasst, welche als Aggregation OR verwendet. Sobald eines der zugehörigen Items den Zustand OPEN hat, ist die Gruppe ebenfalls OPEN, ansonsten ist sie CLOSED. Das Label gibt die Anzahl offener Kontakte aus.
Möchtest Du in einer Rule auf diese Zahl zugreifen, so erfährst Du sie über die Gruppe:
Ich persönlich finde das besser lesbar als ein entsprechendes Konstrukt in C

Wenn Du willig bist, Dich auf etwas Neues einzulassen, kann ich Dir VSCode ans Herz legen. Es gibt ein openHAB Plugin, wenn man das korrekt konfiguriert, erhält man eine Programmierumgebung, die fast mit VisualStudio vergleichbar ist, Autoergänzung, Codevorschläge, Fehlererkennung... und das läuft online, das heißt, es wird der Interpreter vom laufenden openHAB Server verwendet. Damit ist sicher, dass der Code auch dort fehlerfrei läuft.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet