Rule eMail-Probleme

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
hr2
Beiträge: 15
Registriert: 18. Jan 2020 19:16
Answers: 0

Rule eMail-Probleme

Beitrag von hr2 »

Hallo, ich nutze openHABian openHAB 4.2.3 - Release Build auf einem Raspi und bekomme immer wieder mal Fehler.


meine (sonst funktionierende) Definition:

Code: Alles auswählen

val mailActions = getActions("mail","mail:smtp:samplesmtp")
val toMailAdr = "xxx@web.de" // die beiden val sind am Anfang der Datei vor den rules definiert
...
mailActions.sendMail(toMailAdr, "xxx", "xxx"); //an 3 Stellen in 2 unterschiedlichen rules
letzter oH-Restart war 2024-12-06 18:34:35

Code: Alles auswählen

2024-12-07 09:00:01.016 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Home_Alarm-5' failed: Cannot invoke "org.openhab.binding.mail.internal.action.SendMailActions.sendMailWithAttachments(String, String, String, java.util.List)" because "actions" is null in Home_Alarm
folgende Meldungen kommen nur nach oH-Restart, nicht nach Rule-Restart (verm. sind Dienste noch nicht aktiv)

Code: Alles auswählen

2024-12-07 09:57:17.699 [INFO ] [org.openhab.core.Activator] - Starting openHAB 4.2.3 (Release Build)
2024-12-07 09:57:19.115 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Time zone set to 'Europe/Berlin'.
2024-12-07 09:57:19.141 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Location set to 'x.x,x.x'.
2024-12-07 09:57:19.145 [INFO ] [.core.internal.i18n.I18nProviderImpl] - Locale set to 'de_DE'.
...
2024-12-07 09:57:58.983 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'Home_Alarm.rules'
2024-12-07 09:58:09.035 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'Home_Alarm.rules', using it anyway:
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
...
2024-12-07 10:00:04.612 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'Home_Alarm-5' failed: Cannot invoke "org.openhab.binding.mail.internal.action.SendMailActions.sendMailWithAttachments(String, String, String, java.util.List)" because "actions" is null in Home_Alarm
2024-12-07 10:00:04.615 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.

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

Re: Rule eMail-Probleme

Beitrag von udo1toni »

Die Action muss immer innerhalb jeder Rule referenziert werden (die Zeile val mailActions...)
Der Grund lässt sich (etwas verklausuliert) im Log erkennen. Das Mail Binding ist noch nicht online, während die Rule Engine schon die globale Konstante setzt. Anschließend ist die Konstante null, womit es keine gültige Action gibt.

Das war mal anders, aber auch damals war es schon verkehrt, die Referenzierung global anzulegen :)
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

hr2
Beiträge: 15
Registriert: 18. Jan 2020 19:16
Answers: 0

Re: Rule eMail-Probleme

Beitrag von hr2 »

Danke, eine Testreihe scheint deine Aussage zumindest teilweise zu bestätigen. Der erste Aufruf nach oH-Restart bringt Fehler für r1 und r2, alle späteren Aufrufe funktionieren.
Ein warten, bis das System vollständig gestartet ist, bringt nichts.
Die Definition in jeder einzelnen rule widerstrebt meiner Überzeugung Redundanzen (und damit vermeidbare Fehlerquellen und aufgeblähten, unübersichtlichen Code) zu vermeiden.
Dadurch, dass Wiederholungsaufrufe funktionieren, ist eigentlich bewiesen, dass es auch anders gehen sollte.

Code: Alles auswählen

val mailActions = getActions("mail","mail:smtp:samplesmtp")
val toMailAdr = "x@web.de"

rule "r1" when Item anwesend changed or System started then
	 mailActions.sendMail( toMailAdr, "r1", ""); logInfo("test","r1"); end
rule "r2" when Item anwesend changed or System reached start level 100 then
	 mailActions.sendMail( toMailAdr, "r2", ""); logInfo("test","r2"); end
rule "r3" when Item anwesend changed or System started then
	val amailActions = getActions("mail","mail:smtp:samplesmtp");
	amailActions.sendMail( toMailAdr, "r3", ""); logInfo("test","r3"); end
rule "r4" when Item anwesend changed or System reached start level 100 then
	val bmailActions = getActions("mail","mail:smtp:samplesmtp");
	bmailActions.sendMail( toMailAdr, "r4", ""); logInfo("test","r4"); end
rule "r5" when Item anwesend changed or System started then
	val cmailActions = getActions("mail","mail:smtp:samplesmtp");
	val ctoMailAdr = "x@web.de";
	cmailActions.sendMail(ctoMailAdr, "r5", ""); logInfo("test","r5"); end
rule "r6" when Item anwesend changed or System reached start level 100 then
	val dmailActions = getActions("mail","mail:smtp:samplesmtp");
	val dtoMailAdr = "x@web.de";
	dmailActions.sendMail(dtoMailAdr, "r6", ""); logInfo("test","r6"); end

Code: Alles auswählen

2024-12-07 13:06:43.948 [INFO ] [org.openhab.core.Activator          ] - Starting openHAB 4.2.3 (Release Build)
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
The field Tmp_Home_AlarmRules.mailActions refers to the missing type Object
2024-12-07 13:07:30.695 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test.rules'
2024-12-07 13:07:30.972 [INFO ] [el.core.internal.ModelRepositoryImpl] - Validation issues found in configuration model 'test.rules', using it anyway:
The field Tmp_testRules.mailActions refers to the missing type Object
The field Tmp_testRules.mailActions refers to the missing type Object
2024-12-07 13:09:06.361 [INFO ] [org.openhab.core.model.script.test  ] - r3
2024-12-07 13:09:06.375 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-1' failed: Cannot invoke "org.openhab.binding.mail.internal.action.SendMailActions.sendMailWithAttachments(String, String, String, java.util.List)" because "actions" is null in test
2024-12-07 13:09:11.806 [INFO ] [org.openhab.core.model.script.test  ] - r5
2024-12-07 13:09:20.844 [INFO ] [e.automation.internal.RuleEngineImpl] - Rule engine started.
2024-12-07 13:09:25.131 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'test-2' failed: Cannot invoke "org.openhab.binding.mail.internal.action.SendMailActions.sendMailWithAttachments(String, String, String, java.util.List)" because "actions" is null in test
2024-12-07 13:09:25.635 [INFO ] [org.openhab.core.model.script.test  ] - r4
2024-12-07 13:09:25.692 [INFO ] [org.openhab.core.model.script.test  ] - r6

2024-12-07 13:09:35.410 [INFO ] [el.core.internal.ModelRepositoryImpl] - Loading model 'test.rules'
2024-12-07 13:09:37.044 [INFO ] [org.openhab.core.model.script.test  ] - r1
2024-12-07 13:09:37.613 [INFO ] [org.openhab.core.model.script.test  ] - r2
2024-12-07 13:09:38.156 [INFO ] [org.openhab.core.model.script.test  ] - r3
2024-12-07 13:09:38.756 [INFO ] [org.openhab.core.model.script.test  ] - r4
2024-12-07 13:09:39.279 [INFO ] [org.openhab.core.model.script.test  ] - r5
2024-12-07 13:09:39.792 [INFO ] [org.openhab.core.model.script.test  ] - r6

2024-12-07 13:17:22.493 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'anwesend' changed from OFF to ON
2024-12-07 13:17:23.066 [INFO ] [org.openhab.core.model.script.test  ] - r5
2024-12-07 13:17:23.094 [INFO ] [org.openhab.core.model.script.test  ] - r4
2024-12-07 13:17:23.105 [INFO ] [org.openhab.core.model.script.test  ] - r3
2024-12-07 13:17:23.111 [INFO ] [org.openhab.core.model.script.test  ] - r2
2024-12-07 13:17:23.122 [INFO ] [org.openhab.core.model.script.test  ] - r6
2024-12-07 13:17:23.137 [INFO ] [org.openhab.core.model.script.test  ] - r1

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

Re: Rule eMail-Probleme

Beitrag von udo1toni »

Nein, da ist nichts bewiesen. Es ist schlicht falsch, eine Action außerhalb der Rules global zu definieren, Punkt.
Eigentlich müsstest Du vor jedem Aufruf der Actions (hier also mailActions.sendMail()) abfragen, ob mailActions !== null ist, um sicherzugehen, dass der Zeiger auch tatsächlich gültig ist. Also so:

Code: Alles auswählen

val toMailAdr = "x@web.de"                                           // erlaubt, da statischer Text

rule "send mail"
when
    Item test changed
then
    val mailActions = getActions("mail","mail:smtp:samplesmtp")      // lokal definiert, da Funktionsaufruf
    if(mailActions === null) {                                       // falls Funktion nicht zur Verfügung steht
        logError("sendMail","mailAction ist nicht geladen! Abbruch.")
        return;                                                      // das ist der einzige Befehl, der mit einem Semikolon abschließt!
    }
    mailActions.sendMail(toMailAdr, "mein Betreff", "Mein Mailtext")
end
Wenn man die lokale Konstante definiert, ist es aber höchst unwahrscheinlich, dass das Mail Binding noch nicht zur Verfügung steht, entsprechend kann man sich diese Abfrage gewöhnlich ohne Einbußen schenken. Die Probleme treten nur während der Startphase von openHAB auf. Du kannst openHAB starten und wenn es dann läuft die *.rules Datei manuell nachladen (z.B. touch $OPENHAB_CONF/rules/meine.rules), dann wird das funktionieren, weil zu dem Zeitpunkt sicher schon alle Bindings aktiv sind. Genauso kann man aber auch die Nicht-Funktion sicherstellen, indem man das Thing mail:smtp:samplesmtp pausiert und die rules-Datei mit globaler Definition erneut lädt. Dabei wird die globale Konstante erneut angelegt, und da das Thing nicht vorhanden ist, gibt es anschließend auch keinen Zeiger.
Da die Reihenfolge der Aktivierung der verschiedenen Bestandteile von openHAB nicht deterministisch ist, muss man sich an zusätzliche Regeln halten, um Fehlermeldungen zu vermeiden, hier also, dass Funktionen nicht außerhalb Rules verwendet werden dürfen (um globale Variablen oder Konstanten zu befüllen)
Es gab auch schon Schlauberger, die eine globale Variable der Art

Code: Alles auswählen

var Long lNow = now.toLocaldateTime.millis
definiert haben und sich wunderten, warum lNow sich nie änderte. Dabei wird lNow halt nur einmal im Code definiert. Der Parser ersetzt lNow also nicht durch den Ausdruck, der weiter oben definiert ist (das wäre ein Preprocessor), sondern es handelt sich um eine echte Variable, die nur auf Anforderung gesetzt wird. Wenn die Variable global definiert ist, passiert das beim Laden der Datei, und das kann auch vor dem Laden der benötigten Bindings geschehen,
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

hr2
Beiträge: 15
Registriert: 18. Jan 2020 19:16
Answers: 0

Re: Rule eMail-Probleme

Beitrag von hr2 »

Soweit so gut, habe ich verstanden. Weiß allerdings nicht, was sie mit der Anspielung Schlauberger erreichen möchten und inwieweit das Beispiel mit now hier weiter hilft, aber möglicherweise liegt das an meinen Möglichkeiten. Wenn ich alles wissen würde oder mir selber weiter helfen könnte, bräuchte ich nicht zu fragen. Ich finde es allerdings schade, dass speziell in deutschen Foren manchmal nicht wirklich respektvoll miteinander umgegangen wird. Ich verstehe, dass aus eurer Perspektive ggf. vergleichbare Fragen immer wieder von unterschiedlichen Personen gestellt werden und dass ggf. nervt, zumindest, wenn der Eindruck besteht, dass die Fragenden sich nicht die Mühe gemacht haben selber nach dem Problem zu suchen. Könnte genügend Gegenargumente aufzählen, aber egal, bin erst mal wieder ernüchtert.

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

Re: Rule eMail-Probleme

Beitrag von udo1toni »

Also bitte, ist das Dein Ernst? Wir sind hier generell sehr respektvoll und achten auch darauf.
Man kann aber durchaus auch mal anmerken, dass bestimmte Dinge klar sein könnten, ohne dass sie extra erklärt werden müssen.
Das Beispiel mit now ist genau das, ein Beispiel, es ging mir darum zu illustrieren, dass eine globale Zuweisung immer statisch ist bzw. eine dynamische Zuweisung global nicht funktioniert.
Übrigens, "speziell in deutschen Foren": Du scheinst nicht wirklich intensiv in z.B. englischsprachigen Foren unterwegs zu sein, sonst wüsstest Du, dass der Ton wesentlich eher vom betroffenen Thema abhängt, als von der Sprache.
In allen openHAB Foren, die ich kenne, wird viel Wert auf ein freundliches Miteinander gelegt - das bedeutet aber nicht, dass man nicht auch mal eine flapsige Bemerkung machen könnte (insbesondere, wenn diese nicht auf eine bestimmte Person bezogen ist).
Ich kenne auch mehrere eher negative Beispiele, und auch dort ist es eher das generelle Thema als die Sprache - was nicht zuletzt daran liegen mag, dass viele Leute mehrsprachig unterwegs sind und einen Gutteil ihrer Freizeit investieren, um anderen zu helfen.
openHAB5.0.1 stable in einem Debian-Container (trixie, OpenJDK 21 headless runtime) (Proxmox 9.0.11, LXC)

Harka
Beiträge: 544
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Rule eMail-Probleme

Beitrag von Harka »

hr2 hat geschrieben: 7. Dez 2024 23:47 Soweit so gut, habe ich verstanden. Weiß allerdings nicht, was sie mit der Anspielung Schlauberger erreichen möchten und inwieweit das Beispiel mit now hier weiter hilft, aber möglicherweise liegt das an meinen Möglichkeiten. Wenn ich alles wissen würde oder mir selber weiter helfen könnte, bräuchte ich nicht zu fragen. Ich finde es allerdings schade, dass speziell in deutschen Foren manchmal nicht wirklich respektvoll miteinander umgegangen wird. Ich verstehe, dass aus eurer Perspektive ggf. vergleichbare Fragen immer wieder von unterschiedlichen Personen gestellt werden und dass ggf. nervt, zumindest, wenn der Eindruck besteht, dass die Fragenden sich nicht die Mühe gemacht haben selber nach dem Problem zu suchen. Könnte genügend Gegenargumente aufzählen, aber egal, bin erst mal wieder ernüchtert.
Hä? Sorry, ich lese hier wirklich alles aber kann Deine Aussage nicht bestätigen. Gerade Udo beweist hier eine Engelsgeduld wo ich schon oft gedacht habe ...
Hier wird eher Kumpelhaft kommuniziert, wo man nicht jedes geschriebene Wort 1000mal dahingehend überprüft ob sich möööglicherweise jemand auf den Schlips getreten fühlt. Wer wollte da noch helfen. Du?
Lösungsvorschläge: im des Forums gibt es im "Persönlicher Bereich" eine Option Mitglieder auf ignorieren zu setzen oder Du verbesserst beim Helfen anderer User nebenbei das Niveau.

Benutzeravatar
peter-pan
Beiträge: 2814
Registriert: 28. Nov 2018 12:03
Answers: 30
Wohnort: Schwäbisch Gmünd

Re: Rule eMail-Probleme

Beitrag von peter-pan »

hr2 hat geschrieben: 7. Dez 2024 23:47 Ich finde es allerdings schade, dass speziell in deutschen Foren manchmal nicht wirklich respektvoll miteinander umgegangen wird.
...also da kann ich mich nur @Harka anschliessen und auch aus eigener Erfahrung sagen, dass hier eigentlich sehr respektvoll miteinander umgegangen wird. Es gibt sicherlich auch hier den ein oder anderen, der nicht die Form waren kann, aber das erledigt sich meist von selbst.
Auf jeden Fall kann man immer auf das profunde Wissen von Udo zurückgreifen, wenn man mal Hilfe braucht.
Und manche Dinge muss man halt so benutzen, wie es das OH-Regelwerk vorsieht, auch wenn man Redundanzen vermeiden will.

Und meine 2 Pfennig (ich komm noch aus der Generation, da war das noch gültiges Zahlungsmittel :lol: ):
Udo ist ein Künstler im vermeiden von Redundanzen. Das wirst du beim aufmerksamen Lesen seiner Lösungsvorschläge sicherlich selbst feststellen können ;)
Pi5/8GB(PiOS Lite 64-bit(trixie)/SSD 120GB - OH5.0.2 openhabian

Antworten