Seite 1 von 1

Abarbeitung der X.rule Files

Verfasst: 23. Jul 2020 19:33
von Mclupo
Hallo

Um Abfragen im Ablauf richtig zu positionieren habe ich folgende Fragen:

1) In welcher Reihenfolge werden die rule files abgearbeitet?
2) werden die items Und Variablen in den rules adhoc aktualisiert (Z.B. Per Interrupt) oder erst wie bei einer SPS am Anfang und Ende eines Scan Durchlaufs?

Gruss Wolf

Re: Abarbeitung der X.rule Files

Verfasst: 23. Jul 2020 20:12
von EmptySoft
in den Rulefiles hast Du ja jeweils einen Trigger (when) und der steuert wann was gestartet wird. Timer oder Änderung eines Itemzusatndes.

Ich hoffe, ich habe Deine Frage richtig verstanden.

Re: Abarbeitung der X.rule Files

Verfasst: 23. Jul 2020 23:35
von udo1toni
openHAB arbeitet komplett eventbasiert. Rulefiles werden gat nicht abgearbeitet. Stattdessen werden Rules abgearbeitet, und zwar genau dann, wenn das Event eintritt, welches als Ruletrigger angegeben ist.

Wenn mehrere Rules einen identischen Trigger haben, werden alle Rules "gleichzeitig" ausgeführt. Dazu stehen 5 Threads zur Verfügung. Genau genommen werden also nur bis zu fünf Rules mit identischem Trigger zeitgleich ausgeführt. die übrigen Rules werden dann schnellstmöglich nachgeholt. Welche der Rules in einem solchen Fall zuerst ausgeführt werden, ist dem Zufall überlassen.

Daraus ergibt sich gleich eine wichtige Regel: Wenn irgend möglich, sollte es pro Event nur eine Rule geben, allenfalls wird man ausnahmsweise einzelne Trigger mehrfach einsetzen, wenn sich das aufgrund des Programmcodes nicht ohne Codedoppelungen vermeiden lässt - z.B. System started).
Man wird aber sehr genau darauf achten, möglichst nicht die magische Grenze zu überschreiten.

Wie gesagt ist openHAB eventbasiert, das heißt, die Items werden genau dann aktualisiert, wenn ein entsprechendes Event auftritt. Das hat nichts mit den Rules zu tun, Rules greifen nur auf Zustände zu bzw. werden durch Events getriggert.
Variablen werden genau dann mit einem Wert beschrieben, wenn ein entsprechender Befehl in der Rule steht.
Eine globale Variable wird beim Einlesen der Datei initialisiert und einmalig mit dem angegebenen Wert beschrieben, danach gilt das gleiche wie für alle anderen Variablen, Veränderung nur dann, wenn per Befehl ausgelöst.

Code: Alles auswählen

var a = 0 // Initialisierung und Wertzuweisung
a = 5 // Wertzuweisung an die Variable a

Re: Abarbeitung der X.rule Files

Verfasst: 24. Jul 2020 15:36
von KellerK1nd
Zu diesen 5 Threads habe ich eine Frage, ich kann doch in der openHAB Config die Anzahl der rulethreads erhöhen. Gibt es da ein Limit für den Wer? Wenn ja hängt das Limit von der eingesetzten Hardware ab, oder?

Re: Abarbeitung der X.rule Files

Verfasst: 24. Jul 2020 16:29
von udo1toni
Mehr Threads bedeutet mehr Speicherbedarf. Außerdem braucht jeder Thread natürlich auch Rechenzeit. Auch wenn man ein System mit mehreren Prozessorkernen hat, werden die Threads ja nicht wirklich zeitgleich ausgeführt, sondern sie teilen sich Prozessorzeit und jeder Thread bekommt anteilig Zeitschlitze. Man sollte also nicht einfach 100 Threads eintragen, frei nach dem Motto: ich hab hundert rules, dann kann jede Rule in ihrem eigenen Thread ausgeführt werden, so funktioniert openHAB einfach nicht.
Also ja, grundsätzlich kann man die Anzahl der Threads erhöhen, aber man sollte dann schon eine genaue Vorstellung davon haben, was da im Hintergrund passiert.