Ich habe mir in letzter Zeit mal angeschaut, wie ich aus meinen Überwachungskameras mehr rausholen kann als das übliche "Bewegung erkannt". Was dabei rausgekommen ist, finde ich wahnsinnig praktisch: Die Kamera schickt mir jetzt Nachrichten wie "Da steht jemand mit einem Paket an der Haustür" oder "Alles ruhig, die Pflastersteine halten die Stellung wie immer." Das läuft über die HACS-Integration LLM Vision zusammen mit Google Gemini als KI-Provider. Ich zeige dir das komplette Setup.
Warum LLM Vision und nicht klassische Objekterkennung?
Klassische Lösungen wie Frigate oder YOLO erkennen Bounding Boxes, also Kategorien: "person", "car", "cat". Das war's. Ein multimodales Sprachmodell versteht die ganze Szene. Statt "person" bekomme ich "Eine Person mit Rucksack schaut sich vor der Haustür um" oder "Der DHL-Bote stellt ein Paket ab." Das ist ein ganz anderer Informationsgehalt.
Der andere große Vorteil: Die KI filtert selbst. Klassische Erkennung löst bei Schatten, Pflanzen im Wind oder einer Katze genauso aus wie bei einem echten Eindringling. Wenn Gemini antwortet "Nichts los, nur der Wind", dann schicke ich gar keine Benachrichtigung. Das spart wahnsinnig viele unnötige Notifications.
Es gibt allerdings einen Haken: Deine Kamerabilder verlassen bei diesem Setup dein lokales Netzwerk. LLM Vision unterstützt zwar auch lokale Modelle über Ollama, aber ich zeige hier den Gemini-Weg, weil er am einfachsten aufzusetzen ist und im kostenlosen Tier von Google ausreicht. Entscheide selbst, was dir dabei wichtig ist.
LLM Vision installieren
Für das Setup brauchst du zwei HACS-Erweiterungen. Einmal die Integration und einmal die Dashboard-Karte, die separat installiert wird.
Die Integration findest du direkt im HACS-Store, wenn du nach "LLM Vision" suchst. Einfach herunterladen, Home Assistant neustarten, fertig.
Für die LLM Vision Card musst du einen kleinen Umweg nehmen, weil sie sich im Frontend-Bereich von HACS versteckt. Geh in HACS auf die drei Punkte oben rechts, dann auf "Benutzerdefinierte Repositories" und füge dort die Repository-URL mit dem Typ "Dashboard" hinzu. Danach taucht die Karte in der HACS-Suche auf. Herunterladen, Browser-Cache leeren mit Strg+Shift+R und dann kannst du loslegen.
Google Gemini als Provider einrichten
Für den API-Key gehst du auf Google AI Studio, klickst auf "Create API Key" und kopierst den generierten Key. Den brauchst du gleich.
In Home Assistant dann unter Einstellungen → Geräte & Dienste → Integration hinzufügen nach "LLM Vision" suchen. Den Anbieter Google auswählen, den Key eintragen und beim Modell direkt gemini-2.5-flash eintragen. Das ist wichtig: Das ältere gemini-2.0-flash funktioniert mit neuen Keys nicht mehr, da stolperst du sonst direkt über eine Fehlermeldung.
Wenn die Verbindung steht, bekommst du "Einstellung erfolgreich gespeichert" angezeigt. Damit ist der Provider fertig eingerichtet.
System Prompts auf Deutsch umstellen
Standardmäßig kommen die Beschreibungen auf Englisch raus. Wenn du deutsche Notifications möchtest, musst du die System Prompts in den LLM Vision Settings noch anpassen. Den Dialog findest du unter Einstellungen → Integrationen → LLM Vision → die drei Punkte beim Settings-Eintrag → Konfigurieren.
Ich habe meine Prompts so eingestellt:
Du bist ein entspannter Sicherheits-Buddy. Beschreib was du siehst in 1-2 lockeren Sätzen auf Deutsch. Personen, Tiere und Fahrzeuge sind spannend. Statische Objekte ignorieren. Sei abwechslungsreich und hab ruhig Humor dabei. Keine Floskeln, kein Schema F.Und für den Titel-Prompt:
Erstelle einen knackigen deutschen Titel mit max 5 Wörtern. Kurz und direkt wie eine Schlagzeile. Kein Englisch, keine Satzzeichen.Das sorgt für genau die abwechslungsreichen Nachrichten, die ich haben wollte. "Klingelgeist, niemand da" statt "No person detected" — das ist eigentlich genau das, was ich mir vorgestellt habe.
Die Automation: Kamerabild analysieren und Telegram schicken
Das Kernstück des Ganzen ist eine Automation pro Kamera. Das Prinzip ist bei allen gleich: Trigger durch Bewegungsmelder oder als Fallback per Polling, dann prüfen ob es nachts ist oder ich nicht da bin, dann das Bild an Gemini schicken, die Antwort auswerten und bei relevanter Erkennung ein Foto mit Beschreibung an Telegram schicken.
Bei mir laufen draußen zwei Netatmo-Kameras, die mir leider seit einer Weile keine Events mehr liefern. Das ist eigentlich ziemlich blöd, weil ich deswegen jede Minute aktiv nachfragen muss ob etwas los ist. Wenn deine Kamera sauber Events wirft, reicht der Bewegungsmelder-Trigger alleine.
Hier ist die vollständige Automation, die du für deine Kamera anpassen kannst:
1automation:
2 - id: llm_kamera_ai
3 alias: "Sicherheit: Kamera AI-Erkennung"
4 mode: single
5 max_exceeded: silent
6 triggers:
7 # Trigger 1: Bewegungsmelder
8 - trigger: state
9 entity_id: binary_sensor.DEIN_BEWEGUNGSMELDER
10 to: "on"
11 id: motion
12 # Trigger 2: Polling jede Minute als Fallback (z.B. wenn kein Bewegungsmelder vorhanden)
13 - trigger: time_pattern
14 minutes: "/1"
15 id: poll
16 conditions:
17 - condition: or
18 conditions:
19 # Motion-Trigger: läuft nachts ODER bei Abwesenheit
20 - condition: and
21 conditions:
22 - condition: trigger
23 id: motion
24 - condition: or
25 conditions:
26 - condition: time
27 after: "22:00:00"
28 before: "06:00:00"
29 - condition: not
30 conditions:
31 - condition: state
32 entity_id: person.DEIN_NAME
33 state: "home"
34 # Polling-Trigger: läuft NUR nachts (spart API-Calls tagsüber)
35 - condition: and
36 conditions:
37 - condition: trigger
38 id: poll
39 - condition: time
40 after: "22:00:00"
41 before: "06:00:00"
42 actions:
43 # 1. Kamerabild an Gemini schicken
44 - action: llmvision.image_analyzer
45 data:
46 provider: "DEINE_PROVIDER_ID"
47 image_entity:
48 - camera.DEINE_KAMERA
49 message: >
50 Du überwachst meine Kamera. Gib mir ein kurzes, lockeres
51 Update was gerade los ist. Personen, Autos oder Tiere sind
52 spannend. Möbel, Pflanzen, Mülltonnen ignorieren.
53 Sei kreativ und abwechslungsreich.
54 Wenn nichts los ist, sag einfach 'Nichts los'.
55 Max 2-3 Sätze, Deutsch.
56 max_tokens: 500
57 include_filename: false
58 temperature: 0.7
59 store_in_timeline: true
60 generate_title: true
61 expose_images: true
62 response_variable: response
63 # 2. Nur weiter wenn was Relevantes erkannt wurde
64 - condition: template
65 value_template: >
66 {{ response.response_text is defined
67 and response.response_text | length > 10
68 and 'nichts' not in response.response_text | lower
69 and 'nichts los' not in response.response_text | lower }}
70 # 3. Snapshot speichern
71 - action: camera.snapshot
72 target:
73 entity_id: camera.DEINE_KAMERA
74 data:
75 filename: "/config/www/tmp/camera/kamera_llm.jpg"
76 - delay: "00:00:02"
77 # 4. Telegram-Nachricht mit Foto und Buttons
78 - action: telegram_bot.send_photo
79 data:
80 caption: >
81 📸 Kamera {{ now().strftime('%H:%M') }}
82
83 {{ response.response_text }}
84 file: "/config/www/tmp/camera/kamera_llm.jpg"
85 inline_keyboard:
86 - - ["💡 Licht an", "/kamera_licht_an"]
87 - ["📸 Neues Foto", "/kamera_neues_foto"]
88 - - ["🔕 30 Min. stumm", "/kamera_stumm_30"]Die Provider-ID findest du, indem du unter Einstellungen → Integrationen → LLM Vision auf deinen Gemini-Eintrag klickst. Sie steht dann in der URL.
Für Innenkameras empfehle ich noch einen Cooldown einzubauen, damit Haustiere nicht ständig Nachrichten auslösen:
1 conditions:
2 - condition: template
3 alias: "Cooldown 120s"
4 value_template: >
5 {{ (now() - (state_attr('automation.DEINE_AUTOMATION',
6 'last_triggered') | as_datetime
7 | default(now() - timedelta(hours=1)))).total_seconds() > 120 }}Telegram-Buttons verarbeiten
Die Inline-Buttons in der Telegram-Nachricht brauchen eine eigene Automation, die die Callbacks verarbeitet. Die schaltet das Licht ein, schickt ein frisches Foto oder pausiert die Benachrichtigungen für 30 Minuten.
1automation:
2 - id: llm_kamera_telegram_buttons
3 alias: "Sicherheit: Kamera Telegram-Buttons"
4 mode: queued
5 max: 5
6 triggers:
7 - trigger: event
8 event_type: telegram_callback
9 event_data:
10 data: "/kamera_licht_an"
11 id: licht
12 - trigger: event
13 event_type: telegram_callback
14 event_data:
15 data: "/kamera_neues_foto"
16 id: foto
17 - trigger: event
18 event_type: telegram_callback
19 event_data:
20 data: "/kamera_stumm_30"
21 id: stumm
22 actions:
23 - action: telegram_bot.answer_callback_query
24 data:
25 callback_query_id: "{{ trigger.event.data.id }}"
26 message: "Wird ausgeführt..."
27 - choose:
28 # Licht einschalten
29 - conditions:
30 - condition: trigger
31 id: licht
32 sequence:
33 - action: light.turn_on
34 target:
35 entity_id: light.DEINE_AUSSENBELEUCHTUNG
36 - action: telegram_bot.send_message
37 data:
38 message: "💡 Beleuchtung eingeschaltet."
39 # Neues Foto senden
40 - conditions:
41 - condition: trigger
42 id: foto
43 sequence:
44 - action: camera.snapshot
45 target:
46 entity_id: camera.DEINE_KAMERA
47 data:
48 filename: "/config/www/tmp/camera/kamera_btn.jpg"
49 - delay: "00:00:03"
50 - action: telegram_bot.send_photo
51 data:
52 caption: "📸 Kamera jetzt"
53 file: "/config/www/tmp/camera/kamera_btn.jpg"
54 # 30 Min. stummschalten
55 - conditions:
56 - condition: trigger
57 id: stumm
58 sequence:
59 - action: automation.turn_off
60 target:
61 entity_id: automation.sicherheit_kamera_ai_erkennung
62 - action: telegram_bot.send_message
63 data:
64 message: "🔕 Kamera für 30 Min. pausiert."
65 - delay: "00:30:00"
66 - action: automation.turn_on
67 target:
68 entity_id: automation.sicherheit_kamera_ai_erkennung
69 - action: telegram_bot.send_message
70 data:
71 message: "🔔 Kamera wieder aktiv."Bei mehreren Kameras nimmst du pro Kamera eigene Callback-Daten, also z.B. /einfahrt_licht_an und /garten_licht_an, und erweiterst die Trigger und Choose-Blöcke entsprechend.
Timeline auf dem Dashboard anzeigen
Die Timeline Card zeigt alle analysierten Events chronologisch mit Vorschaubild an. Die Konfiguration ist denkbar einfach:
type: custom:llmvision-card
entity: calendar.llm_vision_timeline
number_of_hours: 24
number_of_events: 10
language: deNach einem Dashboard-Edit einfach einfügen, und du siehst direkt alle Events der letzten 24 Stunden. Die einzelnen Einträge sind anklickbar und öffnen sich in einer Detailansicht.
Ein paar Hinweise zu Kosten und Polling
Gemini 2.5 Flash hat einen wahnsinnig großzügigen kostenlosen Tier. Polling jede Minute, nur nachts über acht Stunden, ergibt 480 Anfragen pro Kamera pro Nacht. Das bleibt locker im Free Tier. Trotzdem würde ich das Polling bewusst nur nachts aktivieren und nicht tagsüber bei Abwesenheit, sonst bist du schnell bei fast 3000 Anfragen pro Tag und das ist dann eine andere Größenordnung.
Ich überlege übrigens gerade, ob ich meine Netatmo-Kameras draußen gegen etwas anderes austausche. Ohne eigene Events muss ich wirklich jede Minute aktiv nachfragen, und in der Minute dazwischen kann natürlich trotzdem etwas passieren, was ich dann einfach verpasse. Wer Kameras mit funktionierenden Bewegungs-Events hat, ist hier klar im Vorteil.
Nutzt du schon KI-Analyse für deine Kameras? Und wenn ja, welchen Ansatz hast du gewählt, lokal mit Ollama oder über eine Cloud-API? Mich würde interessieren, wie das bei euch so im Alltag läuft.
