Seite 1 von 1

Welche Engine für scripte / rules

Verfasst: 24. Mai 2022 16:33
von MirkoB
Hallo,
Ich wollte nur mal eure Meinung hören, auf welche Programmiersprache Ihr für die Zukunft OH`s setzt. Bisher komme ich mit den textbasierten DSL Rules in Verbindung mit VSC bestens zu Recht. Ich habe jedoch des Öfteren gelesen, das die DSL Engine so langsam eingestampft wird. Daher hab ich mich mal mit JavaScript ECMA angefangen zu befassen. Jedoch habe noch keine Möglichkeit gefunden eine oder mehrere komplette Rules in einer einzelnen Datei zu speichern. Nur Im conf-Ornder unter Scripts, jedoch eben nur das Script und nicht den Trigger. Unter automation/js habe ich von Haus aus keine Berechtigung. Ich bevorzuge die Datei-bezogene Variante, da sie für mich gegenüber der UI bezogenen einfach übersichtlicher ist. (So habe ich zum Beispiel mit DSL eine Datei " Heizung Wohnzimmer" in der alle rules mit ihren unterschiedlichsten Trigger und globalen Variabeln zu finden sind)
Daher nochmal die Frage auf welche Engine habt Ihr gesetzt und wie setzt Ihr das um?

Re: Welche Engine für scripte / rules

Verfasst: 24. Mai 2022 21:06
von udo1toni
Also, es gab mal (vor Umstellung auf OH3) die Ansage, dass die DSL deprecated sei. Daher gibt es auch eine Menge (alter) Threads, die das thematisieren (ich habe selbst Einiges dazu beigetragen).

Nachdem openHAB3 veröffentlicht war, stellte sich aber heraus, dass die Entwickler einen Weg gefunden haben, die DSL nahezu unverändert weiter zu betreiben. Dennoch wurden wohl alle Abhängigkeiten entfernt, die den Entwicklern ein Dorn im Auge waren. Damit relativiert sich die erste Aussage sehr, denn aus Entwicklersicht gibt es "plötzlich" kaum noch Gründe, die DSL abzuschalten. Man darf auch im Hinterkopf behalten, dass die DSL immer noch mit Abstand die beliebteste Art ist, Code zu erstellen, auch, weil der Code so einfach ist.

Vergleiche einfach, was Du tun musst, um den Status des Items MeinItem zu bekommen. DSL:

Code: Alles auswählen

MeinItem.state
ECMA:

Code: Alles auswählen

itemRegistry.getItem('MeinItem').getState();
Welcher Code ist einfacher?
Und das zieht sich komplett durch den Code...
Hinzu kommt, dass nur die DSL so etwas wie eine globale Variable unterstützt. Das höchste der Gefühle in ECMA ist, innerhalb einer Rule auf den letzten Variablenwert aus dem letzten Durchlauf zuzugreifen. Damit wird es z.B. unmöglich, gestartete Timer durch eine andere Rule zu stoppen.

Programmierer stören sich gerne daran, dass die DSL zu wenige Möglichkeiten bietet, z.B. keine vernünftigen Funktionen (ja, das ist etwas, was sogar ich vermisse), vergessen aber dabei, dass es in der DSL oftmals extrem elegante Methoden gibt, Dinge zu programmieren, die einfach nur nicht sehr "Super-Duper-Profi-Programmierer-Like" sind.

Ein valider Punkt ist die Ausführungsgeschwindigkeit. DSL Rules laufen etwa 50 mal langsamer als JavaScript (aka ECMA) Code (wenn ich mich richtig erinnere... keine eigene Erfahrung). Aber ehrlich gesagt spielt es für mich keine Rolle, ob eine Rule nun fünfhundert Mal oder fünfundzwanzigtausend mal in der Sekunde ausgeführt werden kann (ich hatte mal eine Rule, die "etwas" verrückt spielte... fünfhundert Log Zeilen pro Sekunde...) weil die meisten meiner Rules nur wenige Male am Tag laufen, viele sogar maximal einmal am Tag, die "schlimmsten" Rules triggern alle paar Minuten... also: so what?

Also, ich bleibe bei der DSL, bis openHAB eine vernünftige Alternative bietet, die mindestens ähnlich komfortabel nutzbar ist wie die DSL (und da gehören auch die Programmierung über Text Dateien und ausdrücklich VSCode dazu).

Re: Welche Engine für scripte / rules

Verfasst: 25. Mai 2022 08:46
von MirkoB
Vielen Dank für deine Antwort. Das bestätigt mein Bauchgefühl. Selbst ich als Energieelektroniker ,mit der Leidenschaft für Gebäudeautomation, habe mich relativ schnell in DSL zurecht gefunden . Hältst du das Erlernen der Grundlagen von JAVA für eine sinnvolle Methode , um meine Fähigkeiten in DLS zu programmieren verbessern zu können?

Re: Welche Engine für scripte / rules

Verfasst: 25. Mai 2022 19:01
von udo1toni
Es ist immer gut, Grundlagen einer Sprache zu kennen und vielleicht sogar das eine oder andere zu verstehen.

Die DSL ist in XTend entstanden. XTend ist in Java entwickelt worden. Daraus ergibt sich fast zwangsläufig, dass es gewisse Ähnlichkeiten zu Java gibt. ABER: Ein Java Entwickler muss auch erst mal lernen, wie die DSL funktioniert. Offenbar gibt es also erhebliche Unterschiede zu nativem Java.

Leider gibt es überhaupt keine "echte" Doku für die DSL. Am ehesten könnte man die XTend Doku heranziehen, aber auch die ist meiner Erfahrung nach nicht immer leicht zu verstehen.
Grundsätzlich wird man in einer Rule aber auch keine Applikation wie Word oder Excel entwickeln wollen. Und selbst im Steuerungsbereich gibt es viele Dinge, die eigentlich nicht nach openHAB gehören, selbst wenn man sie irgendwie realisieren kann. Hat man einen Hammer, so kann man damit auch Schrauben in einen Balken schlagen, dennoch wäre ein passender Schraubendreher besser geeignet... Und das, was man typischerweise mit openHAB in den Rules automatisieren möchte, ist meist mit einer Hand voll Befehle zu erledigen - das bekommt man auch ohne fünfbändiges Kompendium hin :)

Die größte Herausforderung ist erfahrungsgemäß der Umgang mit Datum und Zeit, auch, weil die Datentypen der Items (die gewöhnlich die Grundlage einer Berechnung bilden) und der DSL Engine nicht direkt zueinander passen. Und wegen der diversen Umrechnungen, die erfolgen müssen, um das eine in das andere Format umzurechnen, entstehen Codeungetüme, die dann irgendwann auch nicht mehr gut lesbar sind. Die meisten anderen Dinge sind naheliegend, oder man findet zuhauf Beispiele, wie man ein vergleichbares Problem angehen kann.

Und nicht zuletzt kann man hier im Forum immer mit einem konkreten Problem antanzen, hier wurde noch niemand weggeschickt :)

Re: Welche Engine für scripte / rules

Verfasst: 25. Mai 2022 20:59
von MirkoB
Ich möchte mich nochmal ausdrücklich bei dir für deine ständige Hilfestellung in allen Bereichen bedanken. Kaum ist ein neues Thema im Forum aufgetaucht, stehst du mit der Antwort parat. Und das seit Jahren. RESPEKT
Daher nochmal ein dickes

D A N K E S C H Ö N



Gesendet von meinem SM-N960F mit Tapatalk