OpenMediaVault lcd4linux DPF Display

Christian Böttger 06 Jun 2014 12 Kommentare
24 Stimmen (4.04 von 5.00)

Hallo, heute habe ich wieder einen neuen Beitrag zum Thema OpenMediaVault lcd4linux DPF Display. Dieses mal möchte ich euch zeigen, wie Ihr ein DPF Display mit lcd4linux ansteuert und Systeminformationen ausgeben könnt.

Installation OpenMediaVault lcd4linux DPF Display

Als erstes benötigen wir ein Display, wie dieses von Pearl mit einem Chip AX206, wer keines besitzt dem hilft Google weiter. Als erstes müssen wir erst mal lcd4linux und weitere Pakete auf unserem OpenMediaVault installieren, das machen wir indem wir uns mittels putty per SSH verbinden. Dort melden wir uns als root an und geben folgende Zeile ein.

apt-get install lcd4linux libusb-dev libusb-1.0-0

Nun werden alle notwendigen Pakete installiert und wenn dieses geschehen ist benötigen wir eine lcd4linux Binary wo auch der DPF Treiber integriert ist. Diese könnt Ihr euch hier (wird ab der Version 3.0 von OpenMediaVault nicht mehr benötigt) runter laden. Diese entpacken wir z.B. mit Winrar und laden sie mittels FTP auf unser NAS in folgendes Verzeichnis /usr/sbin und überschreiben die vorhandene Datei.

Konfiguration OpenMediaVault lcd4linux DPF Display

Die Installation ist soweit abgeschlossen und wir können nun mit der Konfiguration von lcd4linux beginnen. Die Konfigurationsdatei liegt im Verzeichnis /etc und heißt lcd4linux.conf . Falls diese Datei vorhanden ist könnt Ihr euch ein Backup davon machen und dann mit eurem Editor des Vertrauens öffnen. Folgendes muss in diese Datei rein.

Layout 'OpenMediaVault'

Display 'DPF'

Variables {
    # Ticks:
    second 1000
    minute 60 * second
    hour 60 * minute
    
    # Standard Dimensions:
    linesize 53	# max line length, for status lines etc.
    width100 51	# full width after padding (border)
    width050 24	# 1/2 of full width
    width033 17	# 1/3 of full width
    width025 12	# 1/4 of full width
    width010  5	# 1/10 of full width

    # Colors:
    # ToDo: Alphakanal ausnutzen
    black     '000000'
    white     'ffffff'
    red       'ff0000'
    darkblue  '000066'
    lightgray 'b2b2b2'
    darkgray  '191919'
    barcolor0 '5f5fff'
    barcolor1 'ff5f5c'

    # To be set later by timers:
    #SyslogMsg 'Dummy'
    #SyslogMsg '123456789012345678901234567890123456789012345678901234567890'
}

Dies sind erst einmal die Grundeinstellungen und Variablen die wir für das OpenMediaVault lcd4linux DPF Display benötigen. Als nächstes müssen wir den Treiber initialisieren das machen wir mit folgenden Code.

Display dpf {
   Driver 'DPF'
   Port 'usb0'
#   Font '12x16'
   Font '6x8'
   Foreground white
   Background darkblue
   Basecolor darkblue
}

Nun können wir anfangen die Widgets für unser Display zu schreiben. Diese kommen auch in unsere lcd4linux.conf Datei.

Wir beginnen mit unserem System Widget die erste Zeile unseres Displays.

Widget System {
    class 'Text'
    expression '*** ' . uname('nodename') . ' '. netinfo::ipaddr('eth0') . ' ' . uname('machine') . ' ' . uname('release') . '  ***'
    width linesize
    align 'C'
    update hour
    Background lightgray
    Foreground darkgray
}

Als nächstes schreiben wir die Einstellung für die aktuelle Zeit und die Laufzeit mit diesem Abschnitt.

Widget Time {
    class 'Text' 
    expression strftime('%a, %d.%m.%Y -- %H:%M:%S', time()) . ' -- Up: ' . uptime('%d days %H:%M:%S')
    width linesize   
    align 'C'
    update 1 * second
    Background lightgray
    Foreground darkgray
}

Nun haben wir unsere ersten zwei Zeilen fertig und das sieht am Ende so wie auf diesen Bild aus.

OpenMediaVault lcd4linux DPF Display

Als nächstes können wir nun mit Busy, CPU Load, Festplatten Zugriffe und Netzwerk als Text und zusätzlich als Balken fortfahren. Dazu benötigen wir 8 Widgets die in der linken Hälfte des Displays angezeigt werden.

Widget Busy {
    class 'Text'
    expression proc_stat::cpu('busy', 0.5 * second)
    prefix 'Busy'
    postfix '%'
    width width050
    precision 1
    align 'R'
    update 1 * second
}

Widget BusyBar {
    class 'Bar'
    expression proc_stat::cpu('busy', 0.5 * second)
    expression2 proc_stat::cpu('system', 0.5 * second)
    length width050 
    direction 'E'
    update 1 * second
    Background darkgray
    BarColor0 barcolor0 
    BarColor1 barcolor1 
}

Widget Load {
    class 'Text'
    expression loadavg(1)
    prefix 'Load'
    postfix loadavg(1) > 1.0 ? '!' : ' '
    width width050
    precision 1
    align 'R'
    update 1 * second
#    Foreground loadavg(1) > 1.0 ? red : white
}

Widget LoadBar {
    class 'Bar'
    expression loadavg(1)
    max 4.0
    length width050
    direction 'E'
    update 1 * second
    Background darkgray
    BarColor0 barcolor0 
    BarColor1 barcolor1 
}

Widget Disk {
    class 'Text'
    # disk.[rw]blk return blocks, we assume a blocksize of 512
    # to get the number in kB/s we would do blk*512/1024, which is blk/2
    # expression (proc_stat::disk('.*', 'rblk', 0.5 * second)+proc_stat::disk('.*', 'wblk', 0.5 * second))/2
    # with kernel 2.6, disk_io disappeared from /proc/stat but moved to /proc/diskstat
    # therefore you have to use another function called 'diskstats':
    expression (diskstats('sd[a-z]$', 'read_sectors', 0.5 * second) + diskstats('sd[a-z]$', 'write_sectors', 0.5 * second)) / 2 / 1024
    prefix 'Disk'
    postfix ' MB/s'
    width width050
    precision 1
    align 'R'
    update 1 * second
}

Widget DiskBar {
    class 'Bar'
    #expression  proc_stat::disk('.*', 'rblk', 0.5 * second)
    #expression2 proc_stat::disk('.*', 'wblk', 0.5 * second)
    # for kernel 2.6:
    expression  diskstats('sd[a-z]$', 'read_sectors',  0.5 * second) / 2 / 1024
    expression2 diskstats('sd[a-z]$', 'write_sectors', 0.5 * second) / 2 / 1024
    length width050
    direction 'E'
    update 1 * second
    Background darkgray
    BarColor0 barcolor0 
    BarColor1 barcolor1 
}

Widget Eth0 {
    class 'Text'
    expression (netdev('eth0', 'Rx_bytes', 0.5 * second) + netdev('eth0', 'Tx_bytes', 0.5 * second)) * 8 / 1024 / 1024
    prefix 'eth0'
    postfix ' Mbit/s'
    width width050
    precision 1
    align 'R'
    update 1 * second
}


Widget Eth0Bar {
    class 'Bar'
    expression netdev('eth0', 'Rx_bytes', 0.5 * second) * 8 / 1024 / 1024
    expression2 netdev('eth0', 'Tx_bytes', 0.5 * second) * 8 / 1024 / 1024
    length width050
    direction 'E'
    update 1 * second
    Background darkgray
    BarColor0 barcolor0 
    BarColor1 barcolor1 
}

Nun haben wir wieder einen Teil geschafft dieser sieht am Ende wie das untere Bild zeigt aus.

OpenMediaVault lcd4linux DPF Display

 

Jetzt können wir die rechte Seite des OpenMediaVault lcd4linux DPF Display gestalten. Dort werden die Daten für Speicher, Festplatten Temperatur und Freier Festplatten Speicher angezeigt. Dazu benötigen wir folgenden Code.

Widget MemoryTitle {
    class 'Text'
    expression 'Memory'
    width width050
    align 'L'
    update hour
    Background lightgray
    Foreground darkgray
}

Widget MemoryTotal {
    class 'Text'
    expression meminfo('MemTotal') / 1024
    prefix 'Total '
    postfix ' MB'
    width width050
    precision 0
    align 'R'
    update 0
}

Widget MemoryFree {
    class 'Text'
    expression (meminfo('MemFree') + meminfo('Cached')) / 1024
    prefix 'Free '
    postfix ' MB'
    width width050
    precision 0
    align 'R'
    update 1 * second
}

Widget MemorySwapped {
    class 'Text'
    expression (meminfo('SwapTotal') - meminfo('SwapFree')) / 1024
    prefix 'Swap used '
    postfix ' MB'
    width width050
    precision 0
    align 'R'
    update 1 * second
}

Widget HDDTempTitle {
    class 'Text'
    expression 'Disk Temperature'
    width width050
    align 'L'
    update hour
    Background lightgray
    Foreground darkgray
}

Widget HDDTemp1 { 
    class 'Text' 
    expression exec('/usr/sbin/smartctl -n standby -A -d ata /dev/sda | /bin/grep Temperature_Celsius | /usr/bin/awk \'{print $10}\'', 10 * second)
    precision 1
    prefix 'sda: '
    postfix '°C'
    align 'R' 
    update 10 * second 
}

Widget HDDTemp2 { 
    class 'Text' 
    expression exec('/usr/sbin/smartctl -n standby -A -d ata /dev/sdb | /bin/grep Temperature_Celsius | /usr/bin/awk \'{print $10}\'', 10 * second)
    precision 1
    prefix 'sdb: '
    postfix '°C'
    align 'R' 
    update 10 * second 
}

Widget HDDTemp3 {
    class 'Text'
    expression exec('/usr/sbin/smartctl -n standby -A -d ata /dev/sdc | /bin/grep Temperature_Celsius | /usr/bin/awk \'{print $10}\'', 10 * second)
    precision 1
    prefix 'sdc: '
    postfix '°C'
    align 'R'
    update 10 * second
}

Widget HDDTemp4 {
    class 'Text'
    expression exec('/usr/sbin/smartctl -n standby -A -d ata /dev/sdd | /bin/grep Temperature_Celsius | /usr/bin/awk \'{print $10}\'', 10 * second)
    precision 1
    prefix 'sdd: '
    postfix '°C'
    align 'R'
    update 10 * second
}

Widget FSSpaceTitle {
    class 'Text'
    expression 'Disk Space available'
    width width050
    align 'L'
    update hour
    Background lightgray
    Foreground darkgray
}

Widget FSSpace1 {
    class 'Text' 
    expression statfs('/', 'bavail') * statfs('/', 'bsize') / 1024 / 1024 / 1024
    prefix '/ (Root FS)' 
    postfix ' GB'
    width width050
    precision 2
    align 'R' 
    update 1 * hour  
}

Widget FSSpace2 {
    class 'Text' 
    expression statfs('/media/Storage', 'bavail') * statfs('/media/Storage', 'bsize') / 1024 / 1024 / 1024
    prefix '/Storage' 
    postfix ' GB'
    width width050
    precision 2
    align 'R' 
    update 1 * hour 
}

Widget FSSpace3 {
    class 'Text' 
    expression statfs('/media/f2f53ede-a6ae-4fb4-bca3-0d9e19e8bc3f', 'bavail') * statfs('/media/f2f53ede-a6ae-4fb4-bca3-0d9e19e8bc3f', 'bsize') / 1024 / 1024 / 1024
    prefix '/Daten '
    postfix ' GB'
    width width050
    precision 2
    align 'R' 
    update 1 * hour 
}

Das hier Eingetragene wird am Ende so aussehen wie das untere Bild zeigt.

OpenMediaVault lcd4linux DPF Display

 

Und zum Schluß lassen wir uns noch den Status unserer laufenden Services ausgeben, das machen wir mit dem folgenden Abschnitt unserer lcd4linux.conf.

Widget ServicesTitle {
    class 'Text'
    expression 'Services'
    width width100
    align 'C'
    Background lightgray
    Foreground darkgray
}

Widget ApacheStatus {
    class 'Text'
    expression 'Apache '
    width width050  
    postfix strstr(exec('/etc/init.d/apache2 status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Widget SambaStatusDS {
    class 'Text'
    expression 'Samba '
    width width050  
    postfix strstr(exec('/etc/init.d/samba status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Widget MiniDLNAStatus {
    class 'Text'
    expression 'MiniDLNA '
    width width050  
    postfix strstr(exec('/etc/init.d/minidlna status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Widget SSHStatusDS {
    class 'Text'
    expression 'SSH '
    width width050  
    postfix strstr(exec('/etc/init.d/ssh status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Widget PlexStatus {
    class 'Text'
    expression 'PlexMediaServer '
    width width050  
    postfix strstr(exec('/etc/init.d/plexmediaserver status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Widget pyLoadStatus {
    class 'Text'
    expression 'pyLoad '
    width width050  
    postfix strstr(exec('/etc/init.d/pyload status', 300 * second), 'running') > 0 ? 'up' : 'down!'
    update 300 * second  
}

Dieses Beispiel sieht wie folgt aus.

OpenMediaVault lcd4linux DPF Display

 

Am Ende müssen wir nur noch das Layout für das OpenMediaVault lcd4linux DPF Display definieren und sind dann mit unserer lcd4linux.conf fertig. Das Layout definieren wir mit folgenden Code.

Layout OpenMediaVault {
    Row02.Col01 'System'
    Row03.Col01 'Time'
    Row05.Col02 'Busy'
    Row06.Col02 'BusyBar'
    Row08.Col02 'Load'
    Row09.Col02 'LoadBar'
    Row11.Col02 'Disk'
    Row12.Col02 'DiskBar'
    Row14.Col02 'Eth0'
    Row15.Col02 'Eth0Bar'

    Row05.Col28 'MemoryTitle'
    Row06.Col29 'MemoryTotal'
    Row07.Col29 'MemoryFree'
    Row08.Col29 'MemorySwapped'
    Row10.Col28 'HDDTempTitle'
    Row11.Col29 'HDDTemp1'
    Row11.Col40 'HDDTemp2'  
    Row12.Col29 'HDDTemp3'
    Row12.Col40 'HDDTemp4'

    Row14.Col28 'FSSpaceTitle'
    Row15.Col29 'FSSpace1'
    Row16.Col29 'FSSpace2'
    Row17.Col29 'FSSpace3'

    Row19.Col02 'ServicesTitle'
    Row20.Col02 'ApacheStatus'
    Row21.Col02 'SambaStatusDS'
    Row22.Col02 'SSHStatusDS'
    Row20.Col29 'MiniDLNAStatus'
    Row21.Col29 'PlexStatus'
    Row22.Col29 'pyLoadStatus'

}

Nun speichern wir das Ganze und müssen noch die Rechte für die lcd4linux.conf vergeben, mit dieser Eingabe in die Konsole.

chmod 600 /etc/lcd4linux.conf

Und nun können das Display ausprobieren, ob alles so angezeigt wird, wie gewünscht mit folgender Eingabe im Terminal.

lcd4linux -f /etc/lcd4linux.conf

Wenn wir alles richtig gemacht haben müsste unser Display jetzt dieses anzeigen.

OpenMediaVault lcd4linux DPF Display

 

 

Downloads zum Artikel OpenMediaVault lcd4linux DPF Display

LCD4Linux Konfiguration

lcd4linux Binäry

Putty SSH Client

 

Weitere Artikel zum Thema lcd4linux

OpenMediaVault lcd4linux Autostart einrichten

Artikel drucken

Kommentare (12)

  • User Avatar
    Robert
    vor 3 Jahre

    Hi Christian,

    ich bekomme das gz file nicht entpackt am mac.
    Hast du mal den Aufruf für die Konsole parat?
    Habs schon mit gzip probiert bekomme ich aber leider eine Fehlermeldung.

    Gruß Robert

    • User Avatar

      Hallo Robert,

      danke für die Information, leider war das File defekt so habe ich die Datei nochmal neu gepackt und hier als Zip Datei an gehangen. Einfach nochmal runterladen und entpacken.

      mfg Christian

      • User Avatar
        Robert
        vor 3 Jahre

        Wie hoch ist denn bei dir die CPU last, wenn du LCD4 Linux am laufen hast?
        Bei meinem alten Athlon X2 geht es schon laut WebGui von OMV auf 50%.
        Dazu bekomme ich auch irgendwie nicht das Bild angezeigt, dass du hast (also auf dem Display)
        Hab einfach deine Datei genommen.

        Gruß Robert

        • User Avatar

          Wenn mein NAS nicht arbeitet ist die CPU Load bei 0.1 und Busy bei 1 oder 2% mehr nicht. Ich habe meine Config noch ein bisschen nach diesem Artikel geändert. Versuche es mal mit dieser: http://www.howto-blog.de/wp-content/uploads/lcd4linux1.zip

          Entpacken und das Config File nach /etc hochladen und dann Lcd4Linux neustarten.

        • User Avatar

          Schau mal bitte in der WebGui unter dem Menüpunkt „Systeminformationen -> Prozesse“ welcher Prozess deine CPU belastet. meminfo, statfs und smartctl werden von lcd4linux gestartet um sich die Daten zu holen.

          • User Avatar
            Robert
            vor 3 Jahre

            Ich probiere es mal aus.
            Momentan scannt plex noch meine Media Database durch.
            Dass kann noch ein wenig dauern.

          • User Avatar
            Robert
            vor 3 Jahre

            Also hab noch mal nachgeschaut. Hin und wieder geht die Systemlast auf 5-8% hoch wegen LCD4Linux.
            Aber denke das passt schon.

            Das Display geht jetzt auch komplett mit deiner neuen lcd4linux.conf.

            Danke noch mal für deine Hilfe/Configs.

            Gruß Robert

          • User Avatar
            Christian Böttger
            vor 3 Jahre

            Denk ich auch das es ok ist.
            Kein Problem dafür ist der Blog ja da.

            MFG Christian

  • User Avatar
    Robert
    vor 3 Jahre

    Hi Christian,
    was ich momentan nicht hin bekomme ist eine 5 Platte abzufragen.
    Hier bekomme ich auf dem Display immer ein Kryptisches Zeichen angezeigt.

    Die Konfig zur 5 Platte sieht wie folgt aus:
    Siehst du einen Fehler:

    Widget HDDTemp5 {
    class ‚Text‘
    expression exec(‚/usr/sbin/smartctl -n standby -A -d ata /dev/sde | /bin/grep Temperature_Celsius | /usr/bin/awk \'{print $10}\“, 10 * second)
    precision 1
    prefix ’sde: ‚
    postfix ‚�C‘
    align ‚R‘
    update 10 * second
    }

    Das mit dem ?C Kann ich mir nicht erklären, bei postfix.
    Komisch ist, dass es bei den anderen Platten auch angezeigt wird und dort geht es.

    Gruß Robert

    • User Avatar
      Robert
      vor 3 Jahre

      Ich habe hin bekommen.
      Es lag mal wieder an der Zeichencodierung verschiedener Systeme.
      Ich hab per Konsole das ganze in nano kopiert und schon gings.

      Immer wieder das Problem verschiedener OS’s.

  • User Avatar
    Robert
    vor 1 Jahr

    Ich habe nun auch mal meinem Server geupdated.
    Neues Board, hab einen dell t20 geschlachtet.
    Habe auch den Backports Kernel installiert.

    Nun habe ich laut Top einen sehr Prozessorlast sobald lcd4linux läuft.
    Teilweise 100%

    Kannst du das bestätigen?

    Gruß Robert

    • User Avatar

      Hi Robert,

      ändere mal bitte alle Zeilen mit

      update 0

      in

      update hour

      dann müsste es ohne hohe Prozessorauslastung gehen.

      Habe es schon in der Konfigurationsdatei oben geändert.

      Gruß Christian