Wenn mein Display (hier kannst du dir anschauen, wie ich es eingebaut habe) schmutzig ist, ist es ganz praktisch, wenn es eine „Putzfunktion“ gibt, die für eine kurze Zeit alle Eingaben deaktiviert, sodass beim Putzen nichts verstellt wird. Hier möchte ich dir zeigen, wie ich das umgesetzt habe.
Installation des Webservers
Für diese Funktion verwende ich einen Webserver, der ein Request entgegennimmt. Dieser führt dann ein Shell Skript aus, das die Eingaben vom Touchscreen abschaltet.
1 |
sudo apt install apache2 php |
PHP Skript
Dann verwende ich ein einfaches PHP Skript, welches ein Shell-Skript als User „pi“ startet:
1 2 |
<?php exec('sudo su -c "/home/pi/cleanmode.sh" pi'); |
Dieses habe ich in /var/www/html/cleanmode.sh gespeichert.
Shell-Skript
Für das Shell-Skript muss man zuerst die ID des Touchscreens herausfinden. Mit folgendem Befehl lassen sich alle IDs anzeigen:
1 2 3 4 5 6 7 8 9 |
pi@raspberrypi:~ $ DISPLAY=:0 xinput list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ ILITEK ILITEK-TP Mouse id=8 [slave pointer (2)] ⎜ ↳ ILITEK ILITEK-TP id=7 [slave pointer (2)] ⎜ ↳ vc4 id=6 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ vc4 id=9 [slave keyboard (3)] |
Anschließend probiert man mit
1 |
DISPLAY=:0 xinput disable [ID] |
alle IDs durch, bis der Touchscreen nicht mehr funktioniert. In meinem Fall war es die ID 7.
Folgendes Shell-Skript muss dann angepasst werden:
1 2 3 |
DISPLAY=:0 xinput disable 7 sleep 60 DISPLAY=:0 xinput enable 7 |
Die Zeit in Zeile 2 kann man ebenfalls nach Belieben anpassen. Mein Skript liegt in /home/pi/cleanmode.sh. Sollte das bei dir anders sein, musst du den Pfad im PHP Skript entsprechend ändern.
Den Benutzer www-data mit Root-Rechten ausstatten
Damit der User www-data (Dieser wird vom Webserver verwendet) das Shell-Skript als User pi ausführen kann, braucht er Root-Rechte.
ACHTUNG: Den Benutzer www-data mit Rootrechten auszustatten, ist ein großes Sicherheitsrisiko. Dies sollte man unter keinen Umständen auf einem vom Internet erreichbaren Webserver tun!
Wir öffnen dazu mit dem Befehl
1 |
sudo visudo |
Die Datei /etc/sudoers und tragen dort unter „User privilege specification“ folgende Zeile ein:
1 |
www-data ALL=NOPASSWD: ALL |
Nach dem Speichern mit Strg+O, dem Beenden mit Strg+X und einem Neustart hat der User www-data nun Root-Rechte. Öffnet man nun im Browser folgende URL:
http://[IP_DEINES_RPi]/cleanmode.sh
sollte sich der Touchscreen abschalten und nach 60 Sekunden wieder anschalten.
Putzfunktion in Homeassistant
Auf meinem Display läuft zur Zeit Homeassistant. Dort möchte ich die Putzfunktion gerne als Button haben. Außerdem möchte ich einen Timer, der mir anzeigt, wie viel Zeit ich noch habe, bis der Touchscreen wieder aktiviert wird.
In der config.yaml habe ich folgende Konfiguration hinterlegt:
1 2 3 4 5 6 7 |
rest_command: cleanmode: url: "http://[IP_MEINES_RPi]/cleanmode.php" timer: putztimer: duration: "00:00:60" |
Ersteres ist der Aufruf der URL, Zweiteres der Timer.
Anschließend habe ich im Homeassistant UI einen Button unter „Helfer“ erstellt.
Eine Automatisierung steuert dann das ganze, startet also den Timer und ruft dann die URL auf:

Und hier noch in Textform:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
alias: Putzbutton description: "" trigger: - platform: state entity_id: - input_button.putzbutton condition: [] action: - service: timer.start data: duration: "60" target: entity_id: timer.putztimer - service: rest_command.cleanmode data: {} mode: single |
Schreibe einen Kommentar