Max2Play Home › Forums › Max2Play Projects and Builds › "Automatische" Helligkeitsregelung beim offiziellen Raspberry 7" Touchscreen
Tagged: 7" Touch Helligkeit automatisch
- This topic has 3 replies, 2 voices, and was last updated 5 years, 10 months ago by knorke007 premium.
-
Posted in: Max2Play Projects and Builds
-
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.
8. Oktober 2018 at 15:11 #38457hi 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 #38540Ein 10″ Raspi Display kenne ich nicht, von daher weiß ich nicht, mit welcher Methode und ob überhaupt die Helligkeit steuerbar ist.
-
You must be logged in to reply to this topic.