私は 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.
ご覧のとおり、モーション センサーがあり、動きを感知するたびにモニターをスリープ状態から復帰させ、そのエリアに動きがなくなったら 2 分後にモニターをスリープ状態にしたいと考えています。
手伝ってくれませんか?
答え1
x11-xserver-utils
コマンドを取得するにはパッケージをインストールしてくださいxset
。その後、それを使用して強制的にDPMSモニターへの信号をオンまたはオフにします。DISPLAY
環境変数を設定する必要があるかもしれません。例:
DISPLAY=:0 xset dpms force on
sleep 10
DISPLAY=:0 xset dpms force off
Python では、次のようなことができます。1 秒ごとにポーリングします。ディスプレイのオン/オフの設定を記憶します。信号がアクティブなときは常に時刻を記録します。最後にアクティブになってから 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 分間のアイドルが経過したことを検出し、自動的に画面をオフにする方がよいでしょう。プログラムを使用して画面を強制的にオンにします。
次の 1 回の呼び出しで 120 秒のアイドル タイムアウトを設定できます。
xset dpms 120 120 120
そして、パイソンから力を取り除くことができます。