Frage: Einbindung zoneminder

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

Vorheriges Thema - Nächstes Thema

clumsy

Hallo

Zitat von: mani am 05 November 2017, 20:39:06
glaube das ist genau das was ich suche, möchte deine Codeschnipsel für Zoneminder gerne verwenden jedoch ist mir nicht ganz klar wo ich den Perldaemon abspeichern muss ???

Der Perl-Daemon ist lediglich ein Script dass im Hintergrund laufen muss. Am besten speicherst du den dorthin wo alle anderen Start-Scripts sind (eg. unter Linux im /etc/rc.d) und startest ihn nachdem Zoneminder und fhem gestartet wurden, damit er auf beide Ports connecten kann!

Grüsse

STefan

mani

Hallo danke für  die schnelle Antwort..

also könnte ich den auch in der 99.Utils.pm abspeichern oder?

Mfg Mani
RasPi B+,Onkyo_AVR,Luxtronik2,Logo7,Mpd,Arduino Uno mit Ethernet,KNX,Jablotron

clumsy

Zitat von: mani am 06 November 2017, 09:35:15
also könnte ich den auch in der 99.Utils.pm abspeichern oder?
öhm, kann ich dir nicht so genau sage... das ist ja ein daemon der im hintergrund laufen muss... ich glaube aus dem FHEM heraus kannst du so einfach keinen hintergrund daemon starten... also ich mach das einfach eben analog dem start von fhem und zoneminder...

Grüsse

STefan

Wetterhexe

Danke @Stefan für die Codeschnipsel  :)

Dein zm2fhem script ist genau das was ich gesucht habe. Ich verwende zm schon ewig, aber irgendwie konnte ich bis jetzt nix mit dem zmtrigger anfangen  :o

lg, Christina

clumsy

Zitat von: Wetterhexe am 06 November 2017, 22:41:17
Danke @Stefan für die Codeschnipsel  :)
Dein zm2fhem script ist genau das was ich gesucht habe. Ich verwende zm schon ewig, aber irgendwie konnte ich bis jetzt nix mit dem zmtrigger anfangen  :o
cool.. freut mich... falls es verbesserungen gibt, immer gerne ;)

weini

Spannendes Thema!
Ich habe bei mir auch ZM mit FHEM integriert. Mir ging es aber ausschließlich darum, den ZM State von FHEM aus zu setzen (abhängig von meiner FHEM-basierenden PRESENCE Erkennung). Das konnte ich am Ende ohne jegliche Skripte nur via HTTPMOD lösen:

Zitat
defmod zoneMinder HTTPMOD none 0
attr zoneMinder userattr replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value set01Name set01NoArg:0,1 set01ReAuthRegex set01Replacement01Value set01Replacement02Value set01URL set02Name set02NoArg:0,1 set02Replacement01Value set02Replacement02Value set02URL set0ReAuthRegex sid1URL
attr zoneMinder enableControlSet 1
attr zoneMinder enableCookies 1
attr zoneMinder reAuthAlways 1
attr zoneMinder replacement01Mode key
attr zoneMinder replacement01Regex %%ZM_USER%%
attr zoneMinder replacement01Value ZM_USER
attr zoneMinder replacement02Mode key
attr zoneMinder replacement02Regex %%ZM_PASS%%
attr zoneMinder replacement02Value ZM_PASS
attr zoneMinder set01Name all-monitor
attr zoneMinder set01NoArg 1
attr zoneMinder set01URL http://zmserver/zm/api/states/change/all-monitor.json
attr zoneMinder set02Name all-modect
attr zoneMinder set02NoArg 1
attr zoneMinder set02URL http://zmserver/zm/api/states/change/all-modect.json
attr zoneMinder set0ReAuthRegex 401|UnauthorizedException|Not Authenticated
attr zoneMinder sid1URL http://zmserver/zm/index.php?username=%%ZM_USER%%&password=%%ZM_PASS%%&action=login&view=console
attr zoneMinder timeout 10

all-monitor und all-motdect sind als States im ZM definiert. ZM_USER und ZM_PASS müssen via SET gesetzt werden.
Natürlich muss das API beim ZM aktiviert sein und funktionieren.

clumsy

Zitat von: weini am 15 November 2017, 23:11:46
Ich habe bei mir auch ZM mit FHEM integriert. Mir ging es aber ausschließlich darum, den ZM State von FHEM aus zu setzen (abhängig von meiner FHEM-basierenden PRESENCE Erkennung). Das konnte ich am Ende ohne jegliche Skripte nur via HTTPMOD lösen.
Das mach ich ähnlich, mit den set befehlen:

attr http_zm_27 set01Data Monitor[Enabled]=$val
attr http_zm_27 set01IMap 0:0,1:1
attr http_zm_27 set01Name enable
attr http_zm_27 set01URL https://www.clumsy.ch/zm/api/monitors/%%zm_id%%.json
attr http_zm_27 set02Data Monitor[Function]=$val
attr http_zm_27 set02Map None:None,Monitor:Monitor,Modect:Modect,Record:Record,Mocord:Mocord,Nodect:Nodect
attr http_zm_27 set02Name function
attr http_zm_27 set02URL https://www.clumsy.ch/zm/api/monitors/%%zm_id%%.json

lässt sich die "Function" der Cam sowie enable/disable per set befehl setzen (analog zum ZM-Gui). Für jede Cam einzeln natürlich.

Das Script macht ja die umgekehrte Verbindung, also vom ZM zum FHEM, hauptsächlich um ZM-Motion-Event im FHEM mitzubekommen. So kann ich auf dem Tablet der Haussteuerung automatisch immer die Kamera anzeigen, welche grad Bewegung hat...

Florian_GT

Hallo,

ich habe mal eine "verbesserte Version" erstellt.

- Support von HTTPS,
- Mehr Variablen, weniger doppelte Konfiguration notwendig
- Propper Login

define zoneminder_flur HTTPMOD none 5
attr zoneminder_flur userattr get01Name get01Poll:0,1 get01PollDelay get01PollDelay:0,1 get01URL get02ExtractAllJSON:0,1 get02MaxAge get02Name get02Poll:0,1 get02URL get03JSON get03Name get03Poll:0,1 get03URL get04-1Name get04-2Name get04JSON get04Name get04Poll:0,1 get04URL readi reading02MaxAge reading02MaxAgeReplacement replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value securitycams securitycams_map set01Data set01IMap set01Name set01URL set02Data set02Map set02Name set02URL sid1URL structexclude zoneminder_flur zoneminder_flur_map
attr zoneminder_flur sslArgs SSL_verify_mode,0
attr zoneminder_flur alias Kamera - Flur
attr zoneminder_flur devStateIcon present:it_camera@0CFB0C absent:it_camera@E50005
attr zoneminder_flur enableControlSet 1
attr zoneminder_flur enableCookies 1
attr zoneminder_flur reAuthAlways 0
attr zoneminder_flur reAuthRegex .*Not Authenticated.*
attr zoneminder_flur set0ReAuthRegex 401|UnauthorizedException|Not Authenticated
attr zoneminder_flur sid01Data username=%%ZM_USER%%&password=%%ZM_PASS%%
attr zoneminder_flur sid01URL https://%%zm_host%%/zm/index.php?action=login&view=console
attr zoneminder_flur event-on-update-reading .*
attr zoneminder_flur get02ExtractAllJSON 1
attr zoneminder_flur get02Name status
attr zoneminder_flur get02Poll 1
attr zoneminder_flur get02URL https://%%zm_host%%/zm/api/monitors/daemonStatus/id:%%zm_id%%/daemon:zmc.json
attr zoneminder_flur get03JSON status
attr zoneminder_flur get03Name alarm
attr zoneminder_flur get03Poll 1
attr zoneminder_flur get03URL https://%%zm_host%%/zm/api/monitors/alarm/id:%%zm_id%%/command:status.json
attr zoneminder_flur get04-1Name enabled
attr zoneminder_flur get04-2Name function
attr zoneminder_flur get04JSON (monitor_Monitor_Enabled)|(monitor_Monitor_Function)
attr zoneminder_flur get04Name Monitor
attr zoneminder_flur get04Poll 1
attr zoneminder_flur get04URL https://%%zm_host%%/zm/api/monitors/%%zm_id%%.json
attr zoneminder_flur group camera
attr zoneminder_flur room SecurityCAM
attr zoneminder_flur icon it_camera
attr zoneminder_flur reading02MaxAge 10
attr zoneminder_flur reading02MaxAgeReplacement 0
attr zoneminder_flur replacement01Mode text
attr zoneminder_flur replacement01Regex %%zm_id%%
attr zoneminder_flur replacement01Value 1
attr zoneminder_flur replacement02Mode text
attr zoneminder_flur replacement02Regex %%zm_host%%
attr zoneminder_flur replacement02Value 192.168.99.21
attr zoneminder_flur replacement03Mode text
attr zoneminder_flur replacement03Regex %%ZM_USER%%
attr zoneminder_flur replacement03Value SUPERGEHEIMERUSER
attr zoneminder_flur replacement04Mode text
attr zoneminder_flur replacement04Regex %%ZM_PASS%%
attr zoneminder_flur replacement04Value SUPERGEHEIMESPASSWORT
attr zoneminder_flur securitycams zoneminder_home
attr zoneminder_flur set01Data Monitor[Enabled]=$val
attr zoneminder_flur set01IMap 0:0,1:1
attr zoneminder_flur set01Name enable
attr zoneminder_flur set01URL https://192.168.178.36/zm/api/monitors/%%zm_id%%.json
attr zoneminder_flur set02Data Monitor[Function]=$val
attr zoneminder_flur set02Map None:None,Monitor:Monitor,Modect:Modect,Record:Record,Mocord:Mocord,Nodect:Nodect
attr zoneminder_flur set02Name function
attr zoneminder_flur set02URL https://192.168.178.36/zm/api/monitors/%%zm_id%%.json
attr zoneminder_flur sortby 010
attr zoneminder_flur stateFormat { return "present" if ((ReadingsVal("$name","statustext", undef) =~ "running") && (ReadingsVal("$name","status",undef) eq "1"));; return "absent" }
attr zoneminder_flur timeout 5
attr zoneminder_flur verbose 5
attr zoneminder_flur userReadings presence { return "absent" if (ReadingsVal("$name","function",undef) eq "none");; \
        return "disabled" if (ReadingsVal("$name","enabled", undef) eq "0");; \
        return "present" if ((ReadingsVal("$name","statustext", undef) =~ "running.*pid = [0-9]*") && (ReadingsVal("$name","status",undef) eq "1"));; \
        return "unknown" }
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

#23
Cool, sieht gut aus, werd ich mal ausprobieren... Evtl. könnte man auch noch in den Set-Befehlen den Host mit der %zm_host%% Variable ersetzen, dann ists auch dort generisch!

vielen Dank und Gruss

Florian_GT

Zitat von: clumsy am 23 Januar 2018, 08:09:30
Cool, sieht gut aus, werd ich mal ausprobieren... Evtl. könnte man auch noch in den Set-Befehlen den Host mit der %zm_host%% Variable ersetzen, dann ists auch dort generisch!

vielen Dank und Gruss

Die wollte er nicht ersetzen, wenn du eine Lösung kennst, nur her damit ;)

Ich habe noch das Problem, das bei der Auswahl der Funktion im Set Bereich jetzt andere komische mit angezeigt werden, hab den Fehler noch nicht gefunden, aber hat jetzt auch nicht gestört bei der Funktionalität.
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

Zitat von: afloria am 23 Januar 2018, 23:34:16
Die wollte er nicht ersetzen, wenn du eine Lösung kennst, nur her damit ;)
Komisch, bei mir scheint das zu klappen...

Zitat von: afloria am 23 Januar 2018, 23:34:16
Ich habe noch das Problem, das bei der Auswahl der Funktion im Set Bereich jetzt andere komische mit angezeigt werden, hab den Fehler noch nicht gefunden, aber hat jetzt auch nicht gestört bei der Funktionalität.
Ja, sehe ich auch grad (hab das noch nie so gebraucht, sondern immer nur von der Kommandozeile aus), muss ich mir auch mal ansehen...

Florian_GT

Zitat von: clumsy am 24 Januar 2018, 07:32:25
Komisch, bei mir scheint das zu klappen...
Ja, sehe ich auch grad (hab das noch nie so gebraucht, sondern immer nur von der Kommandozeile aus), muss ich mir auch mal ansehen...

Hallo!

Ich habe eine neue Version fertiggestellt. Das Protokoll (http oder https) ist nun auch konfigurierbar. Die IP-Adressen werden nun überall automatisch ersetzt. Ich habe außerdem das Problem bei der Funktionsauswahl durch Entfernung von enableControlSet behoben.

Viel Spaß mit der Konfiguration!

PS: Wenn jemand weiß, wie man das ordentlich in ein Module gießen kann, bitte PN oder Link dazu.

######################
# ZONEMINDER IFRAMES #
######################
# 20 - Flur
define SecurityCAM_flur weblink iframe http://192.168.XXX.XXX/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

# 18 - Arbeitszimmer
define SecurityCAM_arbeitszimmer weblink iframe http://192.168.XXX.XXX/zm/cgi-bin/nph-zms?mode=jpeg&scale=100&maxfps=30&buffer=1000&monitor=18
attr SecurityCAM_arbeitszimmer htmlattr width="660" height="500"
attr SecurityCAM_arbeitszimmer room SecurityCAM

##################
# ZONEMINDER API #
##################
# 20 - Flur
define zoneminder_flur HTTPMOD none 5
attr zoneminder_flur userattr get02ExtractAllJSON:0,1 get02Name get02Poll:0,1 get02URL get03JSON get03Name get03Poll:0,1 get03URL get04-1Name get04-2Name get04JSON get04Name get04Poll:0,1 get04URL reading02MaxAge reading02MaxAgeReplacement replacement01Mode:reading,internal,text,expression,key replacement01Regex replacement01Value replacement02Mode:reading,internal,text,expression,key replacement02Regex replacement02Value replacement03Mode:reading,internal,text,expression,key replacement03Regex replacement03Value replacement04Mode:reading,internal,text,expression,key replacement04Regex replacement04Value replacement05Mode:reading,internal,text,expression,key replacement05Regex replacement05Value set01Data set01IMap set01Name set01URL set02Data set02IMap set02Name set02URL set0ReAuthRegex sid01Data sid01URL
attr zoneminder_flur alias Kamera - Flur
attr zoneminder_flur devStateIcon present:it_camera@0CFB0C absent:it_camera@E50005
attr zoneminder_flur enableCookies 1
attr zoneminder_flur event-on-update-reading .*
attr zoneminder_flur get02ExtractAllJSON 1
attr zoneminder_flur get02Name status
attr zoneminder_flur get02Poll 1
attr zoneminder_flur get02URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/api/monitors/daemonStatus/id:%%ZM_ID%%/daemon:zmc.json
attr zoneminder_flur get03JSON status
attr zoneminder_flur get03Name alarm
attr zoneminder_flur get03Poll 1
attr zoneminder_flur get03URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/api/monitors/alarm/id:%%ZM_ID%%/command:status.json
attr zoneminder_flur get04-1Name enabled
attr zoneminder_flur get04-2Name function
attr zoneminder_flur get04JSON (monitor_Monitor_Enabled)|(monitor_Monitor_Function)
attr zoneminder_flur get04Name Monitor
attr zoneminder_flur get04Poll 1
attr zoneminder_flur get04URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/api/monitors/%%ZM_ID%%.json
attr zoneminder_flur group camera
attr zoneminder_flur icon it_camera
attr zoneminder_flur reAuthAlways 0
attr zoneminder_flur reAuthRegex .*Not Authenticated.*
attr zoneminder_flur reading02MaxAge 10
attr zoneminder_flur reading02MaxAgeReplacement 0
attr zoneminder_flur replacement01Mode text
attr zoneminder_flur replacement01Regex %%ZM_ID%%
attr zoneminder_flur replacement01Value FHEMCAMERAMONITORID
attr zoneminder_flur replacement02Mode text
attr zoneminder_flur replacement02Regex %%ZM_HOST%%
attr zoneminder_flur replacement02Value 192.168.XXX.XXX
attr zoneminder_flur replacement03Mode text
attr zoneminder_flur replacement03Regex %%ZM_USER%%
attr zoneminder_flur replacement03Value FHEMUSER
attr zoneminder_flur replacement04Mode text
attr zoneminder_flur replacement04Regex %%ZM_PASS%%
attr zoneminder_flur replacement04Value FHEMPASSWORD
attr zoneminder_flur replacement05Mode text
attr zoneminder_flur replacement05Regex %%ZM_WEB_PROTOCOL%%
attr zoneminder_flur replacement05Value https
attr zoneminder_flur room SecurityCAM
attr zoneminder_flur set01Data Monitor[Enabled]=$val
attr zoneminder_flur set01IMap 0:0,1:1
attr zoneminder_flur set01Name enable
attr zoneminder_flur set01URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/api/monitors/%%ZM_ID%%.json
attr zoneminder_flur set02Data Monitor[Function]=$val
attr zoneminder_flur set02IMap None:None,Monitor:Monitor,Modect:Modect,Record:Record,Mocord:Mocord,Nodect:Nodect
attr zoneminder_flur set02Name function
attr zoneminder_flur set02URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/api/monitors/%%ZM_ID%%.json
attr zoneminder_flur set0ReAuthRegex 401|UnauthorizedException|Not Authenticated
attr zoneminder_flur sid01Data username=%%ZM_USER%%&password=%%ZM_PASS%%
attr zoneminder_flur sid01URL %%ZM_WEB_PROTOCOL%%://%%ZM_HOST%%/zm/index.php?action=login&view=console
attr zoneminder_flur sortby 010
attr zoneminder_flur sslArgs SSL_verify_mode,0
attr zoneminder_flur stateFormat { return "present" if ((ReadingsVal("$name","statustext", undef) =~ "running") && (ReadingsVal("$name","status",undef) eq "1"));; return "absent" }
attr zoneminder_flur timeout 5
attr zoneminder_flur userReadings presence { return "absent" if (ReadingsVal("$name","function",undef) eq "none");; \
        return "disabled" if (ReadingsVal("$name","enabled", undef) eq "0");; \
        return "present" if ((ReadingsVal("$name","statustext", undef) =~ "running.*pid = [0-9]*") && (ReadingsVal("$name","status",undef) eq "1"));;\
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)

spel

Hallo,

ich habe es versucht nachzuvollziehen, bin aber dran gescheitert.

Ich habe hier auch Zoneminder laufen und möchte folgende Dinge gerne mit Fhem verbinden:

- Bei Einem Alert/Event einer Kamera möchte ich dies in Fhem auswerten
- ich möchte auch gerne den Monitor-Modus einer Kamera ändern (bei Anwesenheit zB die Aufzeichnung unterbrechen usw)

Vielleicht kann es jmd. Schritt-für-Schritt erklären?

Danke!

Florian_GT

Zitat von: spel am 02 Juni 2018, 14:10:23
Hallo,

ich habe es versucht nachzuvollziehen, bin aber dran gescheitert.

Ich habe hier auch Zoneminder laufen und möchte folgende Dinge gerne mit Fhem verbinden:

- Bei Einem Alert/Event einer Kamera möchte ich dies in Fhem auswerten
- ich möchte auch gerne den Monitor-Modus einer Kamera ändern (bei Anwesenheit zB die Aufzeichnung unterbrechen usw)

Vielleicht kann es jmd. Schritt-für-Schritt erklären?

Danke!

Hallo,

die Daten werden von dem Zoneminder Server alle paar Sekunden, bzw. je nachdem, was du konfiguriert hast abgefragt. Dabei wird u. a. auch der alarm Status abgefragt. Damit ein Alarm in Zoneminder erkannt wird, musst du die Kamera mind. im Detect Modus ausführen, wenn ich mich nicht irre. "alarm" wird dann auf 1 geändert, sollte Zoneminder einen alarm ausgelöst haben. Wie du dir nun aber denken kannst, ist es nicht die beste Methode, Zoneminder alle paar Sekunden abzufragen. Ich arbeite gerade daran, mal zu prüfen, in wiefern z.B. Zoneminder und MQTT miteinander arbeiten können. Dann kann man nämlich die Abfragerei lassen, und Zoneminder meldet sich selbst, wenn etwas erkannt worden ist.

Wenn du mein Beispiel benutzt hast, kannst du die Kameras je nach Anwesenheit so steuern:
# SecurityCAM aktivieren wenn nicht Zuhause
define notify_zoneminder_homestate_on notify rgr_Bewohner:(absent|gone) { \
        fhem "set zoneminder_flur enable 1";; \
fhem "set zoneminder_flur function Modect";; \
}

# SecurityCAM deaktivieren wenn Zuhause
define notify_zoneminder_homestate_off notify rgr_Bewohner:(home) { \
        fhem "set zoneminder_flur enable 1";; \
fhem "set zoneminder_flur function Monitor";; \
}

# SecurityCAM deaktivieren wenn im Schlaf
define notify_zoneminder_homestate_sleep notify rgr_Bewohner:(gotosleep) { \
fhem "set zoneminder_flur function None";; \
        fhem "set zoneminder_flur enable 0";; \
}
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)

spel

Danke!!

Wie kann ich einzelne Alerts abfragen?

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