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-utils
Paket, um den xset
Befehl zu erhalten. Anschließend können Sie damit denDatenmanagementSignale an den Monitor ein- oder ausschalten. Möglicherweise müssen Sie die DISPLAY
Variable 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.