HTML-Framework

Eine kleine Erweiterung macht das Mini-Framework zum Versand-Tool für HTML-Mails

Das E-Mail-Add-on kann inzwischen auch HTML-E-Mails versenden. Hier die Anleitung, wie man HTML-Vorlagen im Mini-Framework nutzt: Es entsteht das HTML-Framework.

Variablen in HomeMatic-Scripten

Die CCU hatte früher ein Limit von maximal 200 Variablen, das mit Firmware-Version 2.29.18 aufgehoben wurde. Dieses Limit bezog sich auf alle Variablen, die in allen Scripten verwendet werden. Gemeint sind Variablen, die direkt im Script definiert werden: object x; object y; var z;

Wenn Scripte nicht mehr funktionieren und bei der Prüfung unerklärliche Syntax-Fehler auftreten, sollte versuchsweise dieses Programm wieder gelöscht oder deaktiviert werden – oder, noch besser, auf die aktuelle Firmware-Version aktualisiert 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.

String-Verlängerung

In den Scripten auf dieser Seite werden Strings verlängert (x = x # y). Dies führt oft zu Störungen bei der Ausführung von Programmen:

  • Scripte in Programmen werden nicht mehr ausgeführt
  • bei der Fehlerprüfung erscheinen unerklärliche Syntax-Fehler

Durch einen Neustart werden diese Probleme (vorübergehend) behoben. Auch hier hängt die Dauer, bis es zu Störungen kommt, davon ab, wie häufig diese Programmschritte ausgeführt werden.

system.Exec();

Wenn system.Exec() verwendet wird, um aus HomeMatic-Scripten heraus Systemfunktionen auf der CCU zu starten, kann dies zu Fehlfunktionen der CCU führen, die einen Neustart erforderlich machen. Außerdem „hängt“ die CCU, solange externe Befehle ausgeführt werden.

Installieren Sie den CUx-Daemon, dessen Exec-Funktion für diese Probleme weniger anfällig ist.

Vorbereitung

Zur Einrichtung des HTML-Frameworks müssen folgende Voraussetzungen erfüllt sein:

Auch wenn Sie bereits das CUxD-Mini-Framework eingerichtet haben, ist nach dieser Anleitung in jedem Fall das HTML-Framework wieder da, bei dem der CUx-Daemon nicht verwendet wird. Um das CUxD-HTML-Framework zu verwenden, folgen Sie dennoch dieser Anleitung bis zum Schluss und beachten anschließend die dortigen Hinweise.

Meine Vorlagen als HTML

Mit HTML-Vorlagen kann man seine E-Mails sehr viel individueller gestalten. Wenn E-Mails auf verschiedensten Bildschirmen, vom Smartphone bis zum Smart-TV, angezeigt werden, dann ist mit HTML-Mails die Chance am größten, dass sie überall gut aussehen.

HTML-Mails müssen mit <html oder <!doctype beginnen, damit das E-Mail-Add-on sie als HTML-Vorlagen erkennt, und anschließend valides HTML enthalten, um richtig angezeigt zu werden.

Wer sich mit HTML auskennt, der kann sich an dieser Stelle austoben und wird schnell feststellen, dass E-Mail-Programme bei der Darstellung von HTML extrem zickig reagieren. Aber egal, besser als nichts.

Ich bleibe bei meinen beiden Vorlagen des Mini-Frameworks und verwende nur wenige Style-Anpassungen, die für die allermeisten E-Mail-Programme unproblematisch sind.

Vorlage 1 für Fehlermeldungen:

<html><body>
<p>Dies ist eine Fehlermeldung der CCU 2.</p>
<div style="background-color:#eee; padding:0 1em; border:1px solid red; display:inline-block;">
<p>$body</p>
</div>
<p>Klicken Sie <a href="http://192.168.178.10">hier</a>, um die WebUI aufzurufen.</p>
<p>Gruß,<br />HomeMatic</p>
</body></html>

Vorlage 2 für Statusmeldungen:

<html><body>
<p>Dies ist eine Statusmeldung der CCU 2.</p>
<div style="background-color:#eee; padding:0 1em; border:1px solid green; display:inline-block;">
<p>$body</p>
</div>
<p>Klicken Sie <a href="http://192.168.178.10">hier</a>, um die WebUI aufzurufen.</p>
<p>Gruß,<br />HomeMatic</p>
</body></html>

Die Texte sind nahezu identisch. Außerdem gibt es jeweils einen Link zur WebUI der CCU, so dass ich direkt aus einer E-Mail heraus auf die Oberfläche komme, sofern ich im richtigen Netz bin.

Das Ergebnis sieht so aus:

Links die Nur-Text-Version der Vorlagen, rechts die Nachricht in einer HTML-Vorlage.

Doch zum perfekten HTML-Framework fehlt noch eine wichtige Anpassung.

Doppelte Vorlagen für formatierte Texte

Wie hier beschrieben, kann man mit dem Mini-Framework in Scripten auch formatierte E-Mails senden. Ich verwende dies zum Beispiel bei meinen Scripten für Servicemeldungen und bei den Rauchmeldern.

Derart vorformatierte Texte werden jedoch in HTML-Mails nicht sinnvoll dargestellt: Der gesamte Mail-Inhalt wird als Block in einer Reihe angezeigt, Zeilenumbrüche und anderes geht verloren.

Theoretisch könnte man die Scripte umstellen, so dass die passenden HTML-Tags eingefügt werden. Praktisch spielt dabei leider die CCU nicht mit: Nach jedem Neustart verschluckt sie sich an Tags in Script-Quelltexten und versendet nur noch leere E-Mails.

Ich gehe daher einen anderen Weg: Zusätzlich zu meinen E-Mail-Vorlagen 1 (Fehler) und 2 (Status), in denen die Systemvariable E-Mail.Body als Fließtext angezeigt wird, gibt es zwei weitere Vorlagen 11 (Fehler) und 12 (Status). In diesen wird der Text vorformatiert eingefügt – ansonsten sind sie identisch.

Vorlage 11:

<html><body>
<p>Dies ist eine Fehlermeldung der CCU 2.</p>
<div style="background-color:#eee; padding:0 1em; border:1px solid red; display:inline-block;">
<pre>$body</pre>
</div>
<p>Klicken Sie <a href="http://192.168.178.10">hier</a>, um die WebUI aufzurufen.</p>
<p>Gruß,<br />HomeMatic</p>
</body></html>

Vorlage 12:

<html><body>
<p>Dies ist eine Statusmeldung der CCU 2.</p>
<div style="background-color:#eee; padding:0 1em; border:1px solid green; display:inline-block;">
<pre>$body</pre>
</div>
<p>Klicken Sie <a href="http://192.168.178.10">hier</a>, um die WebUI aufzurufen.</p>
<p>Gruß,<br />HomeMatic</p>
</body></html>

Versand-Script für HTML-Mails

Das Versandscript wird nun etwas komplexer, denn es stößt nicht nur einfach den E-Mail-Versand an, sondern analysiert vorher die zu versendende E-Mail und wählt die korrekte Vorlage aus. OK, „Analyse“ ist vielleicht ein etwas zu großes Wort: Das Script sucht nach Zeilenumbrüchen in E-Mail.Body und wenn es welche findet, setzt es eine „1“ vor die Vorlagennummer. Für Statusmails wird dann automatisch Vorlage 12 gesendet statt Vorlage 2.

Wird kein Zeilenumbruch gefunden, verwendet das Script die Ziffer „0“. Für Statusmails ergibt das dann die Vorlage 02.

! HomeMatic-Script
! HTML-FRAMEWORK
! http://www.christian-luetgens.de/homematic/e-mail/htmlframework/HTML-Framework.htm

object o_subj=dom.GetObject ("E-Mail.Subject");
object o_body=dom.GetObject ("E-Mail.Body");
object o_vers=dom.GetObject ("E-Mail.Versand");

if ((o_subj.Value() != "") && (o_body.Value() != "") && (o_vers.Value() > 0)) {

  string s_template = o_vers.Value();
  string s_newline = "\n";
  if (o_body.Value().Find (s_newline) >= 0) {
    s_template = "1" # s_template;
  } else {
    s_template = "0" # s_template;
  }


  string stdout;
  string stderr;
  system.Exec ("/etc/config/addons/email/email " # s_template, &stdout, &stderr);

  o_subj.State ("");
  o_body.State ("");
  o_vers.State (0);
}

!  Ende des Scripts

Mit diesem Trick kommen dann auch vorformatierte E-Mails halbwegs brauchbar aufbereitet an.

Nächste Schritte

Navigation