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
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
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
Wie hast du den ESP in fhem angelegt?
Stehe bald vor der selben Situation
@ 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)
@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.
@ Jens:
Wie bekomme ich das raus, wer der Maintainer für das Modul ist?
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.
thx und wieder etwas gelernt :-)
@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?
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
OK, teste bitte noch folgende drei Strings:
1Hum%2060%25
2Hum:%2060%25
3Hum%3a%2060%25
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
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
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.
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...
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.
vielen lieben Dank. Probiere das nach Ostern aus.
Grüße
Thomas
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
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.
TOP!
Grüße
Thomas