39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0

Begonnen von epsrw1, 12 Juni 2014, 20:04:31

Vorheriges Thema - Nächstes Thema

epsrw1

update:
# $Id: 39_DLCD.pm 1109 2014-08-25 22:16:00Z Florian Duesterwald $

es können mehr zeilen angelegt werden als das display tatsächlich besitzt und diese automatisch durchgescrollt werden beim update
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:
# $Id: 39_DLCD.pm 1110 2014-08-27 06:01:00Z Florian Duesterwald $

-> scrollfunktion verbessert
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

Zitat von: epsrw1 am 27 August 2014, 06:04:06
-> scrollfunktion verbessert

Hallo Florian,

genial, das funktioniert! Habe zwar auf dem 40x4 vorerst nur ein 16x1 "simuliert", aber das tut was es soll. Jetzt muss ich mein Ethersex nochmals frisch kompilieren, da ich bei der Addressierung meines 16x1 etwas leichtfertig war und die ersten acht sowie die zweiten acht Stellen jeweils als einzelne Zeile anspreche. Das geht besser, wenn ich in der Addressierung die Zeile 0 auf 8 Zeichen definiere, so das automatisch in der nächsten Zeile- in dem Fall mit dem nächsten Zeichen- weiter geschrieben wird. Diese Logik ist dem HD44780 geschuldet und ne andere Geschichte...

btw: dlcdBlankspaceReplace \x20 läuft auch. einfach so...  :D

Mein Beispiel:
Auf einem 16x1 LCD möchte ich im Wechsel [Datum/Zeit], [Klimadaten Garten], [Datum/Zeit], [Klimadaten Keller] darstellen. Das Display ist im Blickfeld und dient vorrangig der Info, wie sich die Klimadaten in Garten und Keller entwickeln, aber auch wie spät es gerade ist. Jede Zeile bleibt 15sec stehen, bis gewechselt wird.

Auszug aus der fhem.cfg:
define DLCD_40x4 DLCD
attr DLCD_40x4 dlcdBlankspaceReplace \x20
attr DLCD_40x4 dlcdCols 40
attr DLCD_40x4 dlcdDebugOutput 1
attr DLCD_40x4 dlcdLine1 %date_WD_ger% %date_D%.%date_M_ger%  %time_h%:%time_m%
attr DLCD_40x4 dlcdLine2 Garten:  %5%/%6%
attr DLCD_40x4 dlcdLine3 %date_WD_ger% %date_D%.%date_M_ger%  %time_h%:%time_m%
attr DLCD_40x4 dlcdLine4 Keller:  %1%/%2%
attr DLCD_40x4 dlcdPhysicalRows 1
attr DLCD_40x4 dlcdPollInterval 15
attr DLCD_40x4 dlcdRows 4
attr DLCD_40x4 dlcdScrolling 1
attr DLCD_40x4 dlcdTriggerCmd set LCD_40x4 write %L% 0 %T%
attr DLCD_40x4 dlcdVal1 Keller:temperature
attr DLCD_40x4 dlcdVal2 Keller:humidity
attr DLCD_40x4 dlcdVal2formatnum 2+0
attr DLCD_40x4 dlcdVal3 Keller_vorn:temperature
attr DLCD_40x4 dlcdVal4 Keller_vorn:humidity
attr DLCD_40x4 dlcdVal4formatnum 2+0
attr DLCD_40x4 dlcdVal5 Bad:temperature
attr DLCD_40x4 dlcdVal5formatnum 2+1
attr DLCD_40x4 dlcdVal6 Bad:humidity
attr DLCD_40x4 dlcdVal6formatnum 2+0
attr DLCD_40x4 dlcdVal7 Schlafzimmer:temperature
attr DLCD_40x4 dlcdVal7formatnum 2+1
attr DLCD_40x4 dlcdVal8 Schlafzimmer:humidity
attr DLCD_40x4 dlcdVal8formatnum 2+0
attr DLCD_40x4 room ECMD_test


Allerdings gibt es trotzdem noch ein größeres Problem: Sobald ich neu starte, rereadcfg mache oder in die fhem.cfg schaue, hängt sich fhem weg. Was genau ursächlich ist, kann ich jetzt noch nicht sagen, da ich remote auf mein Testsystem zugreife. Habe jetzt schrittweise die attribute auskommentiert, jedoch ohne Erfolg. Es läuft erst wieder, wenn ich das define heraus nehme. Geloggt wird nichts (bzw. wüsste ich nicht wo). Sobald ich auch nur das define des DLCD selbst wieder aktiviere und neu starte, hängt alles. Es hilft nur noch hart ausschalten. Manuelles eintragen des define und aller attribute belebt es wieder. Was soll das sein?

Viele Grüße, Ricardo

epsrw1

bei mir ist es so dass fhem (vermeintlich) hängt wenn scrolling an ist und das poll interval zu kurz. display wird von einem uno r3 gesteuert, und der blockt während des schreibvorganges. anders ausgedruckt, wenn zb das beschreiben der zeile 2sec dauert und das pollinterval auch 2sec ist, dann scheint fhem zu hängen, tut es aber nciht da es nur voll beschäftigt ist.
LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

Bei mir wird der fhem task komplett beendet.
Meine Testumgebung ist ein Mini-PC (Via c3-533)  mit Debian. Läuft flotter als ein Raspi :)

epsrw1

Deep recursion on subroutine "main::InternalTimer" at ./FHEM/39_DLCD.pm line 170, <> line 12.

-> update kommt gleich, mein fehler
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

# $Id: 39_DLCD.pm 1111 2014-08-28 10:31:00Z Florian Duesterwald $
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

Zitat von: epsrw1 am 28 August 2014, 11:07:02
update:

# $Id: 39_DLCD.pm 1111 2014-08-28 10:31:00Z Florian Duesterwald $

Danke, das hat's gebracht! Nun läuft es und ist "reboot-fest". Mein Produktivsystem reboote bzw. update ich nur, wenn es nötig wird, das Testsystem ist nach Möglichkeit immer neuester Stand und wird auch abends ausgeschaltet, solange keine längeren Tests anstehen.

Ich lass' hier laufen und berichte in jedem Fall. Eine eher kosmetische Ergänzung fällt mir gerade ein: bei formatnum wäre 2+1+- hilfreich für ganzjährige Außentemperaturen. Ich kann es zwar problemlos selbst ins Modul schreiben, zentral ergänzen ist aber eleganter...

Weiterhin fiel mir auf, das beim Überschreiben der Zeilen ein vorheriges Löschen manchmal (!) hilfreich wäre, da durch verschobene Inhalte, die von der Formatierung nicht erfasst werden, Reste vom vorherigen Zeileninhalt stehen bleiben. Aber das ist nicht dramatisch und mit geschicktem Formatieren und ein paar Leerzeichen gelöst.

Viele Grüße, Ricardo

epsrw1

Zitat von: kpwg am 28 August 2014, 17:09:54
Eine eher kosmetische Ergänzung fällt mir gerade ein: bei formatnum wäre 2+1+- hilfreich für ganzjährige Außentemperaturen. Ich kann es zwar problemlos selbst ins Modul schreiben, zentral ergänzen ist aber eleganter...

Weiterhin fiel mir auf, das beim Überschreiben der Zeilen ein vorheriges Löschen manchmal (!) hilfreich wäre, da durch verschobene Inhalte, die von der Formatierung nicht erfasst werden, Reste vom vorherigen Zeileninhalt stehen bleiben. Aber das ist nicht dramatisch und mit geschicktem Formatieren und ein paar Leerzeichen gelöst.

-> 2+1+- ist eine einstellige gradzahl mit einer nachkommastelle. braucht man sowas wirklich?
-> das mit dem zeile löschen könnte man in zukünftiger version als option einbauen.

LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

Zitat von: epsrw1 am 29 August 2014, 05:48:06
-> 2+1+- ist eine einstellige gradzahl mit einer nachkommastelle. braucht man sowas wirklich?

Stimmt... Mein Denkfehler  ::) Es soll 3+1+- heißen und das ist dabei.
Mir fällt ansonsten nichts weiter ein. Es läuft alles bestens. Vielleicht können sich weitere Tester melden? Immerhin gab es mehr als meinen einen Download des Moduls.

Viele Grüße, Ricardo

kpwg

Zum Monatsbeginn läuft das Log voll:
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1652256) line 1.
Useless use of a variable in void context at (eval 1652269) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1652457) line 1.
Useless use of a variable in void context at (eval 1652470) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1652642) line 1.
Useless use of a variable in void context at (eval 1652655) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1652865) line 1.
Useless use of a variable in void context at (eval 1652878) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1653094) line 1.
Useless use of a variable in void context at (eval 1653107) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1653288) line 1.
Useless use of a variable in void context at (eval 1653301) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1653512) line 1.
Useless use of a variable in void context at (eval 1653525) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1653737) line 1.
Useless use of a variable in void context at (eval 1653750) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.
Useless use of a variable in void context at (eval 1653959) line 1.
Useless use of a variable in void context at (eval 1653972) line 1.
Use of uninitialized value $htmlData[0] in join or string at ./FHEM/39_DLCD.pm line 354.


Sowas gab es bereits bei anderen Modulen, verschwand aber nach wenigen Tagen wieder.
Hast Du eine Idee, Florian?

Viele Grüße, Ricardo

epsrw1

update:
# $Id: 39_DLCD.pm 1113 2014-09-04 12:16:00Z Florian Duesterwald $


-logfile-überlauf repariert
-neue attr: dlcdClearLineCmd und dlcdClearAllCmd
Ich habe keine Ahnung, aber davon wenigstens ganz viel

Tobias

Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

kpwg

Zitat von: Tobias am 04 September 2014, 15:45:14
Nur so als Frage: sonderzeichen und Umlaute hast du auch berücksichtigt?
Ich glaub' das hat hier noch Keiner gefordert  ;)
Mir stellt sich die Frage, ob es hier im DLCD oder im "Displaytreiber" selbst konvertiert werden sollte. Zudem sind nicht alle Displays gleich.

Viele Grüße, Ricardo

epsrw1

denke auch daß es eigentlich vornehmlich eine aufgabe des displaytreibers ist. die (wenigen) treiber die ich kenne sind allesamt etwas unausgereift.

habe irgendwo mal etwas geschrieben in php für eine variable ersetzungsfunktion, ich schau mal bei gelegenheit ob sich das ohne viel aufwand einbauen läßt. so kann jeder selbst einfache regex per attr festlegen.

hat jemand vorschläge wie die user-eingaben im attr aussehen könnten? ä=\xE1,ö=\xEF,ü=\xF5 erscheint mir logisch, gibt aber evtl unklarheiten mit der backslash-behandlung in fhem

LG, florian
Ich habe keine Ahnung, aber davon wenigstens ganz viel