Online Extra: KI-Katzenklo
Für den Artikel "KI-Video-Katzenerkennung" aus Make 2/25 gibt es hier noch ein paar Extras, Bilder und Ergänzungen, die im Heft gekürzt werden mussten.
- Florian Klug-Göri
HA Benachrichtigungen
Nach erfolgreicher Erkennung bedarf es natürlich auch einer Benachrichtigung, damit man vom Ereignis auch was mitbekommt. Diese erfolgt mittels eines "Webhooks", sodass eigentlich alles, was einen HTTP-Request entgegennehmen kann, als Empfänger der Benachrichtigung infrage kommt. Ich habe mich naheliegenderweise dazu entschieden, dies meine bereits vorhandene Home-Assistant-Installation (HA) erledigen zu lassen. Damit die Endpunkte für die Benachrichtigungen zur späteren Verwendung im Arduino- (Kamera-Knoten) und Python-Code (Server) bereits bekannt sind, empfiehlt es sich deshalb mit dem Home Assistant Teil zu beginnen.
Das Endergebnis soll so aussehen: Wann immer eine Katzenerkennung getriggered wurde, sollen unsere Google/Nest Smartspeaker uns mitteilen, in welchem Kisterl welche Katze gerade ihr Geschäft verrichtet. Ich will außerdem direkt in Home Assistant die Benachrichtigung für jede einzelne Katze ein-/ausschalten können. Zuätzlich sollen Wiederholungen verhindert werden, sodass bei mehrmaliger Auslösung durch dieselbe Katze im selben Klo nur eine Durchsage erfolgt.
Um dies umzusetzen habe ich zuerst ein paar Helfer in HA angelegt. Für jeden "Tag" einen input_boolean-Helfer (Boolsche Eingabe), insgesamt also fünf Stück. Des Weiteren bedarf es jeweils eines Helferleins vom Typ input_text (Texteingabe) und input_number (Zahlenwert-Eingabe) sowie einen timer (Timer). Der Timer erhält eine Laufzeit von einer Minute.
Insgesamt habe ich also sechs Helfer eingerichtet, für jede unserer vier Katzen ein "shice_tagX_aktiv‟ Helfer, sowie einer für den "Negative-Tag", wenn keine Katze im Bild zu sehen ist. Die restlichen drei Helfer werden später in den Automatisierungen zum Abspielen der Benachrichtigungen verwendet.
Damit man die Benachrichtigungen für eine jede Katze im Home Assistant ein- und ausschalten kann, muss man dem Frontend noch die entsprechenden Umschalter hinzufügen. Dafür klickt man rechts oben auf das Bleistiftsymbol (Dashboard bearbeiten) und anschließend rechts unten auf "+ Karte hinzufügen". Ich wählte eine "Entitäten"-Karte, da ich damit alle Toggles übersichtlich auf einer Karte versammeln kann. Nachdem man die entsprechenden, im vorigen Schritt angelegten input_boolean-Entitäten der Karte hinzugefügt hat, wird sie durch einen Klick auf "Speichern" dem Dashboard hinzugefügt.
Danach wird eine Automatisierung angelegt, die als Trigger das Ablaufen des vorhin erstellten Timers erhält. Die zwei Aktionen dieser Automatisierung setzen die zwei Helfer input_number.shice_letztes_kisterl und input_text.shice_letzter_tag auf ihre Default-Werte zurück – nämlich 0 und die leere Zeichenkette "". Dies ist nötig, da diese zwei Helfer dazu dienen, mehrmaliges Abspielen derselben Benachrichtigung kurz hintereinander zu verhindern. Die sehr großen Dialoge von HA finden Sie komplett im Online-Teil.
Um zu hinterlegen, welches Katzenklo das Ereignis ausgelöst hat, erstellte ich drei Automationen in HA, die alle gleich aufgebaut sind. Als Trigger dient jeweils ein HA-Webhook. Fügt man einen solchen mittels "+ AUSLÖSER HINZUFÜGEN/Andere Auslöser/Webhook" einer Automation hinzu, wartet HA zukünftig unter der Adresse https://HA_ADDRESS:HA_PORT/api/webhook/WEBHOOK_ID_KISTERL auf einen passenden Request, um die Automatisierung zu auszulösen.
Auszuführende Aktionen gibt es deren drei Stück: Die erste setzt den Wert von input_number.shice_letztes_kisterl auf den Wert, der dem auslösenden Kisterl entspricht. Die zweite cancelt den Timer, sollte er bereits laufen, und die dritte startet den Timer erneut, damit wieder alles in der Reset-Automatisierung von vorhin zurückgesetzt wird.
Diese Automatisierung kann man von der Kommandozeile aus beispielsweise mithilfe des Tools "cURL" testen:
curl -k -X POST https://HA_ADDRESS:HA_PORT/api/webhook/WEBHOOK_ID_KISTERL
Wobei der Parameter -k cURL Zertifikatsfehler ignorieren lässt und -X POST eine HTTP POST Anfrage veranlasst (GET Anfragen werden erst seit Home Assistant 2023.5 unterstützt). Funktioniert die Automation, wird der Helfer input_number.shice_letztes_kisterl auf den in der Automatisierung hinterlegten Wert gesetzt und nach einer Minute wieder resetet. Die Webhook-IDs notieren wir uns, die benötigen wir später noch.