Bildschirmschoner beim Raspberry Pi an- und ausschalten - Script in Python

Bildschirmschoner beim Raspberry Pi an- und ausschalten - Script in Python

Ich bin ein Neuling in der Python-Programmierung. Wie erstelle ich ein Skript, das den Monitor aufweckt und ihn unter bestimmten Bedingungen in den Ruhezustand versetzt?

import RPi.GPIO as GPIO

PIR = 23


GPIO.setmode(GPIO.BCM)
GPIO.setup(PIR, GPIO.IN)

while True:
    if GPIO.input(PIR):
        """ There should be the "awake monitor" function """"
    else:
        """" There should be something that makes my script run over and over but after for example 2 minutes after there is no signal on PIR.

Wie Sie sehen, habe ich einen Bewegungssensor, mit dem ich meinen Monitor jedes Mal aus dem Ruhezustand wecken möchte, wenn er eine Bewegung erkennt. Wenn in seinem Bereich jedoch keine Bewegung mehr stattfindet, soll er den Monitor nach zwei Minuten in den Ruhezustand versetzen.

Kannst du mir bitte helfen?

Antwort1

Installieren Sie das x11-xserver-utilsPaket, um den xsetBefehl zu erhalten. Anschließend können Sie damit denDatenmanagementSignale an den Monitor ein- oder ausschalten. Möglicherweise müssen Sie die DISPLAYVariable in der Umgebung festlegen. Beispiel:

DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off

So etwas können Sie in Python machen. Führen Sie jede Sekunde eine Abfrage durch. Merken Sie sich, ob Sie die Anzeige ein- oder ausgeschaltet haben. Notieren Sie die Tageszeit, wenn Ihr Signal aktiv ist. Wenn seit der letzten Aktivierung mehr als 2 Minuten vergangen sind, schalten Sie die Anzeige aus. Grob gesagt:

import os, subprocess, time
os.environ['DISPLAY'] = ":0"

displayison = False
maxidle = 2*60 # seconds
lastsignaled = 0
while True:
    now = time.time()
    if GPIO.input(PIR):
        if not displayison:
            subprocess.call('xset dpms force on', shell=True)
            displayison = True
        lastsignaled = now
    else:
        if now-lastsignaled > maxidle:
            if displayison:
                subprocess.call('xset dpms force off', shell=True)
                displayison = False
    time.sleep(1)

Wenn Sie mit dem Bildschirm interagieren und möchten, dass er während dieser Zeit unabhängig von Ihrem GPIO eingeschaltet bleibt, ist es wahrscheinlich besser, den Standard-Leerlaufmechanismus von X11 erkennen zu lassen, dass 2 Minuten Leerlauf vergangen sind, und den Bildschirm so automatisch auszuschalten. Verwenden Sie einfach Ihr Programm, um den Bildschirm einzuschalten.

Sie können mit einem einzigen Anruf ein Leerlauf-Timeout von 120 Sekunden festlegen:

xset dpms 120 120 120

und kann dann die Kraft vom Python entfernen.

verwandte Informationen