Erstes Script erstellen, wie?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
MonkeyT
Beiträge: 23
Registriert: 23. Jun 2019 21:44
Answers: 0

Erstes Script erstellen, wie?

Beitrag 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

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

Re: Erstes Script erstellen, wie?

Beitrag 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...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten