Seite 1 von 1

Rule eMail-Probleme

Verfasst: 7. Dez 2024 10:18
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.

Re: Rule eMail-Probleme

Verfasst: 7. Dez 2024 12:14
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 :)

Re: Rule eMail-Probleme

Verfasst: 7. Dez 2024 13:36
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

Re: Rule eMail-Probleme

Verfasst: 7. Dez 2024 22:40
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,

Re: Rule eMail-Probleme

Verfasst: 7. Dez 2024 23:47
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.

Re: Rule eMail-Probleme

Verfasst: 8. Dez 2024 02:12
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.

Re: Rule eMail-Probleme

Verfasst: 8. Dez 2024 07:32
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.

Re: Rule eMail-Probleme

Verfasst: 8. Dez 2024 14:07
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 ;)