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

Zitat von: moemoe am 23 September 2014, 13:08:39
Edit: Da ist der Displaytreiber vollkommen unschuldig, das liegt daran dass FHEM selber schon Kommandos an Leerzeichen in einzelne Argumente splittet, und daher mehrfache Leerzeichen verloren gehen.

das betrifft die formatvorlage für die zeilen. bei mir (i2c display) ersetzt der displaytreiber intern nochmal irgendwo \s+ durch einzelne blanks wenn ich es richtig in erinnerung habe.
\x20 hilft eventuell (?)
Ich habe keine Ahnung, aber davon wenigstens ganz viel

moemoe

Zitat von: epsrw1 am 23 September 2014, 13:21:40
das betrifft die formatvorlage für die zeilen. bei mir (i2c display) ersetzt der displaytreiber intern nochmal irgendwo \s+ durch einzelne blanks wenn ich es richtig in erinnerung habe.
\x20 hilft eventuell (?)

Jein, ich habe es mir gerade genauer angesehen.

'Dach.LCD'
'writeXY'
'0,3,20,l'
'W:'
'17.0ßC'
'000%'
'0%'

Das sind die getrennten Argumente, wie sie beim set-Handler von 52_I2C_LCD.pm  ankommen. Daraus ergibt sich dann auch sofort, wieso das nicht tut.

Der eigentliche String, den ich gerne hätte, ist W: 17.0°C 000%   0%

Ich habe mir aber erlaubt, deinen Code nochmal anzupassen:

408     if($dlcdBlankspaceReplace ne "none"){
409         $dlcdBlankspaceReplace =~ s/\\(
410             (?:x\{[0-9a-fA-F]+\}) |         # more than 2 digit hex
411             (?:N\{U\+[0-9a-fA-F]{2,4}\})    # unicode by hex
412             )/"qq|\\$1|"/geex;
413         $txt=~s/ /$dlcdBlankspaceReplace/g;
414         }


Jetzt kann ich nämlich einfach sagen
dlcdBlankspaceReplace: \x{10}

Zeichen 16 wird bei meinem LCD auch wie ein blank dargestellt, aber von fhem nicht als Leerzeichen verschluckt.

epsrw1

update ist online:

# $Id: 39_DLCD.pm 1121 2014-09-23 13:48:00Z Florian Duesterwald $
Ich habe keine Ahnung, aber davon wenigstens ganz viel

Icinger

Hi,

bin auch grade am testen von DLCD.
Habe hier ein 4x40-LCD, dass ich über Panstamp ansteueue.

Soweit funktioniert schon mal alles.

Eine Bitte hätte ich noch:
Könnte man auch das disabled-Attribut implementieren, um zu Testzwecken das DLCD auszuschalten?

Thx schon mal im voraus,

Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

epsrw1

update:


# $Id: 39_DLCD.pm 1122 2014-10-03 11:44:00Z Florian Duesterwald $


--> disable [0..1]
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

Zitat von: Icinger am 02 Oktober 2014, 23:14:33
Habe hier ein 4x40-LCD, dass ich über Panstamp ansteueue.
Kannst Du die letzte Spalte beschreiben? Ich hatte mit meinem 40x4 Probleme, diese zu erreichen.
Betreibe es über Ethersex/LAN und kann es ansonsten komplett bedienen (aus aus FHEM heraus).

Viele Grüße, Ricardo

ps: der letzte Stand läuft auch bei mir tadellos. Mittlerweile laufen hier ein 16x1 mit Scrolling, ein 20x4 sowie ein 16x2. Das i-Tüpfelchen wäre jetzt noch ein Abschalten der Hintergrundbeleuchtung bei disable= 0|1  8) Aber das ist Spielerei...

moemoe

Zitat von: kpwg am 07 Oktober 2014, 20:43:00
Das i-Tüpfelchen wäre jetzt noch ein Abschalten der Hintergrundbeleuchtung bei disable= 0|1  8) Aber das ist Spielerei...

Das geht doch direkt auf dem LCD-Device darunter. Hier sehe ich (persönlich) absolut keinen Grund das in den Abstraktionslayer darüber mitzuschleifen.

Grüße
Moritz

epsrw1

Zitat von: kpwg am 07 Oktober 2014, 20:43:00
Das i-Tüpfelchen wäre jetzt noch ein Abschalten der Hintergrundbeleuchtung bei disable= 0|1

ich denke das disable ist eher zum rumspielen nützlich, dh weitere ausarbeitung mach wenig sinn.

HG beleuchtung steuere ich übrigens mit fhem, notify schaltet sie ein und legt ein at an um nach einer minute wieder abzuschlten

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

Icinger

Zitat von: kpwg am 07 Oktober 2014, 20:43:00
Kannst Du die letzte Spalte beschreiben? Ich hatte mit meinem 40x4 Probleme, diese zu erreichen.

Jein, momentan hab ich noch das Problem, dass beim beschreiben der 4ten Zeile dieser Text irgendwie in die dritte Zeiloe nochmal mit dem bestehenden Text der ersten befüllt wird....Liegt aber glaub ich irgendwo im Sketch vergraben, das Problem.
Hab grad aber auch nicht wirklich Zeit dafür, und da ich nur am Wochenende daheim bin (beruflich den Rest der Woche unterwegs) tu ich mir grad ein wenig schwer damit.
Hat aber auch eher niedrige Priorität momentan.

lg, Ici
Verwende deine Zeit nicht mit Erklärungen. Die Menschen hören (lesen) nur, was sie hören (lesen) wollen. (c) Paulo Coelho

kpwg

Zitat von: epsrw1 am 07 Oktober 2014, 23:29:02
ich denke das disable ist eher zum rumspielen nützlich, dh weitere ausarbeitung mach wenig sinn.
HG beleuchtung steuere ich übrigens mit fhem, notify schaltet sie ein und legt ein at an um nach einer minute wieder abzuschlten

Das stimmt natürlich. Mannomann, habe den Wald vor lauter Bäumen nicht gesehen!  ::)
Selbst ein simples notify auf das disable würde das "Problem" lösen. Habe keine Fragen mehr...  ;D

Mit dem 40x4 habe ich aktuell auch noch nichts wieder gemacht. Meinen letzten Mega32 habe ich dieser Tage final verbaut. Die nächste Baustelle heißt RS485/ZBus. Ebenso mit niedriger Priorität.

Viele Grüße, Ricardo

kpwg

Florian, gab es noch Bugfixes im Modul?

Problem 1: Mit Scrolling kann ich das 16x1 nicht korrekt bedienen, sobald ich ClearLineCMD bzw. ClearAllCmd definiere. Scrolling funktioniert dann nicht mehr. Ohne Schrolling funktionieren die Befehle wohl.

Problem 2: Beim Start von FHEM füllt DLCD das Log mit DLCD DLCD_WZ has been defined
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line1 (22) is longer than display (20), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line1: attr dlcdLine1 %time1%
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line2 (22) is longer than display (20), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line2: attr dlcdLine2 %time1%
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line3 (22) is longer than display (20), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line3: attr dlcdLine3 %time1%
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line4 (22) is longer than display (20), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line4: attr dlcdLine4 %time1%
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line2 (24) is longer than display (16), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line2: attr dlcdVal2 unreadable
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line3 (24) is longer than display (16), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line3: attr dlcdVal2 unreadable
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line4 (24) is longer than display (16), ignoring some data
2015.01.05 18:55:35 3: DLCD DLCD_WZ: Line4: attr dlcdVal4 unreadable

Jeweils pro Display! Mir scheint, als würde hier ein default-Text definiert, der aufgrund der Längenkonvention vom Modul selbst bemängelt wird.

Problem 3: (eher kosmetisch!) In der Versionsübersicht von FHEM wird ein Zeilenumbruch erzeugt.

Viele Grüße, Ricardo

McSpitz

Moin zusammen,

ist ja ne muntere Truppe hier. Habe nun auch das Modul geladen und suche vergeblich die Stelle an der ich sagen kann welche GPIO Pins ich nutze.
Habe hier das klassische 16x2 im 4bit Modus angeschlossen. Vielleicht habt Ihr einen Tipp für mich wo ich das einstellen kann ...?

Gruß
Alex

epsrw1

in DLCD ist die einstellung sowas in der art wie:
attr dlcdTriggerCmd set MeinLcdDevice writeXY 0,%L%,20,1 %T%

das LCD selbst wird bei mir zB mit dem I2C_LCD modul gesteuert, nähere hinweise dazu in der allgemeinen commandref (pinMapping)

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

McSpitz

Hallo Florian,

wow - danke für die schnelle Antwort  ;D

Ich habe das nicht per I2C sondern mittels 4 GPIOpins angeschlosse (andere GPIOpins haben bspw. schon einen 433MHz Sender).

Ich dachte im Coding des DLCD Moduls steht irgendwo die Stelle: nutze Pin 1, 12, xx? wahrscheinlich gibt es das aber gar nicht
und das Display muss per I2C ran wenn ich Dein Modul nutzen möchte ...? Ich habe das Display aus dem Sunf*under Kit, da war nix
mit I2C  :(

In der allgemeinen commandref kann aber doch eigentlich zur Verdrahtung - die Voraussetzung für Dein Modul ist - nix drinstehen, oder?

... und es macht "Klick" ... serial Display ... ;-)

Gruß
Alex

epsrw1

Zitat von: McSpitz am 23 März 2015, 19:30:12
Ich habe das nicht per I2C sondern mittels 4 GPIOpins angeschlosse (andere GPIOpins haben bspw. schon einen 433MHz Sender).
Ich dachte im Coding des DLCD Moduls steht irgendwo die Stelle: nutze Pin 1, 12, xx? wahrscheinlich gibt es das aber gar nicht
und das Display muss per I2C ran wenn ich Dein Modul nutzen möchte ...? Ich habe das Display aus dem Sunf*under Kit, da war nix
mit I2C  :(
In der allgemeinen commandref kann aber doch eigentlich zur Verdrahtung - die Voraussetzung für Dein Modul ist - nix drinstehen, oder?
... und es macht "Klick" ... serial Display ... ;-)

ehrlich gesagt habe ich die hardware anbindung nie berücksichtigt, da es lauter HW module für FHEM gibt und sicher eine vielzahl user/contrtbutors die das besser können als ich. das modul DLCD baut auf den vorhandenen HW lösungen auf und bereitet nur die daten auf zur sinnvollen, benutzerfreundlichen ausgabe vor (auf ein bereits eingerichtetes device).

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