"Automatische" Helligkeitsregelung beim offiziellen Raspberry 7" Touchscreen

Max2Play Home Forums Max2Play Projects and Builds "Automatische" Helligkeitsregelung beim offiziellen Raspberry 7" Touchscreen

Viewing 4 posts - 1 through 4 (of 4 total)
  • 27. April 2018 at 20:57 #35373

    Hallo

    Im Zuge eines meiner Raspberry Projekte stand ich vor einem Problem mit dem 7″ Display.

    Ausgangslage: das Gerät dient, basierend auf dem Max2Play Image, als Musikserver und Pihole. Zusätzlich brauche ich gelegentlich, aber eher selten, eine Uhr mit großer Anzeige, dauerhaft wird sie nicht benötigt.

    Da ich noch ein 7″ Display von einem verworfenen anderen Projekt herumliegen hatte, habe ich mir noch ein einfaches weißes Gehäuse aus Kunststoff besorgt und Raspberry + Display eingebaut.

    Nun gab es ein Problem: das Gerät steht in Sichtweite des Bettes, das aktive Display stört beim Schlafen. Und wie gesagt, ich benötige die Zeitanzeige nur gelegentlich, unnötig muß das Display nicht Strom verbrennen.
    Hier im Forum hatte ich den Thread eines anderen Users mit vergleichbarem Anliegen gefunden, ihm wurde geraten, doch in Jivelite den BlankScreen Screensaver einzustellen. Keine Lösung, absolut nicht, denn die störende Hintergrundbeleuchtung bleibt selbst dann an. Zudem soll ja eben die Uhrzeit schön groß angezeigt werden, mit Hilfe des DigitalClock Screensavers.

    Also eine eigene Lösung gesucht.

    Grundlage war erst einmal der erwähnte DigitalClock Screensaver, der wird nach 10 Sekunden Nichtbenutzung aktiviert.

    Nach einer einstellbaren Zeit (bei mir 30 Minuten) soll das Display komplett dunkel werden. Die Displaybeleuchtung kann ja mittel Schreiben in /sys/class/backlight/rpi_backlight/brightness stufenlos eingestellt werden. Erlaubte Werte sind 0 bis 255. Für normale, auch bei Sonneneinstrahlung gute, Ablesbarkeit reicht 60 bis 80 vollkommen aus.
    Aber wie das Ganze steuern, so daß bei einfachem Tippen auf das Display die Anzeige aktiviert und nach eingestellter Zeit wieder deaktiviert wird?

    Da Jivelite die grafische Oberfläche nutzt, lag der Einsatz von xscreensaver nahe. Zudemläßt er sich auch mittels Konsolenbehl abfragen und steuern. In dem wird als Bildschirmschoner der BlankScreen eingestellt sowie der Timeout, in meinem Fall 30 Minuten. Nun mußte noch dafür gesorgt werden, daß während des BlankScreens auch die Displaybeleuchtung abgeschaltet wird. Das erledigt ein Python Script, den ich mir ausgedacht habe.

    #!/usr/bin/env python
    
    import time
    import datetime
    import glob
    from subprocess            import *
    import locale
    import os
    import subprocess
    import re
    import sys
    
    bri = 60
    state = 0
    oldbri = 60
    
    def run_cmd(cmd):
        p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
        output = p.communicate()[0]
        return output
    
    def init_xscrsav():
        run_cmd("xscreensaver-command -display :0 -activate")
        time.sleep(5)
        run_cmd("xscreensaver-command -display :0 -deactivate")
    
    def check_scrstate():
        global bri, oldbri, state
    
        outfull = subprocess.check_output('xscreensaver-command -display :0 -time', shell=True).split("screen ")
        l1 = outfull[1]
        l1 = l1.split(" since")
        scrsav = l1[0]
        scrsav = str(scrsav)
    
        if scrsav == "blanked":
    	bri = 0
        elif scrsav == "non-blanked":
    	bri = 60
    
        if bri == oldbri:
    	state = 0
        else:
    	state = 1
    	oldbri = bri
    
    def set_bri():
    
        command1 = "sudo sh -c "
        command2 = "'echo " + str(bri) + " >> /sys/class/backlight/rpi_backlight/brightness'"
        command = command1 + command2
        run_cmd(command)
        state = 0
    
    init_xscrsav()
    set_bri()
    
    running = True
    while running:
        
        check_scrstate()
        if state == 1:
    	set_bri()
        time.sleep(1)
    

    Die Abfrage, ob BlabnkScreen aktiviert ist, erfolgt mittels xscreensaver-command -display :0 -time, die Rückmeldung wird so gestript, daß entweder „blanked“ oder „non-blanked“ zurückgegeben wird. Bei blanked wird die Displahelligkeit „0“, also aus, eingestellt, bei non-blanked wird Helligkeit 60 eingestellt.

    Das Ganze läuft noch über eine Statusabfrage, ob sich der xscreensaver Status geändert hat und ob die Helligkeit nach der Änderung ebenfalls geändert wurde. Nur, wenn sich xscreensaver geändert hat und die Helligkeit noch nicht geändert wurde, wird die Funktion auch ausgeführt, ansonsten wird sie übersprungen. das hat den Hintergrund, daß es 1. generell wenig Sinn hat, mehrmals pro Sekunde in /sys zu schreiben, erst recht nicht bei einem Flash Datenträger.

    Beim Start wird über die Funktion init_xscrsav zusätzlich noch einmalig BlankScreen aktiviert und nach 5 Sekunden deaktiviert, da die benötigten Rückmeldungen erst nach dem ersten Aktivieren des Screensavers zurückgegeben werden, ohne kommt eine andere Rückmeldung. Für die eine extra Abfrage einzubauen, wäre mehr Aufwand gewesen.

    Gestartet wird das Ganze mit dem Eintrag @/usr/python /home/pi/dim-run.py in /home/pi/.config/lxsession/LXDE/autostart bei jedem Systemstart.

    Vielleicht hilft der Beitrag Usern mit einem ähnlichen Problem oder welchen auf der Suche nach Anregungen.

    So sieht die Anzeige dann mit meinem modifizierten Applet aus.

    Screenshot

    • This topic was modified 6 years, 6 months ago by FrankPrCB.
    • This topic was modified 6 years, 6 months ago by FrankPrCB.
    8. Oktober 2018 at 15:11 #38457

    hi Frank,

    ich bin auf deinen Post gestoßen und bin nicht ganz so sicher mit Scripte schreiben und so.

    Wie kann ich meinen Pi3 B+ mit 10″ Raspi Display dazu bringen den Screen nach eingestellter Zeit abzuschalten und wieder ein bei Berührung.

    Kannst du mir das bitt nochmal Step by Step erklären.

    MfG Peter

    10. Oktober 2018 at 22:54 #38540

    Ein 10″ Raspi Display kenne ich nicht, von daher weiß ich nicht, mit welcher Methode und ob überhaupt die Helligkeit steuerbar ist.

    15. Februar 2019 at 16:29 #44462

    hallo Frank,

    ja, ich meinte natürlich den 7″ Display.
    Sorry

Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.

Register here