FHEM Forum

FHEM => Codeschnipsel => Thema gestartet von: epsrw1 am 12 Juni 2014, 20:04:31

Titel: 39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 12 Juni 2014, 20:04:31
hier eine kleine spielerei die vielleicht dem einen oder anderen praktisch erscheinen mag:
39_DLCD.pm
datei: dok39_DLCD.pdf im fuß dieses Beitrages zeigt die Funktionsweise.

es dient vorbereiten und formatieren von daten für ein LCD display.

Doku: http://www.fhemwiki.de/wiki/DLCD (http://www.fhemwiki.de/wiki/DLCD)

das modul sammelt die über attr. festgelegten readings aus verschiedenen devices zusammen und fürht eine optionale zahlenformatierung durch. dann werden diese in ein (ebenfalls über attr) vordefiniertes template eingefügt und als reading zur verfügung gestellt.
events werden nur getriggert wenn sich die daten tatsächlich geändert haben, ein kurzes pollInterval ist also kein problem.

in der version 1.1 wurden zeit/datum-funktionen hinzugefügt, siehe wiki-beitrag.

es können mehr zeilen angelegt werden als das display tatsächlich hat und durchgescrollt werden.

funktionsweise sollte theoretisch selbsterklärend sein.

hier die readings eines tests:

Internals:
   CFGFN      /opt/fhem/FHEM/lcd_fhem.cfg
   NAME       dlcd1
   NR         100
   NTFY_ORDER 50-dlcd1
   STATE      22:28:42<br>Kessel(40): 58.69 A:1<br>W.Wass.(32):34.44 P:1<br>VL:48 / RL:39 M:00%<br>Abgas:20.5 Ext.:+13.50
   TYPE       DLCD
   Readings:
     2014-08-25 22:28:09   Line1           Kessel(40): 58.69 A:1
     2014-08-25 22:28:23   Line2           W.Wass.(32):34.44 P:1
     2014-08-25 22:21:27   Line3           VL:48 / RL:39 M:00%
     2014-08-25 22:26:17   Line4           Abgas:20.5 Ext.:+13.50
     2014-08-25 22:28:42   Line5           zeit: 22:28:41
     2014-08-25 22:28:42   dLine0          0: set lcd42 writeXY 0,0,20,1 W.Wass.(32):34.44 P:1
     2014-08-25 22:28:42   dLine1          1: set lcd42 writeXY 0,1,20,1 VL:48 / RL:39 M:00%
     2014-08-25 22:28:43   dLine2          2: set lcd42 writeXY 0,2,20,1 Abgas:20.5 Ext.:+13.50
     2014-08-25 22:28:41   scrollingState  2
     2014-08-25 22:28:42   state           22:28:42
Attributes:
   dlcdCols   20
   dlcdDebugOutput 1
   dlcdLine1  Kessel(%1%): %2% A:%3%
   dlcdLine2  W.Wass.(%4%):%5% P:%6%
   dlcdLine3  VL:%7% / RL:%8% M:%9%%
   dlcdLine4  Abgas:%10% Ext.:%11%
   dlcdLine5  zeit: %time_hms%
   dlcdPhysicalRows 3
   dlcdPollInterval 9
   dlcdRows   5
   dlcdScrolling 1
   dlcdTriggerCmd set lcd42 writeXY 0,%L%,20,1 %T%
   dlcdVal1   zhk4:zhkKesselDesiredTemp
   dlcdVal10  83_WohnZi_9554CD040000:temperature
   dlcdVal10formatnum 3+1
   dlcdVal11  81_Aussen_D745CE040000:temperature
   dlcdVal11formatnum 4+2+-
   dlcdVal1formatnum 2+0
   dlcdVal2   4_14_Kessel_E3CD97050000:temperature
   dlcdVal2formatnum 4+2
   dlcdVal3   zhk4:zhkBrennerActualState
   dlcdVal3formatnum 1+0
   dlcdVal4   zhk4:zhkWwSollTemp
   dlcdVal4formatnum 2+0
   dlcdVal5   5_15_WarmWasser_EB6F98050000:temperature
   dlcdVal5formatnum 4+2
   dlcdVal6   P7_WwStop:state
   dlcdVal6formatnum 1+0
   dlcdVal7   1_17_Vorlauf_D1F798050000:temperature
   dlcdVal7formatnum 2+0
   dlcdVal8   2_12_Ruecklauf_56B897050000:temperature
   dlcdVal8formatnum 2+0
   dlcdVal9   VorlaufMischer:state
   dlcdVal9formatnum 2+0
   room       OWX,Unsorted
   stateFormat state<br>Line1<br>Line2<br>Line3<br>Line4


Das Perl-Modul Number::Format ist für DLCD . -> seit 1.1 nicht mehr notwendig

und das modul selbst:

# $Id: 39_DLCD.pm 1126 2015-05-03 11:31:00Z Florian Duesterwald $

--> download in der Fußzeile dieses beitrages


http://www.fhemwiki.de/wiki/DLCD (http://www.fhemwiki.de/wiki/DLCD)
Titel: Antw:98_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 12 Juni 2014, 22:36:04
update/bugfix:

# $Id: 39_DLCD.pm 1003 2014-06-13 01:09:00Z Florian Duesterwald $
Titel: Antw:98_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 18 Juni 2014, 05:15:24
update:

# $Id: 39_DLCD.pm 1004 2014-06-18 05:13:00Z Florian Duesterwald $
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 20 Juni 2014, 18:37:38
update:

# $Id: 39_DLCD.pm 1005 2014-06-20 18:00:00Z Florian Duesterwald $
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 29 Juni 2014, 16:02:50
update:

# $Id: 39_DLCD.pm 1006 2014-06-29 16:00:00Z Florian Duesterwald $


+Wiki-Link

http://www.fhemwiki.de/wiki/DLCD (http://www.fhemwiki.de/wiki/DLCD)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 16 Juli 2014, 12:25:03
update:

# $Id: 39_DLCD.pm 1007 2014-07-16 11:21:00Z Florian Duesterwald $

-->sortierung ausgabereihenfolge
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 18 Juli 2014, 21:39:41
Genial... genau sowas habe ich gesucht. Gib mir ein paar Tage Zeit; ich habe ein 40x4 HD44780 am Ethersex laufen und wusste nicht so recht, wie ich's sinnvoll beschreibe.

Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 18 Juli 2014, 23:23:28
Für Support einfach hier im forum melden. Gruß florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 19 Juli 2014, 17:27:27
Ich habe mir jetzt das Modul weiter oben aus dem Text kopiert und eine Datei erstellt, da es keinen Download des Moduls gibt.
Wie bekomme ich das Modul sauber ins System?

Einfach Datei erstellen und reload sieht dann so aus:
Can't locate Number/Format.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/39_DLCD.pm line 34, <FH> line 9505.
BEGIN failed--compilation aborted at ./FHEM/39_DLCD.pm line 34, <FH> line 9505.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 19 Juli 2014, 18:33:45
auf der konsole:
sudo cpan -i Number::Format

auf einer root-konsole:
cpan -i Number::Format

das steht auch im kopfteil des moduls drin als hinweis ;)

gruß, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 20 Juli 2014, 16:27:50
Läuft trotzdem nicht. Die Installation bricht gegen Ende folgendermassen ab:
Checking if your kit is complete...
Looks good
Writing Makefile for Number::Format
Writing MYMETA.yml
  WRW/Number-Format-1.73.tar.gz
  make -- NOT OK
'YAML' not installed, will not store persistent state
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible


Da fehlt mir aktuell ein wenig die Zeit, um mich weiter in das Problem zu vertiefen.

Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: det. am 20 Juli 2014, 20:38:35
Hallo Florian,
gerade mal probiert - und macht einen guten Eindruck. Für welche, wo Probleme mit der Installation über cpan haben:root@RPI1:/home/pi# cpan
cpan[1]> force install Number::Format
Running install for module 'Number::Format'
Running make for W/WR/WRW/Number-Format-1.73.tar.gz
Checksum for /root/.cpan/sources/authors/id/W/WR/WRW/Number-Format-1.73.tar.gz ok


  CPAN.pm: Going to build W/WR/WRW/Number-Format-1.73.tar.gz


Checking if your kit is complete...
Looks good
Writing Makefile for Number::Format
Writing MYMETA.yml
cp Format.pm blib/lib/Number/Format.pm
Manifying blib/man3/Number::Format.3pm
  WRW/Number-Format-1.73.tar.gz
  /usr/bin/make -- OK
Running make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/format_bytes.t ..... ok
t/format_negative.t .. ok
t/format_number.t .... ok
t/format_picture.t ... ok
t/format_price.t ..... ok
t/locale.t ........... ok
t/object.t ........... ok
t/round.t ............ ok
t/unformat_number.t .. ok
All tests successful.
Files=9, Tests=150, 14 wallclock secs ( 1.53 usr  0.14 sys + 11.25 cusr  0.57 csys = 13.49 CPU)
Result: PASS
  WRW/Number-Format-1.73.tar.gz
  /usr/bin/make test -- OK
Running make install
Installing /usr/local/share/perl/5.14.2/Number/Format.pm
Installing /usr/local/man/man3/Number::Format.3pm
Appending installation info to /usr/local/lib/perl/5.14.2/perllocal.pod
  WRW/Number-Format-1.73.tar.gz
  /usr/bin/make install  -- OK

Beschreiben der Zeilen - Display über OWX - OWLCD -  Format von dlcdTriggerCmd: set <name LCD> line %L%, %T% geht prima. Jetzt fehlt noch die Möglichkeit den Zeileninhalt in Abhängigkeit von Ereignissen zu ändern.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 20 Juli 2014, 20:54:46
Hallo det, gib mir einige Stunden Zeit um die Geschichte mit der aktuellen Uhrzeit ins Modul einzubauen. In der aktuellen Version wäre das zu umständlich. Die anderen Zeilen kommen dann hier ins forum.
LG florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: det. am 20 Juli 2014, 21:03:00
Zitat von: epsrw1 am 20 Juli 2014, 20:54:46
Hallo det, gib mir einige Stunden Zeit um die Geschichte mit der aktuellen Uhrzeit ins Modul einzubauen. In der aktuellen Version wäre das zu umständlich. Die anderen Zeilen kommen dann hier ins forum.
LG florian
Hallo Florian,


war zu voreilig mit dem Post, hab  es inzwischen hinbekommen mit der Anzeige der Inhalte. Jedenfalls ist Dein Modul eine Super Sache um die Formatierung der Displayinhalte zu vereinfachen. Lade doch mal die Moduldatei als Anhang hoch, da gibt es sicher viele, die es nicht hinbekommen, mit Notepad++ aus Deinem Code eine 39_DLCD.pm zu speichern
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 20 Juli 2014, 21:44:43
Hallo Florian, Hallo det.

Ich  war auch etwas zu voreilig... nach apt-get update und apt-get upgrade lief's dann "einfach so"  ::)

Was ich mir wünschen würde:
- wie per PN von Dir vorgeschlagen das Number::Format direkt in das Modul zu übernehmen (wenn es dadurch nicht zu groß wird)
- damit ist man denk ich etwas plattformunabhängiger
- bei der Doku noch etwas mehr auf das Beschreiben des LCD eingehen (klar, wenn man die Birne anstrengt, läuft es auch  ;D )
- die Vorgaben für Zeilen und Spalten auf gängige Werte reduzieren (6, 8, 16, 20, 24, 40, 80 Spalten; entsprechend auch die Zeilen)

Ein Problem habe ich mit meinem 40x4 LCD an Ethersex: ich komme nicht in die 40. Spalte. Direktes Beschreiben aus FHEM heraus funktioniert.
Mit \x20 muss ich übrigens Leerzeichen übergeben, weil ansonsten ein neuer Parameter gemeint wäre. Nur, falls Fragen kommen- mit der Konstellation FHEM -> Ethersex -> HD44780 ist das so. Man sieht es an der Feuchte vom Schlafzimmer.

Hier ein Ausschnitt aus der fhem.cfg:
define LCD_40x4 ECMDDevice LCD
attr LCD_40x4 IODev NETIO_STK
attr LCD_40x4 room ECMD_test
define DLCD_40x4 DLCD
attr DLCD_40x4 dlcdCols 40
attr DLCD_40x4 dlcdLine1 Keller\x20T:%1%\x20H:%2%\x20vorn\x20T:%3%\x20H:%4%
attr DLCD_40x4 dlcdLine2 Bad\x20T:%5%\x20H:%6%\x20Schlafzimmer\x20T:%7%\x20H:%8%
attr DLCD_40x4 dlcdPollInterval 30
attr DLCD_40x4 dlcdRows 4
attr DLCD_40x4 dlcdTriggerCmd set LCD_40x4 write %L% 0 %T%
attr DLCD_40x4 dlcdVal1 Keller:temperature
attr DLCD_40x4 dlcdVal1formatnum 1
attr DLCD_40x4 dlcdVal2 Keller:humidity
attr DLCD_40x4 dlcdVal2formatnum 0
attr DLCD_40x4 dlcdVal3 Keller_vorn:temperature
attr DLCD_40x4 dlcdVal3formatnum 1
attr DLCD_40x4 dlcdVal4 Keller_vorn:humidity
attr DLCD_40x4 dlcdVal4formatnum 0
attr DLCD_40x4 dlcdVal5 Bad:temperature
attr DLCD_40x4 dlcdVal5formatnum 1
attr DLCD_40x4 dlcdVal6 Bad:humidity
attr DLCD_40x4 dlcdVal6formatnum 0
attr DLCD_40x4 dlcdVal7 Schlafzimmer:temperature
attr DLCD_40x4 dlcdVal7formatnum 1
attr DLCD_40x4 dlcdVal8 Schlafzimmer:humidity
attr DLCD_40x4 dlcdVal8formatnum 0
attr DLCD_40x4 room ECMD_test


Das LCD wird exakt so bedient: http://www.fhemwiki.de/wiki/AVR-NET-IO#LCD-Modul_anschlie.C3.9Fen (http://www.fhemwiki.de/wiki/AVR-NET-IO#LCD-Modul_anschlie.C3.9Fen)
Ein paar Bilder noch anbei.

Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 21 Juli 2014, 12:55:32
ich fasse mal die aktuekllen todo's zusammen:

* datum+uhrzeit funktion einbauen
* number format ins modul integrieren
* rechenfunktion integrieren (um zB aus 1-10 wert eine prozent-anzeige zu generieren)
* direkt-download-link für das modul

bei diesen sachen ist mir noch nicht ganz klar wo es klemmt:
* die sache mit den leerzeichen ist mir nicht ganz klar, in DLCD werden die leerzeichen korrekt verarbeitet soweit ich sehe.
* ich habe kein 40 spalten display um das schreiben der 40.spalte nachzuvollziehen. bei mir, mit 16 und 20 spalten, ist es möglich jedes zeichen zu schreiben. falls es ein bug in meinem modul sein sollte benötige ich hilfe eines freiwilligen testers

gibt es sonst noch wünsche? wäre kein problem wenn ich eh am version überarbeiten bin
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: det. am 21 Juli 2014, 16:21:43
Hallo Florian,
wenn wir beim Wünschen sind - derzeit zeigen meine Displays in Abhängigkeit div. offener Türen verschiedene Informationen siehe cfg Ausschnitt:
define W_LCD03 notify (BueroTemp_KG:.*|CUL_Bad) {\
   if (Value("CUL_Badtuer") eq "closed")\
    {prg_LCD_Badtuer()}\
   else {prg_LCD_Buerotemp()}\
   }
define W_LCD10 notify (KS300:temperature|OWSWITCHB) {\
  if (ReadingsVal("OWSWITCHB","B","20") eq "OFF")\
    {prg_LCD_Buerofenster1()}\
   else {prg_LCD_Aussentemp1()}\
   }
attr W_LCD10 DbLogExclude 1
define W_LCD11 notify (OWX_WW_SP:temperature|CUL_Kellertuer)  {\
   if (Value("CUL_Kellertuer") eq "Open")\
    {prg_LCD_Kellertuer()}\
   else {prg_LCD_WW_Speicher()}\
   }
define W_LCD12 notify (CUL_HM_HM_CC_RT_DN_21FDBA_Clima:measured-temp|CUL_Hoftor) {\
   if (Value("CUL_Hoftor") eq "Open")\
    {prg_LCD_Hoftor1()}\
   else {prg_LCD_Bad_Temp()}\
   }
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 21 Juli 2014, 17:03:37
Zitat von: epsrw1 am 21 Juli 2014, 12:55:32
ich fasse mal die aktuekllen todo's zusammen:

* datum+uhrzeit funktion einbauen
* number format ins modul integrieren
* rechenfunktion integrieren (um zB aus 1-10 wert eine prozent-anzeige zu generieren)
* direkt-download-link für das modul
Das wäre toll. Vor allem der erste Punkt würde hier den WAF erhöhen.
Zitat von: epsrw1 am 21 Juli 2014, 12:55:32
bei diesen sachen ist mir noch nicht ganz klar wo es klemmt:
* die sache mit den leerzeichen ist mir nicht ganz klar, in DLCD werden die leerzeichen korrekt verarbeitet soweit ich sehe.
* ich habe kein 40 spalten display um das schreiben der 40.spalte nachzuvollziehen. bei mir, mit 16 und 20 spalten, ist es möglich jedes zeichen zu schreiben. falls es ein bug in meinem modul sein sollte benötige ich hilfe eines freiwilligen testers
Das war gestern abend (für meine Verhältnisse) etwas spät. Da haperts dann schon mal mit dem Satzbau  ::)

Die HD44780-LCD's am Ethersex werden- im Gegensatz zu anderen Formen des Beschreibens- mit einer Zeile an entsprechender Position beschrieben, welche keine weiteren Leerzeichen enthalten darf. Diese Leerzeichen würden dann als weiteres Argument gewertet, was schief geht. Daher kann ich ein \x20 direkt "durchreichen", was erst im LCD entsprechend verwertet wird. Auch andere Sonderzeichen wie ä, ü und ö oder °C sind damit erreichbar, wenn man die Zeichentabelle des LCD kennt. Ich habe leider keine andere Form der Ansteuerung für ein HD44780 in Benutzung. Selbst der Vorschlag, das \x20 für eine bessere  Ansicht zu decodieren, würde immer noch implizieren, das Du den Zeichensatz kennst. \x20 mag zwar immer identisch sein, andere Sonderzeichen jedoch nicht. Wenn sich sonst keiner meldet => ich kann damit leben.

Als Tester für das 40-Spalten-Display würde ich zur Verfügung stehen. Folgendes habe ich soeben versucht:
attr DLCD_40x4 dlcdLine4 1234567890123456789012345678901234567890
Damit will ich Variablen oder Anderes ausschließen. Ergebnis: die letzte Null fehlt.
Ein Beschreiben aus FHEM heraus mit
set LCD_40x4 write 3 0 1234567890123456789012345678901234567890 funktioniert. Falls Dein LCD so initalisiert ist, das die Zeilen fortlaufen beschrieben werden können, kann man sicher auch in einem 20x4 dem System ein 40x2 vorgaukeln.

Viele Grüße, Ricardo

Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: kpwg am 21 Juli 2014, 18:00:02
Nachtrag:

das Ändern von dlcdCols von 40 auf 41 oder 50 brachte auch keinen Erfolg. Ich komme nicht an die 40. Stelle.

Verbose 5 am LCD bringt Folgendes:
2014.07.21 17:57:42 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.21 17:57:42 5: ECMDDevice: Analyze command >{"lcd goto 1 0\n\000lcd write Bad\x20T:22.0\x20H:76\x20Schlafzimmer\x20T:22.6\x20H:74\n"}<
2014.07.21 17:57:42 5: Postprocessing "OK\nOK\n" with perl command {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}.
2014.07.21 17:57:42 5: Postprocessed value is "ok".
2014.07.21 17:57:43 4: ECMDDevice LCD_40x4 write ok
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.0
Beitrag von: epsrw1 am 22 Juli 2014, 00:00:22
update:

# $Id: 39_DLCD.pm 1101 2014-07-21 23:21:00Z Florian Duesterwald $


erledigt:
* datum+uhrzeit funktion einbauen
* number format ins modul integrieren
* direkt-download-link für das modul
* 'kpmg'-funktion: neues attr für blankspace ersetzen (zB durch x20)

noch offen:
* rechenfunktion integrieren (um zB aus 1-10 wert eine prozent-anzeige zu generieren)

feedback freut mich immer ;)
gerne würde ich auch Eure config ins wiki als beispiel aufnehmen, wer kann ist herzlich eingeladen diese einfach einzufügen, wer nicht im wiki ist bitte hier über das forum
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 22 Juli 2014, 00:17:22
Zitat von: det. am 21 Juli 2014, 16:21:43
Hallo Florian,
wenn wir beim Wünschen sind - derzeit zeigen meine Displays in Abhängigkeit div. offener Türen verschiedene Informationen siehe cfg Ausschnitt:
define W_LCD03 notify (BueroTemp_KG:.*|CUL_Bad) {\
   if (Value("CUL_Badtuer") eq "closed")\
    {prg_LCD_Badtuer()}\
   else {prg_LCD_Buerotemp()}\
   }
define W_LCD10 notify (KS300:temperature|OWSWITCHB) {\
  if (ReadingsVal("OWSWITCHB","B","20") eq "OFF")\
    {prg_LCD_Buerofenster1()}\
   else {prg_LCD_Aussentemp1()}\
   }
attr W_LCD10 DbLogExclude 1
define W_LCD11 notify (OWX_WW_SP:temperature|CUL_Kellertuer)  {\
   if (Value("CUL_Kellertuer") eq "Open")\
    {prg_LCD_Kellertuer()}\
   else {prg_LCD_WW_Speicher()}\
   }
define W_LCD12 notify (CUL_HM_HM_CC_RT_DN_21FDBA_Clima:measured-temp|CUL_Hoftor) {\
   if (Value("CUL_Hoftor") eq "Open")\
    {prg_LCD_Hoftor1()}\
   else {prg_LCD_Bad_Temp()}\
   }


das kann FHEM besser als es ein einzelmodul machen könnte. falls ich es einbauen würde, wäre das entweder nur ein abklatsch, bzw das rad neu erfunden, oder aber es wäre eine erweitrung mit naturgemäß wieder einer anderen/neuen art zu konfigurieren. irgendwie nicht das gelbe vom ei.

wenn Du die config anpaßt daß einfach die attr. für die DLCD zeilen jeweils neu gesetzt werden hast Du Deine alerts wieder ohne großen aufwand.

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 22 Juli 2014, 00:22:44
Zitat von: kpwg am 21 Juli 2014, 18:00:02
Nachtrag:

das Ändern von dlcdCols von 40 auf 41 oder 50 brachte auch keinen Erfolg. Ich komme nicht an die 40. Stelle.

Verbose 5 am LCD bringt Folgendes:
2014.07.21 17:57:42 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.21 17:57:42 5: ECMDDevice: Analyze command >{"lcd goto 1 0\n\000lcd write Bad\x20T:22.0\x20H:76\x20Schlafzimmer\x20T:22.6\x20H:74\n"}<
2014.07.21 17:57:42 5: Postprocessing "OK\nOK\n" with perl command {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}.
2014.07.21 17:57:42 5: Postprocessed value is "ok".
2014.07.21 17:57:43 4: ECMDDevice LCD_40x4 write ok


so wie ich das rekontruieren kann liegt der fehler irgendwo anders außerhalb DLCD.
in der aktuellen version 1101 in der zeile 244 steht:
fhem($dlcdTriggerCmd);
wenn Du an dieser stelle (egal ob vor oder nachher) die zeile:
Log3($name, 3, "DLCD-debug: $dlcdTriggerCmd");
hinzufügst kannst Du aus dem log genau ersehen was DLCD an Dein device sendet, und das manuell nachvollziehen und das problem zu lösen. im idealfall siehst Du gleich eine fehlermeldung die alles erklärt

LG, florian

Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 22 Juli 2014, 19:04:33
Hallo Florian,

habe die neue Version installiert. Den Eintrag zum loggen habe ich eingefügt.
Ein Logauszug der Initialisierung:
2014.07.22 17:47:55 3: DLCD DLCD_40x4 has been defined
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdCols] = 40 changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdLine1] = Keller\x20T:%1%\x20H:%2%\x20vorn\x20T:%3%\x20H:%4% changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdLine2] = Bad\x20T:%5%\x20H:%6%\x20Schlafzimmer\x20T:%7%\x20H:%8% changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdLine4] = 1234567890123456789012345678901234567890 changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4 attribute-value [dlcdPollInterval] = 30 changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdRows] = 4 changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [dlcdTriggerCmd] = set LCD_40x4 write %L% 0 %T% changed
2014.07.22 17:47:55 3: DLCD DLCD_40x4: attribute-value [room] = ECMD_test changed


Ich dachte mir, testweise die \x20 durch _ zu ersetzen, was aber leider auch nichts auf die 40. Position bringt:
2014.07.22 17:48:00 3: DLCD DLCD_40x4: Line Line1 is longer than display, ignoring some data
2014.07.22 17:48:00 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 17:48:30 3: DLCD DLCD_40x4: Line Line1 is longer than display, ignoring some data
2014.07.22 17:49:30 3: DLCD DLCD_40x4: Line Line1 is longer than display, ignoring some data
2014.07.22 17:50:00 3: DLCD DLCD_40x4: attribute-value [dlcdLine1] = Keller_T:%1%_H:%2%_vorn_T:%3%_H:%4% changed
2014.07.22 17:50:40 3: DLCD DLCD_40x4: attribute-value [dlcdLine2] = Bad_T:%5%_H:%6%_Schlafzimmer_T:%7%_H:%8% changed
2014.07.22 17:55:00 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:+68_vorn_T:+19.7_H:+73
2014.07.22 17:55:00 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 17:55:00 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+50_Schlafzimmer_T:+23.4_H:+50
2014.07.22 17:55:00 3: set LCD_40x4 write 2 0 attr dlcdLine3 %time1% : Wrong number of parameters.
2014.07.22 17:55:00 3: DLCD-debug: set LCD_40x4 write 2 0 attr dlcdLine3 %time1%
2014.07.22 17:58:00 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:+68_vorn_T:+19.7_H:+72
2014.07.22 18:15:30 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:15:30 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+49_Schlafzimmer_T:+23.4_H:+50
2014.07.22 18:15:35 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:15:35 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+50_Schlafzimmer_T:+23.4_H:+50
2014.07.22 18:16:30 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:16:30 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+49_Schlafzimmer_T:+23.4_H:+50
2014.07.22 18:16:35 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:16:35 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+50_Schlafzimmer_T:+23.4_H:+50
2014.07.22 18:18:00 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:+68_vorn_T:+19.7_H:+73
2014.07.22 18:27:30 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:+68_vorn_T:+19.7_H:+72

Seltsam, nun bringt DLCDxformatnum 0 ein Vorzeichen vor die Feuchte? Das ist so seit der neuen Version.
Also Attribut gelöscht, was dann so aussieht:
2014.07.22 18:35:26 3: DLCD DLCD_40x4: attribute-value [attrName] =  changed
2014.07.22 18:35:26 3: DLCD DLCD_40x4: attribute [dlcdVal4formatnum] deleted
2014.07.22 18:35:30 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:+68_vorn_T:+19.7_H:72.2
2014.07.22 18:35:33 3: DLCD DLCD_40x4: attribute-value [attrName] =  changed
2014.07.22 18:35:33 3: DLCD DLCD_40x4: attribute [dlcdVal8formatnum] deleted
2014.07.22 18:35:35 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:35:35 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:+50_Schlafzimmer_T:+23.4_H:50
2014.07.22 18:35:38 3: DLCD DLCD_40x4: attribute-value [attrName] =  changed
2014.07.22 18:35:38 3: DLCD DLCD_40x4: attribute [dlcdVal6formatnum] deleted
2014.07.22 18:35:48 3: DLCD DLCD_40x4: attribute-value [attrName] =  changed
2014.07.22 18:35:48 3: DLCD DLCD_40x4: attribute [dlcdVal2formatnum] deleted
2014.07.22 18:36:00 3: DLCD-debug: set LCD_40x4 write 0 0 Keller_T:+20.6_H:68_vorn_T:+19.7_H:72.2
2014.07.22 18:36:00 3: DLCD DLCD_40x4: Line Line2 is longer than display, ignoring some data
2014.07.22 18:36:00 3: DLCD-debug: set LCD_40x4 write 1 0 Bad_T:+23.8_H:49.8_Schlafzimmer_T:+23.4_H:50


Bis Schlafzimmer_T:+23.4 ist alles ok, danach fehlt's. also bis zur 39. Stelle. Kann es auch ein Problem mit der Zählweise sein? Ich beginne bei Zeile 0 und Spalte 0 und komme dann jeweils zur 4 bzw. 39. Haben wir da verschiedene Ansätze?

Kannst Du bitte noch etwas zum \x20 Attribut schreiben? Die Sache mit der Zeit funktioniert. Schön, das man eine Wahl zwischen kompletter Zeit und jeweils Stunden, Minuten und Sekunden hat. Die einstelligen Sekunden haben beim ersten Beschreiben des LCD noch keine führende Null. Beim nächsten Durchgang einer Minute funktionierte es. Sehe gerade, das es bei den Minuten auch so ist. Da ist es unschön, weil die Sekunden dann "dreistellig" werden, wenn der Doppelpunkt durch die fehlende Zehner-Minute eine Stelle nach vorn rückt. Da ich die Poll-Zeit auf 30sec stehen habe und auch gut mit 60sec leben kann, hätte ich die Aktualisierung der Zeit gerne zur vollen Minute. Geht sowas?

Viele Grüße, Ricardo

ps: ja, es ist sehr warm in unserem Schlafzimmer! :'(
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 22 Juli 2014, 21:22:17
die fehlende führende null bei einstelligen zahlen habe ich bereits in arbeit, schlichtweg nicht bedacht gewesen.

wenn Du \x20 als wert für das attr nimmst (ich glaube fhem-bedingt doppel-backslash??) kannst Du mit normalen leerzeichen arbeiten und DLCD ersetzt diese kurz bevor das trigger-command abgesetzt wird, ohne daß die readings von DLCD verunstaltet werden.

den komplizierten part (sp.40) mache ich sobald wie möglich.

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 22 Juli 2014, 21:31:32
Keine Eile, es geht doch mit großen Schritten voran.  :D

Weitere Entdeckungen:

Habe das Datum gesehen. der Monat ist noch einen Monat "hinterher". In Zeile 175 und 177 scheint das zu geschehen. Ansonsten => funktioniert!

Da das Modul- vermute ich- vorwiegend auf Punktmatrixdisplays Anwendung findet, könnte ich mir Zeile 45 so vorstellen:
my($attrList)=" dlcdCols:6,8,12,16,20,24,40".
Hier sind alle gängigen Displaygrößen aufgelistet: http://www.sprut.de/electronic/lcd/index.htm#adressen (http://www.sprut.de/electronic/lcd/index.htm#adressen)
Bin mir nicht ganz sicher, ob es LCDs mit 6 Spalten gibt.  :)
Eine Menge verschiedener LCDs sieht man hier: http://stores.ebay.de/Ego-China-Electronics/Character-LCD-Module-/_i.html?_fsub=297038014 (http://stores.ebay.de/Ego-China-Electronics/Character-LCD-Module-/_i.html?_fsub=297038014)

Das mit \x20 und \\x20 gehe ich morgen an.

Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: det. am 22 Juli 2014, 21:31:46
Hallo Florian,
das sieht richtig gut aus und vereinfacht die Datenaufbereitung für die Displays enorm. Bis ich das produktiv eingebaut habe wird noch etwas Zeit vergehen. Bis dahin erst mal vielen Dank für Deine Mühe.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 24 August 2014, 12:08:36
Ich habe mal wieder ein wenig getestet, komme aber nicht weiter. Als problematisch haben sich die noch unvollständigen Möglichkeiten zur Formatierung und Platzierung erwiesen. Weiterhin gibt es noch Ideen, die ich gerne beschreiben möchte.

1. Die Readings lassen sich zwar per Zahlenformatierung anpassen, jedoch habe ich ohne führende Nullen immer wieder Versatz in der Darstellung. Daher ist es sinnvoll, entweder führende Nullen (wie bei der Uhrzeit vorgesehen) einzufügen oder besser Leerzeichen für eine gut lesbare Darstellung. Beispiel: -13.5°C benötigt 7 Zeichen, 8.1°C nur 5 Zeichen plus zwei Platzhalter davor, um folgenden Text nicht zu verschieben (was wiederum ein externes löschen jeder Zeile vor dem neuen Beschreiben notwendig macht).

2. Bei mir erzeugt formatnum immer ein Vorzeichen. Ich kann also entweder das Attribut weglassen und habe kein Vorzeichen, dann aber zB unsinnige Nachkommastellen bei der Feuchte, oder ich kann formatieren auf Nachkommastellen oder Ganzzahl, habe jedoch bei jeder Einstellung das Vorzeichen dabei.

3. Ich habe ein 16x1 LCD, auf welches ich per Notify beim Eintreffen der Readings verschiedene Klimadaten schreibe. Ich habe keine Idee, wie ich hier zB wechselweise diese Zeile mit verschiedenen Klimadaten beschreiben soll. Klar kann man extern zeitgesteuert zB per at das Reading der jeweiligen Zeile jeweils vor Aktion von PollIntervall neu beschreiben, was aber der Übersichtlichkeit nicht zuträglich ist. Das muss doch besser gehen ...  8)

Gibt es bereits weitere Tester mit Ideen und Erfahrungen?

Viele Grüße, Ricardo

Edit: die 40. Spalte kann ich beschreiben, wenn ich bei dlcdTriggerCmd in Spalte 1 anstelle Spalte 0 beginne. Dann jedoch erreiche ich Spalte 0 nicht mehr.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 25 August 2014, 12:06:37
Zitat von: kpwg am 24 August 2014, 12:08:36
1. Die Readings lassen sich zwar per Zahlenformatierung anpassen, jedoch habe ich ohne führende Nullen immer wieder Versatz in der Darstellung. Daher ist es sinnvoll, entweder führende Nullen (wie bei der Uhrzeit vorgesehen) einzufügen oder besser Leerzeichen für eine gut lesbare Darstellung. Beispiel: -13.5°C benötigt 7 Zeichen, 8.1°C nur 5 Zeichen plus zwei Platzhalter davor, um folgenden Text nicht zu verschieben (was wiederum ein externes löschen jeder Zeile vor dem neuen Beschreiben notwendig macht).
2. Bei mir erzeugt formatnum immer ein Vorzeichen. Ich kann also entweder das Attribut weglassen und habe kein Vorzeichen, dann aber zB unsinnige Nachkommastellen bei der Feuchte, oder ich kann formatieren auf Nachkommastellen oder Ganzzahl, habe jedoch bei jeder Einstellung das Vorzeichen dabei.
ich habe den formatnum bereich überarbeitet. die bisherigen attr einstellungen funktionieren leider nicht mehr in der neuen version. im wiki steht die beschreibung: man stellt jetzt feste anzahl ziffern ein und dezimalstellen. das mit dem vorzeichen ist gefixed (war nur ein fehler von mir drin daß man es nicht abschalten konnte)

Zitat
3. Ich habe ein 16x1 LCD, auf welches ich per Notify beim Eintreffen der Readings verschiedene Klimadaten schreibe. Ich habe keine Idee, wie ich hier zB wechselweise diese Zeile mit verschiedenen Klimadaten beschreiben soll. Klar kann man extern zeitgesteuert zB per at das Reading der jeweiligen Zeile jeweils vor Aktion von PollIntervall neu beschreiben, was aber der Übersichtlichkeit nicht zuträglich ist. Das muss doch besser gehen ...  8)
ich könnte eine art rollierfunktion anbieten. wenn Du Dein 16/1 dann in DLCD als 16/4 einrichtest wechselt er 4 anzeigen durch. würde das reichen?

das spalte 40 problem ist außerhalb DLCD zu suchen, muß ein problem mit Deinem display bzw dessen ansteuerungsmodul sein. auch daß bei manchen displays mehrere leerzeichen zusammengefaßt werden ist ein solches treiberproblem

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 25 August 2014, 16:56:24
Zitat von: epsrw1 am 25 August 2014, 12:06:37
ich könnte eine art rollierfunktion anbieten. wenn Du Dein 16/1 dann in DLCD als 16/4 einrichtest wechselt er 4 anzeigen durch. würde das reichen?
Das wäre obercool. 8) Na klar reicht das! Der PollIntervall als Umschaltzeit würde genauso genügen, wäre sogar ideal. Dann kann ich in einer Ecke die Uhrzeit hh:mm aktuell halten bzw. einfach stets mit schreiben und auf dem Rest Daten schreiben. Ein PollIntervall von 30sec. ist aus meiner Sicht ausreichend.

Zitat von: epsrw1 am 25 August 2014, 12:06:37
das spalte 40 problem ist außerhalb DLCD zu suchen, muß ein problem mit Deinem display bzw dessen ansteuerungsmodul sein. auch daß bei manchen displays mehrere leerzeichen zusammengefaßt werden ist ein solches treiberproblem
Da teste ich wieder weiter und logge usw. mit anschließendem Bericht.


Es gibt noch ein Problem:
2014.08.25 16:44:07 1: reload: Error:Modul 39_DLCD deactivated:
Global symbol "$name" requires explicit package name at ./FHEM/39_DLCD.pm line 366.
Global symbol "$name" requires explicit package name at ./FHEM/39_DLCD.pm line 366.

Das Modul kommt nicht mit hoch. Wenn ich die Zeile auskommentiere, funktioniert es. Die Zeile lautet:
Log3($name, 3, "DLCD $name L.".__LINE__." value:".$rep." is not a number");


Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 25 August 2014, 17:20:12
update:
# $Id: 39_DLCD.pm 1107 2014-08-25 17:16:00Z Florian Duesterwald


Zitat von: kpwg am 25 August 2014, 16:56:24
Es gibt noch ein Problem:
2014.08.25 16:44:07 1: reload: Error:Modul 39_DLCD deactivated:
Global symbol "$name" requires explicit package name at ./FHEM/39_DLCD.pm line 366.
Global symbol "$name" requires explicit package name at ./FHEM/39_DLCD.pm line 366.

das fängt den fehler beim start ab, wenn die werte die zahlen sein sollten noch auf initialized oder so stehen. hab's gerade korrigiert und neu hochgeladen

rollieren mach ich demnächst fertig.

mit dem 40/4 nochmal, ich könnte es auch selbst testen, würd dafür auf das angebot des leihweisen displays gerne zurückkommen

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 25 August 2014, 22:27:54
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 27 August 2014, 06:04:06
update:
# $Id: 39_DLCD.pm 1110 2014-08-27 06:01:00Z Florian Duesterwald $

-> scrollfunktion verbessert
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 27 August 2014, 20:35:03
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 28 August 2014, 08:53:36
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 28 August 2014, 10:01:23
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 :)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 28 August 2014, 10:27:08
Deep recursion on subroutine "main::InternalTimer" at ./FHEM/39_DLCD.pm line 170, <> line 12.

-> update kommt gleich, mein fehler
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 28 August 2014, 11:07:02
update:

# $Id: 39_DLCD.pm 1111 2014-08-28 10:31:00Z Florian Duesterwald $
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 28 August 2014, 17:09:54
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 29 August 2014, 05:48:06
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 29 August 2014, 15:51:08
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 03 September 2014, 20:11:49
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 04 September 2014, 13:07:58
update:
# $Id: 39_DLCD.pm 1113 2014-09-04 12:16:00Z Florian Duesterwald $


-logfile-überlauf repariert
-neue attr: dlcdClearLineCmd und dlcdClearAllCmd
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: Tobias am 04 September 2014, 15:45:14
Nur so als Frage: sonderzeichen und Umlaute hast du auch berücksichtigt?
http://forum.fhem.de/index.php/topic,25727.msg187535.html#msg187535
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 04 September 2014, 16:24:38
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 04 September 2014, 16:30:18
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 04 September 2014, 18:28:48
update:
# $Id: 39_DLCD.pm 1114 2014-09-04 18:26:00Z Florian Duesterwald $


-> LogLevel attr geändert
-> zusätzlicher Logeintrag incl. Datenzeile bei warnmeldung "daten zu lang"
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 05 September 2014, 01:14:12
Zitat von: Tobias am 04 September 2014, 15:45:14
Nur so als Frage: sonderzeichen und Umlaute hast du auch berücksichtigt?
http://forum.fhem.de/index.php/topic,25727.msg187535.html#msg187535

update:
# $Id: 39_DLCD.pm 1115 2014-09-05 00:12:00Z Florian Duesterwald $

attr: dlcdReplaceRegex

;)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: kpwg am 22 September 2014, 08:51:55
Hallo Florian,

seit gut drei Wochen läuft das Modul nun produktiv. Ich bediene damit zwei Displays über LAN, welche an einer Eigenbau-Plattform mit ATMega32 und Ethersex hängen. Dabei schreibe ich 24/7 alle 15 Sekunden ein paar Werte in die Zeilen. Ich meine, das es als "stabil" gelten kann.  8)

Jetzt wo es draußen wieder kälter wird (aktuell 9°C), fiel mir dennoch ein Problem (Wunsch) bei der Formatierung auf:
Mit dlcdVal3formatnum 3+1+- erreiche ich theoretisch stets drei Stellen inkl. einer Nachkommastelle und Vorzeichen. Das funktioniert jedoch nicht, wenn vor dem Komma nur einstellige Werte geliefert werden. Eine führende Null oder besser ein Blankspace wäre hier für einen Erhalt der Formatierung sinnvoll. Für bessere Lesbarkeit sollte dann sogar das Vorzeichen an den einstelligen Wert "heranrücken", also seinen Platz mit dem eingefügten Blankspace tauschen. Hast du eine Idee?

Viele Grüße, Ricardo
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 22 September 2014, 09:13:16
Zitat von: kpwg am 22 September 2014, 08:51:55
Jetzt wo es draußen wieder kälter wird (aktuell 9°C), fiel mir dennoch ein Problem (Wunsch) bei der Formatierung auf:
Mit dlcdVal3formatnum 3+1+- erreiche ich theoretisch stets drei Stellen inkl. einer Nachkommastelle und Vorzeichen. Das funktioniert jedoch nicht, wenn vor dem Komma nur einstellige Werte geliefert werden. Eine führende Null oder besser ein Blankspace wäre hier für einen Erhalt der Formatierung sinnvoll. Für bessere Lesbarkeit sollte dann sogar das Vorzeichen an den einstelligen Wert "heranrücken", also seinen Platz mit dem eingefügten Blankspace tauschen. Hast du eine Idee?

schön daß es stabil läuft :)

in der theorie sollten die führenden nullen drin sein. bei zahlen ohne nachkommastelle funktioniert das auch richtig.
warum es bei float nicht klappt finde ich die nächsten tage raus wenn ich zeit habe. (sprintf ist immer wieder überraschend)

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: moemoe am 22 September 2014, 20:42:33
Hi,

danke für das Modul, ich hatte gerade angefangen mir das alles händisch zusammezufrickeln.

Ein paar Dinge sind mir noch aufgefallen:
- Das leidige Zeichenproblem, so gibt bei mir \xDF ein °-Zeichen, was ich aber dank Unicode so nichtmal gescheit gesendet bekomme. Daher hatte ich die Idee, zwei Attribute einzuführen, replaceFrom und replaceTo. Das sind beides Listen von irgendwie-getrennten Werten (das Zeichen ist dann natürlich verbrannt, ich würde , oder . vorschlagen), und dann wird einfach 1:1 ersetzt. Würde ich auch die Tage selber implementieren und dir ein Patch schicken wenn du nichts dagegen hast ;)
- Scrollen 1: Lässt sich irgendwie eine Geschwindigkeit vorgeben? Über das langsame i2c hier ist die Zeile kaum fertiggeschrieben, wenn sie schon wieder entfernt wird
- Scrollen 2a: Ich würde mir ein Parameter wünschen, um erst ab Zeile n zu scrollen, also oben ein paar feststehende Zeilen zu haben.
- Scrollen 2b: Eine Option, um die Zeilen vertikal zu scrollen, falls der Text nicht reinpasst, wäre grandios.

Die Scrolldinge sind jetzt nicht soo dringend, vielleicht nehme ich mich denen auch mal an wenn ich Lust darauf habe.

Grüße
Moritz
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 22 September 2014, 20:57:29
Das attr ReplaceRegex löst Dein Problem :)

Mit dem scrollen habe ich auch mal darüber nachgedacht, aber erstmal auf die lange Bank geschoben.
Ab Zeile x läßt sich leicht lösen durch aufteilen in ein dlcd für den statischen teil und ein zweites für die Folgezeilen mit scrolling.

Horizontales scrolling ist bei den meisten günstigen China Displays nicht möglich da das Zeile beschreiben sehr lange dauert.
Gerne lasse ich mich eines besseren belehren :))
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: moemoe am 22 September 2014, 21:25:04
Zitat von: epsrw1 am 22 September 2014, 20:57:29
Das attr ReplaceRegex löst Dein Problem :)
Da war ich blind, danke...

Edit: Aber auch nur halb – das 8bit-Sonderzeichen muss ich da immernoch irgendwie reinbekommen, ein \xDF wird ja nicht fhem-seitig expandet :/

Zitat von: epsrw1 am 22 September 2014, 20:57:29
Mit dem scrollen habe ich auch mal darüber nachgedacht, aber erstmal auf die lange Bank geschoben.
Ab Zeile x läßt sich leicht lösen durch aufteilen in ein dlcd für den statischen teil und ein zweites für die Folgezeilen mit scrolling.
Manchmal kann es so einfach sein :)

Edit: Öhm, dann brauche ich im Ausgabekommando ja einen Offset, also sozusagen ein
attr dlcdTriggerCmd set lcd_wand writeXY 0,%L+2%,20,1 %T%

Derzeit geht es ja nur mit einer einzelnen durchscrollenden Zeile, wenn ich L hart ersetze.

Zitat von: epsrw1 am 22 September 2014, 20:57:29
Horizontales scrolling ist bei den meisten günstigen China Displays nicht möglich da das Zeile beschreiben sehr lange dauert.
Gerne lasse ich mich eines besseren belehren :))
Nur ist das hier kein billiges China-Display – aber ja, der Flaschenhals ist I2C ;)

Wobei ich gerade gesehen habe, dass Format 3+0 ja mit 0en paddet. Dazu findet sich im Wiki
Die möglichen Optionen sind in einer Liste fest vorgegeben, um Fehleinstellungen zu vermeiden. Über das configfile können Eigenkreationen eingestellt werden, die nicht in der Liste enthalten sind.

Welches Configfile meinst du hier? fhem.cfg? Ich hätte gerne kompletten Zugriff auf die Formatstrings, oder einen anderen Weg zu " "-gepaddeten Strings, so wie ich das sehe ist das im Code aber gar nicht vorgesehen?

Grüße
Moritz
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 23 September 2014, 10:39:12
Öhm, dann brauche ich im Ausgabekommando ja einen Offset, also sozusagen ein
attr dlcdTriggerCmd set lcd_wand writeXY 0,%L+2%,20,1 %T%
Derzeit geht es ja nur mit einer einzelnen durchscrollenden Zeile, wenn ich L hart ersetze.
-->zutreffend.

Welches Configfile meinst du hier? fhem.cfg? Ich hätte gerne kompletten Zugriff auf die Formatstrings, oder einen anderen Weg zu " "-gepaddeten Strings, so wie ich das sehe ist das im Code aber gar nicht vorgesehen?
-->in der fhem config kann man user defined zB formatnum 34+2+- einstellen.
wenn Du eine gute idee für den genannten "vollen zugriff" hast, insbesondere eine vernünftige syntax die sich einem durchschnittsuser gut erklären läßt, dann raus mit der sprache ;)

LG florian

PS: die scrollgeschwindigkeit läßt sich übrigens mit dem pollInterval beeinflussen
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: moemoe am 23 September 2014, 11:41:24
So, ich habe mir das Problem gerade noch einmal angesehen mit den Regexps. Ich würde folgende Änderung vorschlagen:

410         foreach(@rex){
411             my($search,$replace)=split(/=/,$_);
412             $replace =~ s/\\(
413                     (?:x\{[0-9a-fA-F]+\}) |        # more than 2 digit hex
414                     (?:N\{U\+[0-9a-fA-F]{2,4}\})   # unicode by hex
415                     )/"qq|\\$1|"/geex; 
416             $txt=~s/$search/$replace/g;
417             }
418         }   


Damit ist es weiterhin möglich, wie bisher zu ersetzen – allerdings kommen zwei Sonderfunktionen hinzu:
\x{hex-code}, zB \x{DF} wird zu °
\N{U+code}, zB \N{U+0041}und  \N{U+41} werden zu A und A

Siehe auch http://stackoverflow.com/questions/3845518/how-do-i-convert-escaped-characters-into-actual-special-characters-in-perl

Somit kann einerseits wie bisher ersetzt werden, wer aber wirklich definieren möchte welchen 8bit-Code an das Display geschickt wird kann es mit \x{ab} machen.

Somit tut dann auch mein ° endlich: dlcdReplaceRegex °=\x{DF} => es wird wirklich binär 11011111 ans Display geschickt.

Ich würde für den vollen Zugriff einfach ein weiteres Attribut vorsehen, dlcdVal{n}formatstring, wenn das gesetzt ist setzt es dlcdVal{n}formatnum außer Kraft. Somit gibt es weiterhin die einfache Möglichkeit, aber wer möchte (und formatstrings versteht) kann machen was immer sprintf hergibt. Ich sehe hier keine Notwendigkeit oder Möglichkeit das einfacher darzustellen, aber an so vielen Stellen in FHEM wird es komplizierter und man kann Dinge kaputtmachen, und wer es nicht nutzen möchte oder kann tut es eben nicht. Den Benutzer hier auf Kosten von eigentlich einfach möglichen Features "vor sich selbst" zu schützen halte ich persönlich für kein gelungenes Konzept.

Und wenn wir gerade dabei sind:

226     my($date_dmy)=$mday.".".$mon.".".$Year;

da standen : statt ., laut Doku/Wiki sollten es aber auch . sein.

Grüße
Moritz
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 23 September 2014, 12:03:43
Zitat von: moemoe am 23 September 2014, 11:41:24
So, ich habe mir das Problem gerade noch einmal angesehen mit den Regexps. Ich würde folgende Änderung vorschlagen:

410         foreach(@rex){

Damit ist es weiterhin möglich, wie bisher zu ersetzen – allerdings kommen zwei Sonderfunktionen hinzu:
\x{hex-code}, zB \x{DF} wird zu °
\N{U+code}, zB \N{U+0041}und  \N{U+41} werden zu A und A
Siehe auch http://stackoverflow.com/questions/3845518/how-do-i-convert-escaped-characters-into-actual-special-characters-in-perl
Somit kann einerseits wie bisher ersetzt werden, wer aber wirklich definieren möchte welchen 8bit-Code an das Display geschickt wird kann es mit \x{ab} machen.
Somit tut dann auch mein ° endlich: dlcdReplaceRegex °=\x{DF} => es wird wirklich binär 11011111 ans Display geschickt.

Und wenn wir gerade dabei sind:

226     my($date_dmy)=$mday.".".$mon.".".$Year;

da standen : statt ., laut Doku/Wiki sollten es aber auch . sein.

erledigt.

Zitat von: moemoe am 23 September 2014, 11:41:24
Ich würde für den vollen Zugriff einfach ein weiteres Attribut vorsehen, dlcdVal{n}formatstring, wenn das gesetzt ist setzt es dlcdVal{n}formatnum außer Kraft. Somit gibt es weiterhin die einfache Möglichkeit, aber wer möchte (und formatstrings versteht) kann machen was immer sprintf hergibt. Ich sehe hier keine Notwendigkeit oder Möglichkeit das einfacher darzustellen, aber an so vielen Stellen in FHEM wird es komplizierter und man kann Dinge kaputtmachen, und wer es nicht nutzen möchte oder kann tut es eben nicht. Den Benutzer hier auf Kosten von eigentlich einfach möglichen Features "vor sich selbst" zu schützen halte ich persönlich für kein gelungenes Konzept.

-> L.243 ff im dateianhang. wenn es das ist was Du Dir vorgestellt hast bau ich das noch in die attr ein.

so macht das spaß ;)

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: moemoe am 23 September 2014, 12:48:02
Du hast vergessen das Attribut zu definieren, ich habe das für dich mal nachgeholt (und da mit ein paar Schleifen das c&p-Coding aufgeräumt ;)
[EDIT: Sehe jetzt erst dein Edit :DD]

Sieht aus als tut jetzt alles, nur irgendwie mag mein LCD keine mehreren Leerstellen hintereinander, da muss ich nochmal nach schauen was da los ist...

Grüße
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 23 September 2014, 12:59:46
habe gerade noch was eingebaut für den offset, dlcdLineAddrMap

edit:
hat sich jetzt leider überschnitten, wo genau hast Du aufgeräumt?
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: epsrw1 am 23 September 2014, 13:02:05
Zitat von: moemoe am 23 September 2014, 12:48:02
Sieht aus als tut jetzt alles, nur irgendwie mag mein LCD keine mehreren Leerstellen hintereinander, da muss ich nochmal nach schauen was da los ist...

das problem ist bekannt und liegt im displaytreiber verborgen.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v1.1
Beitrag von: moemoe am 23 September 2014, 13:08:39
Zitat von: epsrw1 am 23 September 2014, 12:59:46
edit:
hat sich jetzt leider überschnitten, wo genau hast Du aufgeräumt?

Z. 243-247
Z. 435ff sub _dlcdAttribs($@){

Zitat von: epsrw1 am 23 September 2014, 13:02:05
das problem ist bekannt und liegt im displaytreiber verborgen.

Das debugge ich gerade, denn im Moment kommen die mehrfachen Leerzeichen nichtmal bei LiquidCrystal.pm an.

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.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 September 2014, 13:18:42
Zitat von: moemoe am 23 September 2014, 13:08:39
Z. 435ff sub _dlcdAttribs($@){

ich nehme die lange liste da drin in kauf da die werte aus einer tabelle rauskopiert werden die gleichzeitig basis für den wikitext ist. vereinfacht mir die pflege ;)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 September 2014, 13:21:40
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 (?)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: moemoe am 23 September 2014, 13:43:28
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.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 September 2014, 13:59:15
update ist online:

# $Id: 39_DLCD.pm 1121 2014-09-23 13:48:00Z Florian Duesterwald $
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Icinger am 02 Oktober 2014, 23:14:33
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 03 Oktober 2014, 11:51:37
update:


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


--> disable [0..1]
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: kpwg am 07 Oktober 2014, 20:43:00
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...
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: moemoe am 07 Oktober 2014, 20:55:45
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 07 Oktober 2014, 23:29:02
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Icinger am 08 Oktober 2014, 10:12:28
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: kpwg am 08 Oktober 2014, 19:41:30
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: kpwg am 18 Januar 2015, 17:35:53
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: McSpitz am 23 März 2015, 18:43:09
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 März 2015, 19:11:19
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: McSpitz am 23 März 2015, 19:30:12
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 24 März 2015, 00:15:48
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
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 03 Mai 2015, 13:56:08
update:


# $Id: 39_DLCD.pm 1126 2015-05-03 11:31:00Z Florian Duesterwald $


-> bis zu 20 datenquellen
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Spezialtrick am 15 Juni 2015, 12:50:21
Ist es eigentlich auch möglich innerhalb von Zeilen scrollen zu lassen?

Gerade bei Musik Titel wirds mit 20 Zeichen schnell eng.  ::)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Spezialtrick am 29 Juni 2015, 12:04:50
Hat keiner einen Tipp?  :o
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 29 Juni 2015, 23:24:42
Zitat von: Spezialtrick am 15 Juni 2015, 12:50:21
Ist es eigentlich auch möglich innerhalb von Zeilen scrollen zu lassen?
Gerade bei Musik Titel wirds mit 20 Zeichen schnell eng.  ::)

ich habe darüber nachgedacht, die idee aber dann verworfen. zB bei musik, wenn sich der titel ändert weil der nächste kommt, ist die länge des zu scrollenden textes anders. dann hakt es regelmäßig irgendwie.
zweites contra-argument ist die erhebliche rechenlast durch die jeweils komplette neubeschreibung aller zeiches des displays.

gerne lasse ich mich vom gegenteil überzeugen, sehe aber im augenblick nicht wirklich pro-argumente um das umzusetzen....

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Spezialtrick am 30 Juni 2015, 09:57:13
Zitat von: epsrw1 am 29 Juni 2015, 23:24:42
ich habe darüber nachgedacht, die idee aber dann verworfen. zB bei musik, wenn sich der titel ändert weil der nächste kommt, ist die länge des zu scrollenden textes anders. dann hakt es regelmäßig irgendwie.

Kommt es hier wirklich auf die Länge des Textes an? Reicht es nicht einfach aus, dass das Display weiß, dass es mehr als 20 Zeichen sind, die dargestellt werden sollen?

Zitatzweites contra-argument ist die erhebliche rechenlast durch die jeweils komplette neubeschreibung aller zeiches des displays.

Ist die Belastung nicht die selbe, wenn man horizontal scrollt? Dies würde sich doch eingrenzen lassen, indem man für jede einzelne Zeile bestimmt, ob gescrollt werden soll oder nicht. Ein Cubietruck sollte damit doch nicht überfordert sein oder? Außerdem könnte man es ja auch als Option zur Verfügung stellen, sodass jeder die Wahl hat ob er es nutzt oder nicht.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: danieljo am 13 Dezember 2015, 19:36:10
Tolles Modul hätte nie gedacht das ich nochmal Dot-Matrix LCD einsetze aber für einfache Aufgaben wie das Anzeigen von Werten erstklassik.

Denoch habe ich ein paar Probleme. Und zwar mit den Leerzeichen. Aus Optischen Gründen wollte ich ein weiteres Leerzeichen zwischen 2 Werten einfügen damit das Display von Links nach rechts komplett ausgefüllt ist. Aber DLCD nimmt dies nicht dann habe ich die Option mit \\x20 gesehen aber mein LCD-Display zeigt dann nur merkwürdige Zeichen an da wo das Leerzeichen hinsoll. Hast du eine Idee dazu woran es liegen könnte.

und gibt es eine Möglichkeit Zeichen oder Symbole anzeigen zu lassen. z.B. ein vollausgefühltes Zeichen oder sowas. Es gibt ja je nach LCD eingespeicherte Zeichen-Tabellen.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: danieljo am 13 Dezember 2015, 19:40:46
z.B. hier der HD44780 Zeichensatz.

(https://upload.wikimedia.org/wikipedia/commons/5/5d/Charset.gif)

EDIT: Ich habs selber herausgefunden ich muss statt \\x20 es so \x{10} schreiben. Um ein Sonderzeichen einzufügen muss man sich nur den binären wert in der Zeichentabelle raussuchen diesen dann in Hex umwandeln und in zwischn die { } schreiben.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: danieljo am 14 Dezember 2015, 20:08:18
Wäre es möglich statt jede einzelne Zeile zu scrollen 2 Screnns zu erzeugen die abwechseln angezeigt werden?

Screen 1 -> dlcdLine1 bis dlcdLine4
Screen 2 -> dlcdLine5 bis dlcdLine8
usw...

Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 15 Dezember 2015, 13:07:55
Zitat von: danieljo am 14 Dezember 2015, 20:08:18
Wäre es möglich statt jede einzelne Zeile zu scrollen 2 Screnns zu erzeugen die abwechseln angezeigt werden?
Screen 1 -> dlcdLine1 bis dlcdLine4
Screen 2 -> dlcdLine5 bis dlcdLine8
usw...

ist so nicht vorgesehen. evtl kannst Du aber mit AT zeitgesteuert einfach die parameter für die einzelnen zeilen automatisch ändern lassen
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: ckaytwo am 13 Januar 2016, 08:05:50
Hallo,

tolles Modul.... vielen Dank dafür.

kurze zwischenfrage. Ich möchte Dein Modul in Verbindung mit dem Squeezebox Modul nutzen und je nach dem ob Radio oder eine MP3 abgespielt wird muss ich auf ein anderes Reading zurückgreifen. (es wird zusammen mit dem Firmata-Modul ein RadioBedienteil in UP-Einsatz ;-))

Wenn ich den Thread richtig verfolgt habe ist eine If/Then Abfrage innerhalb des Moduls nicht möglich?
Oder feht mir nur die richtige Syntax?
   
attr display dlcdLine 4 {if (%2% eq "-") (%3%) else (%3%)}

Ich muss aktuell vermutlich mit einem notify von aussen das Attribut neu setzen. Korrekt?

Danke und weiterhin viel Erfolg..
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: The-Holgi am 13 Januar 2016, 12:57:09
Hallo,
hat vielleicht jemand eine Anleitung oder einen Link, wie man ein 16x2 Display an einen RPI 2 anschließt.

Gruß Holgi
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: det. am 13 Januar 2016, 16:13:45
ja hier:
https://www.google.de/search?q=16x2+Display+an+einen+RPI+2&oq=16x2+Display+an+einen+RPI+2&aqs=chrome..69i57.6039j0j8&sourceid=chrome&es_sm=93&ie=UTF-8 (https://www.google.de/search?q=16x2+Display+an+einen+RPI+2&oq=16x2+Display+an+einen+RPI+2&aqs=chrome..69i57.6039j0j8&sourceid=chrome&es_sm=93&ie=UTF-8)
googeln ist schon schwer, kann offenbar nicht jeder....
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD ...
Beitrag von: Kermit20 am 22 Februar 2016, 13:35:41
Hi,

danke für das Modul. Ich habe es erfolgreich einsetzen können. Leider gestaltet sich der Betrieb schwierig. Ich habe über das Modul das LCD gestaltet. Durch meine Systemüberwachung ist dann aufgefallen, dass meine CPU dauerhaft immer auf 97 - 100 % steigt. Disable ich das Modul, geht die CPU Last runter und FHEM läuft wieder flüssig.

Das ganze läuft auf einem Raspberry B (single Core 700Mhz). Ist das Gerät für die Anforderungen einfach zu langsam / schwach oder gibt es hier einen Trick ?

Danke und Gruß

Jan
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 Februar 2016, 10:24:02
Zitat von: Kermit20 am 22 Februar 2016, 13:35:41
Hi,

danke für das Modul. Ich habe es erfolgreich einsetzen können. Leider gestaltet sich der Betrieb schwierig. Ich habe über das Modul das LCD gestaltet. Durch meine Systemüberwachung ist dann aufgefallen, dass meine CPU dauerhaft immer auf 97 - 100 % steigt. Disable ich das Modul, geht die CPU Last runter und FHEM läuft wieder flüssig.

Das ganze läuft auf einem Raspberry B (single Core 700Mhz). Ist das Gerät für die Anforderungen einfach zu langsam / schwach oder gibt es hier einen Trick ?

Danke und Gruß

Jan

Das Übertragen der Daten zum Display blockiert gerne mal (das liegt allerdings im dortigen Modul). Der einfachste Weg ist das Aktualisierungsintervall länger einzustellen.
Mit etwas mehr Details (Display, Anschlussart, Modulconfig) könnte man Dir auch etwas detaillierter antworten ;)
LG florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD ....
Beitrag von: Kermit20 am 23 Februar 2016, 11:31:21
Hi,

also ich habe wirklich etwas mit Infos gespart, daher hier mal von vorne:

- System RPI B Singelcore 700MHz
- zwei 20x4 LCD über I2C Angebunden
- Debian und FHEM up to date
- DLCD aus deinem ersten Post

1. I2C Bus

Internals:
   DEF        1
   DeviceName /dev/i2c-1
   NAME       SYS_I2C_BUS
   NOTIFYDEV  global
   NR         71
   NTFY_ORDER 50-SYS_I2C_BUS
   STATE      Ok
   TYPE       RPII2C
   ioctl_ph_exists 1
Attributes:
   DbLogExclude .*
   room       9.2_LCD


2. I2C LCD

Internals:
   DEF        20 4 63
   I2C_Address 63
   IODev      SYS_I2C_BUS
   NAME       SYS_I2C_LCD_1
   NR         72
   STATE      defined
   TYPE       I2C_LCD
   sizex      20
   sizey      4
   Readings:
     2016-02-22 13:39:39   backlight       on
     2016-02-22 13:39:39   text            defined
     2016-02-23 11:29:03   writeXY         0,0,20,1 Di 23.02.2016 11:29
   Mapping:
     P0         RS
     P1         RW
     P2         E
     P3         LED
     P4         D4
     P5         D5
     P6         D6
     P7         D7
Attributes:
   DbLogExclude .*
   IODev      SYS_I2C_BUS
   pinMapping P0=RS,P1=RW,P2=E,P3=LED,P4=D4,P5=D5,P6=D6,P7=D7
   room       9.2_LCD
   stateFormat text


3. DLCD Definition

Internals:
   NAME       SYS_LCD_1
   NR         73
   NTFY_ORDER 50-SYS_LCD_1
   STATE      11:30:05<br>Di 23.02.2016 11:30<br>Lstg.63% St:5/3/853<br>Bet:on Stö:off Fr:on<br>Au:+7.0° G:16° Ab:54°<br>K.IST R.IST W.IST<br>K.IST R.IST W.IST<br>56°C 23°C 52.9°C<br>K.SOL R.SOL W.SOL<br>+70°C 23°C 53°C
   TYPE       DLCD
   Readings:
     2016-02-23 11:30:05   Line1           Di 23.02.2016 11:30
     2016-02-23 10:45:14   Line2           Lstg.63% St:5/3/853
     2016-02-23 10:00:04   Line3           Bet:on Stö:off Fr:on
     2016-02-23 11:29:39   Line4           Au:+7.0° G:16° Ab:54°
     2016-02-19 15:52:01   Line5           K.IST R.IST W.IST
     2016-02-23 11:29:55   Line6           56°C 23°C 52.9°C
     2016-02-19 15:53:08   Line7           K.SOL R.SOL W.SOL
     2016-02-23 10:44:59   Line8           +70°C 23°C 53°C
     2016-02-22 14:32:03   scrollingState  0
     2016-02-23 11:30:05   state           11:30:05
Attributes:
   DbLogExclude .*
   disable    0
   dlcdCols   20
   dlcdLine1  %date_WD_ger% %date_dmy% %time_h%:%time_m%
   dlcdLine2  Lstg.%1%% St:%2%/%3%/%4%
   dlcdLine3  Bet:%5% Stö:%6% Fr:%7%
   dlcdLine4  Au:%8%° G:%9%° Ab:%10%°
   dlcdLine5  K.IST R.IST W.IST
   dlcdLine6  %11%°C %12%°C %13%°C
   dlcdLine7  K.SOL R.SOL W.SOL
   dlcdLine8  %14%°C %15%°C %16%°C
   dlcdPollInterval 5
   dlcdReplaceRegex °=\x{DF}
   dlcdRows   8
   dlcdScrolling 0
   dlcdTriggerCmd set SYS_I2C_LCD_1 writeXY 0,%L%,20,1 %T%
   dlcdVal1   Vitodens200:BrennerLeistung
   dlcdVal10  Vitodens200:Temp-Abgas
   dlcdVal11  Vitodens200:Temp-Kessel-Ist
   dlcdVal12  Vitodens200:Temp-Raum-Ist
   dlcdVal13  Vitodens200:Temp-WarmWasser-Ist
   dlcdVal14  Vitodens200:Temp-Kessel-Soll
   dlcdVal14formatnum 2+0+-
   dlcdVal15  Vitodens200:Temp-Raum-Soll
   dlcdVal16  Vitodens200:Temp-WarmWasser-Soll
   dlcdVal2   Vitodens200:BrennerStartsToday
   dlcdVal2formatnum 1+0
   dlcdVal3   Vitodens200:BrennerStartsLastDay
   dlcdVal3formatnum 1+0
   dlcdVal4   Vitodens200:BrennerStarts
   dlcdVal5   Vitodens200:Brenner
   dlcdVal5formatnum none
   dlcdVal6   Vitodens200:Stoerung
   dlcdVal6formatnum none
   dlcdVal7   Vitodens200:Frost
   dlcdVal8   Vitodens200:Temp-Aussen
   dlcdVal8formatnum 3+1+-
   dlcdVal9   Vitodens200:Temp-Raum-Abgesenkt
   room       9.2_LCD
   stateFormat state<br>Line1<br>Line2<br>Line3<br>Line4<br>Line5<br>Line5<br>Line6<br>Line7<br>Line8



Ergänzung: Sysmon mit den obenstehenden Einstellungen der letzten 24 H

Internals:
   DEF        1 1 1 10
   INTERVAL_BASE 60
   INTERVAL_MULTIPLIERS 1 1 1 10
   MODE       local
   NAME       sysmonRPiSlave
   NR         67
   STATE      Active
   TYPE       SYSMON
   Readings:
     2016-02-23 14:07:07   cpu0_freq       700
     2016-02-23 14:07:07   cpu0_freq_stat  700.00 700.00 700.00
     2016-02-22 13:40:20   cpu_bogomips    2.00
     2016-02-23 14:07:07   cpu_core_count  1
     2016-02-23 14:07:07   cpu_freq        700
     2016-02-23 14:07:07   cpu_freq_stat   700.00 700.00 700.00
     2016-02-23 14:07:07   cpu_idle_stat   -829.97 96.30 86.48
     2016-02-22 13:40:20   cpu_model_name  ARMv6-compatible processor rev 7 (v6l)
     2016-02-23 14:07:07   cpu_temp        44.92
     2016-02-23 14:07:07   cpu_temp_avg    45.2
     2016-02-23 14:07:07   cpu_temp_stat   34.70 49.23 45.20
     2016-02-23 14:07:07   eth0            RX: 10.44 MB, TX: 80.12 MB, Total: 90.56 MB
     2016-02-23 14:07:07   fhemstarttime_text 22.02.2016 13:39:54
     2016-02-23 14:07:07   fhemuptime_text 1 days, 00 hours, 27 minutes
     2016-02-23 13:50:53   fs_boot         Total: 56 MB, Used: 20 MB, 36 %, Available: 37 MB at /boot
     2016-02-23 13:50:53   fs_root         Total: 29836 MB, Used: 3633 MB, 13 %, Available: 24942 MB at /
     2016-02-23 14:07:07   idletime        87208 59.57 %
     2016-02-23 14:07:07   idletime_text   1 days, 00 hours, 13 minutes (59.57 %)
     2016-02-23 14:07:07   loadavg         0.19 0.24 0.23
     2016-02-22 13:40:20   perl_version    v5.14.2
     2016-02-23 14:07:07   ram             Total: 434.60 MB, Used: 62.93 MB, 14.48 %, Free: 371.67 MB
     2016-02-23 14:07:07   ram_used_stat   49.61 115.84 63.01
     2016-02-23 14:07:07   starttime_text  21.02.2016 21:26:59
     2016-02-23 14:07:07   stat_cpu        4728285 0 816820 7543427 10526 504 365051
     2016-02-23 14:07:07   stat_cpu_diff   265 0 170 4916 2 2 28
     2016-02-23 14:07:07   stat_cpu_percent 4.92 0.00 3.16 91.32 0.04 0.04 0.52
     2016-02-23 14:07:07   stat_cpu_text   user: 4.92 %, nice: 0.00 %, sys: 3.16 %, idle: 91.32 %, io: 0.04 %, irq: 0.04 %, sirq: 0.52 %
   


Ohne Scrollen und einem Intervall von 5 Sek, hat sich das System nun etwas beruhigt. Ich schalte das scrollen mal wieder ein, um einen Sysmon unter "Last" zu erhalten.

Was kann ich noch zur Verfügung stellen ?

Kann man die Scroll Geschwindigkeit einstellen ?
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 24 Februar 2016, 09:21:52
Zitat von: Kermit20 am 23 Februar 2016, 11:31:21
- zwei 20x4 LCD über I2C Angebunden
...
2. I2C LCD
der i2c ist der übeltäter der blockiert, in Deinem Fall gleich doppelt...

Zitat von: Kermit20 am 23 Februar 2016, 11:31:21
3. DLCD Definition


   dlcdPollInterval 5

Ohne Scrollen und einem Intervall von 5 Sek, hat sich das System nun etwas beruhigt. Ich schalte das scrollen mal wieder ein, um einen Sysmon unter "Last" zu erhalten.
...
Kann man die Scroll Geschwindigkeit einstellen ?
mit längerem poll interval sollte es etwas flüssiger werden. das scrollen geht dann ebenfalls entsprechend langsamer.

bei zwei displays würde ich das interval um eine sekunde verschieden setzen, damit die beiden asymetrisch laufen und die i2c blockade jeweils kürzer ausfällt.

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD ....
Beitrag von: Kermit20 am 24 Februar 2016, 09:41:29
Hi,
und Danke für deine Antwort. Das das 2te LCD nicht förderlich ist, dachte ich mir, hängt aber nur dran um zu schauen ob es geht 2 anzuschließen und stellt nur die Uhrzeit dar.

Die Probleme gab es auch schon vorher mit nur einem Display.

Hier mal der Sysmon mit Scrolling:

Internals:
   DEF        1 1 1 10
   INTERVAL_BASE 60
   INTERVAL_MULTIPLIERS 1 1 1 10
   MODE       local
   NAME       sysmonRPiSlave
   NR         67
   STATE      Active
   TYPE       SYSMON
   Readings:
     2016-02-24 09:35:05   cpu0_freq       700
     2016-02-24 09:35:05   cpu0_freq_stat  700.00 700.00 700.00
     2016-02-23 17:30:11   cpu_bogomips    2.00
     2016-02-24 09:35:35   cpu_core_count  1
     2016-02-24 09:35:05   cpu_freq        700
     2016-02-24 09:35:05   cpu_freq_stat   700.00 700.00 700.00
     2016-02-24 09:35:35   cpu_idle_stat   -829.97 96.30 13.93
     2016-02-23 17:30:11   cpu_model_name  ARMv6-compatible processor rev 7 (v6l)
     2016-02-24 09:35:35   cpu_temp        44.39
     2016-02-24 09:35:35   cpu_temp_avg    44.5
     2016-02-24 09:35:35   cpu_temp_stat   34.70 49.23 44.41
     2016-02-24 09:35:35   eth0            RX: 1.19 MB, TX: 7.96 MB, Total: 9.15 MB
     2016-02-24 09:35:35   eth0_diff       RX: 0.00 MB, TX: 0.01 MB, Total: 0.01 MB
     2016-02-24 09:35:35   eth0_rx         1247828
     2016-02-24 09:35:35   eth0_speed      100
     2016-02-24 09:35:35   eth0_tx         8343812
     2016-02-24 09:35:35   fhemstarttime   1456244979
     2016-02-24 09:35:35   fhemstarttime_text 23.02.2016 17:29:39
     2016-02-24 09:35:35   fhemuptime      57926
     2016-02-24 09:35:35   fhemuptime_text 0 days, 16 hours, 05 minutes
     2016-02-24 09:35:35   idletime        10139 17.48 %
     2016-02-24 09:35:35   idletime_text   0 days, 02 hours, 48 minutes (17.48 %)
     2016-02-24 09:35:35   loadavg         1.06 1.01 1.00
     2016-02-23 17:30:11   perl_version    v5.14.2
     2016-02-24 09:35:35   ram             Total: 434.60 MB, Used: 56.99 MB, 13.11 %, Free: 377.61 MB
     2016-02-24 09:35:35   ram_used_stat   47.93 115.84 56.77
     2016-02-24 09:35:35   starttime       1456244885
     2016-02-24 09:35:35   starttime_text  23.02.2016 17:28:05
     2016-02-24 09:35:35   stat_cpu        3998014 0 525717 770168 2141 94 262532
     2016-02-24 09:35:35   stat_cpu_diff   4350 0 621 837 2 0 243
     2016-02-24 09:35:35   stat_cpu_percent 71.87 0.00 10.26 13.83 0.03 0.00 4.01
     2016-02-24 09:35:35   stat_cpu_text   user: 71.87 %, nice: 0.00 %, sys: 10.26 %, idle: 13.83 %, io: 0.03 %, irq: 0.00 %, sirq: 4.01 %
     2016-02-24 09:35:35   swap            Total: 100.00 MB, Used: 0.00 MB,  0.00 %, Free: 100.00 MB
     2016-02-24 09:35:35   swap_used_stat  0.00 0.00 0.00
     2016-02-24 09:35:35   uptime          58019
     2016-02-24 09:35:35   uptime_text     0 days, 16 hours, 06 minutes



Ich werde deiner Empfehlung mal folgen und die Displays durchkonfigurieren und die Timer anpassen. Evtl. kann ich auch auf das Scrolling verzichten.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 24 Februar 2016, 10:26:45
ohne scrolling ist die last am geringsten da mein modul vergleicht ob sich daten geändert haben und nur dann an das display überträgt. wenn Dir der platz ohne scrollen reicht ist das vermutlich die beste lösung.

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: ak323 am 23 März 2016, 07:30:06
Zitat von: McSpitz am 23 März 2015, 19:30:12
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

...gibt des denn nirgends eine entsprechende Beschreibung wie man das lcd mit dem HD44780 an den GPIOs des raspberry anschließt und dann konfiguriert ... Ich finde nix.. Danke.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 23 März 2016, 08:28:46
Zitat von: ak323 am 23 März 2016, 07:30:06
...gibt des denn nirgends eine entsprechende Beschreibung wie man das lcd mit dem HD44780 an den GPIOs des raspberry anschließt und dann konfiguriert ... Ich finde nix.. Danke.

Das modul füttert nur Dein bereits fertig eingerichtetes Display mit Daten. Für den Anschluss hilft zB google oder vielleicht dieser Link: http://tutorials-raspberrypi.de/text-auf-16x2-zeichen-lcd-display-anzeigen-hd44780/ (http://tutorials-raspberrypi.de/text-auf-16x2-zeichen-lcd-display-anzeigen-hd44780/)

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: ak323 am 23 März 2016, 20:44:02
Danke Florian für den Link.
Mein lcd ist am Raspberry angeschlossen und über Python kann ich es auch beschreiben.
D.h. Ich brauche dann nur noch das DLCD Modul in fhem benutzen ?

Was verstehst Du unter "fertig eingerichtet" ?

Danke ak323
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Prof. Dr. Peter Henning am 24 März 2016, 05:33:27
http://www.fhemwiki.de/wiki/Digitaler_Bilderrahmen_mit_lcd4linux
http://www.fhemwiki.de/wiki/Infodisplay_Linux-Rechner
http://www.fhemwiki.de/wiki/Statusdisplay_Fritzbox_7390
http://www.fhemwiki.de/wiki/1-Wire_Textdisplay

LG

pah
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 25 März 2016, 07:45:21
Zitat von: ak323 am 23 März 2016, 20:44:02
Mein lcd ist am Raspberry angeschlossen und über Python kann ich es auch beschreiben.
D.h. Ich brauche dann nur noch das DLCD Modul in fhem benutzen ?
Was verstehst Du unter "fertig eingerichtet" ?

Dein Display sollte sich in FHEM beschreiben lassen. Zur Not wäre auch denkbar ein shell-command zum schreiben in der config von DLCD reinzubasteln, das halte ich aber nicht für optimal.
Die Links von pah sollten Dir weiterhelfen.

LG, florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Peter aus Calw am 07 September 2016, 00:51:52
Hallo Florian,
wird zwar angezeigt, dass seit einiger Zeit in Bezug auf Dein Modul nichts mehr passiert ist.
Hoffe aber als Gruftie doch noch eine Hilfe zu erhalten.
Habe mir das LCD2004A von Robin besorgt und es auch schon geschafft von Fhem aus mein Fenster "offen"
an das Ding zu  senden. Nun möchte ich eben die Vorzüge von Deinem Modul DLCD zu nützen, komme aber nicht auf den Trichter wie das Fenster dort hineinkommt.

Mein Fenster heißt "HM_FS_Th:state:offen". Mit diesem Kommando schaffe ich das :

define Anzeige:1 DOIF ([HM_FS_Th:state] eq "open") ({system("wget -q -O- http://192.168.2.10/control?cmd=lcd,,1,Fenster%20Th%20offen")}) DOELSE ({system("wget -q -O- http://192.168.2.10/control?cmd=lcdcmd,clear")}) 

Wie bringe ich DLCD das bei ?
LG Peter aus Calw
Titel: DLCD
Beitrag von: realrob am 28 November 2016, 10:14:01
Liebe Leute,
Nachdem ich erfolgreich nun meine Rolladen via Z-Wave Fibaro und auch schon Relais vie GPIO schalten kann, würde ich gerne auch ein Display HD44780 betreiben auf dem ich zB. Temperatur oder die Wasserstand im Brunnen ausgeben möchte. Nun betreibe ich aber das Display nicht an I2C sondern habe es direkt an die GPIO Pins angeschlossen: Konkret: an GPIO-Pin
DISPLAY
6 (GND)
2 (+5V)
6 (GND) (Kontrast)
26 (GPIO7) (RS)
6 (GND)
24 (GPIO8) (E)
22 (GPIO25)(Data4)
18 (GPIO24)(Data5)
16 (GPIO23)(Data6)
12 (GPIO18)(Data7)

Frage1: Kann Fhem dieses Display ansprechen?
Frage2: Wenn ja, wo müsste ich die Anschlüsse konfigurieren?
Frage3: Wenn das alles klappen sollte - kann ich dann DLCD auch verwenden?

Sorry, falls die Fragen etwas naiv wirken, aber ich mache gerade meine ersten Schritte im System
lg
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Prof. Dr. Peter Henning am 28 November 2016, 10:42:03
http://www.fhemwiki.de/wiki/1-Wire_Textdisplay

und das Modul OWLCD.

LG

pah
Titel: _DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: realrob am 28 November 2016, 12:37:41
 :D Super- Vielen Dank für die rasche Antwort!
So ganz steige ich aber noch nicht durch - da ich das Modul so genau nicht kenne. Gibt es da eventuell noch genauere Infos dazu? zB. Howto?
Dh. definiere ich in dem Modul die Leitungen und dann könnte ich bereits so komfortabel das Display via DLCD ansprechen?
lg
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Prof. Dr. Peter Henning am 28 November 2016, 12:39:52
Nein. http://www.fhemwiki.de/wiki/Kategorie:1-Wire

LG

pah
Titel: 39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: realrob am 28 November 2016, 12:58:35
Danke! Dh. wenn ich Dich richtig interpretiere, dann werde ich um den Hardwareumbau in Richtung 1-Wire nicht herumkommen? Korrekt?

Bem: Die Links, die Du mir geschickt hast führen mich stehts in Richtung 1-Wire. Grundsätzlich ist ja 1-Wire toll, hätten mir auch einige GPIO´s erspart und ich verwende es aktuell auch für die Temperatursensoren.
lg
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 29 November 2016, 22:37:47
erst wenn Dein display in FHEM eingerichtet ist und sich bedienen lässt kannst Du Dein persönliches Layout mit DLCD machen.

LG
Florian
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: realrob am 29 November 2016, 23:55:32
Sehe ich auch so. Die zentrale Frage ist halt nur wie ich das angeschlossene display in fhem ansprechen kann. Über das design mache ich mir danach sorgen.  Lg und danke
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: det. am 30 November 2016, 17:06:33
Zitat von: realrob am 29 November 2016, 23:55:32
Sehe ich auch so. Die zentrale Frage ist halt nur wie ich das angeschlossene display in fhem ansprechen kann. Über das design mache ich mir danach sorgen.  Lg und danke
Die zentrale Frage ist die des Anschlusses - in den verlinkten Artikeln und bei vielen hier im Forum ist das Display damit http://www.fuchs-shop.com/de/shop/6/1/13372316/ über 1-wire Interface an FHEM angebunden. Dann kann Dir auch mit Beispielcode geholfen werden.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: realrob am 30 November 2016, 19:58:21
Hi det,
Danke für Deine Antwort! Tja, habe mich auch schon mit dem Gedanken gespielt, da es FHEM offenbar dieses direkte Ansteuern eines HD44780 dzt. nicht unterstützt.
Klar, auf I2C wäre es eine leichte Übung: Das Standarddisplay kann man mit DIESER http://www.banggood.com/LCD1602-Adapter-I2CIICTWI-Serial-Interface-Module-Board-For-Arduino-p-1056942.html?rmmds=search ansprechen. ALLERDINGS braucht man dazwischen DIESEN Pegelwandler http://www.banggood.com/5Pcs-Two-Channel-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-p-979919.html?rmmds=search beim Chinamann um 2,70 im 5erPack.
und schon würde es laufen..
;-)) Dennoch wurmt es mich und ein paar Leidensgenossen hier im Forum, dass es direkt nicht geht! ;-))
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: schka17 am 30 November 2016, 21:22:33
Zitat von: realrob am 30 November 2016, 19:58:21
Hi det,
Danke für Deine Antwort! Tja, habe mich auch schon mit dem Gedanken gespielt, da es FHEM offenbar dieses direkte Ansteuern eines HD44780 dzt. nicht unterstützt.
Klar, auf I2C wäre es eine leichte Übung: Das Standarddisplay kann man mit DIESER http://www.banggood.com/LCD1602-Adapter-I2CIICTWI-Serial-Interface-Module-Board-For-Arduino-p-1056942.html?rmmds=search ansprechen. ALLERDINGS braucht man dazwischen DIESEN Pegelwandler http://www.banggood.com/5Pcs-Two-Channel-IIC-I2C-Logic-Level-Converter-Bi-Directional-Module-p-979919.html?rmmds=search beim Chinamann um 2,70 im 5erPack.
und schon würde es laufen..
;-)) Dennoch wurmt es mich und ein paar Leidensgenossen hier im Forum, dass es direkt nicht geht! ;-))
Die Pegelwandler benötigst du nicht da das LCD nichts sendet. Ich betreibe mehrere LCD's mit dem I2C Adapter und ESP oder Arduino, funktioniert ohne Probleme


Sent from my iPad using Tapatalk
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: realrob am 30 November 2016, 21:51:22
hmmm.. echt? Würde das i2C Modul, welches mit 5V betrieben wird, die GPIOS SDA1 und SCL1 nicht mit 5V Pegel beaufschlagen und damit grillen? Oder sehe ich das nicht richtig?
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: schka17 am 30 November 2016, 22:06:09
Zitat von: realrob am 30 November 2016, 21:51:22
hmmm.. echt? Würde das i2C Modul, welches mit 5V betrieben wird, die GPIOS SDA1 und SCL1 nicht mit 5V Pegel beaufschlagen und damit grillen? Oder sehe ich das nicht richtig?
Grundsätzlich hast du recht, aber da, zumindest die I2C und LCD Module die ich habe, keine Daten senden,  funktioniert das. Wie gesagt, ich habe es so mit einigen ESP's oder Arduinos, zumindest der ESP ist sehr empfindlich bei Überspannung an den Eingängen.


Sent from my iPad using Tapatalk
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Prof. Dr. Peter Henning am 11 Oktober 2017, 19:11:46
Die Module im Hauptverzeichnis werden nicht nur gepflegt, sondern für die gibt es auch Support. Insofern muss man jedes Verständnis dafür aufbringen, wenn jemand das nicht leisten kann oder will (2 Module von mir stehen auch im contrib).

Also bitte mal langsam mit solchen Forderungen, wenn man selbst noch nicht lange dabei ist.

LG

pah
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Marekh am 29 Oktober 2017, 16:05:41
Ich habe ein 20X4 LCD Display an ESPEasy am laufen, allerdings gelingt es mir nicht °C darzustellen.

Als Attribut habe ich in dlcdReplaceRegex ein °=\xDF eingefügt, dies führt aber zu einen anderen Zeichen auf dem Display.

Wie kann ich mein Display überreder das ° darzustellen

list Garage_Display
Internals:
   NAME       Garage_Display
   NR         240
   NTFY_ORDER 50-Garage_Display
   STATE      So, 29.10.2017 16:03<br>Audibatterie 11.93 V<br><br>Garage T:16.1 °C H:58%
   TYPE       DLCD
   READINGS:
     2017-10-29 01:41:09   Line1           So
     2017-10-23 13:36:45   Line10          attr dlcdLine10 %time1%
     2017-10-29 01:41:09   Line2           29.10.2017
     2017-10-29 16:03:00   Line3           16:03
     2017-10-29 16:03:30   Line4           11.93
     2017-10-29 15:17:31   Line5           16.1 °C
     2017-10-29 15:35:36   Line6           58
     2017-10-29 12:42:06   Line7           timer
     2017-10-23 13:36:45   Line8           attr dlcdLine8 %time1%
     2017-10-23 13:36:45   Line9           attr dlcdLine9 %time1%
     2017-10-29 16:03:30   state           16:03:30
Attributes:
   dlcdClearLineCmd 5
   dlcdCols   20
   dlcdLine1  %date_WD_ger%
   dlcdLine2  %date_dmy%
   dlcdLine3  %time_h%:%time_m%
   dlcdLine4  %1%
   dlcdLine5  %2% °C
   dlcdLine6  %3%
   dlcdLine7  %4%
   dlcdPollInterval 2
   dlcdReplaceRegex °=\xDF
   dlcdRows   10
   dlcdVal1   ESPEasy_Audi_A6_Boardspannung:Analog
   dlcdVal1formatnum 3+2
   dlcdVal2   Garage_Temperatur:temperature
   dlcdVal2formatnum 2+1
   dlcdVal3   Garage_Temperatur:humidity
   dlcdVal3formatnum 2+0
   dlcdVal4   Garage_Tor_runter_Automatisch_DOIF:zeit
   room       Display
   stateFormat Line1, Line2 Line3<br>Audibatterie Line4 V<br><br>Garage T:Line5 H:Line6%


Danke
Marek
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: schka17 am 29 Oktober 2017, 16:15:03
Mit dlcdReplaceRegex    °=ß funktioniert es bei mir
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Marekh am 29 Oktober 2017, 16:58:52
Leider steht mit °=ß  immer noch das gleiche falsche Zeichen auf dem Display, ich definiere in dlcdLine5:  %2% °C, wäre es besser, wenn das °C schon in den ausgelesenen Reading (%2%) stehen würde?

Marek
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: kpwg am 29 Oktober 2017, 17:22:08
Du solltest erst einmal versuchen, den Zeichensatz des Displays zu erkunden. Das hat mit DLCD noch nichts zu tun. Ich habe für solche Fälle das LCD händisch beschrieben und entsprechend Fotos der "Blöcke" gemacht. Nicht immer waren alle gewünschten Zeichen enthalten (Umlaute, etc).
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: LuckyDay am 29 Oktober 2017, 17:27:21
°=\x{DF}

du musst im Zeichensatz von deinem Display schauen, also Doku wälzen
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: schka17 am 29 Oktober 2017, 18:55:43
Doku hatte ich zu meinem Displays auch keine, war recht mühsam, zumal ja auch noch die codepages vom System bzw. Webinterface dazukommen....

Habe das empirisch ermittelt, also einfach nacheinander alle ASCII Codes mit dem webcommand ans Display gesendet.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Marekh am 29 Oktober 2017, 22:43:27
interessant ist, egal was ich bei dlcdReplaceRegex hinschreibe (°=ß, °=\x{DF}...), das Display zeigt immer die gleichen 2 Zeichen an, so als ob das dlcdReplaceRegex nichts macht.

Marek
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: rih am 29 Oktober 2017, 23:01:05
Müssten es nicht 2 Backslash in dem ReplaceRegex-Attribut sein (mal abgesehen vom Zeichensatz)?
°=\\x{DF}
So klappt es zumindest bei mir mit dem °C.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Marekh am 30 Oktober 2017, 20:03:47
auch ein \\ ändert nichts.

Marek
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: ak323 am 07 November 2017, 22:43:16
Hi, bei meinem HD44780 funktioniert das mit:

dlcdReplaceRegex    °=\x{DF}

VG ak323
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: ak323 am 10 November 2017, 21:53:07
Hi epsrw,
Dein DLCD ist super und ich habe damit auch endlich mal mein HD44780 Display angesteuert bekommen (I2C).

Was mir nur auffällt:
Wenn ich die fhem.cfg editiere und speichere oder ein "shutdown restart" mache, dann geht das Display aus und bleibt auch aus (Anm. 12.11.: habe gerade festgestellt, daß das Display läuft, aber die Beleuchtung nicht aktiviert wird ...)?!
Nur mit einem sudo /etc/init.d/fhem stop sudo /etc/init.d/fhem start bekomme ich es wieder zum Leben erweckt .. !

Hat irgendjemand eine Erklärung dafür ?

Und wann wird das Modul des endlich mal in die offizielle Distribution von FHEM aufgenommen ?!

VG ak323
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Marekh am 10 November 2017, 22:31:50
@ak323

Danke, aber hilft auch nicht, es steht immer noch dieses komische Zeichen da.

Marek
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: rih am 28 November 2017, 23:35:37
Hallo,
da das Modul schon einige Zeit nicht mehr gepflegt wird, habe ich es mir für meine Bedürfnisse angepasst. Statt 10 Zeilen sind nun bis zu 20 Zeilen möglich, statt 20 Variablen kann man nun bis zu 30 verwenden.
Weiterhin gibt es jetzt das neue Attribut dlcdScrollPage, mit dem das Scrolling von zeilenweise auf seitenweise eingestellt werden kann (0 = zeilenweise, 1 = seitenweise). Mit "seitenweise" ist gemeint, dass die Anzeige z.B. bei einem vierzeiligen LCD um 4 Zeilen weiter scrollt. Vorausgesetzt, es sind mehr als 4 Zeilen definiert. Idealerweise wird zum seitenweise Scrollen z.B. bei einem vierzeiligen Display ein vielfaches der physikalischen Zeilen definiert, also z.B. 8, 12,...
Die geänderte Moduldatei habe ich angehängt. Vielleicht kann's jemand brauchen. Insbesondere bei sehr vielen anzuzeigenden Zeilen ist das seitenweise Scrollen sinnvoll.
Titel: 39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: The-Holgi am 08 Januar 2018, 17:16:09
Hallo,
bastel gerade mit dem Modul und espeasy herum.
Soweit funktioniert es das die Temperatur eines Sensors von fhem auf dem 2004 Display am ESP angezeigt wird.
Schaffe es aber irgendwie nicht die richtige Zeile zu treffen, der Wert soll auf Zeile 4 angezeigt werden.
dlcdLine4  Aussen %4%
          dlcdPhysicalRows 4
          dlcdTriggerCmd set ESPEasy_ESP05_DHT05 lcd %L% 1 %T%
          dlcdVal4 Aussen_Sensor:temperature
          dlcdVal4formatnum 2+1

er wird jedoch immer in Zeile 3 dargestellt.

Edit: Habe jetzt heraus gefunden, dass Zeile 1 auf meinem Display Zeile 4 ist und Zeile 2 dann auf dem Display Zeile 1 usw.

Gruß Holgi
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: rih am 08 Januar 2018, 23:27:27
Hallo,
mit dem Attribut dlcdLineAddrMap kannst du die Zeilen-Addressierung anpassen.
Versuch mal dlcdLineAddrMap 1,2,3,4 ... statt 0,1,2,3 ...
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: The-Holgi am 08 Januar 2018, 23:49:38
Danke für den Tipp, werde ich morgen mal testen.
Titel: 39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: The-Holgi am 08 Januar 2018, 23:51:50
(https://uploads.tapatalk-cdn.com/20180109/a8fa6b6f5be88f968b91439c016edf65.jpg)
Hat jemand eine Idee warum die readings der einzelnen Zeilen ( Line 1 bis Line 4) nicht angezeigt werden?
Auf dem LCD wird alles richtig dargestellt.
Titel: 39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: The-Holgi am 09 Januar 2018, 22:01:01
Hallo, mir ist gerade aufgefallen, dass die Werte die ans Display geschickt werden auch immer ins logfile geschrieben werden. Atr. verbose 0 ist gesetzt. Ist das normal?
Edit: Nach setzen von verbose 2 in global ist ruhe. Sollte das nicht auch aus dem Modul raus funktionieren?
Gruss Holgi
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Rampler am 21 Februar 2018, 13:55:25
Hallo zusammen,
funktioniert einwandfrei !!!  :) ;)

Evtl. findet die 39_DLCD.pm den Weg in die Repository, wäre echt klasse.
Woran hängt es, dass das Plugin noch nicht eingecheckt ist ?

VG
Klaus
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Rampler am 21 Februar 2018, 15:18:50
Hallo zusammen,
habe noch ein paar Ungereimtheiten:

Folgende Meldungen erscheinen bei FHEM Restart:
2018.02.21 15:11:28 3: DLCD WZ.lcd has been defined
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line1 (22) is longer than display (20), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line1: attr dlcdLine1 %time1%
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line2 (22) is longer than display (20), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line2: attr dlcdLine2 %time1%
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line3 (22) is longer than display (20), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line3: attr dlcdLine3 %time1%
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line4 (22) is longer than display (20), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line4: attr dlcdLine4 %time1%
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line1 (24) is longer than display (16), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line1: attr dlcdVal2 unreadable
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line2 (24) is longer than display (16), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line2: attr dlcdVal3 unreadable
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line3 (24) is longer than display (16), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line3: attr dlcdVal3 unreadable
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line4 (24) is longer than display (16), ignoring some data
2018.02.21 15:11:33 3: DLCD WZ.lcd: Line4: attr dlcdVal3 unreadable


Trotzdem läuft alles wie es soll ...
Internals:
   NAME       WZ.lcd
   NR         593
   NTFY_ORDER 50-WZ.lcd
   STATE      <div style="text-align: left">A: T: 3.3 H:61<br>I: T: 21.7<br>Mi 21 Feb 2018</div>
   TYPE       DLCD
   READINGS:
     2018-02-21 15:14:57   Line1           A: T: 3.3 H:61
     2018-02-21 15:17:36   Line2           I: T: 21.7
     2018-02-21 15:15:47   Line3           Mi 21 Feb 2018
     2018-02-21 15:18:06   scrollingState  1
     2018-02-21 15:17:36   state           15:17:36
Attributes:
   dlcdBlankspaceReplace \\x{10}
   dlcdClearAllCmd {GetHttpFile("192.168.1.28","/control?cmd=lcdcmd,clear")};;{GetHttpFile("192.168.1.28","/control?cmd=lcdcmd,on")}
   dlcdCols   16
   dlcdLine1  A: T: %1% H:%2%
   dlcdLine2  I: T: %3%
   dlcdLine3  %date_WD_ger% %date_D% %date_M_ger% %date_Y%
   dlcdLineAddrMap 1,2,3
   dlcdPhysicalRows 2
   dlcdPollInterval 10
   dlcdRows   3
   dlcdScrolling 1
   dlcdTriggerCmd {GetHttpFile("192.168.1.28","/control?cmd=lcd,%L%,1,%T%")}
   dlcdVal1   Wetterstation:temperature
   dlcdVal1formatnum none
   dlcdVal2   Wetterstation:humidity
   dlcdVal2formatnum none
   dlcdVal3   WZ.hk_clima:measured-temp
   dlcdVal3formatnum none
   room       ToDo
   stateFormat <div style="text-align: left">Line1<br>Line2<br>Line3</div>
   verbose    2


VG
Klaus
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: t1me2die am 25 August 2018, 08:46:34
Moin liebe Leute, ich habe ein kleines Problem bei der Einrichtung und der Wiki Eintrag hilft mir nicht sonderlich weiter.

Ich weiß nicht, wie ich den Command "dlcdTriggerCmd" befüllen muss?

Hier mein List vom LCD Display:

Internals:
   DEF        192.168.178.52 80 espBridge LCD-Display_LCD
   HOST       192.168.178.52
   IDENT      LCD-Display_LCD
   INTERVAL   300
   IODev      espBridge
   LASTInputDev espBridge
   MSGCNT     62325
   NAME       WeMos_LCD
   NOTIFYDEV  global
   NR         742
   NTFY_ORDER 50-WeMos_LCD
   PORT       80
   STATE      absent
   SUBTYPE    device
   TYPE       ESPEasy
   VERSION    1.38
   WARNING    read from http://192.168.178.52:80 timed out
   espBridge_MSGCNT 62325
   espBridge_TIME 2018-08-25 08:42:12
   READINGS:
     2018-08-25 08:42:12   presence        absent
     2018-08-25 08:42:12   state           absent
   helper:
     fpc        1535135455.70764
     pm:
       Encode     1
       JSON       1
     received:
Attributes:
   DbLogExclude .*
   IODev      espBridge
   group      DLCD
   room       ESPEasy,QNAP
   verbose    0


Nun mein dlcd-Device:

Internals:
   CFGFN     
   NAME       dlcd_WeMoS_LCD
   NR         1568
   NTFY_ORDER 50-wemos1
   STATE      08:43:44
   TYPE       DLCD
   Helper:
     DBLOG:
       state:
         myDbLog:
           TIME       1535139062.88851
           VALUE      initialized
   OLDREADINGS:
   READINGS:
     2018-08-25 08:43:44   state           08:43:44
Attributes:
   DbLogExclude .*
   dlcdLine1  BackUp : %1%
   dlcdLine2  Informationen
   dlcdLine3  Server : %3% Grad
   dlcdLine4  Luefter: %4% Grad
   dlcdPhysicalRows 4
   dlcdTriggerCmd set WeMos_LCD lcd %L% 1 %T% ; set WeMos_LCD lcd %L% 2 %T% ; set WeMos_LCD lcd %L% 3 %T% ; set WeMos_LCD lcd %L% 4 %T%
   dlcdVal1   fl_BackUp:state
   dlcdVal3   temp_Server:temperature
   dlcdVal4   temp_Luefter:temperature
   dlcdVal4formatnum 2+1
   group      DLCD
   room       QNAP


Ich möchte insgesamt vier Zeilen anzeigen, wie folgt:

Informationen
Server : xx,x Grad
Luefter: xx,x Grad
BackUp : ON / OFF


Irgendwie habe ich die Readings auch auf das Display bekommen, jedoch bekomme ich haufenweise Logeinträge:

...
2018.08.25 07:51:46 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,3,%25T%25'
2018.08.25 07:51:46 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,4,%25T%25'
2018.08.25 07:52:49 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,4,%25T%25'
2018.08.25 07:56:46 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd 2,1,Server%20%3a%2028%2e4%20Grad'
2018.08.25 07:56:51 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,2,%25T%25'
2018.08.25 07:56:51 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,3,%25T%25'
2018.08.25 07:58:47 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd 1,1,Informationen'
2018.08.25 07:58:49 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,2,%25T%25'
2018.08.25 07:58:51 2: ESPEasy espBridge: httpReq failed:  192.168.178.52 LCD-Display_LCD 'lcd %L%,3,%25T%25'
...


Außerdem sind meine Readings "Line1", "Line2", ... weg seitdem ich "dlcdTriggerCmd" wohl falsch angegeben habe.

Wie geht es richtig?

Gruß
Mathze
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: R1F800 am 12 Oktober 2018, 11:43:41
Hallo,

ich habe das Modul in Betrieb genommen und gebe da mit auf einem Standard 2004A Display 20x40 Temperaturen aus.
Ich kann mir aktuell nicht erklären woher ein Yen Zeichen auf dem Display kommt.

Weder bei der REGEXP Ersetzung für ° noch in den Leerzeichen habe ich das drin ...

Hat jemand eine Idee?
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: epsrw1 am 14 Oktober 2018, 22:05:37
Zitat von: R1F800 am 12 Oktober 2018, 11:43:41
Ich kann mir aktuell nicht erklären woher ein Yen Zeichen auf dem Display kommt.
Hat jemand eine Idee?

Möglicherweise handelt es sich um einen Zeilenumbruch der falsch interpretiert wird, oder sonst ein Zeichen dass Dein Display nicht kennt. Wie sieht es in der Web Oberfläche aus? Ist da die Ausgabe in Ordnung?
Gruß Florian
Titel: Antw:39_DLCD.pm
Beitrag von: R1F800 am 15 Oktober 2018, 09:41:31
Hi, ja in der Weboberfläche steht korrekt

nn.n °C   


Die Ausgabe ist aber nn.n Y°C   (Y steht für das Yen Zeichen)
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: R1F800 am 01 März 2019, 16:17:31
Hmmm schade .. noch keine Idee?
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: FHEm2005 am 20 November 2019, 17:15:20
Wo kann ich hierzu eigentlich eine Frage absetzen? Über diesem Unterpunkt steht, dass man hier keine Fragen stellen soll. Dieses Modul gibt es nur hier.

Gruß Eberhard
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: rih am 20 November 2019, 21:24:07
Ich denke, das hast Du falsch verstanden. Man soll hier keine Fragethemen starten. In dem jeweiligen Thema kannst Du natürlich schon Fragen stellen. Wenn Du also eine Frage zum DLCD-Modul hast, worauf Du in diesem Thema keine Antwort oder Lösung gefunden hast, dann bist Du hier richtig. Ob Dir jemand helfen kann, steht wieder auf einem anderen Blatt ...
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: FHEm2005 am 21 November 2019, 22:36:36
@rih: Danke für den Hinweis. Das habe ich wirklich absolut falsch verstanden.

Nun zu meinem Thema.
Ich habe ein LCD2004 das an einen WEMOS D1 angeschlossen ist und über das Modul ESPEasy mit Daten versorgt wird. Ich schaffe es nicht die Darstellung auf die Zeilen 1 und 3 zu begrenzen. Die Zeilen 2 und 4 sollen einfache Leerzeilen sein - und genau das funktioniert irgend wie nicht. Hier das Listing:
Internals:
   FUUID      5da84d86-f33f-9600-a0bd-aeef8f90e4831dd9
   NAME       FL_LCD
   NR         1370
   NTFY_ORDER 50-FL_LCD
   STATE      22:30:00
   TYPE       DLCD
   READINGS:
     2019-11-21 03:32:12   Line1           attr dlcdVal1 unreadable
     2019-11-21 03:32:12   Line2           attr dlcdVal1 unreadable
     2019-11-21 15:29:23   Line3           Temperatur: +5.8 °C
     2019-11-21 15:29:23   Line4           .
     2019-11-21 22:30:00   dLine0          set ESP_LegoHaus lcd 1 1 >Wetter�um�22:29:50<
     2019-11-21 22:30:00   dLine1          set ESP_LegoHaus lcd 2 1 .
     2019-11-21 22:30:00   dLine2          set ESP_LegoHaus lcd 3 1 Temperatur:�+5.0��C
     2019-11-21 15:29:23   dLine3          set ESP_LegoHaus lcd  1 .
     2019-11-21 22:30:00   debuglinelist   linelist:0-1-2-3
     2019-11-21 22:30:00   state           22:30:00
Attributes:
   disable    0
   dlcdClearAllCmd set ESP_LegoHaus lcdcmd clear
   dlcdClearLineCmd set ESP_LegoHaus lcd clear %L%
   dlcdCols   20
   dlcdDebugOutput 1
   dlcdLine1  >Wetter um %1%<
   dlcdLine2  .
   dlcdLine3  Temperatur: %2% °C
   dlcdLine4  .
   dlcdLineAddrMap 1,2,3,4
   dlcdPhysicalRows 4
   dlcdPollInterval 10
   dlcdReplaceRegex °=\x{DF},ä=\x{E1},ü=\x{F5},Ü=\x{A0},\x20=\x{A0}
   dlcdRows   4
   dlcdScrolling 0
   dlcdTriggerCmd set ESP_LegoHaus lcd %L% 1 %T%
   dlcdVal1   FL_LCD:state
   dlcdVal2   Prologue_145:temperature
   dlcdVal2formatnum 4+1+-
   room       ESPEASY

Warum in der 1. und 2. Zeile attr dlcdVal1 unreadable steht, kann ich auch nicht sagen.


2.Frage: Kann mir jemand sagen, wie ich eine Zeile in der n-ten Spalte beginnen kann?

Herzliche Grüße
Eberhard

Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: rih am 22 November 2019, 17:46:45
Alle Fragen kann ich Dir leider nicht mit völliger Sicherheit beantworten.

Zur 1. Frage - nur Zeile 1 und 3 darstellen: statt
dlcdLineAddrMap 1,2,3,4
stellst Du ein:
dlcdLineAddrMap 1,3

Zur zweiten Frage: da sage ich mal, das geht leider nicht. Führende Leerzeichen bzw. mehrere Leerzeichen ignoriert das Modul. Text ab n-te Spalte oder z.B. zentriert geht meines Wissens nach nicht. Hatte da für mich auch keine Lösung gefunden.

Wegen dem dlcdVal1 unreadable: Die Zeit wird ja eigentlich trotz dem Fehler dargestellt, komisch. Vielleicht mal die Uhrzeit statt aus dem Status woanders herholen, z.B. aus einem Dummy.
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: Nobbynews am 23 November 2019, 05:55:43
Bei mir gebe ich Datum und Uhrzeit mit festem Format zentriert übder das Attribut dlcdline aus:


dlcdLine5  \x{10} \x{10} \x{10}%date_dmy%
dlcdLine6  \x{10}  \x{10} \x{10} %time_hms%


@R1F800:
Die Ausgabe von °C im Display funktioniert bei mir so:

dlcdLine1  Temp.: %1% \x{DF}C


Norbert
Titel: Antw:39_DLCD.pm - kleines Hilfsmodul um Datenzeilen für serial LCD vorzubereiten v2.0
Beitrag von: FHEm2005 am 23 November 2019, 22:42:52
@Nobbynews & rih

vielen Dank für die guten Hinweise, sie scheinen im ESP-Umfeld bei mir nicht zu funktioniern. Nach etlichen Versuchen, habe ich es doch auf eien andere Weise geschafft.

Die Temperatur vom Device ESP_LegoHaus_Termperatur soll auf dem ESP-Display angezeigt werden. Das Device ESP_LegoHaus_Termperatur triggert ein notify mit folgender Definition:

defmod not_ESP_LCD notify ESP_LegoHaus_Temperatur:.*
{\
my ($text) = chr(20)."Wetter um ".$hms;;\                                                 // Zusammenbau der ersten Zeile
my ($tempe) = "Temperatur". (ReadingsVal("Prologue_145","temperature",""))." °C";;\       // Zusammenbau der zweiten Zeile
fhem("set ESP_LegoHaus_LCD lcd 1 1 $text");;\                                             // Anzeige der ersten Zeile
fhem("set ESP_LegoHaus_LCD lcd 3 13 $tempe ");;\                                          // Anzeige der zweiten Zeile
}
attr not_ESP_LCD room ESPEasy


Grundsätzlich baue ich die veränderlichen Teile zu einer Variablen zusammen, um diese dann mit einem konstanten Teil zuisammengebaut anzuzeigen. Dann kann ich auch ein Leerzeichen chr(20) am Anfang der Zeile darstellen.  ;D ;D

Vielleicht kann es ja mal jemand brauchen.

Gruß Eberhard