ich bin ein Freund von Displays. Ich habe damals schon mit dem 16×2 Display viel gemacht, siehe hier: Mir war es aber auf die Dauer zu klein. Deshalb habe ich mal ein Dot-Matrix Display gekauft. Sieht lustig aus und man kann es noch von weitem gut sehen.
Ziel war es, einige Werte aus meiner Hausautomation darzustellen.
Was wir dazu brauchen ist erst einmal Fhem und natürlich die Sensoren. Also beispielsweise feinstaubsensoren, Temperatursensoren, CO2-Sensoren. Darüber habe in den letzten 8 Jahren genug gebloggt. Als nächstes müssen wir uns auf ein Übertragungsprotokoll einigen. Für mich gibt es da keine Diskussion: MQTT.
Der weit schwierigere Teil ist es geeignete Treiber-Software für das Display zu finden. Ansprüche: MQTT, ESP8266, WLAN, Konfigurierbar. Ich nehme für diese Art von Display gerne die Firmware von Qrome, aber die kann kein MQTT. Also weiter das github durchwühlt und folgende Lösung gefunden, siehe hier. Stark verbesserungswürdig, WLAN-Konfigurationen und feste IPs gehören nicht im Quell-Code. Dafür wäre ich vor 20 Jahren exmatrikuliert worden. Egal, alles hat seine Zeit und die obige Firmware läuft.
Zu guter Letzt brauchen wir ein Konzept, wie und wann die Daten von fhem zum Max7219 rüberwandern. Das ist mir ein Video vom Matthias aufgefallen, der etwas ähnliches gemacht hat für die Sprachausgabe seiner Sonos-Geräte. Also Link zum Beitrag und den Code ausgeliehen.
99_myutils.pm
sub MAX7219AddQueue($) {
my ($text) = @_;
my $now_string = strftime „%H:%M Uhr.“, localtime;
$text = $text . ‚ um ‚ . $now_string ;
my $cnt = 1;
while (ReadingsVal(‚MAX7219display‘, ‚queue-‚ . $cnt, ‚FREI‘) ne ‚FREI‘) {
$cnt++;
}
fhem(„setreading MAX7219display queue-$cnt $text“);
fhem(„setreading MAX7219display cnt $cnt“);
return undef;
}
sub MAX7219ReadQueue() {
my $text = '';
my $cnt = ReadingsNum('MAX7219display', 'cnt', 0);
if ($cnt > 0) {
for (my $i = 1; $i <= $cnt; $i++) {
$text .= ReadingsVal(‚MAX7219display‘, ‚queue-‚ . $i, “) . ‚. ‚;
}
fhem(„set MyBroker publish MatrixDisplay2/text $text“);
fhem(„deletereading MAX7219display queue-.*“);
fhem(„setreading MAX7219display cnt 0“);
}
return undef;
}
Als Container nehme ich ein dummy, also da laufen die Werte von den Sensoren rein
defmod MAX7219display dummy
Das sieht dann so aus
Testen kann man alles mit MQTT.fx
Für die einzelnen Sensoren habe DOIF oder AT Abfragen genommen. Das sieht aber bei jedem anders aus.
Hier einige Beispiele:
Für den Feinstaubsensor, Blog-Betrag hier
defmod DOIFFeinstaubaussenMax7912 DOIF (([+180]) and (([luftdatenaussen:FeinstaubNoPM10] >1) or ([luftdatenaussen:FeinstaubNoPM25] >1)) ) { MAX7219AddQueue("Feinstaub-aussen [luftdatenaussen]")}
attr DOIFFeinstaubaussenMax7912 do always
Für Bitcoin, Blog-Beitrag hier
defmod AT.BitcoinMax7912 at +*00:03:00 { MAX7219AddQueue("Bitcoin: " . ReadingsVal('bitcointicker', 'value', ''). " USD" )}
Temperatursensor
defmod AT.Balkontemp7912time at +*00:05:00 { MAX7219AddQueue("Balkon: " . ReadingsVal('CUL_WS_1', 'temperature', '') . " C")}
CO2-Sensor, Blogbeitrag hier
defmod MHZ_CO2__DOIF DOIF (([co2sensor:LuftNumber] > 0) and ([?08:00-23:00]) and ([?rgr_Residents] eq "zuhause") ) \
(set ECHO_G000JN0573370 reminder_normal Der C O zwei Gehalt ist [co2sensor:LuftLiteral] , { MAX7219AddQueue("Der CO2 Gehalt ist [co2sensor:LuftLiteral] ")})\
Amazon Echo – Titelanzeige
defmod AlexaTitelMax DOIF ([ECHO_G090U990870C2:currentArtist] ne "-"){ MAX7219AddQueue((ReadingsVal('ECHO_G090U990870C2', 'currentArtist', '')). " " . (ReadingsVal('ECHO_G0900990870C2', 'currentTitle', '') ))}\
attr AlexaTitelMax do always
attr AlexaTitelMax wait 120
Im Grunde könnt ihr hier den Status von einer Kaffeemaschine einbauen, einfach die Daten in den Readings schubsen und nach ein paar Minuten habt ihr diese auf dem Display.
Zum Nachbauen: