Я новичок в программировании на питоне. Как сделать скрипт, который будет пробуждать монитор и переводить его в спящий режим по условию?
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.
Как видите, у меня есть датчик движения, который заставляет монитор выходить из спящего режима каждый раз, когда он распознает движение, но после того, как в зоне его действия больше не происходит движения, через две минуты он должен переводить монитор в спящий режим.
Не могли бы вы мне помочь?
решение1
Установите x11-xserver-utils
пакет, чтобы получить xset
команду. Затем вы можете использовать его, чтобы заставитьДПМСсигналы на монитор для включения или выключения. Вам может потребоваться установить DISPLAY
переменную в среде. Например:
DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off
Вы можете сделать что-то вроде этого в Python. Опрашивать каждую секунду. Запоминать, включили или выключили дисплей. Отмечать время суток, когда ваш сигнал активен. Когда время с момента последней активности превышает 2 минуты, выключить дисплей. Грубо говоря:
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)
Если вы взаимодействуете с экраном и хотите, чтобы он оставался включенным в течение этого времени независимо от вашего gpio, вам, вероятно, лучше позволить стандартному механизму простоя X11 определить, что прошло 2 минуты простоя, и автоматически выключить экран. Просто используйте свою программу, чтобы принудительно включить экран.
Вы можете установить 120-секундный тайм-аут простоя одним вызовом:
xset dpms 120 120 120
и затем можно снять силу с питона.