Energie-
Verbrauch
Bewegungs-
melder
ioBroker-DHT22
ioBroker-
Laufschrift
ioBroker LED-
Thermometer
ioBroker-OLED
ioBroker
Multi-OLEDs
ioBroker
Mini-Mülltonne
Ball on Plate
Sonstige
Basteleien
| ioBroker DOT Matrix Laufschrift angesteuert von WEMOS D1 mini |
|
(speziell für ioBroker-Anwender) 13.02.2019
|
|
Einleitung: Ich bin jetzt ebenfalls in das Thema "Smart Home" eingestiegen und habe mir ein kleines System aufgebaut. Das System besteht hardwaremäßig aus einer RaspberryMatic (Raspberry Pi 3B plus 868MHz-Funkplatine), sowie einem zweiten Raspberry Pi 4B (4 GByte), auf dem die Software "ioBroker" installiert ist. Die Daten der Sensoren aus der RaspberryMatic, sowie von anderen Sensoren (Shelly, Sonoff, etc.) werden von ioBroker eingelesen und mit dem sog. vis-Adapter optisch "hübsch" aufbereitet. Man kann dann mit einem Browser (Smartphone, Tablet,oder PC) die Stati ansehen, bzw. entspr. Schaltvorgänge auslösen und so sein "Smart Home" steuern. Hier ein Beispielbild eines sog. Views, nach meinem Gusto gestrickt:
|
Eigene Umsetzung der Matrix-Laufschrift: Hier soll es aber um die den Bau einer Hardware-Laufschrift gehen, die einige Daten von ioBroker zyklisch darstellen kann. Auf das Thema aufmerksam geworden bin ich durch einen Thread im ioBroker-Forum, bzw. durch entspr. Anleitungen auf github: https://forum.iobroker.net/topic/12811/esp-matrix-anzeige-fully-iobroker-steuerbar, https://github.com/liv-in-sky/MatrixDisplayESP8266/blob/master/README.md https://github.com/jp112sdl/MatrixDisplayESP8266 Soweit, so gut, allerdings hatte ich Probleme bei der softwaremäßigen Umsetzung des Ganzen. Das Hochladen des entspr.Sketches via Arduino-IDE auf einen Wemos D1 mini hat zwar funktioniert, allerdings habe ich es nicht geschafft, mehr als einen Datenpunkt aus ioBroker zur Anzeige zu bringen. Nach etlichem Rumprobieren mit Umbennenung der Datenpunkte in ioBroker habe ich aufgegeben und letztendlich den Sketch "umgebaut". Meine Änderungen:
Zur Hardware gibt es nicht viel zu sagen:
Nachfolgend der Schaltplan und der Aufbau auf Lochrasterplatine:
Eine Sache hat mich beim Testen allerdings bald zur Verzweiflung gebracht: Einige der Einzel-Displays haben manchmal geflackert. Zuerst habe ich an meinen Lötkünsten beim Zusammenlöten der 4 Module gezweifelt, da subjektiv beim Anfassen, bzw. vorsichtigem Biegen der Module manchmal der Fehler verschwunden war. Letztendlich hat sich aber herausgestellt, das es bei 2 der China-Schr....-Module eine Unterbrechung der Vcc-Leitung auf der Platine hatte. Beheben konnte ich es aber einfach durch überbrücken der Vcc-Punkte mit einer Drahtbrücke, s. Foto: |
|
|
Gehäuse: Dank vorhandener Handkeissäge nebst Führungsschiene, habe ich in 2 Buchen-Leimholzbretter (Baumarkt) mehrere Längs-Nuten gesägt, in die die Matrix-Module dann einfach einrasten. Dazu wurden die Matrix-Module vorher auf ein 5mm Sperrholzbrett geschraubt, das ober- und unterhalb der Module jeweils ca. 5mm übersteht. Diese Überstände rasten dann in die Nuten in den Leimholzbrettern ein. Zur Erhöhung des WAF-Faktors ;-) wurde zusätzlich noch eine rote, durchsichtige Acrylglas-Blende (e..y) zurechtgesägt, die ebenfalls in einer Nut vor den Displays einrastet. Hinter diese Frontblende wurde mit Heißkleber der LDR geklebt, der je nach einfallendem Umgebungslicht die Helligkeit der Matrix anpasst. Das Gehäuse ist innen (links und rechts) jeweils 1cm breiter als die Matrix, was den problemlosen Einbau des LDR hinter der Frontblende ermöglicht, sowie auch den Blickwinkel bei Betrachtung von der Seite erhöht. Andernfalls wird u.U. ein Teil des Anfangs-, bzw. Endzeichens von den Seitenblenden (ebenfalls Acrylglas) verdeckt. Als Rückwand wurde ebenfalls ein 5mm Sperrholzbrett verwendet, in das die beiden Taster (Reset, Effektwahl) mit Heißkleber befestigt wurden. Auf den Reset-Taster kann man ggf. verzichten, manchmal hat der Wemos bei mir aber nach Anschluß der Spannungsversorgung und Nichterreichen des NTP-Servers keinen sauberen Reboot hinbekommen, so daß ihn manuell resetten musste. Aus der Mitte des Sperrholz-Brettchens wurde noch ein Rechteck ausgesägt, durch das man den darunter liegenden Micro-USB-Anschluß des Wemos zum Flashen, bzw. zur Stromversorgung erreichen kann. Apropos Flashen: das Flashen via OTA (Over the air, also über WLAN) hat bei mir nicht funktioniert, obwohl der OTA-Port in der Arduino-IDE angezeigt wird. Die OTA-Implementierung im Sketch sollte m.E. in Ordnung sein. Die IDE meckert irgendwas von Java-Problemen an, OTA ist mir aber nicht so wichtig (hat bei anderen Arduino-Projekten aber funktioniert, die ich allerdings von einem anderen Windows XP-Rechner (ja ich weiß, ist veraltet) geflashed habe). Anbei 2 Fotos des Gehäuses: |
|
|
Software: |
|
_______________________________________________________________________________________________________ Achtung !!! : Es wurde mit dem etwas älteren esp8266 core V2.7.1 compiliert Achtung !!! ( mit den neueren cores ab V 3.0.0 in Verbindung mit der FasLed-library bricht das Compilieren ab, siehe z.B. hier: https://forum.arduino.cc/t/esp8266-core-3-0-und-fastled/921375" ) Um die ältere V2.7.1 zu installieren, in der Arduino-IDE auf Boardverwalter --> esp8266 --> Version auswählen und dort die 2.7.1 anklicken. Es dauert dann eine Weile, bis die V 2.7.1 installiert ist. ( Zum Vergrößern: Rechte Maustaste -> Grafik in einem neuen Tab öffnen ) Danach den Sketch Mini-Muelltonne.ino compilieren und auf den WEMOS hochladen. Hinweis: Wenn gewünscht, kann nach dem Compilieren und Upload des Sketches auf den WEMOS, wieder in in gleicher Weise auf die (momentan) aktuelle V 3.1.1 umgestellt werden. _______________________________________________________________________________________________________ |
|
In ioBroker muss der "Simple API-Adapter" installiert sein! Ansonsten werden noch 2 Software-Programme benötigt: zum Einen der Arduino-Sketch "ioBroker_Laufschrift.ino", der auf den Wemos geflashed wird und zum Zweiten ein Javascript "Matrix-Laufschrift.js", welches zyklisch per Cron in ioBroker ausgeführt wird. Im Arduino-Sketch "ioBroker_Laufschrift.ino" müssen manuell die Netzwerkparameter, sowie der Datenpunkt von ioBroker eingetragen werden, von dem die Daten kommen. Bei mir ist das "http://xxx.xxx.xxx.xxx:8087/getPlainValue/javascript.0.Laufschrift", wobei die "x" durch die IP-Adresse des ioBoker-Server ersetzt werden müssen. Dann muss noch die Anzahl der vorhandenen Matrix-Module unter #define MAX_Devices eingetragen werden. Bei 4 Stck. 4fach-Modulen wäre der Wert eigentlich 16, im Sketch steht aber 14, nun das kommt einfach daher, weil ich beim Testen 2 Displays "gehimmelt" habe und die 4er-Platine mittels Laubsäge um 2 Displays "erleichtert habe ;-) Man kann natürlich auch weinger als 4 Stck. 4fach-Module verwenden, es sollten aber mindestens 2 Stck. sein (= 8 Zeichen), da m.E. die Laufschrift sonst nur schwer lesbar ist. Den NTP-Server kann man ggf. auch anpassen, ist aber nicht unbedingt notwendig. Das Javascript "Matrix-Laufschrift.js" soll nur als Gerüst dienen, da ja jeder andere Sensoren und Aktoren, bzw. Datenpunkte verwendet. Ich lasse das Script jede 45te Sekunde ausführen (s. Eintrag unter schedule). Wichtig ist die Variable udpIP='xxx.xxx.xxx.xxx', darin muss die IP-Adresse des Wemos, bzw. der Laufschrift eingetragen werden! Im Script folgen dann einige Datenpunkte meiner Sensoren, die müssen natürlich an die eigene Konstellation, bzw. die eigenen Datenpunkte angepasst werden. In der Variablen var ausgabe_datenpunkt = 'javascript.0.Laufschrift'; wird der Ausgabe-Datenpunkt festgelegt, d.h. der Datenpunkt, wo das Script die Daten speichert. Dieser Datenpunkt muss vorher einmalig manuell !!! angelegt werden (Typ: Zeichenkette).
Dann folgen im Script noch einige if-Abfragen, welche bewirken, daß wenn z.B. if(post_ist_da == true) auf der Matrix eben "Post ist da" angezeigt wird und wenn der Postbote nichts in den Briefkasten geworfen hat, diese Anzeige unterdrückt, d.h. nicht angezeigt wird. Mit anderen Worten: Es werden nur die momentan relevanten Infos in der Laufschrift angezeigt. Wenn alle Datenpunkte, bzw. EinzelStrings, vom Script erfasst wurden, wird daraus der kpl. Ausgabestring zusammengesetzt: In der Variablen var ausgabe = String1 + String2 + String3 + Stringxx ... werden dann die Werte aller Datenpunkte, getrennt jeweils durch Semikolon, zusammengefasst. Anschl. wird der Ausgabe-Datenpunkt mit setState (pfad, ausgabe, true) gefüllt, also der Ausgabe-String in javascript.0.Laufschrift geschrieben. Als Info, daß das Script ausgeführt wurde, wird noch eine Meldung in das ioBroker-log geschrieben. Wer diese Log-Meldung nicht benötigt, kann die Zeile im Script löschen. Schlußendlich erfolgt noch das Senden via udp zum Wemos, wo die Daten dann sofort angezeigt werden (in diesem Abschnitt bitte nichts ändern). Ich hoffe, ich konnte das einigermaßen verständlich erklären. |
|
Edit 02.03.22: Überarbeiteter Sketch ioBroker_Laufschrift.ino und das Script können ganz am Ende von dieser Seite herunter geladen werden. ( Es wurde die NTP-Routine zum Holen der Uhrzeit kpl. ersetzt, sowie die library bounce2.h zum Entprellen des Effekt-Buttons integriert. Alle zugehörigen libraries bitte selbst aus dem Internet herunter laden ) |
|
Last, but not least, ein Video wo man die Helligkeits-Steuerung und die durch Taster veränderbaren Effekte sehen kann: ( es ist gar nicht so einfach, ohne Wackler mit dem Tablet zu filmen und gleichzeitig den Taster zu betätigen ;-) https://youtu.be/p0xyaxu3kF8 |
| Downloads | |
| Sketch: | ioBroker_Laufschrift.ino |
| ioBroker Javascript: | Matrix-Laufschrift.js |