Dev-Integration für Zoneminder

Hallo,

Ich bin gerade dabei, eine Integration zu entwickeln, die die APIs von Zoneminder (Open-Source-Videoüberwachungssoftware, die auf beliebigen Kameras basiert) nutzt.

Bei Gladys V3 hatte ich ein selbst entwickeltes Modul auf Basis von SSH, das einen Perl-Befehl ausführte – also nicht besonders sauber … aber es funktioniert immer noch heute, um die Videoüberwachung zu aktivieren/deaktivieren, je nachdem, ob wir nach Hause kommen oder es verlassen.
Daher benötige ich für die Migration zu V4 dringend diese Lösung.

Ein kleiner Einblick:

Ich habe das schnell zusammengestellt, denke aber, dass ich zunächst eine Eigenbau-Version erstellen werde.

Daher poste ich das hier, falls noch jemand ZM nutzt und es in Gladys integrieren möchte …
Ich habe herausgefunden, dass ZM viele APIs bereitstellt, aber ich beschränke mich derzeit darauf, eine Kamera in Modect oder Monitor zu versetzen. In Zukunft könnte man jedoch noch viel mehr tun …

Hallo sympa Integration, bedeutet das, dass das Bild im Dashboard aktualisiert wird?

Nein, im Moment habe ich nicht geschaut, wie man ein Bild in das Dashboard integriert. Danach könnte es eine Doppelfunktion mit der Box Kamera anzeigen geben, die bereits verfügbar ist.

Genau, du kannst eine Kamera hinzufügen und ein Bild zu dieser Kamera hinzufügen und die Box wird funktionieren.

Absolut, das ist wirklich eine richtig coole Integration!

Zögere nicht, dich bei mir zu melden, falls du Hilfe brauchst, @Jean-Philippe, um das mit der Box „Kamera anzeigen“ zu integrieren :slight_smile:

@damalgos Ja, ich dachte, ich hätte das gesehen, als ich den Typ CAMERA eingestellt hatte
Das Problem ist, dass die zugehörigen Features besonders sind (wie die Nutzungsart, Erkennung, passiv usw.), sodass ich für einen umschaltbaren Modus ein Feature-Typ SWITCH verwendet habe. Allerdings ist die Kategorie nicht dieselbe, sodass in der Box überall „undefined“ und keine Icons angezeigt wurden.
In diesem Fall könnte ich vielleicht Feature-Typen für die Kategorie CAMERA hinzufügen?

Was ist denn jetzt der schaltbare Modus?
Aber ja klar, wenn man noch etwas hinzufügen muss, dann füge es hinzu :wink:

Für das Bild hängt es davon ab, was die API dir liefern kann. Sie kann dir vielleicht einfach eine URL geben und dann bist du fertig (einfach das Gleiche machen wie beim Kameramodul). Wenn sie dir aber zum Beispiel ein JPEG schickt, kannst du es so machen:
Gladys/server/services/netatmo/lib/update/netatmo.updateCamera.js at netatmo · thibautmery/Gladys · GitHub (Netatmo-Integration, es gibt einen Teil, in dem das Bild heruntergeladen und hinzugefügt wird)

Genau :slight_smile: Wenn deine Kamera zusätzliche Funktionen unterstützt, kannst du neue Feature-Typen erstellen.

In Gladys v4 versuchen wir, etwas Einheitliches zu haben, unabhängig vom Modell, der Marke oder der Technologie, sodass das Verhalten überall generisch ist.

Beispiel hier: Wenn du deinen Zoneminder-Kameras den Gladys-Kamera-Typ zuweist, bedeutet das, dass wir nativ Sätze in Telegram wie „zeige mir die Kamera im Wohnzimmer“ sowie die Anzeige auf dem Dashboard verwalten können.

ok, ich werde in diese Richtung gehen, ich werde mir ansehen, was das netatmo-Modul macht, dann muss ich schauen, ob ich das Bild über zoneminder abrufen kann.

Was die Modi betrifft, der erste Anwendungsfall ist, dass eine Kamera (oder ein Monitor, da man mehrere Monitore derselben Kamera für verschiedene Anwendungen haben kann) in mehreren Modi sein kann, zum Beispiel:

  • Bewegungsmelder mit Aufzeichnung bei Erkennung
  • Einfache Wiedergabe ohne Aufzeichnung
  • Wiedergabe mit kontinuierlicher Aufzeichnung
  • Und andere Modi, die ich nicht verwende

Ich möchte also in der Lage sein, in der minimalen Verwendung des Moduls diesen Modus zu ändern. Wenn wir zu Hause sind, schalten wir auf Einfache Wiedergabe, und wenn das Haus leer ist, auf Erkennung.

Schnell habe ich das gesehen: wget "http://yourserver/cgi-bin/zms?mode=single&monitor=1&user=xxx&pass=yyy" -O foo.jpg
Also ist es möglich, dass du das Bild abrufen kannst und dann wie ich es bei netatmo gemacht habe :slight_smile:

Es funktioniert tatsächlich, das Passwort wird nicht einmal überprüft :shushing_face:

Man muss die Authentifizierung in ZoneMinder aktivieren, standardmäßig ist es offen für alle.

Das ist normalerweise der Fall, ich weiß nicht genau, was passiert … also, mein ZM ist nicht im Internet geöffnet, das ist nicht so schlimm.

@damalgos ich habe deine Netatmo-Integration angesehen, ich versuche zu verstehen, wie Gladys die Aktualisierung des JPG anfordert?
Ich plane nicht, das Bild in regelmäßigen Abständen auf der Serverseite zu pollen, ich dachte, das Bild sollte angefordert werden, wenn der Benutzer das Dashboard anfordert, oder? In diesem Fall, wie erfolgt die Anforderung vom Frontend zum Backend?

Edit 1:
Ok, ich sehe in server/lib/device/camera/camera.getImage.js:

return Promise.resolve(deviceFeature.last_value_string);

Edit 2:
Soll ich eine Poll-Frequenz für die Bildfunktion einstellen ..?

Edit 3:

Alles klar, ich habe es gefunden ^^

Gut, ich komme voran, ich habe die passenden Kategorien hinzugefügt, ich habe mein Bild auf dem Dashboard.

Allerdings, da ich ja Kategorien hinzufüge, habe ich auch Folgendes hinzugefügt:

CAMERA: {
    IMAGE: 'image',
    MODE: 'mode',
    MOTIONS: 'integer',
    POWER: 'power'
}

MODE = der Modus der Kamera (Bewegungserkennung, Daueraufnahme, etc.)
MOTIONS = die Anzahl der erfassten Ereignisse (schreibgeschützt)
POWER = ob die Kamera an oder aus ist (hier aus Sicht von Zoneminder)

Gut, aber auf der Box-Seite sehe ich das Folgende:

// vorerst unterstützen wir nur binär ein/aus und Sensoren
if (feature.read_only || SUPPORTED_FEATURE_TYPES.includes(feature.type)) {
     roomDeviceFeatures.push(featureOption);
}

Daher kann ich den Zustand oder den Modus der Kamera im Dashboard nicht ändern.
Ebenso hatte ich anfangs getestet, den Modus als SWITCH-Typ einzustellen, aber es ist nicht ideal zu wissen, dass 1 = Aufnahme, 2 = Überwachung, etc.

Daher, wie kann ich einerseits ein Dropdown-Menü mit den vorgeschlagenen Modi im Dashboard haben? Ich denke, das ist noch nicht vorgesehen / codiert / begonnen?

Aber kann ich das trotzdem in einer Szene verwalten?

Auf der model-Seite sind min und max in der Funktion obligatorisch. Bedeutet das, dass ein numerischer Wert immer gespeichert werden muss und dass die Zuordnung auf der Integrationsseite erfolgen muss?

Edit:
Ich habe den Alarmzustand von Zoneminder hinzugefügt, d. h. ob die Kamera aufgrund einer Eindringlingserkennung im Alarmzustand ist.
Und ich habe nachgeschaut, welchen Kategorie-Typ ich verwenden soll. Auf der Box-Seite (SensorDeviceFeature.js) sehe ich, dass der Rendering-Vorgang standardmäßig erfolgt, wenn es sich nicht um einen Bewegungs-, Anwesenheits- oder Öffnungssensor handelt.

<td>{props.deviceFeature.name}</td>
    {SPECIAL_SENSORS.indexOf(props.deviceFeature.category) === -1 && (
      <td class={cx('text-right', { 'text-nowrap': props.deviceFeature.last_value !== null })}>
        {props.deviceFeature.last_value !== null && props.deviceFeature.last_value}
        {props.deviceFeature.last_value === null && <Text id="dashboard.boxes.devicesInRoom.noValue" />}
        {props.deviceFeature.last_value !== null && (
          <span>
            {' '}
            <Text id={`deviceFeatureUnitShort.${props.deviceFeature.unit}`} />
          </span>
        )}
      </td>
    )}

Gibt es einen dedizierten Typ für den Alarm (allgemein)? Ich habe eine Kategorie « Siren » gesehen. Ich warte auf euer Feedback, bevor ich mit meiner Klassifizierung weitermache.

@pierre-gilles

:heart_eyes: :heart_eyes: :heart_eyes:

Ich sehe den Nutzen, wenn du nicht zu Hause bist, über Telegram, starte meinen OpenVPN, den Browser, gehe zur Zoneminder-Oberfläche…

Ja, das ist normal, in dieser Box werden nur die Geräte angezeigt, die wir in der UI verwalten können :slight_smile: Danach hindert nichts daran, im Frontend eine neue Komponente hinzuzufügen, um einen neuen Gerätetyp zu verwalten!

Jede Geräteanzeige im Frontend wird hier verwaltet: Gladys/front/src/components/boxs/device-in-room/device-features at master · GladysAssistant/Gladys · GitHub

Du musst eine Frontend-Komponente erstellen, die das macht :slight_smile:

In Gladys 4 vermeiden wir « super generische » Komponenten (außer wenn sie zwischen Integrationen faktorisiert werden können), um stattdessen wirklich angepasste Komponenten zu erstellen, die im Code definiert sind (und nicht in der Datenbank). Das ermöglicht:

  • Übersetzungen (da Gladys in mehreren Sprachen verfügbar ist)
  • Dass das Verhalten dieser Komponenten versioniert und getestet wird (wir verwenden Cypress für Frontend-Tests)

Also, es wäre eine Komponente « Dropdown-Liste » mit mehreren Zuständen, speziell für die Zoneminder-Integration, einverstanden?

Gleiches gilt, du musst diese Komponente mit den Werten, die du möchtest, zur Szenensteuerungsaktion und zum Szenenauslöser hinzufügen

Beispiel: Gladys/front/src/routes/scene/edit-scene/triggers/DeviceFeatureState.jsx at master · GladysAssistant/Gladys · GitHub

Hinweis: Es mag viel Arbeit zu sein scheinen, aber das ist die Philosophie der v4: Wir nehmen uns Zeit, um die Dinge richtig zu machen, und bevorzugen ein Produkt, das dem Entwickler etwas mehr Arbeit abverlangt, damit das Nutzererlebnis am Ende das beste ist :slight_smile:

Alarm wovon? Ich glaube nicht. Siren ist nur eine Außensirene (du weißt schon, die Boxen, die Lärm machen)

Fantastisch!! :heart_eyes:

Übrigens, hast du Gladys Plus für den Fernzugriff schon getestet? Es ist Ende-zu-Ende verschlüsselt, und ich habe kürzlich eine kostenlose Testversion von 14 Tagen hinzugefügt, falls du es testen möchtest :slight_smile:

Ich werde schauen, wie ich die Komponente in der Frontend-Logik hinzufügen kann, um das zu verwalten.

Was den Alarm betrifft, dachte ich an Überwachungsalarme, die auslösen, wenn ein Dieb einbricht :smiley:
In meinem Fall, wenn meine Kamera eine Bewegung erkennt, schaltet sie in den „Alarm“-Modus und sendet mir über meine Gladys3-Instanz eine Benachrichtigung.

Für Gladys Plus habe ich es nicht auf Gladys4 getestet, aktuell läuft meine Instanz einfach nur in der Entwicklung auf meinem PC, ich werde es testen, wenn ich umstelle :wink:

Wir haben noch keine native Alarmverwaltung, ich möchte etwas wirklich Sauberes im „Aktivieren/Deaktivieren“-Modus für dein Zuhause mit einer schönen UI und Triggern/Aktionen in den Szenen, um auf diesen Zustandswechsel reagieren zu können (WENN Bewegung UND Alarm aktiviert DANN…)

Aber ich denke, dass du dich in der Zwischenzeit mit einem anderen binären Typ (0/1) behelfen kannst, das wird die Arbeit erledigen, bis es soweit ist :slight_smile:

Du kannst die Funktion hier upvoten, wenn du sie in Gladys sehen möchtest:

Cool, zögere nicht, dich zu diesem Zeitpunkt zu melden, wenn du Fragen hast, wir können uns Zeit nehmen, damit alles richtig konfiguriert ist, es gibt viele Möglichkeiten mit Gladys Plus und ich versuche, die Installation so weit wie möglich zu unterstützen!

Ich habe in der Integration rtsp-camera gesehen, dass man eine Box zum Dashboard hinzufügen kann.
Aber ist es möglich, über eine Integration Funktionen zu Geräten hinzuzufügen, die von der Box Gerät eines Raums aus nutzbar sind, um das Hinzufügen einer dedizierten Box zu vermeiden?

Auf jeden Fall! :slight_smile: Wenn du ein neues Paar (Kategorie + Typ) für ein Gerät erstellst, ist es durchaus möglich, dieses neue Paar in der Box « Raumgerät » zu verwalten.

Welche Art von Steuerung schwebt dir vor?