[solved] Mail Binding mehrere Rules

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
mbaerten
Beiträge: 4
Registriert: 20. Nov 2020 11:12
Answers: 0

[solved] Mail Binding mehrere Rules

Beitrag von mbaerten »

Hallo Zusammen,

bisher hatte ich Dank dem tollen Konzept von openHAB keine Probleme gehabt.
Der Mailversand läuft problemlos und somit wollte ich weitere Automatismen schaffen.

Somit habe ich nun eine weitere .rules Datei wo ich thematisch neue rules erstelle.
Dies funktioniert wunderbar. Jedoch kann ich dort keine Mail absenden.
Ich erhalte stets die Error:

Code: Alles auswählen

 [ript.Waschmaschine Letzte Aktivitaet] - -> Vor .sendMail 44d1
 [ntime.internal.engine.ExecuteRuleJob] - Error during the execution of rule 'Waschmaschine Aktivitaet': An error occurred during the script execution: index=3, size=3
Habe schon alles mögliche ausprobiert. Letztendlich habe ich ein zweites Thing erstellt, das ebenfalls ein "STMP Server Thing" ist.
Da ich hoffte dass man ggf für jede Rule ein separates SMTP Thing braucht. Doch dies löst das Problem nicht.
Die andere Rule kann immer noch korrekt die Mails verschicken, die neue jedoch nicht.

Direkt zu Anfang der Rule:

Code: Alles auswählen

val mailActions = getActions("mail","mail:smtp:cecb44d1")
logInfo("Waschmaschine Letzte Aktivitaet", "-> Vor .sendMail 44d1")
mailActions.sendMail("meineadresse@gmail.com","Waschmaschine fertig")
logInfo("Waschmaschine Letzte Aktivitaet", "-> Nach .sendMail")
In der Logfile sehe ich dann dass die Rule startet, dass das Logging vor dem mailActions.sendMail noch ausgeführt wird.
Edit: Es handelt sich um "binding-mail - 2.5.1"

Ich könnte natürlich alles in die erste, funktionierende, Rule packen, aber man ist als Programmierer ja neugierig warum etwas so ist wie es ist :lol:

Vielen Dank im Voraus für eure Hilfe

Mit freundlichen Grüßen

mbaerten
Zuletzt geändert von mbaerten am 20. Nov 2020 13:53, insgesamt 1-mal geändert.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Mail Binding mehrere Rules

Beitrag von Darkwin101 »

Ein Rule File ist ja folgender Maßen aufgebaut:
Imports
Variable Declarations
Rules
Du Versucht im Variablen Teil einen Befehl auszuführen ich denke das ist nicht so Vorgesehen und du wirst deswegen einen Fehler bekommen da der Compiler etwas anderes erwartet.

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

Re: Mail Binding mehrere Rules

Beitrag von udo1toni »

Hmm... Ich lese das nicht aus dem Posting heraus ;)

Was gerne passiert, ist, dass eine Variable oder Konstante an anderer Stelle schon global definiert ist. Dann geht die lokale Zuweisung gewöhnlich schief, allerdings ohne dass es dazu einen Kommentar gibt. In der Folge treten dann aber Probleme auf.

Grundsätzlich kannst Du die Rules nach Belieben über verschiedene Dateien verteilen (mache ich auch so), Du musst nur aufpassen, dass globale Konstanten oder Variablen sich nicht gegenseitig in die Quere kommen.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Mail Binding mehrere Rules

Beitrag von Darkwin101 »

ist das nicht der Befehl um eine Mail zu senden ?

Code: Alles auswählen

mailActions.sendMail("meineadresse@gmail.com","Waschmaschine fertig")

mbaerten
Beiträge: 4
Registriert: 20. Nov 2020 11:12
Answers: 0

Re: Mail Binding mehrere Rules

Beitrag von mbaerten »

Hi Darkwin101,

danke für die rasche Rückmeldung.

Die gesamte Rule ist folgende:

Code: Alles auswählen

rule "Waschmaschine Test"
when
  Time cron "0 0/4 * * * ?"
then
  val mailActions = getActions("mail","mail:smtp:cecb44d1")
  logInfo("TEST Waschmaschine", "Vor .sendMail 44d1TEST")
  mailActions.sendMail("xxx@gmail.com","Waschmaschine fertig")
  logInfo("TEST Waschmaschine", "Nach .sendMail TEST")
end
hatte wo gelesen dass man das getActions über die Rules packen soll, hatte ich auch ausprobiert, ging auch nicht.

Danke

mbaerten
Beiträge: 4
Registriert: 20. Nov 2020 11:12
Answers: 0

Re: Mail Binding mehrere Rules

Beitrag von mbaerten »

udo1toni hat geschrieben: 20. Nov 2020 12:01 Hmm... Ich lese das nicht aus dem Posting heraus ;)

Was gerne passiert, ist, dass eine Variable oder Konstante an anderer Stelle schon global definiert ist. Dann geht die lokale Zuweisung gewöhnlich schief, allerdings ohne dass es dazu einen Kommentar gibt. In der Folge treten dann aber Probleme auf.

Grundsätzlich kannst Du die Rules nach Belieben über verschiedene Dateien verteilen (mache ich auch so), Du musst nur aufpassen, dass globale Konstanten oder Variablen sich nicht gegenseitig in die Quere kommen.
Danke für deine Antwort.
Ich habe nochmal alle .rules Dateien angeschaut und nirgendwo nutze ich ein getActions("mail","mail:smtp:cecb44d1") ausserhalb einer rule.
Aktuell nutze ich ja sogar pro rule-file eine separate ThingID eines SMTP Server Things (beide per PaperUI erstellt)
Habe auch schonmal das System rebootet.

Darkwin101
Beiträge: 424
Registriert: 6. Mär 2019 11:19
Answers: 14

Re: Mail Binding mehrere Rules

Beitrag von Darkwin101 »

Wie du Sagst benutzt du ja schon das Mail Binding an anderer Stelle versuche doch mal das was UdoToni geschrieben hat in dem du einfach in der Datei aus mailActions mailActions1 machst:

Code: Alles auswählen

val mailActions1 = getActions("mail","mail:smtp:cecb44d1")
  logInfo("TEST Waschmaschine", "Vor .sendMail 44d1TEST")

rule "Waschmaschine Test"
when
  Time cron "0 0/4 * * * ?"
then
  mailActions1.sendMail("xxx@gmail.com","Waschmaschine fertig")
  logInfo("TEST Waschmaschine", "Nach .sendMail TEST")
end
etwa so
Zuletzt geändert von Darkwin101 am 20. Nov 2020 12:38, insgesamt 1-mal geändert.

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

Re: Mail Binding mehrere Rules

Beitrag von peter-pan »

Bist du sicher, dass dein Thing (mit dem Namen cecb44d1) richtig angelegt ist ? Ausserdem scheint in deiner Aktion

Code: Alles auswählen

mailActions.sendMail("meineadresse@gmail.com","Waschmaschine fertig")
ein Parameter zu fehlen.

Laut Doku sollte das mindestens so aussehen:

Code: Alles auswählen

boolean success = sendMail(String recipient, String subject, String text)
In deinem Fall, dann:

Code: Alles auswählen

mailActions1.sendMail("xxx@gmail.com","Waschmaschine fertig", "und noch ein Text")
Pi5/8GB(PiOS Lite 64-bit(bookworm)/SSD 120GB - OH4.3.5 openhabian

mbaerten
Beiträge: 4
Registriert: 20. Nov 2020 11:12
Answers: 0

Re: Mail Binding mehrere Rules

Beitrag von mbaerten »

Hallo Zusammen,

Ich habe,da ich gerade eh die Login&Passwörter zur Hand hatte, beide SMTP Things enfernt und einen neu angelegt.
Wieder die Thing-ID's aktualisiert in den Rules, und siehe da es klappt direkt.
Kann ggf auch ein Zusammenspiel mit dem Fehler, den peter-pan gefunden hat, zusammen hängen.
Dass ich beim zusammenschreiben der Test-Rule den Body vergessen habe.
In der original Rule war aber ein Body drin.

Aber vielen Dank an Alle, war interessant und freudig zu erfahren wie gut man hier geholfen wird :)
Und zu lernen dass es auch globale Scopes gibt, da muss ich mich mal mehr rein lesen :)

Schönes Wochenende euch Allen.

Gruß

mbaerten

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

Re: [solved] Mail Binding mehrere Rules

Beitrag von udo1toni »

Wenn Du nicht gerade unterschiedliche Mailaccounts nutzen willst, solltest Du keinesfalls mehrere Things anlegen. Die Idee der Things ist ja gerade, dass ein Thing für eine Hardware (oder hier eben für einen Mailaccount) steht. Der Zugriff aus den Rules heraus über getAction nutzt ja Systemfunktionen, so dass openHAB sich selbst um die Verwaltung kümmert. der Anwender nutzt einfach nur die Systemaufrufe...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Antworten