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:
Auto Amazon Links: Keine Produkte gefunden. http_request_failed: Es wurde keine gültige URL übermittelt. URL: https://ws-eu.amazon-adsystem.com/widgets/q?SearchIndex=All&multipageStart=0&multipageCount=20&Operation=GetResults&Keywords=B079HVW652|B0754W6Z2F&InstanceId=0&TemplateId=MobileSearchResults&ServiceVersion=20070822&MarketPlace=DE Cache: AAL_cf0dfe35fc9d2847d1b383a85379cdef
Pingback: Fhem: Coronavirus Fälle Deutschland nach Städten und Bundesländer anzeigen lassen | Robins Blog – Technik und Multimedia
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
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
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
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 😀