Frage: Einbindung zoneminder

Begonnen von deune, 02 März 2015, 17:41:16

Vorheriges Thema - Nächstes Thema

Florian_GT

Zitat von: spel am 05 Juni 2018, 09:07:57
Danke!!

Wie kann ich einzelne Alerts abfragen?

Möchte, wenn Zoneminder zB Bewegung erkannt hat, zB eine Telegram Nachricht verschicken!

Die würde ich nicht per Web-API abfragen. Das macht man so nicht. Ich arbeite gerade noch an einer besseren Alternative. Ein Perl Deamon der auf dem Zoneminder Server mit läuft, und den Alarm Status per MQTT meldet. Sprich wann Alarm und wann Ende. Ich könnte mir auch vorstellen, dass dann später so zu erweitern, dass man alles darüber machen kann.
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

clumsy

du kannst sonst auch das perl-script von hier https://forum.fhem.de/index.php/topic,34570.msg612182.html#msg612182 nehmen, das benutzt den Zoneminder Eventdeamon und meldet ereignise in echtzeit direkt dem FHEM...

Florian_GT

Zitat von: clumsy am 08 Juni 2018, 19:44:34
du kannst sonst auch das perl-script von hier https://forum.fhem.de/index.php/topic,34570.msg612182.html#msg612182 nehmen, das benutzt den Zoneminder Eventdeamon und meldet ereignise in echtzeit direkt dem FHEM...

Ich habe eine erste Beta, siehe Anhang. Die sendet schon mal, was uns so interessiert. Wenn jemand Zeit hat, ein Empfang Teil wäre nice, würde ich dann nach meinem Urlaub weiter dran arbeiten.
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Spezialtrick

Zitat von: afloria am 09 Juni 2018, 16:36:02
Ich habe eine erste Beta, siehe Anhang. Die sendet schon mal, was uns so interessiert. Wenn jemand Zeit hat, ein Empfang Teil wäre nice, würde ich dann nach meinem Urlaub weiter dran arbeiten.

Kannst du mir ein paar Informationen geben, wie es zu testen ist. Habe großes Interesse an der Zoneminder Einbindung in Fhem.  :)
FHEM - Debmatic - Zigbee2MQTT - Homekit

Florian_GT

Zitat von: Spezialtrick am 12 Juni 2018, 17:45:11
Kannst du mir ein paar Informationen geben, wie es zu testen ist. Habe großes Interesse an der Zoneminder Einbindung in Fhem.  :)

Ich werde die kommenden Tage wenn Zeit ist, eine Anleitung im Wiki Schreiben. Echt klasse, der MQTT Client gibt eine Info an FHEM und dann läd FHEM das Bild runter und schickt es mir per Telegram :D
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

inesa394

Würde mich auch brennend interessieren suche schon lang eine Möglichkeit Zoneminder in Fhem zu integrieren.

delMar

Hallo zusammen,

ich bin wohl nicht der Einzige, der ZM events gerne in fhem auswerten würde.
Hier mein Ansatz:
fhem selber kann auf den event port 6802 horchen, es ist kein eigenständiger prozess dafür nötig.

Im Anhang meine Implementierung.
zb per define zm ZoneMinder 192.168.4.200 wird die Verbindung zu ZoneMinder als physisches device angelegt.
Wird ein event empfangen, wird automatisch ein logisches device angelegt (ZM_Monitor).

Auf diesem gibt's dann drei readings:

  • alert: on|off
  • lastEventId: event ID aus Zoneminder
  • lastEventTimestamp: timestamp des letzten events
Auf alert:.on kann man dann ganz einfach ein notify setzen.

Weitere (zum Teil schon getestete) Features, die ich einbauen werde:

  • wenn username und passwort vergeben werden, kann man auch zB Kamera Modi ändern (modect, ...) oder enable/disable setzen
  • wenn auth_hash_secret in ZoneMinder gesetzt ist, kann auch der auth hash berechnet werden, mit dem Kamera-Stream URLs nach außen gegeben werden können, ohne username und passwort preiszugeben und die auch max 2 h gültig ist
  • Am Kamera-Device screen in FHEM kann direkt in FHEM das Bild gestreamt werden. Auf Wunsch auch in der Room-View (nützlich, um mehrere Bilder gleichzeitig zu zeigen)

Ich hab in diesem Thread viel gelernt und bedanke mich somit herzlich bei allen Vor-Postern.

Feedback und Fragen sind natürlich willkommen!

schöne Grüße
Martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

clumsy

@delmar: tönt gut, sobald die features da sind und ich etwas zeit habe, werde ich gerne mal mittesten!

Florian_GT

Nette Lösung, deutlich besser als mein Daemon, der dann die Nachrichten an MQTT schickt und dann erst weiter an FHEM.

Wenn Zoneminder mal Down ist, wie reagiert das Module dann? Keine waitings in Fhem?

Es gibt noch weitere Nette Daten, die man da von FHEM bekommen kann, z.B. state active oder trigger_state, falls getriggert worden ist.
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

delMar

Zitat von: afloria am 24 August 2018, 19:10:31
Nette Lösung, deutlich besser als mein Daemon, der dann die Nachrichten an MQTT schickt und dann erst weiter an FHEM.

Wenn Zoneminder mal Down ist, wie reagiert das Module dann? Keine waitings in Fhem?

Es gibt noch weitere Nette Daten, die man da von FHEM bekommen kann, z.B. state active oder trigger_state, falls getriggert worden ist.
Danke. MQTT find ich trotzdem sehr spannend; speziell wenn man von einem System Infos an mehrere andere weitergeben möchte.

Wenn ZoneMinder down ist, hat das grundsätzlich keinen Einfluss, weil fhem ja nicht aktiv nach events pollt.
Ich arbeite aber auch schon an der Abfrage einiger ZM APIs.
Das könnte theoretisch ein Problem sein, ich arbeite aber ausschließlich mit non-blocking calls.

Ja, es gibt noch jede Menge interessante Daten. Ganz richtig.
Ich hoffe, übers Wochenende ein Update bringen zu können.
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

delMar

Bitte kurz um euren Input:
Bei mir ist das ZM Web UI über /zm erreichbar, Streaming aber über /zoneminder (der Wert kommt aus PATH_ZMS im Tab 'Paths' in den Settings).
Wie ist das bei euch?
Gleich oder auch unterschiedlich, wie bei mir?

Danke!
schöne grüße
martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

Florian_GT

#41
Zitat von: delmar am 24 August 2018, 19:30:26
Bitte kurz um euren Input:
Bei mir ist das ZM Web UI über /zm erreichbar, Streaming aber über /zoneminder (der Wert kommt aus PATH_ZMS im Tab 'Paths' in den Settings).
Wie ist das bei euch?
Gleich oder auch unterschiedlich, wie bei mir?

Danke!
schöne grüße
martin

Bei mir ist Zoneminder auch über /zm/ erreichbar. Der Stream über http://192...../zm/cgi-bin/nph-zms?mode=jpeg&scale=100&maxfps=30&buffer=1000&monitor=15&connkey=573935&rand=1535140873

Ich habe dir mal meine Zoneminder to MQTT Lösung im Anhang hinzugefügt, kannst du ja gut als Informationsquelle nutzen, ich habe viele Datenpunkte später auskommentiert, weil es diese zwar gibt, aber am ende nicht verfügbar sind.

Bei der Abfrage der ZM Api meinst du damit den offenen Port oder die Web Api? Von einer Nutzung der Web Api kann ich nur abraten, das Zonemindersystem kommt damit nicht zurecht. Das hatte ich mal hier im Thread gezeigt: https://forum.fhem.de/index.php/topic,34570.15.html

Hier wie ich den Stream in FHEM einbinde:

# 20 - Flur
define SecurityCAM_flur weblink iframe http://192....../zm/cgi-bin/nph-zms?mode=jpeg&scale=100&maxfps=30&buffer=1000&monitor=20
attr SecurityCAM_flur htmlattr width="1300" height="740"
attr SecurityCAM_flur room SecurityCAM


IPCAM Module verwende ich dann, damit ich das Bild herunterladen, und mir per Telegram schicken lassen kann:
define zoneminder_ipcam_21 IPCAM 192.1.....
attr zoneminder_ipcam_21 snapshots 1
attr zoneminder_ipcam_21 path /zm/cgi-bin/nph-zms?mode=single&monitor=21
attr zoneminder_ipcam_21 storage /opt/fhem/data/IPCAM


Hier der Auslöser, der das Bild dann verschickt:
define notify_zoneminder_alert notify zoneminder_mqtt_.*:(STATE_ALARM) {\
  my $ipcam_id = ReadingsVal($NAME, "id", "none");;\
  fhem "get zoneminder_ipcam_$ipcam_id image";;\
  fhem "set telegram message security camera detected motion: $NAME - [$NAME:name] ($EVENT)";;\
  fhem "set telegram sendImage /opt/fhem/data/IPCAM/zoneminder_ipcam_[$NAME:id]_snapshot.jpg Roter-Alarm:";;\
}


Deine Lösung ist insofern besser, weil mein Perl Daemon nur alle Sekunde auf einen neuen Alarm pollt. Dein lauschen geht somit um ca. 1s schneller und belastet die CPU weniger, auch wenn das Auslesen nur im RAM stattfindet. Beide Lösungen sind jedenfalls besser als das Pollen der Webapi. Dann hat die CPU richtig zu tun...
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

Wetterhexe

mein ZM WebUI ist über /zm erreichbar (default)
streaming entsprechend PATH_ZMS (default): /zm/cgi-bin/nph-zms

@delmar: Danke Martin für die beiden Module, laufen bei mir problemlos! Stehe jederzeit für Tests etc. zur Verfügung :)

Florian_GT

Zitat von: Wetterhexe am 24 August 2018, 23:45:38
mein ZM WebUI ist über /zm erreichbar (default)
streaming entsprechend PATH_ZMS (default): /zm/cgi-bin/nph-zms

@delmar: Danke Martin für die beiden Module, laufen bei mir problemlos! Stehe jederzeit für Tests etc. zur Verfügung :)

Ich schließe mich an. Teste gerne. Schreibe auch gerne an Module mit, dafür müsste man aber erstmal Ideen für Funktionen sammeln. Ein Github Repo dafür wäre für den Anfang aber sicherlich gut, nach 1-2 Monaten Testzeit dann ins SVN?
FHEM: Proxmox Server, FHEM in VM, pgSQL DB
Hardware: Ethersex (Pollin NETIO Boards), Diverse Tasmota MQTT Devices, Raspberry Pi Zero W Kameras, (Github RaspberryPiStreamingCamera), Zigbee2MQTT, ESPEasy

Development: UBA (Umwelt Bundesamt), BFS (Bundesamt für Strahlenschutz)

delMar

#44
Das rege Interesse freut mich sehr, danke!

Update:

Zusätzlich zur bisherigen Definition können nun <username> <passwort> für ZM hinterlegt werden.
Damit kann sich fhem an der API anmelden, um weitere parameter wie ZM_AUTH_HASH_SECRET oder ZMS_PATH auszulesen.
define zm ZoneMinder 192.168.4.200 zmuser zmpass
Das ZoneMinder device hat in der Detail-Ansicht oben nun einen Link zum direkten Öffnen des ZoneMinder UI.

Außerdem kann man danach noch optional einen weitern Parameter für die Web-URL eintragen, sollte das ZM-Web-UI nicht über http://hostname/zm erreichbar sein. Beispiel:
define zm ZoneMinder 192.168.4.200 zmuser zmpass https://192.168.4.200/myzoneminder
Das ist wichtig, damit sich das Modul an der ZoneMinder API anmelden kann.
Falls es nicht funktioniert, sollte in den Internals ein HTTP-Code stehen.

Im ZM_Monitor Device sollte nun außerdem der live-stream sichtbar sein.
Wahrscheinlich wird dieser aber nur im LAN verfügbar sein (außer, man hätte beim Anlegen des devices eine public IP angegeben). Deshalb kann man hier nun ein Attribut definieren.
Beispiel:
attr ZM_Monitor_5 streamUrl https://my.comain.com:8443/
Daran wird dann der Wert aus ZMS_PATH angehängt.
Außerdem wird der Live-Stream mit dem auth-hash gebildet, nicht mit username und passwort. kann also eigentlich ohne bedenken auch nach außen gegeben werden, ohne dass credentials sichtbar wären. somit ist diese URL maximal 2h gültig.

Das ganze sollte funktionieren, wenn username und passwort vergeben werden.
Hab's ohne jetzt offen gestanden noch nicht getestet. Könnte sein, dass da noch ein- zwei Fehlermeldungen im Log auftauchen.
Die drei hier dokumentierten zusätzlichen Parameter funktionieren bei mir aber soweit ganz gut.
Aber wie gesagt: rechnet damit, dass die Fallbacks bei falschen Parametern noch nicht ganz so einwandfrei arbeiten :-)

bei Problemen bitte Log-outputs bzw list <zm-device-name> oder list zm_monitor-device-name posten.

Achja: und man benötigt jetzt zwei Crypto libs, damit die Hashes für den Auth-Hash direkt berechnet werden können.
Eine, um den mysql-passwort hash aus dem passwort zu berechnen. der fließt in den auth-hash ein.
und die zweite crypto-lib berechnet den auth-hash selber.

Der Code ist jetzt noch sehr unordentlich, ich hab noch weitere halb-fertige Dinge drin und haufenweise auskommentierten Code.
Mir ist es jetzt aber wichtiger, schnelles Feedback zu kriegen, als super sauber zu arbeiten.
Wenn ich wieder ein paar Stunden am Stück Zeit habe, lege ich das dann in GitHub ab, ganz klar.

schöne grüße
martin
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.