====== Display Panel ====== ===== Install ===== Wegen zu vielen Problemen mit Wayland wird hier **Trixie mit X11** genutzt. Das Hauptproblem ist, dass das Display beim Stromsparen einen nervigen Bildschirm anzeigt ... "No Signal" ... ===== Einstellungen ===== * '' sudo raspi-config'' * I2C Aktivieren * 1Wire aktivieren * umstellen von Wayland auf X11 * Screen Blanking aus ! ===== 100 Mbit Fix ===== * Man muss dafür per SSH mit WLAN auf dem Pi sein .... * ''sudo nano /etc/systemd/system/eth0fix.service'' * [Unit] Description=100MBit Fix for eth0 After=network-online.target Requires=network-online.target [Service] ExecStart=/sbin/ethtool -s eth0 speed 100 duplex full autoneg on Type=oneshot [Install] WantedBy=multi-user.target * ''sudo systemctl enable eth0fix.service'' * ''sudo systemctl restart eth0fix.service'' ===== Updates ===== * Command Line \\ ''sudo apt update && sudo apt upgrade -y && sudo apt install -y git git-lfs silversearcher-ag wavemon hexedit sudoku tcpdump iptraf mc htop dcfldd nano usbutils ranger ncdu can-utils multitail fd-find lsof x11vnc minicom joystick i2c-tools speedtest-cli iotop fio ir-keytable curl inxi lshw nala fzf duf'' * UI Tools \\ ''sudo apt update && sudo apt upgrade -y && sudo apt install -y flameshot terminator cutecom jstest-gtk xclip'' * Nutzloses Zeug \\ ''sudo apt autoremove -y modem* cups* avahi* triggerhappy* rpi-connect openvpn xscreensaver'' ===== ser2net ===== * Der Zigbee Stick hängt am Display über USB. Damit der in HA genutzt werden kann nutzen wir ser2net. * -> https://www.drklipper.de/doku.php?id=haussteuerung:zigbee2mqtt ===== Browser ===== * Settings * {{.:pasted:20251227-052903.png}} \\ http://192.168.30.28:8123/wohnzimmer-10/0 \\ :!: Damit ist dann auch das "Restore Previous" weg beim Start! * Appearance -> Mode -> Dark ==== ... steuern ==== falls benötigt ... # Chromium in Fullscreen sleep 15 #WID=$(DISPLAY=:0 xdotool search --onlyvisible --class chromium|head -1) #DISPLAY=:0 xdotool windowactivate ${WID} #DISPLAY=:0 xdotool key F11 # An Display Position navigieren mit der Maus und Vollbild auslösen DISPLAY=:0 /usr/bin/xdotool mousemove --sync 954 200 click 1 ===== Autostart ===== * :!: Alles in die Autostart packen ist keine gute Option. xset wird nicht sauber gestartet. * ''nano /home/pi/start_kiosk.sh'' \\ #!/bin/bash # Warte kurz, bis der Desktop vollständig geladen ist (WICHTIG!) sleep 5 # Energieeinstellungen deaktivieren xset s off xset s noblank xset -dpms # Chromium Crash-Flags bereinigen # 1. Sperrdateien löschen (WICHTIG!) # Verhindert die Meldung "Profil wird bereits verwendet" rm -f /home/pi/.config/chromium/SingletonLock rm -f /home/pi/.config/chromium/Default/SingletonLock # 2. 'Local State' säubern (Globaler Status) sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/'Local State' # 3. 'Preferences' säubern (Profil Status) # Dieser eine Befehl erschlägt "Crashed", "SessionCrashed" und andere Zustände auf einmal sed -i 's/"exit_type":"[^"]\+"/"exit_type":"Normal"/;s/"exited_cleanly":false/"exited_cleanly":true/' /home/pi/.config/chromium/Default/Preferences # Chromium starten (Kiosk Modus als Beispiel, ansonsten deine Flags nutzen) chromium --noerrdialogs --touch-events=enabled * Unter Debian Trixie (X11) liegt die autostart dann hier : \\ ''sudo nano /etc/xdg/lxsession/rpd-x/autostart'' \\ @lxpanel-pi @pcmanfm-pi @bash /home/pi/start_kiosk.sh Sonst liegt die Autostart hier ''/home/pi/.config/lxsession/LXDE-pi/autostart'' * ''chmod +x /home/pi/start_kiosk.sh'' * Nach einem Restart kann man ''xset -q'' prüfen ob Screenblanking und Screensaver Timeout deaktiviert sind: pi@SHome-Display:~ $ xset -q ... Screen Saver: prefer blanking: no allow exposures: yes timeout: 0 cycle: 600 ... ===== X11VNC ===== * ''sudo apt install x11vnc'' * für einen ersten Test kann man das verwenden \\ ''x11vnc -usepw -forever -display :0'' * **Einrichtung als Dienst** * ''sudo x11vnc -storepasswd /etc/x11vnc.pass'' * ''sudo nano /lib/systemd/system/x11vnc.service'' * [Unit] Description=Start X11VNC After=multi-user.target [Service] Type=simple ExecStart=/usr/bin/x11vnc -display :0 -auth guess -forever -loop -noxdamage -repeat -rfbauth /etc/x11vnc.pass -rfbport 5900 -shared [Install] WantedBy=multi-user.target * ''sudo systemctl enable x11vnc.service'' ===== Fullscreen ===== * für Fullscreen Kontroller brauchen wir die HA Integration "Browser Mod" (Installieren über HACS) \\ https://github.com/thomasloven/hass-browser_mod * auf dem Endgerät dann die Seite öffnen \\ http://192.168.30.28:8123/browser-mod * Register aktivieren * sinnvollen Namen in Browser ID eingeben ''WZ_Display_10Zoll'' * Jetzt sollte der Browser als Device in HA auftauchen * Wir brauchen BroiwserMod um JavaScript auszuführen um Fullscreen Toggel hinzubekommen * Das Ausblenden von HA Elementen passiert mit ''kiosk-mode'' \\ https://github.com/NemesisRE/kiosk-mode * Konfig vom kiosk-mode passiert im YAML Modus des Dashboards! \\ kiosk_mode: user_settings: - users: - wohnzimmer hide_sidebar: true hide_header: false hide_assistant: true Das muss am Anfang ergänzt werden. Damit wird für den User ''wohnzimmer'' die Sidebar und der Assistant abgeschaltet. * Den Fullscreen Button kann man so erstellen: * Button mit Interaktion -> Aktion ausführen -> javascript * Target Browser auswählen -> WZ Display (dafür braucht man browser_mod) * Code : if (!document.fullscreenElement) { document.documentElement.requestFullscreen(); } else { document.exitFullscreen(); } ===== Display On / Off ===== Das Display kann über den GPIO Pin 36 vom Raspberry Pi an- und abgeschaltet werden. Das geht über ein einfaches toggeln. Am Ende macht das Python Script (gestartet als Service) aber noch einiges mehr... import RPi.GPIO as GPIO import time # GPIO-Setup (BOARD-Modus für physische Pin-Nummern) GPIO.setmode(GPIO.BOARD) GPIO.setwarnings(False) # Pin 36 (GPIO 16) für Display ON/OFF GPIO.setup(36, GPIO.OUT) def toggleOnOff(): GPIO.output(36, GPIO.HIGH) time.sleep(0.4) GPIO.output(36, GPIO.LOW) print("Display toggled!") # Toggle ausführen toggleOnOff() ==== Funktionen ==== * Display an / aus * Raspberry in HA mittels Autodiscover anmelden * Schalten des Displays über HA * Melden von Bewegung an HA (MQTT) * einfaches Systemn Monitoring (vor allem Temperatur) ==== Venv einrichten ==== * ''sudo apt -y update && sudo apt-get install -y build-essential cmake make gcc pkg-config python3-dev python3-virtualenv libsystemd-dev libopenblas-dev python3-setuptools'' * ''cd ~ && mkdir -p DisplayHA && cd DisplayHA'' * ''python -m venv . && source bin/activate'' * ''pip3 install %%--%%upgrade pip && pip3 install RPi.GPIO pynput smbus paho-mqtt psutil setuptools'' * Compile VL53 Lib ... * ''sudo apt-get install build-essential python-dev'' * ''cd ~ && git clone https://github.com/pimoroni/VL53L0X_rasp_python.git && cd VL53L0X_rasp_python'' * ''pip install .'' * VL53L0X.py in den Scriptordner kopieren ... \\ ''cp ~/VL53L0X_rasp_python/python/VL53L0X.py ~/DisplayHA/'' * Tests starten ... ===== Motion Detect ===== * Sensor : VL53L0X ==== Service ==== * Aktivieren \\ ''sudo systemctl enable display.service'' \\ ''sudo systemctl daemon-reload'' \\ ''sudo systemctl start display.service'' * Log ansehen \\ ''journalctl -u display.service -f'' * ''sudo nano /lib/systemd/system/display.service'' \\ [Unit] Description=Smart Display Controller (venv/User Mode) # Wir warten, bis das Netzwerk und die Grafikoberfläche da sind After=network-online.target graphical.target Wants=network-online.target [Service] # --- User Context --- User=pi Group=pi # --- Arbeitsverzeichnis --- # Setzt das Verzeichnis, damit relative Pfade funktionieren WorkingDirectory=/home/pi/DisplayHA # --- Environment --- # Diese Variablen sind wichtig für DDC/CI oder xrandr Interaktionen Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/pi/.Xauthority # Erzwingt unbuffered Output, damit Logs sofort im Journal erscheinen Environment=PYTHONUNBUFFERED=1 # --- ExecStart: Der Trick für das venv --- # Statt 'source bin/activate' rufen wir direkt das Python im venv auf. # PASSE DEN PFAD ZUM VENV AN, falls dein Ordner anders heißt (z.B. .venv)! ExecStart=/home/pi/DisplayHA/bin/python /home/pi/DisplayHA/SmartDisplay.py # --- Restart Verhalten --- Restart=always RestartSec=10s [Install] WantedBy=graphical.target