Soy un novato en programación en Python. ¿Cómo puedo crear un script que active el monitor y lo ponga en modo de suspensión según una condición?
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.
Como puede ver, tengo un sensor de movimiento, que quiero que mi monitor se despierte cada vez que detecta un movimiento, pero después de que ya no hay movimiento en su área, después de dos minutos debería poner el monitor en modo de suspensión.
¿Podrías ayudarme?
Respuesta1
Instale el x11-xserver-utils
paquete para obtener el xset
comando. Entonces puedes usarlo para forzar elDPMSseñales al monitor para encenderlo o apagarlo. Es posible que necesite configurar la DISPLAY
variable en el entorno. P.ej:
DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off
Puedes hacer algo como esto en Python. Encuesta cada segundo. Recuerde si ha activado o desactivado la pantalla. Tenga en cuenta la hora del día cuando su señal esté activa. Cuando el tiempo transcurrido desde la última activación sea superior a 2 minutos, apague la pantalla. Flojamente:
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)
Si está interactuando con la pantalla y desea que permanezca encendida durante este tiempo independientemente de su gpio, probablemente sea mejor dejar que el mecanismo de inactividad estándar X11 detecte que han transcurrido 2 minutos de inactividad y, por lo tanto, apague automáticamente la pantalla. Simplemente use su programa para forzar el encendido de la pantalla.
Puede establecer un tiempo de inactividad de 120 segundos con una sola llamada de:
xset dpms 120 120 120
y luego puede eliminar la fuerza de la pitón.