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

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

Vorheriges Thema - Nächstes Thema

epsrw1

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

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
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update/bugfix:

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

epsrw1

update:

# $Id: 39_DLCD.pm 1004 2014-06-18 05:13:00Z Florian Duesterwald $
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

# $Id: 39_DLCD.pm 1005 2014-06-20 18:00:00Z Florian Duesterwald $
Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

Ich habe keine Ahnung, aber davon wenigstens ganz viel

epsrw1

update:

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

-->sortierung ausgabereihenfolge
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

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

epsrw1

Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

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.

epsrw1

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
Ich habe keine Ahnung, aber davon wenigstens ganz viel

kpwg

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

det.

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.
LG
det.

epsrw1

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
Ich habe keine Ahnung, aber davon wenigstens ganz viel

det.

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
LG
det.

kpwg

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
Ein paar Bilder noch anbei.

Viele Grüße, Ricardo