我是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
安裝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
然後可以從蟒蛇身上移除力量。