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)
update/bugfix:
# $Id: 39_DLCD.pm 1003 2014-06-13 01:09:00Z Florian Duesterwald $
update:
# $Id: 39_DLCD.pm 1004 2014-06-18 05:13:00Z Florian Duesterwald $
update:
# $Id: 39_DLCD.pm 1005 2014-06-20 18:00:00Z Florian Duesterwald $
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)
update:
# $Id: 39_DLCD.pm 1007 2014-07-16 11:21:00Z Florian Duesterwald $
-->sortierung ausgabereihenfolge
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
Für Support einfach hier im forum melden. Gruß florian
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.
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
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
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.
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
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
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
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
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()}\
}
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
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
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
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
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
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! :'(
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
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
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.
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.
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
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
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
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
update:
# $Id: 39_DLCD.pm 1110 2014-08-27 06:01:00Z Florian Duesterwald $
-> scrollfunktion verbessert
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
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
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 :)
Deep recursion on subroutine "main::InternalTimer" at ./FHEM/39_DLCD.pm line 170, <> line 12.
-> update kommt gleich, mein fehler
update:
# $Id: 39_DLCD.pm 1111 2014-08-28 10:31:00Z Florian Duesterwald $
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
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
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
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
update:
# $Id: 39_DLCD.pm 1113 2014-09-04 12:16:00Z Florian Duesterwald $
-logfile-überlauf repariert
-neue attr: dlcdClearLineCmd und dlcdClearAllCmd
Nur so als Frage: sonderzeichen und Umlaute hast du auch berücksichtigt?
http://forum.fhem.de/index.php/topic,25727.msg187535.html#msg187535
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
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
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"
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
;)
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
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
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
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 :))
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
Ö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
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
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
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
habe gerade noch was eingebaut für den offset, dlcdLineAddrMap
edit:
hat sich jetzt leider überschnitten, wo genau hast Du aufgeräumt?
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.
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.
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 ;)
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 (?)
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.
update ist online:
# $Id: 39_DLCD.pm 1121 2014-09-23 13:48:00Z Florian Duesterwald $
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
update:
# $Id: 39_DLCD.pm 1122 2014-10-03 11:44:00Z Florian Duesterwald $
--> disable [0..1]
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...
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
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
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
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
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
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
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
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
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
update:
# $Id: 39_DLCD.pm 1126 2015-05-03 11:31:00Z Florian Duesterwald $
-> bis zu 20 datenquellen
Ist es eigentlich auch möglich innerhalb von Zeilen scrollen zu lassen?
Gerade bei Musik Titel wirds mit 20 Zeichen schnell eng. ::)
Hat keiner einen Tipp? :o
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
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.
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.
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.
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...
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
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..
Hallo,
hat vielleicht jemand eine Anleitung oder einen Link, wie man ein 16x2 Display an einen RPI 2 anschließt.
Gruß Holgi
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....
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
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
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 ?
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
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.
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
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.
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
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
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
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
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
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
http://www.fhemwiki.de/wiki/1-Wire_Textdisplay
und das Modul OWLCD.
LG
pah
: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
Nein. http://www.fhemwiki.de/wiki/Kategorie:1-Wire
LG
pah
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
erst wenn Dein display in FHEM eingerichtet ist und sich bedienen lässt kannst Du Dein persönliches Layout mit DLCD machen.
LG
Florian
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
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.
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! ;-))
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
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?
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
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
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
Mit dlcdReplaceRegex °=ß
funktioniert es bei mir
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
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).
°=\x{DF}
du musst im Zeichensatz von deinem Display schauen, also Doku wälzen
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.
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
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.
auch ein \\ ändert nichts.
Marek
Hi, bei meinem HD44780 funktioniert das mit:
dlcdReplaceRegex °=\x{DF}
VG ak323
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
@ak323
Danke, aber hilft auch nicht, es steht immer noch dieses komische Zeichen da.
Marek
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.
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
Hallo,
mit dem Attribut dlcdLineAddrMap kannst du die Zeilen-Addressierung anpassen.
Versuch mal dlcdLineAddrMap 1,2,3,4 ... statt 0,1,2,3 ...
Danke für den Tipp, werde ich morgen mal testen.
(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.
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
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
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
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
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?
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
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)
Hmmm schade .. noch keine Idee?
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
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 ...
@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
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.
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
@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