OpenHAB Display
Ein RaspberryPi mit Display
Ursprünglich hatte ich damit experimentiert ein altes Android-Tablet als Display zu konfigurieren. So richtig glücklich bin ich damit aber nicht geworden. Dann habe ich bei Amazon gesehen, dass Display für den Raspi sehr preiswert sind und einen Raspi habe ich immer herumliegen. Ich habe mich dann für das Angebot entschieden, da hier die Verkabelung sehr unauffällig ist, der Raspi wird auf der Rückseite angeschraubt und mit speziellen Kabeln verbunden.
Das Display
Das Display hat bei Amazon knapp 76 € gekostet. Es kam in einer sehr stabilen Verpackung mit allen benötigten Kabeln und Befestigungsmaterial. Beim Befestigungsmaterial ist hervorzuheben, dass ein magnetisierter Schraubendreher dabei ist und jeweils zwei Reserveschrauben. Die kleinen Dinger fallen einem ja leicht einmal unter den Tisch.
Die Montage des Raspi am Display war kein Problem, wobei die Darstellung auf der Amazon-Seite besser ist, als die in der Bedienungsanleitung. Ein USB-Netzteil wird übrigens bei dem Monitor nicht mitgeliefert, die Stromversorgung erfolgt über den Raspi. Mein Raspi-Set wurde mit einem 3A Netzteil geliefert, damit klappt die Stromverorgung einwandfrei.
Raspi-System
Ganz begeistert war ich von der Installation des Raspi-Systems. Dazu habe ich zuerst den Raspberry Pi Imager geladen und installiert. Beim Start sind ein paar Informationen notwendig:
Ich habe einen PasperryPi 4B benutzt, mit 4 GB Speicher. Als System habe ich die 64 Bit Version "Pi OS FULL" ausgewählt. Meine SD-Karte hat 32 GByte. Nach der Auswahl der Speicherkarte und einem Klick auf "Weiter" kommt eine mir bisher unbekannte Funktion, man kann das System noch einer entsprechenden Frage vorkonfigurieren.
Das betrifft:
- Benutzer
- WLAN
- SSH-Aktivierung
Damit entsteht dann ein sofort funktionsfähiges System. Ich musste also keine Tastatur oder Maus anschließen, sondern konnte die restlichen Konfigurationsschritte bequem vom Desktop-Rechner aus per SSH erledigen.
Nachinstalliert habe ich dann später noch
- unclutter
- sed
- joe
- xdotool
Autostart von Chromium
An dem Display soll Chromium im Kiosk-Mode laufen, ohne irgendwelche Menüs, nur mit OpenHAB als Anwendung im Browser.
Ich habe mir dazu eine Datei autostart im Home-Ordner unterhalb von .config/labwc/ erstellt:
.config/labwc/autostart
#!/bin/bash
xset s noblank
xset s off
#xset -dpms
unclutter -idle 1 -root &
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/$USER/.config/chromium/Default/Preferences
sed -i 's/"exit_type":"Crashed"/"exit_type":"Normal"/' /home/$USER/.config/chromium/Default/Preferences
/usr/bin/chromium --noerrdialogs --disable-crash-reporter --disable-infobars --force-device-scale-factor=1.00 --start-fullscreen --password-store=basic http://192.168.1.95:8080 &
Die Datei wird immer dann ausgeführt, wenn sich der Benutzer, in dessen Homeverzeichnis sie liegt, anmeldet. Da ich bei der Konfiguration des Systems die automatische Anmeldung aktiviert habe, also auch nach dem Booten des Rechners.
Das mit dem Autostart ist schon immer ein großes Problem mit dem Raspi, da sich nach meiner Erfahrung das System mit jedem Update und mit jeder neuen Version ändert. Auch diesmal habe ich viel Zeit damit verbracht, eine funktionsfähige Lösung zu finden. Die meisten Beschreibungen, die ich gefunden habe, funktionieren bei mir nicht.
Anzeige aus- und einschalten
Da bei dem Raspi Wayland benutzt wird funktionieren viele Anleitungen zum Ein- bzw. Ausschalten des Monitors nicht. Aber auch hier gibt es eine Möglichkeit, siehe auch https://forum-raspberrypi.de/forum/thread/60184-tv-bildschirm-ausschalten-einschalten/
wlr-randr --output HDMI-A-1 --off
sleep 20
wlr-randr --output HDMI-A-1 --on
schaltet das Display aus und nach 20 Sekunden wieder ein.
Die Display-Bezeichnung HDMI-A-1 hat mir der Befehl
xrandr
geliefert.
Dazu muss ich mir jetzt noch passende Scripten erstellen.
Nach Eingabe von
export DISPLAY=:0.0 xhost +
kann man manche Kommandos auch aus einer Remote-Sitzung heraus bearbeiten.
Ich bekam die Fehlermeldung:
error: XDG_RUNTIME_DIR is invalid or not set in the environment
Das kann man folgendermaßen lösen:
export XDG_RUNTIME_DIR=/run/user/$(id -u)
oder besser permanent über die .bashrc
echo "export XDG_RUNTIME_DIR=/run/user/$(id -u)" >> ~/.bashrc
Bei meinen Experimenten mit den Cron-Jobs gab es keine direkten Fehlermeldungen. Mittels
journalctl
gab es nur
(CRON) info (No MTA installed, discarding output)
Das Problem lässt sich lässt sich umgehen, indem man eine Datei
/usr/sbin/sendmail
anlegt und ausführbar macht, mit folgendem Inhalt
#!/bin/bash
exec >> /tmp/sendmail.$(whoami) 2>&1
pr -Fn
echo --------------
Ein Android Tablet als Display
Ein normales Android-Tablet eignet sich hervorragend als Display für die Steuerung mittels OpenHAB. Dazu müssen aber mehrere Dinge konfiguriert werden:
- OpenHAB-App
- Fully Remote App
- Rules zum Schulen der Apps von OpenHAB aus
OpenHAB
Ich habe mir die App OpenHAB Beta auf dem Tablet installiert. Diese App startet normalerweise mit einer Sitemap im alten OpenHAB 2 Stil. Man kann aber in den Einstellungen auswählen, dass mit der OpenHAB 3 UI gearbeitet wird. Dann startet bei mit die Layout-Seite Overview.
Fully Remote App
Die Android-Geräte haben das Problem, dass sie immer nach einer gewissen Zeit an Inaktivität das Display abschalten. Ich möchte aber erreichen, dass die OpenHAB-App aber immer aktiv bleibt. Dafür gibt es eine Reihe von Apps. Zusätzlich möchte ich aber das Display auch von OpenHAB aus Ein- und Ausschalten können. Erst einmal nur zeitgesteuert, später auch von Alarmen aus.
Dazu habe ich mit Fully Single App Kiosk eine passende App gefunden. Für diese App gibt es unter https://www.fully-kiosk.com/ eine sehr umfangreiche, aber dadurch auch verwirrende Dokumentation. Übersichtlicher ist die Anleitung unter https://www.schlaue-huette.de/wandtablet/tablet-dimmen-und-aufwecken/ .
Die Bedienung ist nicht unbedingt sofort einsichtig, zumal es sich um ein Kiosk-System handelt.
Wenn man die App startet, dann sieht man nur zwei Einstellmöglichkeiten: - Auswahl der zu startenden App (OpenHAB) - Eingabe einer PIN
Danach kann man dann den Kiosk-Modus starten. Die App bietet hier einen Testmodus, aus dem sie automatisch nach einer Minute wieder aussteigt.Verzichtet man auf den Testmodus und startet den wirklichen Kiosk-Modus, so kann man den beenden, indem man 7ml schnell hintereinander auf das Display tappt. Wenn man schnell genug war, dann erscheint ein Fenster zum PIN eingeben. War man erfolgreich, so landet man wieder im Startbildschirm.
Will man an die weiteren Konfigurationseinstellungen kommen, so muss man von links nach rechts wischen.
Bei den Einstellungen ergibt es Sinn die Remote-Administration zu erlauben, dazu muss man dann auch ein Passwort anlegen. Danach kann man im lokalen Netz remote auf das Display zugreifen. Über das Burger-Menü kann man dann auch auf die Einstellungen zugreifen.
Über die hier vorhandenen Funktionen kann man das Display auch Ein- und Ausschalten. Das geht recht einfach über die URLs:
http://192.168.1.16:2323/?cmd=screenOn&password=<geheim>
und
http://192.168.1.16:2323/?cmd=screenOff&password=<geheim>
Damit eignet sich die App auch gut zur Nutzung in OpenHAB Rules und Scripts.
Rules zum Steuern der Apps
Ich habe mir zwei Rules mit Zeitsteuerung erstellt. Die eine Rule schaltet das Display morgens um 7 Uhr ein und die andere schltet es um 23.30 Uhr wieder aus. Das zugehörige Script (zum Einschalten) besteht nur aus zwei Zeilen:
var HttpUtil = Java.type("org.openhab.core.io.net.http.HttpUtil")
HttpUtil.executeUrl("GET", "http://192.168.1.16:2323/?cmd=screenOn&password=<geheim>", 2000)