FHEM Forum

Verschiedenes => Bastelecke => ESP Familie => Thema gestartet von: tklein am 08 April 2017, 16:46:39

Titel: [gelöst] Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 08 April 2017, 16:46:39
Hallo,

kann mir jemand sagen, wo ich den Fehler habe? Ich bekomme im Display nicht den ganzen String angezeigt.
Das ist ein Codeauschnitt aus einer Funktion in meiner 99_My_Utils. Auf dem Wemos ist ESP Easy Mega. Device: "Display - Oled SSD1306"
Per MQTT konnte ich nur die ersten 6 Zeilen befüllen daher nun per FHEM HTTP.

Die Werte vom Wemos kommen rein und wurden entsprechend vorher als Device angelegt (bis auf das Oled Display).
Auch kann ich teilweise auf dem Display schreiben.

..
my $wemosdevice = "ESPEasy_Wemos_Schlafzimmer";
my $tmp_kueche = $temp_kueche . " c " . $hum_kueche . " % Ku";
fhem("set $wemosdevice oled 2 1 $tmp_kueche");


Log: 2017.04.08 16:30:14 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 2 1 25.1 c 43.40 % Ku
Display: 43.40
--> mehr wird im Display nicht ausgegeben.

Evtl. mal auf die 147 Version wechseln? Oder framed als Display-Device?

Viele Grüße
Thomas
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: jensb am 13 April 2017, 19:54:47
Hallo Thomas,

durch die Leerzeichen zerfällt der String $tmp_kueche bei der Übergabe im Befehl fhem() in seine Einzelteile. Ob du die Gesamtlänge prinzipiell übertragen kannst, kannst du testen, indem du alle Leerzeichen z.B. durch Bindestriche ersetzt. Es hilft aber meist, so einen String in Doppelhochkommas einzurahmen, also z.B.

fhem("set $wemosdevice oled 2 1 \"$tmp_kueche\"");

Habs nur auf der FHEM-Kommandozeile mit einem Reading ausprobiert - ob es im Skript so funktioniert müsstest du selbst mal testen.

Grüße,
Jens
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 14 April 2017, 14:02:43
Hi Jens,

warum macht fhem so etwas? :-) Oder liegt das eher am ESP Bridge Modul?

Hier klappt es bei mir:


my $msg_string = "Übersicht:\nWohnzimmer: " . $temp_wz .  " Grad Solltemperatur: " . $soll_temperatur ." / Feuchtigkeit: " . $hum_wz . " %\nKüche: " . $temp_wz .  "
Grad / Feuchtigkeit: " . $hum_kueche ."%\nBad: " . $temp_bad .  " Grad / Feuchtigkeit: " . $hum_bad . "%\nSchlafzimmer: " . $temp_sz . "\nKinderzimmer: " . $temp_kind . 
" Grad / Feuchtigkeit: " . $hum_kind . "%\nLuftdruck: " .$pressure . "\n\nWetterwarnung: " . $wheather_warnings .  "\nHelligkeitswert: " .  $helligkeit . "\nAussentemperatur: " . $aussentmp .
"\nVerkehrsmeldungen: " . $meldung_a1 .  "\nVerzögerung: " . $delay  ."\n\nFeinstaub: PM10: " . $pm10 . " PM2.5: " . $pm2 ."\nStatus Alarmanlage: " . $status_alarm ;


if ($status_duo eq "on") {
fhem("set Duo msg info 15 $msg_string ");
return "Daten werden am Beamer angezeigt";
}

else {
fhem("set Pushover_Client msg 'Infos\n' $msg_string '' 0 '' ");
return "Es wurde eine Nachricht versendet da der Receiver ausgeschaltet ist.";
}



Das mit dem \" hat leider nichts gebracht. Habe es mit Underscores gemacht. Ist eher unschön aber immerhin.

Vielen Dank & Grüße
Thomas
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: medikopter am 14 April 2017, 16:15:00
Wie hast du den ESP in fhem angelegt?
Stehe bald vor der selben Situation
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 14 April 2017, 16:56:36
@ medicopter

unter https://forum.fhem.de/index.php?topic=55728.0 ist das ziemlich gut beschrieben. Bei ESP Easy als Controller "FHEM HTTP" einstellen. Nachdem das Modul in FHEM integriert wurde, werden die ESP-Devices automatisch angelegt (neuer Raum ESP Easy) wenn die Werte korrekt zum autocreate/save oder/und "autoload_undefined_devices" gesetzt sind. (wie bei Devices vom CULxxx)
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: jensb am 14 April 2017, 17:40:44
@tklein

Zitat... warum macht fhem so etwas?

Der Aufruf fhem() übergibt alle Parameter in der Klammer als einen einzigen String an den FHEM-Kern und der zerlegt diesen String zum 1. Mal, um herauszufinden, welcher Befehl gemeint ist (set) und welches Device (ESPEasy_Wemos_Schlafzimmer). Nach der Übergabe der übrigen Eingabedaten an das das Device-Modul werden auch diese zerlegt, da ja je nach Kommando unterschiedlich viele Parameter unterstützt werden. Es hängt also davon ab, wie das Modul - und in diesem Fall auch der ESP - programmiert wurde, was dabei mit den Leerzeichen "innerhalb" von Parametern passiert. Deshalb klappt es wahrscheinlich auch bei deinem "Duo" und "Pushover_Client".

Wenn es dir wichtig ist, könntest du diese Frage an den Maintainer des Moduls stellen, sofern dazu keine Hinweise in der Commandref zu finden sind.
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 14 April 2017, 18:13:34
@ Jens:

Wie bekomme ich das raus, wer der Maintainer für das Modul ist?
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: jensb am 14 April 2017, 18:17:13
Im FHEM-Verzeichnis liegt die Datei "MAINTAINER.txt":
ZitatFHEM/34_ESPEasy.pm           dev0                 http://forum.fhem.de Bastelecke/ESP8266

Also ist "dev0" der Maintainer des Moduls.
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 14 April 2017, 18:21:58
thx und wieder etwas gelernt :-)
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 15 April 2017, 08:03:24
@tklein: Da ich keine Displays am ESP verwende müßtest Du mal etwas testen, damit ich das ESPEasy Modul ggf. entsprechend anpassen kann. Über die FHEM Eingabezeile bitte folgendes eingeben:

set <esp> oled 2 1 Test%20A%20B%20C

<esp> durch Deinen Devicenamen ersetzen.

Ergibt obriger Befehl die Anzeige "Test A B C" auf dem Display?

Werden Zeichen wie "% °" auf dem Display jetzt schon korrekt dargestellt?
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 15 April 2017, 10:19:16
Hallo,

@dev0

vielen Dank für den eigentlich logischen Hinweis. :-)

ZitatErgibt obriger Befehl die Anzeige "Test A B C" auf dem Display?
--> Ausgabe: A B C   :-)
ZitatWerden Zeichen wie "% °" auf dem Display jetzt schon korrekt dargestellt?
--> Ausgabe: "

Viele Grüße
Thomas
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 15 April 2017, 10:51:03
OK, teste bitte noch folgende drei Strings:

1Hum%2060%25
2Hum:%2060%25
3Hum%3a%2060%25
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 15 April 2017, 12:14:03
Zitat1Hum%2060%25
--> Ausgabe: 1Hum 60%
Zitat2Hum:%2060%25
--> Ausgabe: 2Hum: 60%
Zitat3Hum%3a%2060%25
--> Ausgabe: 3Hum: 60%

Was macht das "25"?

Grüße
Thomas
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 15 April 2017, 13:43:22
Zitat von: tklein am 15 April 2017, 12:14:03
Was macht das "25"?
"%25" entspricht dem url-encodeten (https://de.wikipedia.org/wiki/URL-Encoding) "% Zeichen".

Im Anhang findest Du eine ESPEasy Modul Version, die die Text-Parameter kodiert an den ESP schickt. Kannst Du die Version bitte testen?
Falls keine Proble damit auftreten, dann würde ich die Version so einchecken (ohne die Log Debug Ausgaben, die jetzt noch enthalten sind).

Edit: Anhang entfernt
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 15 April 2017, 15:52:09
hi,

hier die Logausgabe dazu:



2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 1 1 23.2c, 40% WZ
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,1,1,23%2e2c%2c%2040%25%20WZ

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 2 1 25.2 c, 37.60 % Ku
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,2,1,25%2e2%20c%2c%2037%2e60%20%25%20Ku

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 3 1 23.8c, 43.8% Bad
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,3,1,23%2e8c%2c%2043%2e8%25%20Bad

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 4 1 21.4c Schlaf
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,4,1,21%2e4c%20Schlaf

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 5 1 23.3c, 48.3% Kind
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,5,1,23%2e3c%2c%2048%2e3%25%20Kind

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 6 1 1010.34
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,6,1,1010%2e34

2017.04.15 15:36:35 3: ESPEasy ESPEasy_Wemos_Schlafzimmer: set ESPEasy_Wemos_Schlafzimmer oled 7 1 41 mins
2017.04.15 15:36:35 1: DEBUG>http://192.168.0.91:80/control?cmd=oled,7,1,41%20mins




my $tmp_wz = $temp_wz . "c, " . $hum_wz . "% WZ";
my $tmp_kueche = $temp_kueche . " c, " . $hum_kueche . " % Ku";
my $tmp_bad = $temp_bad . "c, " . $hum_bad . "% Bad";
my $tmp_kind = $temp_kind ."c, " . $hum_kind . "% Kind";
my $tmp_sz = $temp_sz ."c Schlaf";



Er scheint bei den Zeilen mit  Grad und % Werten nur die % zu nehmen und ein Zeichen Versatz einzubauen. Das "y" in der ersten Zeile kannst du ignorieren. Das kommt von "ESPeasy nach dem Wemosboot. Muss da eben noch ein clear einbauen.


Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 16 April 2017, 07:26:13
Der Versatz könnte auch durch das Komma ausgelöst werden. Wenn das so ist, dann wird die Ursache auch eher im Plugin zu suchen sein, da das Komma der Trenner für die unterschiedlichen Paramaeter ist. Das müßtest Du noch etwas genauer testen, ich habe kein LCD/OLED verbaut. Am Besten über die command line testen, auch mal mit anderen "normalen" Sonderzeichen wie !"§$%&/()=[]

Edit: Wie verhält sich denn das Display, wenn Du MQTT als Übertragungsprotokoll verwendest? Das hast Du doch auch schon probiert...
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 17 April 2017, 11:01:26
Im Anhang eine aktualisierte Modulversion, die Kommata in Punkte umwandelt und den Text url-encoded sendet. Kommata sind mit dem aktuellen Plugin (ESPEasy Mega Branch), nicht über HTTP Kommandos darstellbar. Zumindest, wenn ich den Plugin Code richtig verstanden habe. Wenn Du sie benötigst, dann müßtest Du den Quellcode anpassen oder Dich an den Maintainer wenden. Außerdem werden auch alle extended ASCII Zeichen (0x7F-0xFF) ausgefiltert, die vom OLED Plugin nicht darstellbar sind, da sie in dem eingebetteten Font nicht enthalten sind.

Bitte testen.

Edit: Anhang entfernt.
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 17 April 2017, 13:43:52
vielen lieben Dank. Probiere das nach Ostern aus.

Grüße
Thomas
Titel: Antw:Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 18 April 2017, 14:09:35
Hi,

mit der v2 Version kommt beim String: !§$%&/()=[] die auf dem Bild befindlichen Zeichen an.
So wichtig ist mir das mit dem Kommata nicht. Habe es entfernt. Die Blanks waren mir wichtiger :-)
Vielen Dank für deine Anpassungen!

Grüße
Thomas
Titel: Antw:[gelöst] Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: dev0 am 20 April 2017, 13:14:54
Ich habe gerade die aktualisierte Version eingecheckt.

Es gibt zwei neue Attribute, die auch in der commandref beschrieben sind: displayTextEncode und displayTextWidth
- Mit displayTextEncode kann man das neue urlEncode abschalten, wenn man es selbst machen möchte.
- mit displayTextWidth kann man die Breite des Displays bestimmen. Wenn es gestzt ist, dann wird der Displayinhalt vor und nach der Ausgabe auf der Zeile gelöscht. Dadurch erspart man sich ein "oledcmd clear" und muss nicht alle Zeilen neu schreiben lassen.
Titel: Antw:[gelöst] Oled Display-Problem an Wemos D1 mit FHEM HTTP
Beitrag von: tklein am 20 April 2017, 15:53:29
TOP!

Grüße
Thomas