Zum Inhalt

Tablet Immich Frame Integration

Android Tablet als Smart Display mit Immich Slideshow, ±3 Tage Memories, Geburtstags- und Jahrestags-Feature

Changelog

2026-04-11 - Bugfix: ImmichFrame 1.0.33.0 blinkt/flackert im iframe: - Bug: ImmichFrame-iframe wechselt ständig zwischen schwarz und weiß (Blinken alle ~30 Sekunden) - Ursache: ImmichFrame v1.0.33.0 (erschienen 10. April 2026) hat neues Feature "Auto-Refresh on Connection Error" (PR #579). Im iframe-Kontext (Android WebView) verliert das Frontend die Verbindung zum Backend → Seiten-Reload alle 30s - Diagnose: Screenshots via ADB zeigten Schwarz-Weiß-Zyklus; ImmichFrame-Logs zeigten keine HTTP-Requests → URL wird kurz geladen, dann abgebrochen - Fix: ImmichFrame auf v1.0.32.0 gepinnt (beide Compose-Files auf NAS angepasst): 1. compose.yml und docker-compose.yml: :latest:v1.0.32.0 - Wichtig: NIEMALS :latest verwenden! Vor jedem Update Changelog auf "Auto-Refresh", "reload", "SignalR" prüfen

2026-04-11 - Bugfix: set_birthday_person.py - Foto-Count falsch: - Bug: count_photos_for_person() verwendete size: 1 → Immich API gibt total: 1 zurück (zählt nur gelieferte Items, nicht Gesamtanzahl!) - Fix: size: 1000, len(items) statt total - Neu: MIN_PHOTOS_FOR_BIRTHDAY = 3 → bei weniger als 3 Fotos bleibt normaler Modus aktiv (verhindert Blinken durch zu wenige Fotos)

2026-03-22 - Bugfix: Personenname mit Leerzeichen nicht gequotet: - Bug: shell_command.immichframe_set_birthday übergibt den Namen ohne Anführungszeichen → bei Namen mit Leerzeichen (z.B. "Elisabeth Müller") empfängt das Script nur sys.argv[1] = "Elisabeth" → Person nicht gefunden → normaler Modus bleibt aktiv - Beispiel: Eli (Elisabeth Müller) hatte heute Geburtstag, ImmichFrame zeigte trotzdem normale Fotos - Fix: "![]( person )" in configuration.yaml → Name wird korrekt als ein Argument übergeben - Betroffen: Alle Personen mit Vor- UND Nachname im Kalender - Manuell aktiviert für Elisabeth Müller (30. Geburtstag)

2026-02-22 - Bugfix: Tablet-IP veraltet in set_birthday_person.py: - Bug: IP im Script war noch 192.168.178.63 (alt) statt 192.168.178.105 → ADB-Refresh fehlschlug nach jedem Container-Neustart - Folge: Nach dem täglichen Container-Neustart (~00:01 Uhr für Birthday-Reset) öffnete die HA-App den ImmichFrame-Iframe bevor der Container bereit war → Tablet zeigte dauerhaft "Looks like your immich-server is offline" - Analyse: 34 Container-Neustarts in 19 Tagen identifiziert (normal durch Birthday-Reset-Automation) - Fix 1: IP in set_birthday_person.py auf 192.168.178.105:5555 korrigiert - Fix 2: 15s Sleep nach docker restart eingebaut (time.sleep(15) vor refresh_tablet()) - Tablet via ADB sofort refreshed → ImmichFrame läuft wieder 2026-02-20 - Bugfix: Geburtstags-Reset zu früh (00:01 → 23:59): - Bug: Kalender-Events starten um Mitternacht (00:00) → Reset-Automation lief um 00:01 → Geburtstagsmodus nur 1 Minute aktiv! - Fix: Reset-Trigger von 00:01:00 auf 23:59:00 geändert (automations.yaml) - Jetzt: Geburtstagsmodus aktiv von 00:00 bis 23:59 (fast 24h) - Manuell aktiviert für Maria Tonko Sr. (70. Geburtstag heute) 2026-02-19 - Geburtstags-Overlay im ImmichFrame-View: - Neue kompakte Übersicht der nächsten 3 Geburtstage/Jahrestage direkt im Fotos-View - Erscheint immer (zwischen dem heutigen Geburtstag-Overlay und dem Slideshow-Iframe) - Format: "🎂 Name (Alter J.) – in X Tagen (DD.MM.)" bzw. "morgen (DD.MM.)" - 💕 für Jahrestage, 🎂 für Geburtstage - Dunkles transparentes Design (passt zum Foto-Hintergrund) - Kein separater Sensor – Template direkt in der Lovelace-Karte 2026-02-19 - Finale Verifikation (nach HA-Neustart): - Vollständiger Re-Test nach HA-Neustart bestätigt: alles funktioniert einwandfrei - 17 Shell Commands geladen (inkl. neuem tablet_test) - ADB Volldiagnose via tablet_test: Gerät Lenovo TB-8505XS, Android 9, Root uid=0 ✓ - Display Awake/ON, Akku 60%/25°C, Foreground: HA Companion WebView ✓ - sensor.naechster_geburtstag: "Maria Tonko Sr – morgen" (days:1, age:70) ✓ - Alle 7 Tablet-Automationen ON, ImmichFrame Port 8085 erreichbar ✓ 2026-02-19 - Dashboard Redesign (Mushroom-Stil): - Dashboard dashboard-tablet komplett überarbeitet im Thermostat-Dashboard-Stil - 4 Views: Fotos · Home · Lichter · Rolläden - Home-View neu: 1. mushroom-title-card: Zuhause + dynamisches Datum 1. Temperaturen: Innen & Außen (mushroom-template-card, farbcodiert) 1. Nächster Geburtstag (voll breit): sensor.naechster_geburtstag 1. Zeigt Name, Countdown in Tagen, Alter das er/sie wird 1. Farbe: pink (heute) · orange (≤3 Tage) · gelb (≤7 Tage) · grau (später) 1. Inkl. Jahrestage (Hochzeitstag, Jahrestag) - Lichter-View neu: 1. Küche Arbeitslicht: light.kuche_arbeitsbereich_licht 1. Fernsehlicht: input_button.fernsehlicht_einschalten (Szenen-Knopf) 1. Terrasse: switch.terrasse_licht 1. Indirekte LED: switch.terrasse_indirektes_led_licht_terrasse_indirektes_led_licht - Rolläden-View: mushroom-title-card hinzugefügt, Covers unverändert - Neuer Template-Sensor: sensor.naechster_geburtstag 1. Berechnet nächsten Geburtstag/Jahrestag aus Liste (35 Events) 1. Attribute: name, days, age 1. Aktualisiert sich täglich automatisch - Neues Diagnose-Script: tablet_test.shshell_command.tablet_test 1. Vollständige ADB-Diagnose: Gerätinfo, Root, Display, Akku, Apps, Netzwerk 1. Log: /config/tablet_test.log 2026-02-19 - System-Test (vollständig): - Alle Shell Commands getestet → alle OK: 1. tablet_adb_connect, tablet_screen_on/off, tablet_open_dashboard ✓ 1. tablet_auto_brightness_on/off, tablet_set_brightness ✓ 1. immichframe_reset_birthday ✓ - Sensoren geprüft: sensor.memories_info → 92 Fotos, 12 Jahre, "Vor genau 1 Jahr" ✓ - Alle 7 Tablet-Automationen aktiv + korrekt getriggert ✓ - ImmichFrame Container läuft (Port 8085) ✓ - Reaktionszeit Commands: 1-4s (normal) - Wiki-Cleanup: 4 obsolete Seiten entfernt (tablet_shutdown_problem, tablet_magisk_root, 2x offene_projekte) 2026-02-18 - Session 13: Tablet Cleanup nach Reset: - Firmware-Reset durch Rooting hatte alle Apps zurückgesetzt - Cleanup-Script erstellt: /config/scripts/tablet_cleanup.sh - Neuer Shell Command: tablet_cleanup - Strategie: Alle Third-Party Apps automatisch entfernt (pm list packages -3) + System-Bloatware deaktiviert - Magisk bleibt als einzige Third-Party App erhalten - Kiosk-Settings wiederhergestellt (Stay Awake, kein Lockscreen, Auto-Brightness) 2026-02-18 - Session 12 (Abschluss): ADB dauerhaft gefixt: - Magisk service.d Script installiert: /data/adb/service.d/adb_wifi.sh - ADB WiFi startet automatisch nach jedem Reboot auf Port 5555 - tablet_adb_connect erweitert: adb kill-server vor Reconnect → kein stale connection Problem - IP 192.168.178.105 statisch in Android WiFi-Einstellungen gesetzt - screen_on/off getestet ✓ | Presence Detection getestet ✓ - Status: Vollständig abgeschlossen 2026-02-18 - Session 12: ADB-Fix & Magisk Persistenz: - IP statisch gesetzt: 192.168.178.105 - Neue Unterseite erstellt: Rooting-Anleitung - configuration.yaml: IPs in brightness-Commands auf 192.168.178.105 aktualisiert - Neuer Shell Command: tablet_magisk_setup (einmalig ausführen) - Neues Script: /config/scripts/tablet_magisk_setup.sh 1. Erstellt /data/adb/service.d/adb_wifi.sh auf Tablet via Magisk 1. Setzt persist.adb.tcp.port=5555 → ADB WiFi überlebt Reboots 2026-02-18 - Tablet gerootet (Deep Brick Recovery + Magisk v27.0): - Tablet war in permanentem Bootloop → Deep Brick Recovery mit SP Flash Tool v5.1916 - Firmware-Flash: TB-8505X_S100035_200313_ROW (MT6761, März 2020) - Root erfolgreich mit Magisk v27.0 (stabile Version) - Neue IP nach Root: 192.168.178.97 - Detaillierte Anleitung: → Rooting-Anleitung 2026-02-05 - Session 11: Jahrestage & "Vor X Jahren" Overlay: - NEU: Jahrestags-Feature: Hochzeitstag (03.06.) und Jahrestag (11.11.) - Script erkennt "Hochzeitstag"/"Jahrestag" Keywords → zeigt Fotos von Anatol + Maria - Template Sensor erweitert: "💕 Hochzeitstag! X Jahre!" / "💕 Jahrestag! X Jahre!" - NEU: "Vor X Jahren" Overlay: Zeigt "📸 Vor genau X Jahr(en)!" bei besonderen Jahren - memories_info.json speichert Jahre-Statistik für Sensor - Calendar Events "Hochzeitstag" und "Jahrestag" angelegt 2026-02-03 - Session 10: Geburtstag-Feature & Vollbild-Modus: - Geburtstagsliste komplett: 33 Personen, alle mit Geburtsjahr - Neue Personen: Elisabeth Müller, Susi (in Calendar + Immich) - Immersive Mode: Navigation Bar automatisch versteckt (persistent) - tablet_control.sh: setup, status, refresh_ha Kommandos hinzugefügt - set_birthday_person.py: Auto-Refresh nur wenn Bildschirm an 2026-02-03 - Session 9: Auto-Brightness & Root-Check: - Auto-Brightness aktiviert (war deaktiviert) - Root-Status geprüft: Tablet ist NICHT gerootet (Bootloader gesperrt) - Shizuku getestet als Alternative - wieder entfernt (kein Vorteil) - Troubleshooting ergänzt: ADB WiFi nach Neustart 2026-02-03 - Session 8: Mindestanzahl Fotos & Auffüll-Logik: - Duplikate-Problem analysiert (JPG+DNG Paare zeigten selbes Bild mehrfach) - update_memories.py erweitert: MIN_PHOTOS = 50 - Bei weniger als 50 Memories: Zufällige Fotos von Anatol/Maria werden ergänzt - Verwendet Immich Search API mit personIds für effiziente Suche 2026-02-03 - Session 7: Shell Commands Fix & Bild-Skalierung: - SSH-Key statt sshpass: HA shell_command Kontext hatte kein sshpass - SSH-Key erstellt: /config/.ssh/id_ed25519 - Alle Shell Commands funktionieren jetzt zuverlässig - Bild-Skalierung: Ken Burns deaktiviert (schnitt Bilder ab) - Aktuelle Einstellung: Bilder werden vollständig angezeigt 2026-02-03 - Update: Geburtstags-Kalender Migration: - 31 Geburtstage in Google Calendar (griesauera_gmail_com) eingetragen - Automation von calendar.geburtstage (read-only) auf calendar.griesauera_gmail_com umgestellt - Vollständige Geburtstagsliste dokumentiert 2026-02-03 - Session 4: Memories & Geburtstags-Feature (ABGESCHLOSSEN): - ImmichFrame Docker Container aufgesetzt (Port 8085) - Dashboard "Fotos" View mit iframe im Panel-Modus - Vollbild-Modus via HA Companion App - ±3 Tage Memories: Python-Script sucht täglich Fotos von heute ±3 Tage aus allen Jahren - Album "ImmichFrame Memories" mit aktuell 150 Fotos - Cron-Job für tägliche Aktualisierung (00:05 Uhr) - Geburtstags-Feature: Bei Geburtstag werden nur Fotos dieser Person angezeigt - Dynamische Personen-Erkennung via Immich API (funktioniert auch bei Namensänderungen) - HA Automationen: Trigger bei calendar.griesauera_gmail_com, Reset um 00:01 - Timezone-Fix für korrektes Datum 2026-02-02 - Session 2: Tablet Cleanup & HA Integration: - 39+ Apps/Bloatware via ADB entfernt - Shell Commands und Automationen erstellt 2026-02-02 - Session 1: ADB over WiFi Setup: - Technologie-Wechsel zu ADB over WiFi (kostenlos!) - Tablet-Verbindung hergestellt 2026-01-16 - Projektstart: - Initiale Planung

Projektziel

Ein Android Tablet als Smart Display mit: - ImmichFrame Slideshow: Fotos aus Immich als Diashow - ±3 Tage Memories: Fotos von heute ±3 Tage aus allen vergangenen Jahren - Geburtstags-Feature: An Geburtstagen nur Fotos dieser Person - Jahrestags-Feature: An Hochzeitstag/Jahrestag Fotos vom Paar - "Vor X Jahren" Overlay: Zeigt bei besonderen Jahren (1, 5, 10, ...) ein Overlay - Zeitsteuerung: 09:00 ein, 22:00 aus - Vollständige HA-Integration

Hardware

  • Tablet: Lenovo Tab M8 HD (2nd Gen) TB-8505F/TB-8505XS
  • Android: 9 (gerootet mit Magisk v27.0)
  • IP-Adresse: 192.168.178.105 (statisch)
  • ADB Port: 5555

Architektur

└─────────────────┘     └─────────────────┘

Overlay-Sensoren

sensor.geburtstag_heute

Zeigt Geburtstage UND Jahrestage an: | Typ | Anzeige | Icon | | Geburtstag | "🎂 [Name] wird [Alter]!" | mdi:cake-variant | | Hochzeitstag (03.06.) | "💕 Hochzeitstag! X Jahre!" | mdi:heart | | Jahrestag (11.11.) | "💕 Jahrestag! X Jahre!" | mdi:heart | Attribut event_type: hochzeit, jahrestag, geburtstag, oder none

sensor.naechster_geburtstag

Zeigt den nächsten anstehenden Geburtstag/Jahrestag: - State: "🎂 Maria Tonko Sr – morgen" / "🎂 Anatol – in 3 Tagen" / "💕 Hochzeitstag – heute!" - Attribute: name (str), days (int), age (int) - Datenquelle: 35 Events hardcoded in Template Sensor (33 Geburtstage + 2 Jahrestage) - Icon-Farbe: pink (heute) · orange (≤3 Tage) · gelb (≤7 Tage) · grau (>7 Tage)

sensor.immichframe_memories_info

Zeigt "Vor X Jahren" Info für Memories: - State: "📸 Vor genau X Jahr(en)!" bei besonderen Jahren (1, 5, 10, 15, 20, 25) - Datenquelle: memories_info.json (täglich vom Script aktualisiert) - Attribute: total_photos, oldest_year, years_count, special_years

Jahrestags-Feature

An Hochzeitstag und Jahrestag werden automatisch Fotos von Anatol + Maria angezeigt!

Calendar Events

| Event | Datum | Jahr | | Hochzeitstag | 03.06. | seit 2023 | | Jahrestag | 11.11. | seit 2015 | Die bestehende immichframe_birthday_start Automation erkennt diese Events automatisch.

Script-Keywords

Das Script set_birthday_person.py akzeptiert jetzt auch: - hochzeitstag → zeigt Anatol + Maria - jahrestag → zeigt Anatol + Maria - anniversary → zeigt Anatol + Maria - couple → zeigt Anatol + Maria

# Jahrestags-Modus aktivieren
python3 set_birthday_person.py hochzeitstag
# Alle Keywords auflisten
python3 set_birthday_person.py list

ImmichFrame Docker

Container-Details

  • Image: ghcr.io/immichframe/immichframe:latest
  • Port: 8085 (extern) → 8080 (intern)
  • Web-UI: http://192.168.178.20:8085
  • Compose: /usr/anatol/dockeruser/compose/immichframe/docker-compose.yml
  • Daten: /usr/anatol/dockeruser/data/immichframe/

docker-compose.yml

services:
  immichframe:
    image: ghcr.io/immichframe/immichframe:latest
    container_name: immichframe
    restart: unless-stopped
    ports:
    1. "8085:8080"
    environment:
    1. TZ=Europe/Vienna
    volumes:
    1. /usr/anatol/dockeruser/data/immichframe:/app/config
    1. /etc/localtime:/etc/localtime:ro
    1. /etc/timezone:/etc/timezone:ro

Bild-Skalierung

Einstellungen in Settings.yml - nach Änderung "docker restart immichframe" | Modus | ImageZoom | ImagePan | ImageFill | Beschreibung | | Aktuell: Ken Burns | true | true | false | Sanftes Zoomen/Schwenken (dynamischer Look) | | Vollständig | false | false | false | Bilder vollständig angezeigt (evtl. schwarze Balken) | | Bildschirm gefüllt | false | false | true | Immer vollflächig (schneidet ab, keine Balken) |

±3 Tage Memories Feature

Zeigt Fotos von heute ±3 Tage aus allen vergangenen Jahren - erweitert die native ImmichFrame Memories-Funktion!

Funktionsweise

  1. Python-Script läuft täglich um 00:05 via Cron
  2. Sucht alle Fotos mit Datum heute ±3 Tage (aus Jahren vor dem aktuellen)
  3. Speichert Jahre-Statistik in memories_info.json
  4. Aktualisiert das Album "ImmichFrame Memories"
  5. ImmichFrame zeigt dieses Album an

Script: update_memories.py

  • Pfad: /usr/anatol/dockeruser/data/immichframe/update_memories.py
  • Cron: 5 0 * * * (täglich 00:05)
  • Log: /usr/anatol/dockeruser/data/immichframe/memories.log
  • Output: memories_info.json (für HA Sensor)

Album

  • Name: ImmichFrame Memories
  • ID: 9ec60a7f-9b85-4ebf-bebb-4fd98889bb90
  • Aktuell: ~50 Fotos (variiert je nach Datum)
  • Mindestanzahl: 50 Fotos (wenn weniger Memories, werden zufällige Anatol/Maria Fotos ergänzt)

Ausgeschlossene Personen

Fotos mit diesen Personen werden nicht angezeigt (ExcludedPeople in Settings.yml): | Person | UUID | | Nicole Kaisinger | ebf2a02e-4898-44c7-a6c5-af57555eccfb | | Kerstin | 64e531bf-9e14-4285-8fd1-042517b4d4db | | Nicole Simader | 2a3dd23b-0915-43e5-883b-4d2cc3f424b2 | | Nadine | 63b6fd9c-7628-4181-93d0-f639a279b48a |

Geburtstags-Feature

An Geburtstagen werden automatisch nur Fotos dieser Person angezeigt + Dashboard-Overlay mit Alter!

Dashboard-Overlay

Bei Geburtstagen erscheint ein Overlay im Tablet-Dashboard:

🎂 Anatol wird 34!

Alle Geburtstage mit Geburtsjahr

Fehlende Geburtsjahre bitte ergänzen - dann Template Sensor updaten lassen! | Name | Datum | Geburtsjahr | | Opa | 15.01. | 1940 | | Lukas | 30.01. | 2017 | | Norbert | 31.01. | 1982 | | Maria Tonko Sr | 20.02. | 1956 | | Sebastian | 02.03. | 1990 | | Andreas | 03.03. | 1967 | | Elisabeth Müller | 22.03. | 1996 | | Christian M. | 25.03. | 1991 | | Susi | 06.04. | 1973 | | Ullmann Oma | 11.04. | 1948 | | Christian T | 30.04. | 1981 | | Jonas | 06.05. | 2022 | | Onkel Thomas | 15.05. | 1962 | | Judith | 23.05. | 1958 | | Kirchberg Oma | 27.05. | 1947 | | Tante Karin | 06.06. | 1976 | | Nikita | 17.06. | 2005 | | Julia | 19.06. | 1990 | | Leo | 28.06. | 1964 | | Agnes | 07.07. | 1965 | | Julian | 10.07. | 2003 | | Heli | 12.07. | 1971 | | Wolfgang | 11.08. | 1952 | | Mauricio | 18.08. | 1999 | | Dominika | 03.09. | 1971 | | Dorian | 05.09. | 2000 | | Raphael | 08.09. | 1982 | | Maxx | 24.09. | 1989 | | Christian Mutti | 26.09. | 1967 | | Tante Elisabeth | 18.10. | 1965 | | Sarah | 24.11. | 1986 | | Anatol | 11.12. | 1992 | | Angie | 13.12. | 1997 |

Funktionsweise

  1. HA Automation triggered bei calendar.griesauera_gmail_com Event
  2. Personenname wird aus Event extrahiert (Event-Summary = exakter Immich-Name)
  3. Script holt Personen-UUID dynamisch aus Immich API
  4. ImmichFrame Settings werden angepasst (nur diese Person)
  5. Container wird neu gestartet
  6. Um 23:59 wird auf normale Anzeige zurückgesetzt

Script: set_birthday_person.py

  • Pfad: /usr/anatol/dockeruser/data/immichframe/set_birthday_person.py
  • Dynamisch: Holt Personen direkt aus Immich (funktioniert auch bei Namensänderungen!)
    # Geburtstags-Modus aktivieren
    python3 set_birthday_person.py "Elisabeth Müller"
    # Jahrestags-Modus (Paar)
    python3 set_birthday_person.py hochzeitstag
    # Normale Anzeige wiederherstellen
    python3 set_birthday_person.py reset
    # Alle Personen/Keywords auflisten
    python3 set_birthday_person.py list
    

SSH-Key Authentifizierung

HA shell_command Kontext hat kein sshpass - daher SSH-Key Auth! - Key-Paar: /config/.ssh/id_ed25519 (HA) → claude@192.168.178.20 (NAS) - Wrapper-Script: /config/scripts/tablet_control.sh

HA Shell Commands

shell_command:
  # ImmichFrame Geburtstag/Jahrestag
  # WICHTIG: "![]( person )" mit Quotes! → sonst schlägt Übergabe bei Namen mit Leerzeichen fehl
  immichframe_set_birthday: '/usr/bin/ssh -i /config/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o BatchMode=yes claude@192.168.178.20 "python3 /usr/anatol/dockeruser/data/immichframe/set_birthday_person.py "![]( person )""'
  immichframe_reset_birthday: '/usr/bin/ssh -i /config/.ssh/id_ed25519 -o StrictHostKeyChecking=no -o BatchMode=yes claude@192.168.178.20 "python3 /usr/anatol/dockeruser/data/immichframe/set_birthday_person.py reset"'

HA Automationen

# Bei Geburtstag/Jahrestag aktivieren
- id: 'immichframe_birthday_start'
  alias: ImmichFrame Geburtstag aktivieren
  trigger:
1. platform: calendar
    event: start
    entity_id: calendar.griesauera_gmail_com
  action:
1. service: shell_command.immichframe_set_birthday
    data:
      person: "![]( trigger.calendar_event.summary )"
# Am Tagesende zurücksetzen (23:59 - NICHT 00:01, da Calendar-Events um Mitternacht starten!)
- id: 'immichframe_birthday_reset'
  alias: ImmichFrame Geburtstag zurücksetzen
  trigger:
1. platform: time
    at: '23:59:00'
  action:
1. service: shell_command.immichframe_reset_birthday

Calendar Events

33 Events in calendar.griesauera_gmail_com (31 Geburtstage + 2 Jahrestage)

Jahrestage

| Event | Datum | Jahr | | Hochzeitstag | 03.06. | seit 2023 | | Jahrestag | 11.11. | seit 2015 |

Personen ohne Geburtstag

Diese Personen sind in Immich, haben aber kein bekanntes Geburtsdatum: - Anita, Carmen, Daniela, Harald, Marielouise, Paul, Tante Wilma

Home Assistant Dashboard

Das Tablet zeigt das HA Dashboard dashboard-tablet mit 4 Views: - Fotos (panel:true): ImmichFrame iframe + Geburtstags-Overlay - Home: Temperaturen Innen/Außen + Nächster Geburtstag (sensor.naechster_geburtstag) - Lichter: Küche Arbeitslicht, Fernsehlicht (input_button), Terrasse, Indirekte LED - Rolläden: 5x mushroom-cover-card (rollo_s, sz_rollo, terrasse_rollo, rollo_balkon, kuche_rollo)

Vollbild-Modus

In der HA Companion App auf dem Tablet: - Einstellungen → Companion App → Vollbildmodus aktivieren - Standard-Dashboard auf dashboard-tablet setzen

Screen On/Off Automationen

  • 22:00: Bildschirm aus (tablet_bildschirm_aus_22_00)
  • 09:00: Bildschirm ein (tablet_bildschirm_ein_09_00)
  • Niemand zuhause: Bildschirm aus (tablet_bildschirm_aus_niemand_zuhause)
  • Jemand kommt heim: Bildschirm ein zwischen 09:00-22:00 (tablet_bildschirm_ein_heimkommen)
  • Mit Fernseher ausschalten: (tablet_mit_fernseher_ausschalten)

Auto-Brightness

Das Tablet nutzt seinen eigenen Lichtsensor für automatische Helligkeitsanpassung. Aktivieren: Service shell_command.tablet_auto_brightness_on aufrufen.

Projekt-Status

  • Erstellt: 2026-01-16
  • Abgeschlossen: 2026-02-03
  • Letzte Änderung: 2026-04-11
  • Status: ✓ FERTIG (mit Updates)
  • Projektverzeichnis: /config/claude_projects/tablet_immich_frame/

Troubleshooting

ImmichFrame blinkt/flackert im iframe (Auto-Reload)

  • Ursache: ImmichFrame v1.0.33.0+ hat "Auto-Refresh on Connection Error" Feature → im iframe-Kontext wird die Verbindung ständig verloren → Seiten-Reload alle 30 Sekunden
  • Symptome: iframe wechselt schwarz (geladen) ↔ weiß (lädt) im ~30s-Zyklus. Screenshots mit ADB zeigen diesen Wechsel.
  • Fix (2026-04-11): ImmichFrame auf v1.0.32.0 pinnen:
    sed -i 's|:latest|:v1.0.32.0|' /usr/anatol/dockeruser/compose/immichframe/compose.yml
    sed -i 's|:latest|:v1.0.32.0|' /usr/anatol/dockeruser/compose/immichframe/docker-compose.yml
    cd /usr/anatol/dockeruser/compose/immichframe && docker compose up -d --force-recreate
    
  • Dauerhaft: Nur auf geprüfte Versionen updaten! Changelog immer auf "Auto-Refresh"/"reload"/"SignalR" prüfen bevor Update
  • NIEMALS :latest für ImmichFrame verwenden!

ImmichFrame weißes Bild / rotes Error-Icon (HA 2026.3+)

  • Ursache: HA 2026.3.x + Companion App 2026.3.2 blockiert externe URLs im iframe card stillschweigend ohne allowlist_external_urls Eintrag
  • Symptome: iframe card → weißes Bild; webpage card → rotes Error-Icon. ImmichFrame selbst läuft, Port erreichbar, Chrome zeigt Fotos korrekt.
  • Gelöst (2026-03-25): In /config/configuration.yaml unter homeassistant: hinzufügen:
    homeassistant:
      allowlist_external_urls:
      1. http://192.168.178.20:8085
    
  • Wichtig: reload_core_config reicht NICHT → HA komplett neu starten!
  • Card-Typ: iframe bleibt der richtige Typ (nicht webpage!)
  • Sofort-Fix wenn es wieder passiert: HA neu starten, dann HA App auf Tablet refreshen.

Geburtstags-Feature aktiviert nicht (Person mit Leerzeichen im Namen)

  • Ursache: Namen wie "Elisabeth Müller" werden ohne Quotes übergeben → Script erhält nur "Elisabeth" als Argument → Person nicht gefunden
  • Gelöst (2026-03-22): "![]( person )" in configuration.yaml → Name korrekt gequotet
  • Betroffen: Alle Personen mit Vor- UND Nachname (z.B. Elisabeth Müller, Maria Tonko Sr, ...)
  • Manuell aktivieren: python3 set_birthday_person.py "Elisabeth Müller"

ImmichFrame zeigt "server offline" Fehler

  • Ursache: Container startet täglich ~00:01 neu (Birthday-Reset) → wenn ADB-Refresh fehlschlägt, bleibt Tablet auf Fehlermeldung hängen
  • Schnellfix: ADB-Refresh manuell ausführen:
    adb connect 192.168.178.105:5555
    adb -s 192.168.178.105:5555 shell am force-stop io.homeassistant.companion.android
    adb -s 192.168.178.105:5555 shell am start -n io.homeassistant.companion.android/.launch.LaunchActivity
    
  • Dauerhaft gelöst (2026-02-22): IP in set_birthday_person.py korrigiert + 15s Sleep vor Tablet-Refresh

Geburtstags-Feature läuft nur 1 Minute (war Bug bis 2026-02-20)

  • Ursache: Kalender-Event startet um 00:00 Uhr Mitternacht → Reset-Automation lief um 00:01 → nur 1 Minute Geburtstagsmodus
  • Gelöst: Reset-Zeit auf 23:59:00 geändert → Geburtstagsmodus läuft den ganzen Tag

ImmichFrame zeigt falsches Datum

  • Ursache: Timezone nicht korrekt im Container
  • Lösung: /etc/localtime und /etc/timezone als Volume mounten

Geburtstags-Feature zeigt alle Fotos

  • Ursache: Albums und ShowFavorites waren noch aktiv
  • Lösung: Script deaktiviert diese Quellen im Geburtstags-Modus

Person nicht gefunden

  • Ursache: Name im Kalender stimmt nicht mit Immich überein
  • Prüfen: python3 set_birthday_person.py list

ADB WiFi nach Tablet-Neustart nicht verfügbar

  • GELÖST (2026-02-18): Magisk service.d Script aktiv → ADB WiFi startet automatisch nach Reboot
  • Script: /data/adb/service.d/adb_wifi.sh | Siehe Rooting-Anleitung
  • Diagnose: shell_command.tablet_test ausführen → Log: /config/tablet_test.log

Shell Commands funktionieren nicht

  • Ursache: sshpass nicht im HA shell_command Kontext
  • Lösung: SSH-Key Auth mit /config/.ssh/id_ed25519
  • Debug: /config/tablet_debug.log prüfen

← Zurück zur Projekte-Übersicht ← Zurück zur Home Assistant Hauptübersicht