Einfache E-Mail

Mit einer einfachen E-Mail kann man das Mini-Framework testen

Mit dem Mini-Framework können statische E-Mails einfach aus WebUI-Programmen oder Scripten versendet werden.

Strings in HomeMatic-Scripten

Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.

Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.

Benennung von Systemvariablen

Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.

WebUI-Programm

Um eine E-Mail zu verschicken, müssen nur den drei Systemvariablen die passenden Werte zugewiesen werden – fertig!

E-Mail.Versand muss als letztes gesetzt werden, weil dadurch der Versand angestoßen wird.

Wenn E-Mail.Body oder E-Mail-Subject leer sind und E-Mail.Versand aktiviert wird,  wird mit dem Mini-Framework keine E-Mail verschickt und mit dem CUxD-Mini-Framework wird unter Umständen die zuletzt versendete E-Mail erneut geschickt.

Die E-Mail kommt mit den vorgegebenen Absender- und Empfängerdaten an. Der Text aus den Systemvariablen wird in Subject und Mailtext eingefügt.

Testmail mit dem Script-Parser

Für einen schnellen Testlauf kann man dieses einfache Programm in den Script-Parser kopieren und ausführen.

! HomeMatic-Script
! EINFACHE E-MAIL
! http://www.christian-luetgens.de/homematic/e-mail/einfach/Einfache_E-Mail.htm

dom.GetObject ("E-Mail.Subject").State ("Testmail");
dom.GetObject ("E-Mail.Body").State ("Dies ist eine Testmail.");
dom.GetObject ("E-Mail.Versand").State (2);

!  Ende des Scripts

Neben der Reihenfolge ist hier auch wichtig, dass die Variablen mit State() gesetzt werden und nicht mit Variable() oder gar Value(): Bei State() ist sichergestellt, dass Programme angestoßen werden, die auf die Aktualisierung der Variablen warten.

Der Wert von E-Mail.Versand entspricht hier dem jeweiligen Listeneintrag der Systemvariablen und damit der Mailvorlage. In diesem Fall habe ich „2“ vorgegeben, was in der Werteliste „Status“ entspricht – und es wird die zweite Vorlage versendet, in der ich im Betreff und E-Mail-Text ebenfalls „Status“ vorgegeben habe.

Dieses Script-Fragment kann man natürlich auch in eigenen Scripten verwenden, die über die WebUI gestartet werden.

Etwas mehr Text …

Bei längeren Texten ist es sinnvoll, Zeilenumbrüche einzufügen. Dafür setzt man einfach „\n“ an passender Stelle in den Mailtext ein.

! HomeMatic-Script
! EINFACHE E-MAIL
! http://www.christian-luetgens.de/homematic/e-mail/einfach/Einfache_E-Mail.htm

string s_subject = "Testmail";
string s_body = 
"Hallo," #
"dies ist eine Testmail von der CCU.\n\n" #
"Mit dieser Mail teste ich das Framework, das den Mailversand immens\n" #
"erleichtert. Ab jetzt werde ich meine CCU viele schöne Mails\n" #
"versenden lassen.\n\n" #
"Mit freundlichen Grüßen\n" #
"Deine CCU";

dom.GetObject ("E-Mail.Subject").State (s_subject);
dom.GetObject ("E-Mail.Body").State (s_body);
dom.GetObject ("E-Mail.Versand").State (1);

!  Ende des Scripts

Längere Texte mit Zeilenumbrüchen können in Scripten nicht direkt mit State() gesetzt werden – es braucht den Umweg über Variable.

Ich lege im Script also zunächst Variablen an, denen ich die Texte zuweise. Anschließend setze ich die Systemvariablen auf die Werte der Scriptvariablen.

Die E-Mail sieht dann so aus:

Wie man sieht, kommen hier die Umlaute nicht korrekt an, weil der Script-Parser die Eingaben falsch codiert. In der WebUI ist das kein Problem – dasselbe Script als Teil eines WebUI-Programms würde ein sauberes Ergebnis liefern.

HTML-Beispiel

Wer sich für das HTML-Framework entschieden hat, sollte ebenfalls die vorgegebenen Zeilenumbrüche aus dem Script wiederfinden.

Navigation