Bei manchen Projekten kann es sinnvoll sein, den HDMI Ausgang des Raspberry Pi bei ssh oder scriptgesteuert ein- und auszuschalten. Ein gutes Beispiel ist dafür ein Smart-Mirror, bei dem der Monitor nur angehen soll, wenn jemand vor dem Spiegel steht. So lassen sich mindestens 10W sparen, falls niemand wissen mag, ob er der Schönste im ganzen Land ist.. :)
Wenn der Raspberry Pi ohne angeschlossenen Bildschirm gestartet wird, oder mit manchen Befehlen ausgeschaltet wird, dann bleibt der HDMI-Ausgang auch abgeschaltet. Nachträglich lässt sich der HDMI-Ausgang aber auch im laufenden Betrieb wieder anschalten. Notwendig sind dazu die passenden Kommandos über eine SSH-Sitzung.
Voraussetzungen
- Raspberry Pi 4 mit Rasperry Pi OS Kernel 5.4
- PIR Bewegungsmelder HC-SR501
HDMI-Ausgang ein- und ausschalten
HDMI-Monitor einschalten:
vcgencmd display_power 1
HDMI-Monitor ausschalten:
vcgencmd display_power 0
HDMI-Ausgang nachträglich ein- und ausschalten
HDMI-Monitor nachträglich einschalten:
/opt/vc/bin/tvservice -p
Jetzt geht der Monitor zwar an, aber der Bildschirm bleibt dunkel. Um eine Anzeige zu bekommen sind folgende Befehle notwendig.
Für die GUI-Darstellung:
/opt/vc/bin/tvservice -p; sudo /bin/chvt 6; sudo /bin/chvt 7
Für die Konsole:
/opt/vc/bin/tvservice -p; sudo /bin/chvt 2; sudo /bin/chvt 1
HDMI-Ausgang deaktivieren:
/opt/vc/bin/tvservice -o
Status des HDMI-Ausgang anzeigen
/opt/vc/bin/tvservice -s
HDMI-Ausgang über einen Bewegungsmelder schalten
Für die automatische Schaltung des HDMI-Ausganges bietet sich ein Bewegungsmelder an. Ich habe dazu die Scripte von cowboysdude und Sickboy78 auf meine Bedürfnisse angepasst und schalte damit einen Smart-Mirror. Der Bewegunsgmelder hat 3 PINs die angeschlossen werden müssen. (+5V, GND, OUT)
Insgesamt werden 3 Scripte benötigt. Die pir.py überwacht den Status des Bewegungsmelder (OUT), der in meinem Fall an PIN 22 (GPIO 25) des Raspberry Pi angeschlossen ist. Sobald der Bewegungsmelder eine Bewegung feststellt, gibt dieser 3,3V am Pin aus. Die pir.py legt auch die Zeitspanne fest, wie lange der Monitor eingeschaltet werden soll, bevor er automatisch abgeschaltet wird. Script 2 und 3 werden über pir.py aufgerufen und realisieren den eigentlichen Schaltvorgang. (monitor_on.sh, monitor_off.sh) Alle Scripte liegen bei mir im Home-Verzeichnis von Pi.
pir.py
#!/usr/bin/env python
import sys
import time
import RPi.GPIO as io
import subprocess
io.setmode(io.BCM)
SHUTOFF_DELAY = 240 # seconds
PIR_PIN = 25 # 22 on the board
LED_PIN = 16
def main():
io.setup(PIR_PIN, io.IN)
io.setup(LED_PIN, io.OUT)
turned_off = False
last_motion_time = time.time()
while True:
if io.input(PIR_PIN):
last_motion_time = time.time()
io.output(LED_PIN, io.LOW)
print ".",
sys.stdout.flush()
if turned_off:
turned_off = False
turn_on()
else:
if not turned_off and time.time() > (last_motion_time +
SHUTOFF_DELAY):
turned_off = True
turn_off()
if not turned_off and time.time() > (last_motion_time + 1):
io.output(LED_PIN, io.HIGH)
time.sleep(.1)
def turn_on():
subprocess.call("sh /home/pi/monitor_on.sh", shell=True)
def turn_off():
subprocess.call("sh /home/pi/monitor_off.sh", shell=True)
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
io.cleanup()
monitor_off.sh
vcgencmd display_power 0
monitor_on.sh
/opt/vc/bin/tvservice -p; sudo /bin/chvt 6; sudo /bin/chvt 7<br>vcgencmd display_power 1
Die Scripte werden mit chmod +x Scriptname
ausführbar gemacht. Soll das Script mit jedem Neustart ausgeführt werden, kann man folgende Zeile in die crontab einfügen:
crontab -e
@reboot python /home/pi/pir.py &
Monitor-Standby deaktivieren
Je nach Monitor und Hardware gibt es hier verschiedene Möglichkeiten. Eine gute Zusammenfassung findet man auf der Seite von Elektronik Kompendium.
https://www.elektronik-kompendium.de/sites/raspberry-pi/2107011.htm
Quellen
- GitHub – cowboysdude Pir-Sensor
- GitHub – Sickboy78 Pir-Sensor
- Elektronik-Kompendium – Raspberry Pi: HDMI-Ausgang aktivieren, deaktivieren und Status anzeigen