Inspiration 20. Juni 2026 6 Min. Lesezeit

Wie ich meiner Garagenkamera beigebracht habe, an die Müllabfuhr zu denken

Das Problem

Müllabfuhr-Tage haben mich immer wieder kalt erwischt. Verpasst man die Abholung einer der vier Tonnen, sitzt man zwei Wochen auf einem überquellenden Behälter — Bio, Gelber Sack, Papier, Restmüll, alle gleich unangenehm wenn sie voll sind. Ich hab Kalender-Erinnerungen probiert, Smart-Speaker-Pings, einen Post-it-Zettel an der Küchenarbeitsplatte. Nichts war perfekt.

Was ich brauchte, war keine weitere Erinnerung. Ich brauchte ein System, das weiß, ob die Tonne schon draußen steht — und mich nur dann nervt, wenn nicht.

Das Setup auf einen Blick

  • Reolink-Garagenkamera — war schon da, 24/7 RTSP, sieht die vier Tonnen an der Rückwand stehen
  • GPT-4o Vision — bekommt jeden Abend vor der Abholung ein Bild und liefert zurück, welche Tonnen noch drinnen sind
  • Abfallkalender-Integration für Home Assistant — weiß, was morgen abgeholt wird
  • n8n — orchestriert die Kette Snapshot → Vision → Kalender → Benachrichtigung
  • Telegram-Bot — schickt das echte Foto mit, damit ich es selbst sehen kann

Schritt 1: Der Snapshot

Die Garagenkamera liefert bereits einen RTSP-Stream. In Home Assistant heißt sie camera.garage. Der erste Schritt ist einfach: ein Standbild holen:

// Im n8n Code-Node
const ha_token = fs.readFileSync('/pfad/zum/ha_token','utf8').trim();
const snapshot = await fetch('http://homeassistant:8123/api/camera_proxy/camera.garage', {
  headers: { 'Authorization': 'Bearer ' + ha_token }
});
const buffer = Buffer.from(await snapshot.arrayBuffer());
const b64 = buffer.toString('base64');

Schritt 2: Frag die KI nicht, wo die Tonnen stehen — sag’s ihr

Meine erste Version war naiv: ich hab das ganze Garagenfoto an GPT-4o geschickt und gefragt „Welche der vier Tonnen siehst du?“. Das funktionierte vielleicht in 70% der Fälle. Das Modell verwechselte den Gelben Sack mit einer Kiste, halluzinierte Tonnen die gar nicht da waren, übersah die Biotonne hinter dem Fahrrad. Für eine Benachrichtigung, der ich vertrauen muss, unbrauchbar.

Der Fix: manuell kalibrierte Bounding Boxes. Die Tonnen stehen immer an denselben vier Stellen an der Rückwand. Ich habe diese Stellen einmal auf einem Referenzbild (640×480) ausgemessen und als Sektoren hardcoded:

const SECTORS = {
  A: { x:10,  y:165, w:140, h:235, label: "Altpapier",  color: "blau"    },
  B: { x:145, y:170, w:95,  h:210, label: "Restmüll",   color: "schwarz" },
  C: { x:240, y:110, w:80,  h:215, label: "Bio",        color: "braun"   },
  D: { x:315, y:120, w:110, h:250, label: "Wertstoff",  color: "gelb"    },
};
Garagenkamera-Bild mit vier kalibrierten Bounding Boxes über jeder Tonnen-Position
Kalibrierte Sektoren A-D. Einmal auf einem 640×480 Referenzbild gemessen, dann für jeden Abend-Check wiederverwendet.

Die Kalibrierung ist eine einmalige Sache: Snapshot machen wenn alle vier Tonnen in Position stehen, jeden Sektor in einem Bildeditor ausmessen, Koordinaten reinkopieren. Fünf Minuten Arbeit, die die Genauigkeit verdoppelt.

Der Workflow skaliert dann jeden neuen Snapshot auf 640×480 (damit die Sektoren stabil bleiben, auch wenn die Kameraauflösung sich ändert) und schneidet pro Sektor ein Bild mit ffmpeg in/aus dem Speicher heraus — keine temporären Dateien:

function ffmpeg(inputBuf, vfArg) {
  return new Promise((resolve, reject) => {
    const ff = spawn("ffmpeg", ["-loglevel","error","-i","pipe:0","-vf",vfArg,"-f","mjpeg","-q:v","5","pipe:1"]);
    const chunks = [];
    ff.stdout.on("data", c => chunks.push(c));
    ff.on("close", code => code === 0 ? resolve(Buffer.concat(chunks)) : reject(code));
    ff.stdin.end(inputBuf);
  });
}

const baseBuf = await ffmpeg(snapshotBuffer, "scale=640:480");
const cropBuf = await ffmpeg(baseBuf, `crop=${spec.w}:${spec.h}:${spec.x}:${spec.y}`);

Jedes zugeschnittene Bild ist jetzt eine exakte Aufnahme genau eines Platzes. Der GPT-4o-Call ist entsprechend einfach — statt „finde vier Tonnen in dieser Szene“ beantwortet er eine binäre Frage: steht in diesem Platz eine Tonne, ja oder nein?

const prompt = `Du siehst ein eng zugeschnittenes Bild eines kleinen Bereichs in einer Garage.

Beschreibe ZUERST in 1-2 Sätzen was du WIRKLICH siehst (Boden? Wand? Tür? Plastikbehälter? Fahrrad?). Erfinde NICHTS.

Dann entscheide:
- bin_visible=TRUE NUR wenn du DEUTLICH einen Mülltonnen-Korpus (rechteckiger Plastikbehälter mit Rädern unten und einem klar abgesetzten Deckel oben) siehst, der MEHR als die Hälfte des Bildes einnimmt
- bin_visible=FALSE wenn das Bild hauptsächlich Tür, Wand, Boden, Schatten, Fahrrad oder andere Gegenstände zeigt
- bin_visible=FALSE bei Unsicherheit

Antworte NUR als JSON, keine Erklärungen außerhalb:
{"what_i_see": "konkrete Beobachtung in 5-10 Wörtern", "bin_visible": true/false}`;

Die vier Sektor-Calls laufen parallel — etwa 2 Sekunden Ende-zu-Ende. Das Zurück-Mapping auf den Tonnen-Typ ist trivial, weil jeder Sektor sein Label schon dranhängt.

Drei kleine Entscheidungen, die einen Unterschied machen:

  • Erzwinge ein „what_i_see“ Feld vor dem Boolean. Das Modell beschreiben zu lassen, was es tatsächlich im Crop sieht, BEVOR es bin_visible entscheidet, drückt Halluzinationen — es muss sich erst auf „ich sehe eine Tür“ festlegen, bevor es „Tonne sichtbar: true“ behaupten kann
  • Explizit auf FALSE biasen bei Unsicherheit. Eine verpasste Warnung (False Negative) ist okay — ich sehe die Tonne bei meinem nächsten Vorbeigehen noch in der Garage stehen. Eine falsche „Tonne ist draußen“-Nachricht würde mein Vertrauen in das ganze System zerstören
  • temperature: 0 + max_tokens: 150. Stabil, parsbar, günstig — etwa 0,5 Cent pro Abend-Check über alle vier Sektoren

Schritt 3: Der Kalender-Abgleich

Home Assistant zieht den lokalen Abholplan über die Waste Collection Schedule Integration. Die relevanten Sensoren sehen so aus:

sensor.naechste_biotonne_abholung    // "in 1 day"
sensor.naechste_restmuell_abholung   // "in 10 days"
sensor.naechste_papier_abholung      // "in 5 days"
sensor.naechste_gelber_sack_abholung // "in 3 days"

Der Workflow läuft jeden Abend um 20:45 und prüft, ob einer dieser Sensoren „in 1 day“ sagt. Wenn ja, muss diese Tonne vor dem Morgen draußen stehen.

Schritt 4: Die Foto-Benachrichtigung

Wenn die relevante Tonne im bins_visible-Ergebnis des Vision-Calls noch auftaucht, schickt Telegram den Alarm mit dem echten Snapshot als Anhang:

🟤 Mülltonnen-Check: Biotonne (morgen)

⚠️ Die Biotonne steht noch in der Garage!
Bitte JETZT rausstellen!

📷 Es stehen alle vier Tonnen noch in der Garage incl. der
Biomülltonne, die morgen abgeholt wird.

Das Foto ist das, was das Ganze zum Funktionieren bringt. Einen Text-Alert kann man leicht mit „ich hab sie doch schon rausgestellt“ wegwischen. Ein Foto, auf dem die Tonne buchstäblich noch da steht, nicht.

Was ich gelernt habe

Hand-kalibrierte Bounding Boxes sind viel besser, als Vision-Modelle selbst suchen zu lassen. Der All-in-One-Prompt hat sich abgemüht. Der Per-Sektor-Binär-Prompt ist nahezu perfekt — auch bei Nacht mit Kamera im IR-Modus, weil das Modell nur „ist hier ein tonnen-förmiges Objekt in diesem kleinen Frame“ beantworten muss, statt vier Tonnen in einer weiten Szene farblich zu identifizieren.

Check am Abend davor, nicht am Morgen selbst. Meine erste Version lief um 06:00 Uhr am Abholtag. Sinnlos — da trank ich schon Kaffee und der Müllwagen war auf halbem Weg die Straße runter. Der Abend-Check gibt mir Zeit, das während normaler Haushaltsstunden zu erledigen.

Foto-Beweis schlägt Text-Beweis, jedes Mal. Sobald der Alarm ein Foto der Tonne enthält, die noch in der Garage steht, gibt es keine Diskussion. Ich stehe auf und schiebe sie raus.

Ergebnis

Zwei Wochen später: null verpasste Abholungen. Ein wirklich befriedigendes „hab ich dir doch gesagt“ jeden Abend vor dem Abholtag — von einem Smart Home, das einfach seinen Job macht.

Hier klicken, um den Inhalt von youtube.com anzuzeigen.

Automation Generative KI Home Assistant KI KI Vision n8n
← Vorheriger
KI ist eine Magic Box: Wie zwei Smart-Home-Builder…
Nächster →
Das selbst heilende Smart Home: Wie KI mein…
🤖

Nova empfiehlt

ähnliche Beiträge
Jahresrückblick 2025: Von KI-Bots bis DIY-Hardware – Meine besten Smart Home Upgrades
31. Dez. 2025 · 3 Min. Lesezeit
Rayban Meta Smart Glasses: Review und Integration in Home Assistant
14. Jan. 2025 · 9 Min. Lesezeit
KI ist eine Magic Box: Wie zwei Smart-Home-Builder sie wirklich nutzen
11. Juni 2026 · 4 Min. Lesezeit

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nichts mehr verpassen

Neue Artikel, Projekte und Podcast-Episoden direkt per Email. Kein Spam, jederzeit abbestellbar.

Oder folge mir auf:

Podcast YouTube