Я нуб в программировании на Python. Как мне сделать скрипт, который будит монитор и переводит его в состояние сна?

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 ответ1

0

Установите пакет x11-xserver-utils , чтобы получить команду xset . Затем вы можете использовать его для включения или выключения сигналов DPMS на монитор. Вам может потребоваться установить переменную 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

и затем может удалить силу от питона.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .