Status Display mit Wemos D1 Mini

Entwicklung und Bau von Hardware aller Art, die im HM-Umfeld eingesetzt werden kann

Moderator: Co-Administratoren

Antworten
Hackertomm
Beiträge: 189
Registriert: 18.04.2018, 12:32
Danksagung erhalten: 2 Mal

Status Display mit Wemos D1 Mini

Beitrag von Hackertomm » 29.02.2020, 11:56

Es geht ein Status Display dass auf dieser Seite vorgestellt wurde.
Als Ergänzung gab es noch eine weitere Seite, wo die Scriptprogrammierung des Display etwas beschrieben wurde, allerdings eher rudimentär.

Auf Grundlager diese Seiten habe ich das Display nachgebaut, mit einem 4x20 Display und einem etwas anderen Script.
Angepasst eben, an die Sensoren, die ich darstellen will.
Script

Code: Alles auswählen

string stdout;
string stderr;
string url = "http://192.168.2.105/control?cmd=LCD,1,2,'Sensoren u. Status'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
object oGarage = datapoints.Get("BidCos-RF.OEQ2138226:1.STATE");
string sGarage = "Garage ";
if(oGarage.Value()) {sGarage= sGarage#"offen";}else{sGarage=sGarage#"zu";}
string url = "http://192.168.2.105/control?cmd=LCD,2,5,'"#sGarage#"'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Temp01 = dom.GetObject("BidCos-RF.JPTH10I001:1.TEMPERATURE").Value().ToString(1);
string url = "http://192.168.2.105/control?cmd=LCD,3,3,'In  "#Temp01#"ßC'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Hum01 = dom.GetObject("BidCos-RF.JPTH10I001:1.HUMIDITY").Value().ToString(2);
string url = "http://192.168.2.105/control?cmd=LCD,3,14,'"#Hum01#"%'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Temp03 = dom.GetObject("BidCos-RF.JPTH10I003:1.TEMPERATURE").Value().ToString(1);
string url = "http://192.168.2.105/control?cmd=LCD,4,3,'Out "#Temp03#"ßC'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Hum03 = dom.GetObject("BidCos-RF.JPTH10I003:1.HUMIDITY").Value().ToString(2);
string url = "http://192.168.2.105/control?cmd=LCD,4,14,'"#Hum03#"%'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
Welches unter Mithilfe aus dem CuXD Forum hier umgesetzt wurde.

Da wurde zb. in einem der letzten Beiträge geschrieben, dass es auch noch bessere Möglichkeiten gäbe, das Display bzw. dessen Anzeige zu steuern.

Momentan sieht die Anzeige so aus:
Bild

Die 1. Zeile ist nur eine Überschrift, rein Text.
Die 2. Zeile zeigt den Zustand meines Garagentores, anhand eines HM-Sec-SCo.
Die 3. Zeile zeigt die Werte so eines Selbsbausensors, für den Innenbereich.
Die 4. Zeile zeigt die eines 2. Selbsbausensors, der allerdings wettergeschützt im Außenbereich hängt.

Wer Vorschläge zum Ändern der Anzeige hat, ich bis dafür Offen.
Gruß
Hackertomm

Virtual Image auf einer Qnap TS-453pro, 2GHZ Celeron u. 8GB RAM, aktuell Raspberry X86, Vers.3.51.6.20200229

Martin62
Beiträge: 120
Registriert: 09.12.2019, 21:24
Hat sich bedankt: 12 Mal
Danksagung erhalten: 7 Mal

Re: Status Display mit Wemos D1 Mini

Beitrag von Martin62 » 29.02.2020, 16:13

Hallo, was soll man da noch anders machen. Wenn du diese Infos haben möchtest, dann ist das doch gut. Danke für das Script! Bin noch Neuling in der Richtung und über jede Veröffentlichung dankbar.
Ich persönlich finde ein max-, min Tempwert immer interessant. Dafür könnte man die Überschrifft opfern, ist ja auch so eindeutig. Wäre mein einziger Vorschlag.
Gruß Martin
Gruß Martin

Baxxy
Beiträge: 504
Registriert: 18.12.2018, 15:45
Hat sich bedankt: 47 Mal
Danksagung erhalten: 68 Mal

Re: Status Display mit Wemos D1 Mini

Beitrag von Baxxy » 01.03.2020, 16:23

Hackertomm hat geschrieben:
29.02.2020, 11:56
Da wurde zb. in einem der letzten Beiträge geschrieben, dass es auch noch bessere Möglichkeiten gäbe, das Display bzw. dessen Anzeige zu steuern.
Deine Ansteuerung ist ja soweit in Ordnung. Das "besser" bezog sich auf Alchy's Hinweis das es nicht gut sein kann so viele system.Exec Aufrufe in so kurzer Zeit hintereinander abzusenden. (bei Deinem aktuellen Script sind es sogar 6 system.Exec Aufrufe) Inwieweit sich das tatsächlich auf die CCU und deren Stabilität auswirkt kann ich aber nicht beurteilen. Da vertraue ich einfach auf Alchy's Kenntnis des Systems.

Was kann man also tun?
1. Man könnte ein Programm erstellen das beim CCU-Start das Display einmalig löscht und verzögert die festen Bestandteile (in deinem Fall Zeile 1) schreibt.

2. Da jeder deiner Sensoren eine eigene Zeile auf dem Display hat könnte man 3 separate Programme anlegen in denen sich das Script nur um die jeweilige Zeile kümmert. Da könnte man auch gleich Temperatur & Feuchtigkeit in einem Rutsch schreiben.
Beispiel für deinen Innensensor:

Code: Alles auswählen

string stdout;
string stderr;
string Temp01 = dom.GetObject("BidCos-RF.JPTH10I001:1.TEMPERATURE").Value().ToString(1);
string Hum01 = dom.GetObject("BidCos-RF.JPTH10I001:1.HUMIDITY").Value().ToString(2);
string url = "http://192.168.2.105/control?cmd=LCD,3,3,'In  "#Temp01#"ßC%20"#Hum01#"%%20%20'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
3. In Bezug auf 2. ist es,nur bei den Temp/Feuchtesensoren, sinnvoll das Programm auf Aktualisierung zu triggern. Das heißt aber auch das das entsprechende "Zeilenscript" alle 2-3 Minuten (oder wie oft auch immer die Selbstbau-Teile senden) gestartet wird. Das lässt sich nicht vermeiden, aber man könnte z.B. verhindern das das Script jedesmal komplett durchläuft indem man innerhalb des Scripts erstmal prüft ob sich was an den Werten geändert hat. Und nur wenn sich was geändert hat wird dann die Zeile beschrieben. Dazu muss das Script natürlich entsprechend "umgebaut" werden.

4. In Bezug auf 2. ist es für deinen "Garagensensor" am einfachsten. Programm anlegen.
Wenn --> Garage offen --> bei Änderung auslösen
Dann ---> Script

Code: Alles auswählen

string stdout;
string stderr;
string url = "http://192.168.2.105/control?cmd=LCD,2,5,'Garage offen'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
Sonst---> Script

Code: Alles auswählen

string stdout;
string stderr;
string url = "http://192.168.2.105/control?cmd=LCD,2,5,'Garage zu%20%20%20'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
Viel mehr "Optimierungen" fallen mir erstmal nicht ein. Das ganze funktioniert auch nur wenn man nur eine "Statusseite" auf dem Display hat.

Grüße
Baxxy

Baxxy
Beiträge: 504
Registriert: 18.12.2018, 15:45
Hat sich bedankt: 47 Mal
Danksagung erhalten: 68 Mal

Re: Status Display mit Wemos D1 Mini

Beitrag von Baxxy » 01.03.2020, 16:52

Hier noch ein Bild meiner 2 LCD's. Das "Gehäuse" ist ein ELV-Pappkarton von einem Funkmodul Bausatz. :lol:
Die beiden Displays sind von verschiedenen Herstellern und haben daher (leider) eine ziemlich unterschiedliche Erscheinung.
LCD4x20_BX.jpg
Grüße
Baxxy

Hackertomm
Beiträge: 189
Registriert: 18.04.2018, 12:32
Danksagung erhalten: 2 Mal

Re: Status Display mit Wemos D1 Mini

Beitrag von Hackertomm » 01.03.2020, 18:47

Ich habe das Script nochmal geändert:

Code: Alles auswählen

string stdout;
string stderr;
string url = "http://192.168.2.105/control?cmd=LCD,1,2,'Sensoren u. Status'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
object oGarage = datapoints.Get("BidCos-RF.OEQ2138226:1.STATE");
string sGarage = "Garage ";
if(oGarage.Value()) {sGarage= sGarage#"offen";}else{sGarage=sGarage#"zu";}
string url = "http://192.168.2.105/control?cmd=LCD,2,5,'"#sGarage#"'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Temp01 = dom.GetObject("BidCos-RF.JPTH10I001:1.TEMPERATURE").Value().ToString(1);
string Hum01 = dom.GetObject("BidCos-RF.JPTH10I001:1.HUMIDITY").Value().ToString(2);
string url = "http://192.168.2.105/control?cmd=LCD,3,3,'In  "#Temp01#"ßC%20"#Hum01#"%%20%20'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
string Temp03 = dom.GetObject("BidCos-RF.JPTH10I003:1.TEMPERATURE").Value().ToString(1);
string Hum03 = dom.GetObject("BidCos-RF.JPTH10I003:1.HUMIDITY").Value().ToString(2);
string url = "http://192.168.2.105/control?cmd=LCD,4,2,'Out  "#Temp03#"ßC%20"#Hum03#"%%20%20'";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
Vor Ausführung dieses Scripts startet folgendes Script, zeitverzögert um 1 Sekunde.

Code: Alles auswählen

string stdout;
string stderr;
string url="http://192.168.2.105/control?cmd=lcdcmd,clear";
system.Exec ("wget -q -O /dev/null " #url, &stdout, &stderr);
Dieses Script löscht einfach das Display komplett.

Es sind jetzt nur noch 4 System Exex Aufrufe, einer pro Displayzeile.
Es ist leider jeder Aufruf nötig, weil auf dem Display wieder ganze Zeilen verschwinden oder erst gar nicht erscheinen.
Die Garage im Script, da wird True oder False abgefragt, über einen opt. Tür/Fensterkontakt und in einen Text umgesetzt, das will ich so haben.
So lass ich das Script erstmal mal.

So ein Blaues Display habe ich ebenfalls, das arbeitet aber nicht ohne Hintergrundbeleuchtung, dieses Grüne jedoch schon.
Auf dem Foto ist keine Hintergrundbeleuchtung eingeschaltet, das spart Strom.
Das Grüne Display braucht ohne Hintergrundbeleuchtung genau 100mA, ein Blaues Display mit Hintergrundbeleuchtung 130mA, beide incl. Wemos.
Ich könnte ja auch anhand der Uhrzeit die Displaybeleuchtung Anschalten oder Ausschalten.
Aber ich habe da grad eine kleine 1800mAh Powerbank als Stromquelle dran und einen USB Energimesser dazwischen und teste grade, wie lange das Display damit durch hält.
Gruß
Hackertomm

Virtual Image auf einer Qnap TS-453pro, 2GHZ Celeron u. 8GB RAM, aktuell Raspberry X86, Vers.3.51.6.20200229

Antworten

Zurück zu „Hardwareentwicklung und Selbstbau von Aktoren und Sensoren“