DAKboard Display per HomeKit / MQTT schalten

DAKboard Display per HomeKit / MQTT schalten

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 Open-Source-Lösung MagicMirror oder das kommerzielle Produkt DAKboard. Ich habe mich aufgrund der einfacheren Einrichtung und der ansprechenderen Optik für DAKboard entschieden. Als Hardware kommen ein Raspberry Pi mit DAKboard OS sowie ein 32″ Samsung ‚The Frame’ zum Einsatz.

Der Wandkalender im Wohnbereich

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 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"
}

Ersetze <BROKER_IP:PORT>, <USERNAME> und <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.

Regel: bei Bewegung ein

Regel: ohne Bewegung aus

Durch die Automation wird bei jeder Änderung des Schalterzustands eine MQTT-Nachricht an den Broker gesendet. Diese Nachrichten abonnieren wir im nächsten Schritt und verarbeiten sie per Python-Skript weiter.

4. Python-Skript auf dem Raspberry Pi

Installiere die erforderliche Bibliothek:

sudo pip3 install paho-mqtt

Speichere anschließend das folgende Python-Skript:

#!/usr/bin/env python3
# Steuert die HDMI-Ausgabe des Raspberry Pi anhand von MQTT-Nachrichten.

import paho.mqtt.client as mqtt
import subprocess

def hdmi_on():
    result = subprocess.call("/home/pi/rpi-hdmi.sh on", shell=True)
    print(f"HDMI aktiviert: {result}")

def hdmi_off():
    result = subprocess.call("/home/pi/rpi-hdmi.sh off", shell=True)
    print(f"HDMI deaktiviert: {result}")

def on_connect(client, userdata, flags, rc):
    print("Mit MQTT-Broker verbunden")
    client.subscribe("Dashboard/monitor", qos=0)

def on_message(client, userdata, msg):
    payload = msg.payload.decode()
    if payload == "1":
        hdmi_on()
    elif payload == "0":
        hdmi_off()

client = mqtt.Client()
client.username_pw_set("<USERNAME>", "<PASSWORD>")
client.connect("<BROKER_IP>", 1883)
client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()

Passe <BROKER_IP>, <USERNAME> und <PASSWORD> entsprechend an.

5. Shell-Skript zur HDMI-Steuerung

Erstelle ein Shell-Skript rpi-hdmi.sh, das den HDMI-Port steuert, und mache es ausführbar (chmod +x /home/pi/rpi-hdmi.sh):

#!/bin/sh
case $1 in
    on) vcgencmd display_power 1 ;;
    off) vcgencmd display_power 0 ;;
esac

6. Autostart mit systemd

Erstelle eine systemd-Service-Datei unter /etc/systemd/system/dakboard.service:

[Unit]
Description=DAKboard MQTT Display Control
After=network.target

[Service]
ExecStart=/usr/bin/python3 /home/pi/dashboard.py
Restart=always
User=pi
WorkingDirectory=/home/pi

[Install]
WantedBy=multi-user.target

Aktiviere und starte den Dienst mit sudo systemctl enable dakboard.service und sudo systemctl start dakboard.service. So ist das Skript sauber in den Bootprozess integriert, und systemd sorgt für den Neustart bei Fehlern.