Raspberry Pi: HDMI Ausgang über einen Bewegungsmelder aktivieren & deaktivieren

Raspberry Pi: HDMI Ausgang über einen Bewegungsmelder aktivieren & deaktivieren

letzte Aktualisierung: 17. November 2020
#

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 25 (GPIO 22) 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

Nach oben