Proteção de tela ativada e desativada no Raspberry Pi - script em Python

Proteção de tela ativada e desativada no Raspberry Pi - script em Python

Sou novato em programação em python. Como faço um script que desperta o monitor e o coloca em suspensão sob uma condição?

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 você pode ver, eu tenho um sensor de movimento, que quero fazer com que meu monitor acorde do sono toda vez que ele detectar um movimento, mas depois que não houver mais movimento em sua área, após dois minutos ele deverá colocar o monitor para dormir.

Você pode por favor me ajudar?

Responder1

Instale o x11-xserver-utilspacote para obter o xsetcomando. Então você pode usá-lo para forçar oDPMSsinais para o monitor ligar ou desligar. Pode ser necessário definir a DISPLAYvariável no ambiente. Por exemplo:

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

Você pode fazer algo assim em python. Faça pesquisas a cada segundo. Lembre-se se você ativou ou desativou a exibição. Observe a hora do dia sempre que seu sinal estiver ativo. Quando o tempo desde a última ativação for superior a 2 minutos, desligue o display. Vagamente:

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)

Se você estiver interagindo com a tela e quiser que ela permaneça ligada durante esse período independentemente do seu gpio, provavelmente será melhor deixar o mecanismo de inatividade padrão do X11 detectar que 2 minutos de inatividade se passaram e desligar automaticamente a tela. Basta usar seu programa para forçar a ativação da tela.

Você pode definir um tempo limite de inatividade de 120 segundos com uma única chamada de:

xset dpms 120 120 120

e pode então remover a força do python.

informação relacionada