Robins Blog – Technik und Multimedia

Smartes Max7219 Dot Matrix Display für fhem als Status-Anzeige

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

attr MAX7219display readingList scrollspeed brightness
attr MAX7219display room 99_Develop,Logik
attr MAX7219display setList scrollspeed:slider,16,1,50 brightness:slider,1,1,15
attr MAX7219display stateFormat scroll scrollspeed bright brightness

defmod MAX7219display_notify_1 notify MAX7219display:brightness:..* set MyBroker publish "MatrixDisplay2/intensity" $EVTPART1
defmod MAX7219display_notify_2 notify MAX7219display:scrollspeed:..* set MyBroker publish "MatrixDisplay2/scrollwait" $EVTPART1

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.

Installation: Einfach meine bin-Datei auf dem Wemos schubsen, WLAN und MQTT-Server konfigurieren, fertig.


Aktion: Geflashtes Wemos D1 für 6,95 Euro inkl. Versand, oder Bin-Datei für 4 Euro per eMail.

Zum Nachbauen:

Die mobile Version verlassen