Klimadaten mit Trend auf dem E-Paperdisplay HM-Dis-EP-WM55 mit RedMatic

Das e-Paper-Display HM-Dis-EP-WM55 ist ideal, um permanent Informationen anzuzeigen. Das Display verbraucht im Gegensatz zum HM-Dis-WM55 nur beim Anzeigenwechsel Energie. Leider muss beim Update einzelner Werte das ganze Display neu geschrieben werden, was dazu führt, dass die Batterie recht schnell leer ist. Daher sollte das Update möglichst selten und nur bei geänderten Werten erfolgen.

RedMatic

Die Programmierung des Displays ist mit Bordmitteln der CCU3, also mit Homematic-Script, eine mühsame Sache. Es gibt zwar einige Script-Vorlagen im Netz, aber die entsprechen nicht meiner Vorstellung einer pflegeleichten und flexiblen Steuerung.

Viel einfacher und übersichtlicher geht das mit RedMatic, einem CCU3-Addon basierend auf Node-RED.

Flow für das Anzeigen von Temperatur, Temperaturtrend und relativer Luftfeuchtigkeit auf dem e-Paper-Display

Um Veränderung zu empfangen, verwende ich die "rpc event Node" (ccu-rpc-event) aus dem node-red-contrib-ccu Paket (aka Palette). Ich greife nicht direkt auf die Sensoren zu, sondern benutze CUxD-Wrapper, um die Sensoren einfach kalibrieren zu können. Es geht aber genauso gut auch ohne diesen Umweg nativ mit BidCos-RF (Einstellung "Interface").

CCU rpc-event Node zur Konfiguration des Temperatursensors.

Damit die Informationen auf dem Display landen, gibt es die "display"-Node. Hier kann als Typ direkt das e-Paper ausgewählt werden (HM-Dis-EP-WM55).

Konfiguration des e-Paper-Displays

Trendberechnung

Ich möchte gerne anzeigen, ob die Temperatur sinkt, steigt oder in etwa gleich geblieben ist. Dafür benutze ich die aggregator-Node und bilde den Durchschnitt über die Werte der letzten 30 Minuten. Die Methode ist statistisch nicht ganz korrekt, da die Sensoren keine feste Samplingfrequenz haben, aber für meinen Zweck gut genug. Um jetzt aus dem Moving-Average den Trend zu erhalten, wird das Signal noch durch die rate-Node geschickt.

Anzeige zusammenstellen

Man hat auf dem HM-Dis-EP-WM55 nur drei Zeilen zur Verfügung, welche frei geändert werden können. Die darüber und darunter liegende können nur mittels manueller Konfigurationsänderung im CCU-Web-UI angepasst werden.

Um die Zeile zusammenzustellen, verwende ich eine function-Node, in welcher Javascript programmiert wird. Für den Trend speichere ich den letzten Werte aus der rate-Node (aka Veränderung) in der context-Variable TCHANGE und vergleiche sie beim nächsten Aufruf mit dem aktuellen Wert. In Abhängigkeit vom Ergebnis wird der Trendpfeil angezeigt oder weggelassen.

Der Trendpfeil wird durch reservierte Zeichen (@ und >) repräsentiert. Für alle anderen Werte kann man den Klartext senden.

Diese Node wird bei einem Event aus den beiden rpc-Nodes und aus der rate-Node aufgerufen. Egal welche Quelle den Flow anstösst, es stehen nie alle Werte gleichzeitig zur Verfügung. Da aber alle Werte gebraucht werden, um den Anzeige-String zu bauen, merke ich mir die Werte im context der Node (Zeile context.set(msg.datapoint, ...)) und verwende auch nur den Context, um die Message erzeugen.

var rate = 0;
if (msg.rate) {
    context.set('TCHANGE', msg.rate);
    rate = msg.rate;
} else {
    rate = context.get('TCHANGE');
}

if (msg.datapoint == 'TEMPERATURE') {
    if (rate < 0.0) {
        change = '@';
    } else if (rate > 0.0) {
        change = '>';
    } else {
        change = ' '
    }
}

context.set(msg.datapoint, msg.value);
msg.line1 = 
    change + ' ' +
    context.get('TEMPERATURE') + ' C ' +
    context.get('HUMIDITY') + '%'
return msg;

Energie sparen

Wie schon am Anfang geschrieben, kostet jeder Anzeigenwechsel Energie. Damit das Display nicht jede Woche neue Batterien braucht, muss die Änderungsfrequenz begrenzt werden. Dafür setze ich die delay-Node ein und lasse nur alle 10 Minuten eine Message durch.

Fazit

Das vollständige RedMatic-Script kann man hier herunterladen (MIT-Lizenz). Das Display funktioniert seit mehreren Wochen mit demselben Satz eneloop-Akkus. Etwas schade ist, dass immer das letzte Prozentzeichen abgeschnitten wird, dagegen habe ich noch kein Mittelchen gefunden.