Bei uns zuhause haben wir an zentraler Stelle einen digitalen Wandkalender zur Familienorganisation. Termine und Aufgaben die am Smartphone eingetragen werden, sind hier einsehbar. Auch das lesen von Kurznachrichten oder der Zugang zum Gäste WLAN sind möglich. Für den Betrieb gibt es im wesentlichen zwei Alternativen. Die OpenSource Lösung MagicMirror oder das kommerzielle Produkt DAKboard. Ich habe mich vor einiger Zeit aufgrund der einfacheren Einrichtung und der ansprechenderen Optik für DAKboard entschieden. Als Hardware kommt hier ein Rasperry Pi mit DAKboard OS sowie ein 32″ Samsung ‚The Frame‘ Fernseher zum Einsatz. So sieht das ganze dann aus.

Um Strom zu sparen, soll das Display nur aktiv sein, wenn jemand davorsteht. Dies realisieren wir mit einem HomeKit-Bewegungsmelder und einer MQTT-basierten Automatisierung.
Materialien
- Raspberry Pi mit DAKboard OS
- Display mit HDMI Verbindung zum Raspberry
- HomeKit-Bewegungsmelder (z. B. Eve Motion)
- MQTT-Broker (z. B. Mosquitto)
- Homebridge mit mqtt-thing Plugin
- Python-Umgebung auf dem Raspberry Pi
Schritt-für-Schritt-Anleitung
1. Einrichtung des HomeKit-Sensors
- Integriere den Bewegungsmelder in dein HomeKit-System.
- Stelle sicher, dass der Sensor in der Home-App sichtbar ist.
2. Homebridge konfigurieren
- Installiere Homebridge und das Plugin mqtt-thing.
- Ergänze die
config.json
um den folgenden Eintrag für einen virtuellen Schalter:
{
"type": "lightbulb-OnOff",
"name": "Dashboard",
"url": "<BROKER_IP:PORT>",
"username": "<USERNAME>",
"password": "<PASSWORD>",
"topics": {
"getOn": "Dashboard/monitor",
"setOn": "Dashboard/monitor"
},
"integerValue": true,
"onValue": "1",
"offValue": "0",
"accessory": "mqttthing"
},
Code-Sprache: JSON / JSON mit Kommentaren (json)
- Ersetze
<BROKER_IP:PORT>
,<USERNAME>
,<PASSWORD>
mit deinen MQTT-Broker-Daten.
3. Automatisierung in HomeKit erstellen
- Verknüpfe den Bewegungsmelder mit dem virtuellen Schalter.
- Richte eine Regel ein, die den Schalter bei Bewegung einschaltet und ohne Bewegung wieder deaktiviert.


Durch die Automation, wird bei jeder Änderung des Schalterzustands eine MQTT Nachricht an den Broker gesendet. Diese Nachrichten können wir im nächsten Schritt abonnieren und per Python Skript weiterverarbeiten.
4. Python-Skript auf dem Raspberry Pi
- Installiere die erforderliche Bibliothek:
sudo pip3 install paho-mqtt
- Speichere das folgende Python-Skript:
#!/usr/bin/env python3
# Dieses Skript steuert die HDMI-Ausgabe eines Raspberry Pi basierend auf MQTT-Nachrichten.
import paho.mqtt.client as mqtt
import subprocess
# Funktion, um HDMI einzuschalten
def hdmi_on():
# Führt das Skript zum Aktivieren des HDMI-Ports aus
result = subprocess.call("/home/pi/rpi-hdmi.sh on", shell=True)
print(f"HDMI aktiviert: {result}")
# Funktion, um HDMI auszuschalten
def hdmi_off():
# Führt das Skript zum Deaktivieren des HDMI-Ports aus
result = subprocess.call("/home/pi/rpi-hdmi.sh off", shell=True)
print(f"HDMI deaktiviert: {result}")
# Callback-Funktion für eine erfolgreiche Verbindung zum MQTT-Broker
def on_connect(client, userdata, flags, rc):
print("Erfolgreich mit MQTT-Broker verbunden")
# Abonniert den gewünschten MQTT-Topic
client.subscribe("Dashboard/monitor", qos=0)
# Callback-Funktion für empfangene MQTT-Nachrichten
def on_message(client, userdata, msg):
print(f"Nachricht erhalten: Thema={msg.topic}, QoS={msg.qos}, Payload={msg.payload.decode()}")
# Steuerung basierend auf der Nachricht: "1" = HDMI ein, "0" = HDMI aus
if msg.payload.decode() == "1":
hdmi_on()
elif msg.payload.decode() == "0":
hdmi_off()
# Callback-Funktion nach erfolgreichem Abonnement eines Topics
def on_subscribe(client, userdata, mid, granted_qos):
print(f"Abonniert: Topic-ID={mid}, QoS={granted_qos}")
# MQTT-Client initialisieren
client = mqtt.Client()
# MQTT-Benutzername und Passwort setzen
client.username_pw_set("<USERNAME>", "<PASSWORD>")
# Verbindung zum MQTT-Broker herstellen
client.connect("<BROKER_IP>", 1883) # IP-Adresse, Port
# Callback-Funktionen zuweisen
client.on_connect = on_connect
client.on_message = on_message
# Startet die Endlosschleife, um auf Nachrichten zu warten
client.loop_forever()
Code-Sprache: Python (python)
- Passe
<BROKER_IP>
,<USERNAME>
,<PASSWORD>
entsprechend an.
5. Shell-Skript zur HDMI-Steuerung
- Erstelle ein Shell-Skript (
rpi-hdmi.sh
), das den HDMI-Port steuert:
#!/bin/sh
case $1 in
on) vcgencmd display_power 1 ;;
off) vcgencmd display_power 0 ;;
esac
Code-Sprache: Bash (bash)
- Speichere das Skript ausführbar:
chmod +x /home/pi/rpi-hdmi.sh
6. Autostart mit Systemd einrichten
- Erstelle eine neue Systemd-Service-Datei:
sudo nano /etc/systemd/system/dakboard.service
- Füge den folgenden Inhalt ein:
[Unit]
Description=DAKboard MQTT Display Control
After=network.target
[Service]
ExecStart=/usr/bin/python3 /path/to/your/script.py
Restart=always
User=pi
WorkingDirectory=/home/pi
StandardOutput=inherit
StandardError=inherit
[Install]
WantedBy=multi-user.target
Code-Sprache: JavaScript (javascript)
Anpassungen: Ersetze /path/to/your/script.py
durch den Pfad deines Python-Skripts.
- Aktiviere und starte den Dienst:
sudo systemctl enable dakboard.service
sudo systemctl start dakboard.service
Code-Sprache: CSS (css)
Mit diesem Ansatz ist dein Skript sauber in den Bootprozess integriert, und Systemd sorgt für den Neustart bei Fehlern.