Seite 1 von 1

Events triggern mehrere Rules

Verfasst: 24. Jan 2023 18:08
von FrankH1
Hallo,
ich bin von OpenHAB 2.5 auf einem Raspi 3 zu OpenHAB 3.3 auf einem Raspi 4 migriert. Beim Aufräumen und Optimieren fiel mir auf dass einige Events von Sensoren mehrere Rules triggern. Ich habe Bewegungsmelder in verschiedenen Bereichen, welche bei Auslösen das entsprechende Licht anschalten. Gleichzeitig wird bei Abwesenheit ein Alarm ausgelöst. Daher gibt es für jede Gruppe Sensoren eine rule, welche die Beleuchtung regelt und eine rule für alle Sensoren, welche die Alarmbehandlung macht.
Mir scheint das eine suboptimale Lösung zu sein.
Ich denke die Licht-rules könnten bei Auslösen in Abwesenheit ein item (Alarmierung) updaten - und das update des items triggert dann die Alarm-rule. Also z.B. so:

Code: Alles auswählen

rule "Beleuchtung Korridor EG an"                       
when
	Member of gMoveKorrEG changed  to ON
then
        Prozedur um Beleuchtung zu schalten
        if (gAnwesenheit.state == OFF) Alarmierung.postUpdate (triggeringItem.name.toString)
end         
         
rule "Einbruch Bewegung"			
when
	Item Alarmierung received update or 
	Member of gFenster changed to OPEN 
then
	Alarmprozeduren
end
Der Ansatz sollte eigentlich ein paralleles Triggern von rules verhindern.
Meine Fragen:
Ist das überhaupt notwendig?
Gibt es eine elegantere Möglichkeit?
Gruß und Danke Frank

Re: Events triggern mehrere Rules

Verfasst: 24. Jan 2023 21:15
von udo1toni
Das sollte eigentlich nicht nötig sein. Zumal Du ja durch das zusätzliche Item auch zusätzlichen Verwaltungsaufwand hast, auch wenn sich das sicher nicht messbar bemerkbar macht.

Unter openHAB < 3 gab es gemeinsam für alle Rules (konfigurierbar, aber Vorgabe) fünf plus zwei Threads für Rules. Dabei waren die zwei Threads für Rules, die über den Scheduler liefen, also alles, was per Time cron triggert oder createTimer verwendet (der Codeblock innerhalb createTimer).
Unter openHAB3 aufwärts gibt es für jede Rule einen festgelegten Thread.

Variante 1: Vorteil : Eine Rule kann bis zu fünf mal parallel ausgeführt werden (das ist im Zusammenhang mit Member of interessant) Nachteil: Wenn eine Rule Amok läuft (aufgrund eines Programmierfehlers...) kann sie die gesamte Rule Engine blockieren, und vielleicht bekommt man erst mal gar nichts davon mit...
Variante 2: Vorteil: Der potentielle Amoklauf stellt keine Gefahr mehr dar. Dafür kann eine Rule aber nie parallelisiert laufen.
Allerdings gibt es auch nur sehr wenige Situationen, wo das überhaupt eine Rolle spielt, und der Programmierer muss schon genau wissen, was er tut, um diese Parallelisierung tatsächlich nutzen zu können. Ob man daraus tatsächlich einen Vorteil ziehen kann, bleibt aber fraglich.

Im täglichen Betrieb wirst Du keinen Unterschied feststellen, nur, dass Rules nicht mehr ausbleiben, weil keine Threads zur Verfügung stehen. Es könnte theoretisch zu einer maximierten Systemlast kommen (weil mehr Threads), in der Praxis wird es eher zu weniger Last führen, weil keine Threads im Tiefschlaf gehalten werden müssen.

Re: Events triggern mehrere Rules

Verfasst: 24. Jan 2023 22:16
von FrankH1
ok, dann lass ich die Finger davon (don't touch running systems :-) )
Danke Dir!