Rule Compile Zeiten

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
woolf
Beiträge: 1
Registriert: 4. Sep 2020 22:50
Answers: 0

Rule Compile Zeiten

Beitrag von woolf »

Da ich einige Zeit gebraucht habe um die Compile Zeiten zu reduzieren wollte ich meine Erkentnisse hier mal teilen. Alles was ich bisher in Foren gefunden hatte bezog sich auf Primitives und damit verbundene Probleme nicht aber auf das reine Zerlegen der Berechnung in kleinere Teilschritte. Vieleicht hilft es ja jemandem der ähnliche Probleme mit sehr langen Startup Zeiten durch die Rules hat.

Die Details der Rule zu erklären würde hier zu weit führen, es soll ja um die Minimierung der Zeiten gehen die Openhab auf einem Pi3b+ benötigt um eine Rule zu analysieren (zumindest nehme ich an das das in der Zeit ab dem Speichern bis zum Logeintrag "Refreshing model" passiert) und der Zeit die ab dann vergeht bis eine in diesem file enthaltene Rule über den "System started" trigger einen Logeintrag schreibt.


Verwendet man

Code: Alles auswählen

var Number c = ((232 - (Math::tan((Elevation1.state as DecimalType).doubleValue * 0.0174532925) as Number * (maxSonnentiefeSud.state as Number)/b))) - ( ( 50/Math::tan(90-((Elevation1.state as DecimalType).doubleValue * 0.0174532925)) as Number ) - 50 )
dauert es etwa 2 Minuten bis der Logeintrag "Refreshing model" erscheint und weitere 2.20 Minuten bis der "System Started" eintrag getriggert wird. also mehr als 4 Minuten

Zerlegt man das ganze hingegen in mehrere Variablen und spart ein paar unnötige Klammern ein

Code: Alles auswählen

	var Number d = (maxSonnentiefeSud.state as Number)/ b
	var Number e = Math::tan((Elevation1.state as DecimalType).doubleValue * 0.0174532925) as Number * d 
	var Number f = Math::tan(90-((Elevation1.state as DecimalType).doubleValue * 0.0174532925)) as Number 
	var Number g = 50 / f
	var Number c = 232 - e - g -50
	
Dauert das ganze nur noch wenige Sekunden bis zur "Refreshing model" Information und weitere 11 Sekunden bis "System Started" Eintrag getriggert wird.

Ich habe mehrere derartige Beispiele, an einer anderen Stelle bei komplexeren Berechnungen war der Unterscheid von 20 Minuten auf etwa 30 sekunden zum "System Started" Eintrag ebenfalls einfach durch Zerlegung der Berechnung auf mehrere Variablen.

Kann mir jemand erklären warum das so ist (Klammern, Maximale Länge von Formeln,...)?


PS: Ich weiß dass man das codebeispiel noch weiter optimieren kann das bringt aber zumindest bei mir keine wesentliche beschleunigung mehr und macht es schlechter lesbar.

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: Rule Compile Zeiten

Beitrag von udo1toni »

Es ist ein bekanntes Problem des Parsers, dass er mit komplexen Termen zu kämpfen hat. :) Schaun wir mal, ob das mit OH3 besser wird...
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Antworten