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:

Dieser Beitrag wurde unter Fhem-Hausautomation abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

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

  1. Pingback: Fhem: Coronavirus Fälle Deutschland nach Städten und Bundesländer anzeigen lassen | Robins Blog – Technik und Multimedia

  2. Robin sagt:

    Hallo Jens,
    habe ich gesehen und auch nicht kompiliert bekommen.
    Ich bin mit meinem Projekt zufrieden, läuft so wie ich es möchte. Ich werde die Software erweitern, sodaß man nicht die Konifgdaten hardcodiert eintragen muss.

    Nachtrag: Software habe ich erweitert.

    lg
    robin

  3. Florian Asche sagt:

    Hi,

    ich habe das ganze mit https://github.com/ninharp/ninESP und dem DLCD Module umgesetzt. Hattest du ninESP auch schon gesehen? Die fertig kompillierte Version läuft eher etwas holprig, die neue Version soll aber sehr gut sein. Nur bin ich leider bis heute am kompellieren gescheitert. Aber vielleicht ja für dich einen Blick wert.

    Gruß Florian

  4. Robin sagt:

    Yep, sieht besser aus. Soll ja nur als Anregung dienen.
    Ich habe noch mehr auf der todo-Liste.
    Ich bin auch gesundheitlich eingeschränkt.

    Robin

  5. Leif sagt:

    Dabei musste ich wieder an das Projekt von Dave denken, der die Anzeige hinter einem dünnen Holzfurnier platziert hat damit es optisch noch etwas schöner ausschaut.
    https://www.youtube.com/watch?v=k4Ux_I4Gl30

    Steht bei mir seit fast nem Jahr auf der viel zu langen To-Do Liste 😀

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.