Re: Meldung wenn Sensorenwert oder Switch über Zeitraum X Stunden über Wert liegt?
Verfasst: 3. Dez 2022 20:13
Na sowas, hab ich glatt das Leerzeichen verschluckt... guter Catch.Absinthe hat geschrieben: ↑3. Dez 2022 17:14 Ich hab dieses auf:abgeändert damit es funktioniert.Code: Alles auswählen
message.append(new DateTimeType().format("%1$td.%1$tm.%1$ty %1$tH:%1$tM"))

Es gibt Bücher und Webseiten zum Thema Programmieren. Soll es mit der openHAB DSL sein, wird es schon schwieriger mit Literatur. Was ich anwende, ist learning by doing. Mit der Zeit begegnen einem hier und vor allem im englischen Forum aber jede Menge coole Ansätze, die man dann und wann aus der Kiste zaubern kann

Ganz grundsätzlich setzt die DSL auf XTend auf. XTend ist ein Framework um DSL (Domain Specific Languages) zu gestalten. XTend ist in Java geschrieben, weshalb man viele Dinge ganz ähnlich lösen kann wie in Java. Allerdings gibt es auch diverse Unterschiede, so dass es nicht reicht, sich das nächste "Lerne Java" Buch zu schnappen. Die DSL ist vor allem darauf ausgelegt, sich möglichst wenig mit dem Drumherum beschäftigen zu müssen. Es gibt Items, die als Objekte direkt zur Verfügung stehen. Da die DSL objektorientiert arbeitet, gibt es die passenden Methoden obendrauf, also .postUpdate() um den Status eines Items zu setzen und .sendCommand() um einen Befehl an das Item zu senden, welches diesen Befehl dann an Rules und/oder verlinkte Channel weiterleitet. Darüber hinaus gibt es noch eine Handvoll weitere Funktionen, if(), switch(), createTimer(), um die (für mich) wichtigsten zu nennen. Und natürlich die log-Befehle logDebug(), logInfo(), logWarn() und logError(), welche auch sehr nützlich sind, gerade wenn man eine Rule neu entwickelt. Weil Items unterschiedliche Datentypen enthalten können, braucht es noch ein paar Werkzeuge, um diese in dne Griff zu bekommen, entweder per Methode (.toString() wäre so etwas) oder auch per Type Casting (.state as Number wäre da ein bekanntes Beispiel).
Und wenn das nicht reicht, importiert man halt die notwendigen Dinge (die wichtigsten sind bereits importiert und können einfach genutzt werden, wie now() mit all dem, was dazu gehört oder auch diverse mathematische Funktionen per Math. oder auch das parsen von Zeichenketten zu Zahlen (Integer.parseInt("1234567") "1234567" ist in diesem Fall keine Zahl, sondern eine Zeichenkette, die eine Zahl enthält. Um diese als Zahl verwenden zu können, muss sie erst gewandelt werden.)