Übertragung von Kommazahlen von FHEM an ESPeasy-Oled SSD1306

Begonnen von SirWillfried, 04 Juni 2018, 14:25:15

Vorheriges Thema - Nächstes Thema

SirWillfried

Hallo,

Ich habe mich jetzt seit einigen Tagen mit FHEM auf dem Raspi, ESPeasy und verschiedenen Sensoren und dem SSD1306 beschäftigt. Ich bin dabei auf folgendes Problem gestoßen. Über zwei SHT31 Sensoren, die ich an einem NoedMCU mit ESPeasy-mega 2.0 angeschlossen habe, empfange ich in regelmäßigen Abständen die Werte für Temperatur und Feuchte. Mit dem FHEM Modul "dewpoint" lass ich mir den Taupunkt berechnen. Diese Werte aus Temperatur, Feuchte und Taupunkt wollte ich dann auch auf dem am gleichen NodeMCU angeschlossenen OLED SSD1306 ausgeben lassen. Die reine Übertargung mit "set ESP_Display oled X Y 1234 klappt ja auch. Die Werte von Temp und Humid bekomme ich ohne Kommastelle übermittelt. Das Modul Dewpoint gibt mir aber eine Zahl mit einer Kommastelle aus. Im Eventmonitor sehe ich dann zum Beispiel "ESP_Display oled 6 1 17,3°C" .
Jetzt das Problem. Sobald ein "." als Komma enthalten ist, zweigt das Display Garnichts von den gesendeten Werten oder Zeichen an. Wie müsste ich die Übertragung an das Oled umstricken, um Punkte dargestellt zu bekommen? Oer kann ich "Dewpoint" klarmachen, dass es keine Kommastelle angeben muss? Ist beim Taupunkt nicht wirklich entscheidend.
ich habe wie gesagt schon "set....." ausprobiert als auch {fhem("set....")}. Beides Identisch. Auch das attr displayTextEncode 0 oder 1 hat nicht geholfen.
Auf dem ESPeasy habe ich FHEM http eingestellt und unter FHEM eine espBridge definiert. Das klappt für die restlichen Dinge... soweit ich das beurteilen kann :-)

Falls jemand eine Idee hat, ich würde mich freuen. Danke.

dev0

Falscher Forenbereich bitte nach ESP8266 verschieben.

Kann ich nicht nachvollziehen. Ist das ESPEasy Modul auf dem aktuellen Stand?
Das Attribut displayTextEncode muß aktiviert sein, sonst wird das Komma von der ESPEasy Firmware als Trenner von Argumenten interpretiert.

Zeig ein List des Device und ein verbose 5 Log der Bridge, wenn der Befehl gesendet wird. Beides bitte in code tags.

Goblin

Hallo,

ich habe exakt das gleiche Problem wie SirWillfried.

Mit einer älteren Version von ESPeasy wurden interessanterweise problemlos Punkte dargestellt, die von FHEM kamen.

Der Befehl "ESP_Display oled 6 1 18.75 C" hätte in Zeile 6 direkt "18.75 C" am Display ausgeben.
Habe mich nach einem Update gewundert, dass alle Zeilen, die ich aus FHEM beschreibe plötzlich leer blieben.
Im FHEM-Log fanden sich aber ganz normal die Einträge.

Ich übermittele folgende Daten : Außentemp, Außen-Luftfeuchte und aktuelle Leistung (Stromverbrauch) - alle Werte waren zuvor mit Nachkommastellen, getrennt mit einem Punkt.

Da ich keine Lösung gefunden habe, habe ich die aktuelle Leistung (zuvor in kWh mit 3 Nachkommastellen) mit 1000 multipliziert - diese wird jetzt einfach in Watt ausgegeben... Das passt...

Bei Temperatur und Luftfeuchtigkeit hätte ich jetzt einfach die (jeweils 2) Nachkommastellen weglassen können, das wollte ich nicht, habe daher den Wert mit 100 multipliziert, nicht ganz optimal. Wenn es draußen 7.54 C sind, steht jetzt im Display "754 C"

Wer eine Lösung hat, immer her damit - ob FHEM seitig oder im ESPEasy Code - ganz egal...

Gruß


dev0

Mit der aktuellen ESP Easy Modul Verison (aka 2.0) und einer älteren ESP Easy Mega 2.x Firmware Version, kann ich dieses Verhalten nicht nachstellen.

Wenn das Attribut displayTextEncode auf '1' gesetzt ist oder es nicht angegeben ist, dann kann ich die Werte 'test.1' und 'test,1' senden und sie werden als 'test.1' angezeigt.

Wenn das bei Dir so nicht funktioniert, dann bitte mit einer aktuellen ESPEasy Mega 2.xx Firmware und der aktuellen ESP Easy Modul Version testen. Wenn dieser Effekt dann immer noch auftritt, dann bitte:
- ein list der Bridge und des logischen Device posten
- die Version der ESP Easy Firmware zeigen
- ein verbose 5 log der ESP Easy Bridge und des entsprechenden (O)LED Devices posten, wenn der Befehl gesendet wird
- alles in Code Tags bitte.

Goblin

Hallo dev0,

dann vesuche ich mal, dir die benötigten Infos zu geben...

Bridge:
Internals:
   CONNECTS   7033
   DEF        bridge 8383
   FD         10
   HOST       bridge
   IPV        4
   MAX_HTTP_SESSIONS 3
   MAX_QUEUE_SIZE 250
   NAME       espBridge
   NOTIFYDEV  global
   NR         24
   NTFY_ORDER 50-espBridge
   PORT       8383
   STATE      initialized
   SUBTYPE    bridge
   TYPE       ESPEasy
   VERSION    1.39
   WARNING_192.168.0.25 connect to http://192.168.0.25:80 timed out
   READINGS:
     2018-09-28 22:22:50   state           initialized
   helper:
     pm:
       Encode     1
       JSON       1
     queue:
       192.168.0.25:
     sessions:
       192.168.0.20 0
       192.168.0.25 0
Attributes:
   authentication 0
   combineDevices 0
   group      ESPEasy Bridge
   room       ESPEasy
   verbose    5


Device -

Internals:
   DEF        192.168.0.25 80 espBridge ESPWZ_DHT22
   ESP_BUILD  20102
   ESP_BUILD_GIT mega-20180927
   ESP_BUILD_NOTES  - Mega
   ESP_NODE_TYPE_ID 17: ESP Easy Mega
   ESP_SLEEP  0
   ESP_UNIT   0
   ESP_VERSION 2
   HOST       192.168.0.25
   IDENT      ESPWZ_DHT22
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     23068
   NAME       ESPWZ
   NOTIFYDEV  global
   NR         49
   NTFY_ORDER 50-ESPWZ
   PORT       80
   STATE      Hum: 44.70 Tem: 21.50
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.39
   espBridge_MSGCNT 23068
   espBridge_TIME 2018-09-30 14:36:21
   READINGS:
     2018-09-30 14:36:04   Humidity        44.70
     2018-09-30 14:36:04   Temperature     21.50
     2018-09-30 14:33:08   presence        present
     2018-09-30 14:36:21   state           Hum: 44.70 Tem: 21.50
   helper:
     fpc        1538166182
     pm:
       Encode     1
       JSON       1
     received:
       Humidity   1538310964
       Temperature 1538310964
Attributes:
   IODev      espBridge
   Interval   300
   displayTextEncode 1
   group      ESPEasy Device
   presenceCheck 1
   readingSwitchText 1
   room       ESPEasy
   setState   3
   verbose    5


auf dem ESP ist folgende FW drauf : mega-20180927

verbos 5 log - habe den Befehl mit dem Punkt händisch gesendet, im Display wurde es nicht angezeit - weiter unten im Log sende ich die Leistung in Zeile 6 - ohne Punkt und Komma - da geht es - aus den Meldungen im Log werde ich nicht schlau

2018.09.30 14:29:04 3: ESPEasy: set ESPWZ oled 2 2 Aussen: 18.50 C
2018.09.30 14:29:04 5: ESPEasy ESPWZ: IOWrite($defs{ESPWZ}, 192.168.0.25, 80, ESPWZ_DHT22, oled, 2,2,Aussen%3a%2018%2e50%20C)
2018.09.30 14:29:04 4: ESPEasy espBridge: Send oled,2,2,Aussen%3a%2018%2e50%20C to 192.168.0.25 for ident ESPWZ_DHT22
2018.09.30 14:29:04 5: ESPEasy espBridge: NonblockingGet for ident:ESPWZ_DHT22 => http://192.168.0.25:80/control?cmd=oled,2,2,Aussen%3a%2018%2e50%20C
2018.09.30 14:29:34 4: Connection accepted from espBridge_192.168.0.25_52344
2018.09.30 14:29:34 4: ESPEasy espBridge_192.168.0.25_52344: Peer address 192.168.0.25 accepted
2018.09.30 14:29:34 5: ESPEasy espBridge_192.168.0.25_52344: Received header: {'Content-Length' => 368,'Host' => '192.168.0.11:8383','User-Agent' => 'ESP Easy/20102/Sep 27 2018 02:20:58','Connection' => 'close'}
2018.09.30 14:29:34 5: ESPEasy espBridge_192.168.0.25_52344: Received content: {"module":"ESPEasy","version":"1.04","data":{"ESP":{"name":"ESPWZ","unit":0,"version":2,"build":20102,"build_notes":" - Mega","build_git":"mega-20180927","node_type_id":17,"sleep":0,"ip":"192.168.0.25"},"SENSOR":{"0":{"deviceName":"DHT22","valueName":"Temperature","type":2,"value":"21.50"},"1":{"deviceName":"DHT22","valueName":"Humidity","type":2,"value":"44.50"}}}}
2018.09.30 14:29:34 4: ESPEasy espBridge_192.168.0.25_52344: No basic authentication required
2018.09.30 14:29:34 4: ESPEasy espBridge_192.168.0.25_52344: Send http close '200 OK'
2018.09.30 14:29:34 4: ESPEasy espBridge_192.168.0.25_52344: Src:'ESPWZ'/'DHT22' => ident:ESPWZ_DHT22 dev:ESPWZ combinedDevice:0
2018.09.30 14:29:34 5: espBridge: dispatch ESPWZ_DHT22::192.168.0.25::1::0::1::i||unit||0||0|||i||sleep||0||0|||i||build||20102||0|||i||build_git||mega-20180927||0|||i||build_notes|| - Mega||0|||i||version||2||0|||i||node_type_id||17||0|||r||Humidity||44.50||2|||r||Temperature||21.50||2
2018.09.30 14:29:34 5: ESPEasy ESPWZ: Received: ESPWZ_DHT22::192.168.0.25::1::0::1::i||unit||0||0|||i||sleep||0||0|||i||build||20102||0|||i||build_git||mega-20180927||0|||i||build_notes|| - Mega||0|||i||version||2||0|||i||node_type_id||17||0|||r||Humidity||44.50||2|||r||Temperature||21.50||2
2018.09.30 14:29:34 4: ESPEasy ESPWZ: Humidity: 44.50
2018.09.30 14:29:34 4: ESPEasy ESPWZ: Temperature: 21.50
2018.09.30 14:29:34 5: ESPEasy ESPWZ: Internals: unit:0 sleep:0 build:20102 build_git:mega-20180927 build_notes: - Mega version:2 node_type_id:17: ESP Easy Mega
2018.09.30 14:29:34 4: ESPEasy espBridge_192.168.0.25_52344: Closing tcp session.
2018.09.30 14:29:43 3: ESPEasy: set ESPWZ oled 6 2 Leistung:1000 W
2018.09.30 14:29:43 5: ESPEasy ESPWZ: IOWrite($defs{ESPWZ}, 192.168.0.25, 80, ESPWZ_DHT22, oled, 6,2,Leistung%3a1000%20W)
2018.09.30 14:29:43 4: ESPEasy espBridge: Send oled,6,2,Leistung%3a1000%20W to 192.168.0.25 for ident ESPWZ_DHT22
2018.09.30 14:29:43 5: ESPEasy espBridge: NonblockingGet for ident:ESPWZ_DHT22 => http://192.168.0.25:80/control?cmd=oled,6,2,Leistung%3a1000%20W


Im Anhang noch ein Bild, wie ich das Display in ESPEasy angelegt habe, manche Zeilen beschreibe ich direkt aus ESPEasy heraus, die anderen aus FHEM - das teil steht im Wohnzimmer und verfügt über einen eigenen DHT22 - die Infos lass ich mir direkt anzeigen, ohne "Umweg" über FHEM.

Danke und Gruß


Goblin

#5
Hallo dev0,

habe einen Fehler gefunden - ich verwende eine alte Version :

VERSION    1.39

dessen war ich mir nicht bewußt, mit
Zitatupdate check
bekomme ich ein "Nothing to do" von daher bin ich davon ausgegangen, dass ich mit allen Modulen auf Stand bin...

Mit update force habe ich ein großes Update erzwungen, hat auf dem Raspi Zero ewig gedauert, jetzt funktioniert es jedoch immer noch nicht...

neue List der Bridge
Internals:
   CONNECTS   50
   DEF        bridge 8383
   FD         10
   HOST       bridge
   IPV        4
   MAX_HTTP_SESSIONS 3
   MAX_QUEUE_SIZE 250
   NAME       espBridge
   NOTIFYDEV  global
   NR         24
   NTFY_ORDER 50-espBridge
   PORT       8383
   STATE      initialized
   SUBTYPE    bridge
   TYPE       ESPEasy
   VERSION    2.00
   READINGS:
     2018-09-30 16:02:13   state           initialized
   helper:
     pm:
       Encode     1
       JSON       1
     sessions:
       192.168.0.20 0
       192.168.0.25 0
Attributes:
   authentication 0
   combineDevices 0
   group      ESPEasy Bridge
   room       ESPEasy
   verbose    5


Neuer Auszug aus dem Log

018.09.30 16:21:27 3: ESPEasy ESPWZ: set ESPWZ oled 2 2 Aussen: 15.50 C
2018.09.30 16:21:27 5: ESPEasy ESPWZ: set ESPWZ oled 2 2 Aussen%3a%2015%2e50%20C (mappings done)
2018.09.30 16:21:27 5: ESPEasy ESPWZ: IOWrite ( $defs{ESPWZ}, $defs{ESPWZ}, oled, ("2","2","Aussen%3a%2015%2e50%20C") )
2018.09.30 16:21:27 4: ESPEasy espBridge: httpReq device:ESPWZ ident:ESPWZ_DHT22 timeout:10 url:http://192.168.0.25:80/control?cmd=oled,2,2,Aussen%3a%2015%2e50%20C
2018.09.30 16:21:27 4: Connection accepted from espBridge_192.168.0.25_49253
2018.09.30 16:21:27 4: ESPEasy espBridge_192.168.0.25_49253: Peer address 192.168.0.25 accepted
2018.09.30 16:21:27 5: ESPEasy espBridge_192.168.0.25_49253: Received header: {'User-Agent' => 'ESP Easy/20102/Sep 27 2018 02:20:58','Connection' => 'close','Content-Length' => 368,'Host' => '192.168.0.11:8383'}
2018.09.30 16:21:27 5: ESPEasy espBridge_192.168.0.25_49253: Received content: {"module":"ESPEasy","version":"1.04","data":{"ESP":{"name":"ESPWZ","unit":0,"version":2,"build":20102,"build_notes":" - Mega","build_git":"mega-20180927","node_type_id":17,"sleep":0,"ip":"192.168.0.25"},"SENSOR":{"0":{"deviceName":"DHT22","valueName":"Temperature","type":2,"value":"21.60"},"1":{"deviceName":"DHT22","valueName":"Humidity","type":2,"value":"44.10"}}}}
2018.09.30 16:21:27 4: ESPEasy espBridge_192.168.0.25_49253: No basic authentication required
2018.09.30 16:21:27 4: ESPEasy espBridge_192.168.0.25_49253: Send http close '200 OK'
2018.09.30 16:21:27 4: ESPEasy espBridge_192.168.0.25_49253: Src:'ESPWZ'/'DHT22' => ident:ESPWZ_DHT22 dev:ESPWZ combinedDevice:0
2018.09.30 16:21:27 5: espBridge: dispatch
-------------------- Hier mit funktionieredem Befehl
2018.09.30 16:23:45 3: ESPEasy ESPWZ: set ESPWZ oled 2 2 Aussen: 1556 C
2018.09.30 16:23:45 5: ESPEasy ESPWZ: set ESPWZ oled 2 2 Aussen%3a%201556%20C (mappings done)
2018.09.30 16:23:45 5: ESPEasy ESPWZ: IOWrite ( $defs{ESPWZ}, $defs{ESPWZ}, oled, ("2","2","Aussen%3a%201556%20C") )
2018.09.30 16:23:45 4: ESPEasy espBridge: httpReq device:ESPWZ ident:ESPWZ_DHT22 timeout:10 url:http://192.168.0.25:80/control?cmd=oled,2,2,Aussen%3a%201556%20C
2018.09.30 16:23:47 5: espBridge: dispatch ESPWZ_DHT22::192.168.0.25::1::0::1::
2018.09.30 16:23:47 5: ESPEasy ESPWZ: Received: ESPWZ_DHT22::192.168.0.25::1::0::1::


Hab es direkt via URL ausprobiert...
Sende ich : http://192.168.0.25:80/control?cmd=oled,2,2,Aussen%3a%2015%2e50%20C, bekomme ich ein
ZitatUnknown or restricted command!
zurück.

Entferne ich
Zitat%2e
aus dem Befehl, wird der Text ordentlich angezeigt.

Es liegt also am ESPEasy auf meinem Controller und nicht am FHEM-Modul....

Jetzt bin ich ratlos...
Danke für die Hilfe und Gruß

dev0

ZitatEs liegt also am ESPEasy auf meinem Controller und nicht am FHEM-Modul....
Wenn die altuelle Entwicklerversion der ESP Easy Mega Firmware sich auch so verhält, dann einen Issue auf Github eröffnen und den Bug melden.

Goblin

#7
Die blöde Sache hat mir keine Ruhe gegeben - ich habe heute auf einem Breadboard mit OLED Display zig Versionen von ESPeasy auf meinen Controller geflasht und die Versionsinfos durchforstet...

Der Fehler hat sich in Release mega-20180524 eingeschlichen - seit dieser Version werden laut Versionsinfo 2 OLES gleichzeitig unterstützt
ZitatAllow using two oled at same time.

Ab dieser Version tritt der oben beschrieben Fehler auf - ich verwende jetzt einfach die Version Release mega-20180522 damit gehts wieder einwandfrei.

Vielleicht hilft die Info ja dem ein oder anderen!

Merkwürdig finde ich nur, dass es bisher sonst noch niemandem aufgefallen ist - der Fehler ist ja immerhin seit über 4 Monaten drin ...




dev0

Leider ist meine Version so alt, dass ich das nicht in den ESPEasy Internals nachsehen kann. Wenn Du mir sagst, wo ich das in der Web-GUI erkennen kann, dann sage ich Dir das gerne.

Goblin

Hallo dev0,

danke für die schnelle Reaktion, war meinen Beitrag drüber gerade am editieren, da ich den Fehler auf eine Version eingrenzen konnte (siehe oben)

Die installierte Version kann man sich auf dem Webinterface unter Main / Systeminfo unter GIT version anzeigen lassen.

Gruß

dev0

Zitatdamit gehts wieder einwandfrei.
Leider sind die aktuellen Version noch mit einigen Fehlern gespickt, aber die Entwickler sind sehr aktiv und bemüht...