Wenn alle Schaltungen oder Timer in Deiner HomeMatic Installation reibungslos laufen, ist dies ein beruhigendes Gefühl. Doch, was ist, wenn plötzlich ein Fehler auftritt und du unterwegs bist? Oder, Du möchtest benachrichtigt werden, wenn ein gewisses Ereignis eintritt? In solchen Fällen benötigst Du, um eine E-Mail Benachrichtigung aus der HomeMatic heraus senden zu können, das E-Mail Plugin, welches Du hier herunterladen kannst.
Bitte die tar.gz-Datei nicht entpacken.
Installation auf der HomeMatic
Die Installation des Plugin läuft genauso ab, wie die Installation der anderen Plugins.
HomeMatic WebUI über Einstellungen -> Systemsteuerung -> Zusatzsoftware
Konfiguration des Plugin
Um das Plugin einzustellen, gehst Du nach der Installation auf Einstellen.
E-Mails
In diesem Bereich richtest Du zuerst eine Testmail unter der Vorlage 01 ein. Diese einhält eine funktionierende Adresse, einen Betreff und einen Test-Text.
Account
Danach wechselst Du in den Reiter Account. Dort kannst Du die Einstellungen deines E-Mail Kontos angeben.
Nach einem Klick auf Übernehmen. Kannst Du in der Karteikarte Hilfe einsehen, ob die Einstellungen korrekt sind. Für gmail, web.de oder o.ä. muss ggf. der Versand über SMTP noch im Kundenkonto aktiviert werden.
Tcl
Die Tcl Einstellungen (Tool command language) kannst Du verwenden, um Variablen in einer E-Mail zu übergeben. Ich verwende hier einen kleinen Code, der den Betreff (Subject) und E-Mail Text (Body) aus HomeMatic Variablen ausliest und diese entsprechend formatiert einfügt.
load tclrega.so array set values [rega_script { var subject = dom.GetObject("E-Mail.Subject").Value(); var body = dom.GetObject("E-Mail.Body").Value(); } ] set subject $values(subject) set body [encoding convertto $values(body)]
Hinweis: Mittels der im Tcl-Skript definierten Platzhalter können nicht nur Werte und Zustände von HomeMatic Geräten oder Variablen in den Email-Text oder den Betreff übergeben werden, sondern auch die Empfänger Email-Adresse oder einen Pfad für den Dateianhang.
Hilfe
In diesem Bereich kannst du nun eine Testmail versenden, um Deine Konfiguration zu testen.
Nachdem nun der Versand der Mails problemlos funktioniert, können wir uns an die Einrichtung der Vorlagen machen.
E-Mail Vorlagen erstellen
In diesem Bereich kannst Du Vorlagen für verschiedene Ereignisse anlegen. Ich benutze bei mir 4 Vorlagen (Fehler, Status, Abgeschlossen und Alarm). Diese kannst Du natürlich an Deine Bedürfnisse anpassen. Im weiteren Verlauf werden wir diese in HomeMatic einrichten. Hier sind die 2 ersten Vorlagen, die ich verwende:
Hier kannst Du direkt sehen, das die Variablen $subject und $body von oben erneut auftauchen. So lässt sich das Layout der Mail schon festlegen und später über die HomeMatic Variablen befüllen.
Mit der Einrichtung des Plugins sind wir nun fertig. Mit einem Klick auf Übernehmen werden die Vorlagen gespeichert und das Plugin ist einsatzbereit.
Einrichtung auf der HomeMatic
Anlegen der Systemvariablen
Insgesamt benötigst Du 3 Systemvariablen. 2 vom Typ Zeichenkette und 1 vom Typ Werteliste.
Name: | Typ: |
---|---|
E-Mail.Body | Zeichenkette |
E-Mail.Subject | Zeichenkette |
E-Mail.Versand | Werteliste |
Die Werteliste beinhaltet kein Versand;Fehler;Status;Abgeschlossen;Alarm als Werte. Somit baut sich die Vorlagenliste von oben wir folgt auf:
Werteliste-Element: | Vorlage: |
---|---|
0 | – |
1 | 01 |
2 | 02 |
3 | 03 |
4 | 04 |
Nachdem wir nun alle Variablen angelegt haben, erstellen wir das Herzstück: das Programm.
E-Mail Programm erstellen
Damit das Versenden von E-Mails zentral gesteuert wird, legst Du ein Programm an, welches den Zustand der Werteliste E-Mail.Versand überwacht.
Skript:
! Servicemeldungen versenden #################################### object subject = dom.GetObject ("E-Mail.Subject"); object body = dom.GetObject ("E-Mail.Body"); object versand = dom.GetObject ("E-Mail.Versand"); if ((subject.Value() != "") && (body.Value() != "") && (versand.Value() > 0)) { system.Exec ("/etc/config/addons/email/email 0" # versand.Value()); subject.State (""); body.State (""); versand.State (0); }
Damit Du nun endlich eine E-Mail beim Eintreten eines Ereignisses versenden kannst, zeige ich Dir nun die Einrichtung.
Du kannst zum Beispiel ein Programm erstellen, welches Dich benachrichtigt, sobald die Waschmaschine fertig ist. Dies ist bei mir eine “Abgeschlossen” Meldung.
Implementierung per Skript
Eine Implementierung per Skript lässt sich wie folgt durchführen. Das Skript lässt sich so schnell kopieren und erneut ans Ende eines Programms einfügen, als jedes Mal 5 zusätzliche Felder anzuklicken.
Skript:
! Servicemeldungen versenden #################################### object subject = dom.GetObject ("E-Mail.Subject"); object body = dom.GetObject ("E-Mail.Body"); object versand = dom.GetObject ("E-Mail.Versand"); subject.State ("Waschmaschine"); body.State ("Die Waschmaschine ist fertig!"); versand.State (3);
E-Mail-Kennwort im Klartext in der Datei /etc/config/addons/email/msmtp.conf?!
Geht gar nicht! Habe es sofort wieder deinstalliert und die Datei gelöscht.
Hallo Karlheinz,
mit dem Plugin habe ich leider nichts zu tun. Ich habe nur die Anleitung dafür erstellt.
Gruß,
Stephan
Hallo – ggf. kannst Du mir helfen.
Ich habe das Mail addon installiert und kann Testmails versenden.
Ebenso habe ich das tcl-script implementiert und nach Deinem Vorbild zwei Programme auf der CCu3 erstellt.
Quasi alles copy and paste.
Im ersten Programm befülle ich die Variablen und im zweiten soll die eMail versendet werden.
Ich habe getestet ob die Variablen befüllt werden – OK.
Ich habe getestet ob das Script aus dem dem zweiten Programm durchläuft und die Variablen wieder zurücksetzt.
Alles soweit OK.
Allerdings geht keine eMail raus. Stattdessen bekomme ich den Fehler 404 – und der kann ja viel bedeuten.
Nun weiß ich nicht weiter.
Lieben Dank für eine Antwort.
Hallo Olaf,
wie sieht denn der Fehler genau aus? Vielleicht ein Text oder Bild?
Gruß,
Stephan
Hallo, es hat sich ein Fehler eingeschlichen.
if ((subject.Value() != “”) && (body.Value() != “”) && (versand.Value() > 0)) {
muss geändert werden in:
if ((subject.Value() != “”) && (body.Value() != “”) && (versand.State() > 0)) {