Netatmo — Integration der Kameras (Home + Security)

Hallo zusammen! :waving_hand:

Wie im Netatmo-Service-Thema angekündigt, wird die Entwicklung der Integration der Netatmo-Kameras (Home- und Security-Serie) offiziell wieder aufgenommen. Dieses Thema dient dazu, den Fortschritt zu verfolgen, über Entscheidungen zu diskutieren und Tests zu organisieren.

Ein bisschen Geschichte

Ein erster Pull-Request (#2032) wurde im März 2024 für die Innenkamera (NACamera) eröffnet und später aufgrund von Inaktivität automatisch geschlossen. Gute Nachricht: Die Arbeit ist nicht verloren gegangen — der Zweig hat sich auch nach dem PR weiterentwickelt (Entdeckung der Kameras, Umwandlung der Security-Geräte, Abruf von Snapshots über ffmpeg, vollständige Tests…). Diese Basis wird auf einem aktuellen Master übernommen, bereinigt und in PRs von angemessener Größe aufgeteilt — eine Lehre aus den großen PRs der Vergangenheit :wink:. Ich habe Testgeräte!

  • Innenkameras
  • Außenkamera
  • Sirene
  • DoorTag

Der Plan in 3 Schritten

Schritt 1 — Security-API-Grundlage :brick:
Aktivierung der Security-API in der Service-Konfiguration, Erkennung der Kameras, erste Funktionen (Status, WiFi). Die kamerabezogenen Befehle werden sichtbar, aber deaktiviert, mit einer Erklärung — sie werden in Schritt 2 freigeschaltet. Das Ziel: Ein kompakter und leicht zu überprüfender PR, der die Grundlagen legt.

Schritt 2 — Das Bild :camera:
Die eigentliche Kamerafunktion: Abruf des Streams (Netatmo-VPN-URL mit automatischem Wechsel auf die lokale URL, wenn möglich), periodisches Aktualisieren des Bildes, Anzeige im Gladys-Kamera-Dashboard — wie bei RTSP-Kameras.

Schritt 3 — Ereignisse und zugehörige Module :bell:
Bewegungserkennung, Personenerkennung und die Module, die mit den Kameras verbunden sind (Innen-Sirene, DoorTag-Öffnungssensoren) je nach verfügbarer Hardware.

Und danach: Der Empfang von Ereignissen in Echtzeit per Webhook (über Gladys Plus), der letztendlich allen Netatmo-Geräten zugutekommt, nicht nur den Kameras.

Warum jetzt?

Der Service hat gerade 4 PRs mit Korrekturen und Refactoring erhalten, die die Verwaltung der Verbindung, der Werte und der Erkennung bereinigen: Die Basis ist gesund, um darauf aufzubauen.

Wenn ihr Netatmo-Kameras habt (innen, außen, Türsprechanlage), meldet euch hier — Tester sind ab den ersten PRs willkommen! :raising_hands:

Gute Neuigkeiten: Die Schritte 1 und 2 des Plans sind codiert, als PR erstellt und in der Praxis getestet (NACamera innen + NOC außen), und das Live-Dashboard funktioniert auch! :tada:

Was heute auf meinem Branch-Stack funktioniert:

  • Erkennung der Kameras (NACamera + NOC) über die Security-API, mit Überwachungsstatus und WiFi-Qualität
  • Kamerabild in der Dashboard-Kamera-Box, aktualisiert in jedem Zyklus (automatische Auflösung der lokalen URL mit VPN-Fallback)
  • Überwachung ON/OFF über das Dashboard steuern
  • „Live“-Button der Kamera-Box funktioniert (HLS-Stream über den rtsp-camera-Dienst), mit einem Qualitätsauswahlmenü auf der Geräte-Seite
  • Bonus: Die Erkennung ermöglicht jetzt, ein bereits erstelltes Gerät zu aktualisieren, wenn neue Funktionen hinzukommen (keine DB-Migration mehr bei jedem Hinzufügen)

Die PRs, in der Reihenfolge der Überprüfung/Mergen (jeder gestapelte PR wird automatisch beim Mergen seiner Eltern-PR reduziert) — @pierre-gilles, wenn du einen Moment Zeit hast :folded_hands: :

  1. #2620 — Fix Erkennung: Module ohne Strom werden ordnungsgemäß neu aufgebaut (zuerst mergen, notwendig, um den Rest zu testen)
  2. #2617 — Fix falsche Werte (0 mm Regen, 0 °C, 0° Winkel… wurden nicht gemeldet)
  3. #2619 — Deklarative Refaktorisierung der Updates (gestapelt auf #2617, -364 Zeilen netto)
  4. #2618 — Härtung der Verbindung/Token (unabhängig)
  5. #2621 — CAM-1: Security-API-Grundlage + Kamera-Erkennung
  6. #2624 — „Aktualisieren“-Stream in der Erkennung
  7. #2623 — CAM-2: Bild + Überwachungsbefehl
  8. #2625 — CAM-3: Live-Streaming + Qualitätsauswahl
  9. #2622 — Fix SVG in der Entwicklung (unabhängig, jederzeit mergebar)

Die ersten vier sind PRs zur Sanierung des aktuellen Dienstes, absichtlich klein und ohne Verhaltensänderungen (außer den Fixes), die den Boden für die Kamera vorbereiten.

Als Nächstes: Die Ereignisse (Bewegung, Personen) wahrscheinlich über Webhooks, dann die gebridgten Module (NIS-Sirene, NACamDoorTag-Öffnungssensoren — sie erscheinen bereits als „nicht unterstützt“ in der Erkennung).

Der Aufruf an Tester gilt weiterhin, besonders wenn Sie eine andere Konfiguration als ich haben (Kamera nur über das Netatmo-VPN erreichbar insbesondere)! Ein Testbild wird in 30 Minuten verfügbar sein: docker pull terdious/gladys:netatmo-camera

Ein technischer Punkt zur Transparenz über den Live-Stream: Er funktioniert, aber er startet langsam und ist nicht flüssig, und das ist nicht vollständig auf Netatmo oder PR #2625 zurückzuführen — es ist die Pipeline des Dienstes rtsp-camera, die jeden eingehenden Stream in h264 1920px @ 25 fps neu codiert.

Messungen bei mir am Netatmo-Stream (bereits in h264):

  • Die Neu-Codierung skaliert hoch die Quelle (720p → 1080p, und sogar eine Quelle von 384x216 wird auf 1080p gebracht :sweat_smile:), bei ~0,3x der Echtzeit auf meinem Rechner → der Transcoder kommt in der Live-Playlist in Verzug, Segmente werden übersprungen, ~19 s bis zum ersten Segment
  • Das erzwungene -r 25 dupliziert jeden zweiten Frame (die Kamera produziert ~12-24 fps)
  • Wenn ich die Codierung durch ein einfaches -c:v copy ersetze (HLS-Remuxing verschlüsselt ohne Neu-Codierung, lokal getestet): erstes Segment in ~3 s, stabile Geschwindigkeit 1x, fast keine Unterbrechungen — CPU nahe null

Ich werde also einen separaten PR core rtsp-camera in diese Richtung vorschlagen: Stream-Kopie, wenn die Quelle bereits h264 und ohne Rotation ist, sonst Neu-Codierung ohne Hochskalierung und mit den FPS der Quelle. Das würde auch klassischen RTSP-Kameras (und kleinen CPUs wie Raspberry Pi) zugutekommen. @pierre-gilles ich werde dir einen separaten Post mit den Details schreiben, bevor ich etwas öffne, sag mir, ob du schon eine Meinung dazu hast :slightly_smiling_face:

Danke, dass du dich wieder um Netatmo kümmerst!

Alles, was die Leistung verbessert, ist willkommen :slight_smile: Also super, wenn du Optimierungsmöglichkeiten gefunden hast.