Seite 1 von 1

Erstes Script erstellen, wie?

Verfasst: 29. Mär 2022 10:54
von MonkeyT
Hallo zusammen,

ich benötige etwas Hilfe bei der Erstellung meines ersten Scripts.

Ich habe eine Rule mit folgendem Inhalt:

Code: Alles auswählen

import java.util.Map
import java.util.HashMap

rule "Übersicht - Störung"
when
	Time is noon
then
	var Map <String, String> StoerungMap = new HashMap<String, String>()
	var $content = ""
	
	gStoerung.members.forEach[ item |
		StoerungMap.put(item.label, item.state.toString)
	]


	for (MapEntry : StoerungMap.entrySet.sortBy[key]) {
        if(MapEntry.getValue() == "CLOSED") {
			$content = $content + "<tr> <td>" +  MapEntry.getKey() + "</td> <td style='background-color:#00FF00'>OK</td> </tr>"
		} else {
			$content = $content + "<tr> <td>" +  MapEntry.getKey() + "</td> <td style='background-color:#FF0000'>STÖ</td></tr>"
		}
	}
	
	var $htmlMail = "<html><head></head><body>"
	$htmlMail = $htmlMail + "<table border='1'>"
	$htmlMail = $htmlMail + $content
	$htmlMail = $htmlMail + "</table></body></html>"
	
	val mailActions = getActions("mail","mail:smtp:XXX")
	mailActions.sendHtmlMail("XXX", "Übersicht Störung", "<h1>Störungen </h1>" + $htmlMail)

	logInfo("logik.rules", "Übersicht-Störung ausgeführt.")
end
Das Versenden dieser E-Mail möchte ich nun aus einer anderen Rule heraus aufrufen können. Wie kann ich das über ein Script realisieren. Wie wird ein Script erstellt und wie sieht der Aufruf aus einer Rule dazu aus. Ich konnte leider in der Dokumentation dazu nichts finden...

grz
Monkey

Re: Erstes Script erstellen, wie?

Verfasst: 29. Mär 2022 14:25
von udo1toni
Vergiss das mit den Scripten :)

Grundsätzlich kannst Du Code aus einer Rule in einer Script Datei speichern (unter /etc/openhab/scripts/ eine Datei mit der Endung .script erstellen). Dann kannst Du dieses Script aus einer Rule heraus aufrufen mit callScript(Dateiname ohne Pfad und ohne Endung), also z.B. so:

Code: Alles auswählen

rule "meine Rule"
when
    Item testitem received command ON
then
    callScript(testScript)
end
Hier wird das Script /etc/openhab/scripts/testScript.script aufgerufen.

Allerdings hast Du nichts davon :) denn es fehlt eine wichtige Eigenschaft, um Scripte sinnvoll nutzen zu können, das ist die Übergabe von Werten.
So bleibt nur der "Vorteil", den Code an anderer Stelle stehen zu haben als innerhalb der Rule. Es mag ein paar Varianten geben, wo Du das dennoch sinnvoll nutzen kannst, aber in den weitaus meisten Fällen könntest Du den Code ebensogut direkt in die Rule schreiben.
Werden große Codeblöcke identisch von mehreren Rules verwendet, so ist es fast sicher so, dass die Rules nicht gut programmiert sind (bzw. dass man mit geschickter Optimierung des Codes dafür sorgen kann, dass der Code nur noch in einer Rule benötigt wird...)