Neues Modul: 70_ZoneMinder, 71_ZM_Monitor

Begonnen von delMar, 07 Oktober 2018, 18:45:04

Vorheriges Thema - Nächstes Thema

delMar

Das mit Event per API auslesen würde gehen

Zitat von: linusd am 06 Januar 2019, 08:08:47
Meine Vorschläge:

  • Die bereitgestellten kommaseparierten Zonen in einem Reading einfach ausgeben.
  • In einem map-Aufbau alle definierten Zonen mit dem jeweiligen Status [alert/idel] aufbereiten
  • Jede Zone erhält ein eigenes Reading und wird mit den jeweiligen Status versehen.
Hier sehe ich nur die erste Option als realistisch machbar, weil:
Ich krieg von ZM ein event, wo die betroffenen Zonen aufgelistet sind. Die kann ich gern in ein Reading schreiben.
Ob eine Zone jetzt alerted ist oder nicht, müsste ich selber tracken, denn:

Ich bezweifle auch, dass ZM ein Update schickt, wenn erst zone1 alertet wurde und zone2 dann 10 Sekunden später auch eine bewegung erkennt. Der monitor is ja schon im Alarmstate.
Oder kommt dann eine neue event ID rein, wo beide Zonen drin stehen?

Wenn dir mit Option 1 geholfen ist, schau ich mir das gern mal an.

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.

linusd

Die hier enthaltenen Zonen haben alle eine Bewegung erkannt und sind somit gemeinsam Auslöser dieses Events.
Da ich in der API-Doku auf die Schnelle leider keine Möglichkeint gefunden habe alle definierten Zonen des jeweiligen Monitors auszulesen,
sehe ich derzeit auch nur Variante 1 als realistisch an.

Damit würdest Du mir auf jeden Fall schon weiterhelfen.

Gruß
Christian

delMar

Hi Christian,

auf https://github.com/delmar43/FHEM findest du ein Update für die beiden ZoneMinder Files.
Immer, wenn ein Event-Update per Trigger reinkommt, werden die Details zu diesem Event geholt.

Die Zonen werden im Attribut 'Notes' übergeben.
Da ich (und auch sonst niemand) derzeit keine weitere Verwendung für alle diese Event Details hat, schreibe ich derzeit ein Reading mit Namen 'lastEventNotes'. Dort steht dann bei mir zB drin

Motion: Asphalt, Pflaster

Triggere ich einen Alarm aber zB Manuell aus FHEM, sieht das ganze Reading so aus:

fhem:

Also komplett anders.
Bei einem "Force Alarm" aus der ZM-Console:

Forced Web:


Das ist der Grund, warum ich das jetzt auch garnicht auf die Zonen spezialisieren möchte, so wie du dir das wünschst, sondern lieber ein ganz generisches 'Notes' Reading einführen würde.

Das einzige, was dir daran wahrscheinlich nicht gefällt, ist, dass immer noch "Motion: " vorne dran steht.

Aber probier bitte mal aus, ob die Änderung bei dir überhaupt funktioniert, dann können wir gerne weitere Details klären

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.

linusd

Moin Martin,

ich weiß das auch sehr zu schätzen, dass Du Dir die Arbeit auch ohne eignen/weiteren Bedarf gemacht hast.
Das passt so absolut, da ich mit eigenen Funktionen das Reading verarbeiten kann.
Mit einer Splitt-Funktion lässt sich das ja gut zerlegen und dann konvertieren/weiterverarbeiten.

Ich werde spätestens am WE Deine Ergänzung ausprobieren und ein Feedback geben.

Gerne werde dann auch meine Realisierung hier bereitstellen.
Evtl. findet der Eine oder Andere, neben mir, dann doch Anwendung für meine Anforderung in seinem Projekt.  ;)

Danke & Gruß
Christian

delMar

Zitat von: linusd am 15 Januar 2019, 09:38:05
Evtl. findet der Eine oder Andere, neben mir, dann doch Anwendung für meine Anforderung in seinem Projekt.  ;)

Absolut. Mit diesen Daten könnte man Events noch schöner Visualisieren, wie zB auf Tablet UI die Events auflisten, während man nicht zuhause war, etc. (Pfad zu den Images, Timestamps, etc).

Was ich noch vergessen habe:
Wenn nur eine Zone beim Alert On betroffen ist, während des events dann aber noch eine weitere, dann werden bei der zweiten abfrage (die durch alert off getriggert wird), beide zonen geliefert.
Da das Event aber an den Monitor gebunden ist, nicht an der Zone, kriegt man die zweite Zone nicht mit.
Dh wenn deine Trigger-Zone erst als zweite in einem Event auftaucht, wird FHEM das erst beim Event-Ende mitbekommen

Das Verhalten hab ich jetzt definitiv auch so verifiziert.

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.

linusd

#35
Hallo Martin,

ich habe die Funktion jetzt seit ungefähr 2 Wochen erfolgreich im produktiven Einsatz um Pushover-Nachrichten zu erzeugen und das Licht an der Haustür zu steuern.
Den Aufbau der Nachricht habe ich zu Demonstrationszwecken angehängt.

Das erzeugen des Nachrichtentextes habe ich ausgelagert, da ich mehrere Kameras im Einsatz habe.

#--------------------------------------------------------------
# Erzeugt den Nachrichtentext auf Basis der Zoneninformation
sub
genZMMessage {
   my ($dZone, $dMMessage) = @_;
   my @initZoneArray = split(":",$dZone);
   my @zoneArray = split(", ",$initZoneArray[1]);
   my $message = "Es wurd ein Ereignis";

   if ( $initZoneArray[0] eq "Motion" ) {
     $message = $message . $dMMessage . "<br><i>In den Zonen:</i><b>";
     foreach my $zone (@zoneArray) {
       $message = $message . "<br> - " . $zone;
     }
     $message = $message . "</b>";
   } elsif ( $initZoneArray[0] eq "fhem" ) {
     $message = $message . " über <b>fhem</b> ausgelöst.";
   } elsif ( $initZoneArray[0] eq "Forced Web" ) {
     $message = $message . " <b>manuell</b> über <b>Zoneminder</b> ausgelöst.";
   }
   return $message;
}


Notify einer Kamera der bei Auslösen der Kamera entsprechende Aktionen ausführen wird.
Da ich im Außenbereich noch keinen Helligkeitssensor im Einsatz habe, behelfe ich mir noch mit <myTwilight>.

#-------------------------------------------------------------
define notifyZmPushoverAlarmEO notify zm_EO:lastEventNotes:.* {\
my $wetter = ReadingsVal("zmWetter","state",0);;\
my $aImage = ReadingsVal("zm_EO","eventImageUrl",0);;\
my $aStream = ReadingsVal("zm_EO","pubEventStreamUrl",0);;\
my $aState = ReadingsVal("zm_EO","alert",0);;\
my $aZone = ReadingsVal("zm_EO","lastEventNotes",0);;\
my $title = "Eingang-Ost";;\
my $message = " am Eingang oder der Auffahrt aufgezeichnet.";;\
    $message = genZMMessage($aZone,$message);;\
my $pattern = qr/Eingang/;;\
\
my $time = strftime('%H:%M:%S', localtime);;\
my $sr_civil = ReadingsVal("myTwilight","sr_civil",0);;\
my $ss_civil = ReadingsVal("myTwilight","ss_civil",0);;\
\
if (($aState eq "on") && ($aZone)) {\

   if (($time le $sr_civil) || ($time ge $ss_civil)){\
      fhem "set zmPushover msg title=$title $message attachment=www/snapshots/cam1/Eingang_Ost_snapshot.jpg priority=1 url_title=Aufzeichnung action=$aStream expire=3600";;\

      if (($aZone =~ /$pattern/) && ($wetter eq "off")) {\
        fhem "set <LICHT> on";;\
      }\

    } else {\
      fhem "set zmPushover msg title=$title $message attachment=www/snapshots/cam1/Eingang_Ost_snapshot.jpg url_title=Aufzeichnung action=$aStream expire=3600";;\
    }\
  }\
}


Wunsch:
Und hier kommt auch schon ein weiterer Wunsch.  ;D
Damit ich einen halbwegs aktuellen Screenshot mitschicken kann muss ich mit  IPCAM und einem AT alle 2 Sekunden ein Bild holen.
Wäre es evtl. möglich über eventImageUrl optional auch direkt das Bild herunterzuladen und auf der Platte abzulegen?

Hinweis:
Der notify muss auf <lastEventNotes> horchen, da sonst das Reading hierfür leer bleibt.
Das liegt sicherlich an der Abhängigkeit im Holen der Informationen.
Um Frust zu vermeiden würde ich aber empfehlen die Readings gemeinsam zu aktualisieren.

Gruß
Christian

delMar

Hi Christian,

entschuldige bitte die späte Antwort, ich musste mir das genau ansehen. (und ich bin auf Dienstreise)

Zitat von: linusd am 03 Februar 2019, 18:35:10
Damit ich einen halbwegs aktuellen Screenshot mitschicken kann muss ich mit  IPCAM und einem AT alle 2 Sekunden ein Bild holen.
Naja, ich mach das so, dass ich beim Auftreten des Events (bei mir das Drücken der Türklingel, bei dir das Event aus ZM) einen Screenshot mache (also on-demand) und dann über ein temporäres 'at' mit 1 Sekunde Verzögerung die Nachricht schicke (richtig: die Verzögerung muss sein, weil sonst die Datei noch nicht geschrieben ist).

get ipcam_frontdoor image;defmod atTempBellMsg at +00:00:01 set pushmsg msg Haustür Es hat geläutet! action='[ZM_Monitor_Frontdoor:pubEventStreamUrl]' url_title=Zeigen expire=3600 attachment='www/snapshots/ipcam_frontdoor_snapshot.jpg'

Ich find's übrigens extrem cool, dass du auch einen Link zum Anzeigen des Events an die Pushover Nachricht mit dem Bild anhängst. Genau das mach ich auch :-D

Zitat von: linusd am 03 Februar 2019, 18:35:10
Wäre es evtl. möglich über eventImageUrl optional auch direkt das Bild herunterzuladen und auf der Platte abzulegen?
Ich hab das mal kurz erwogen und auch testhalber schon drin gehabt.
Nachdem ich dann irgendwoher ein Memory-Leak hatte (muss wohl mit dem Schreiben des Filestreams zu tun gehabt haben), hab ich mich gefragt, warum ich etwas selber nochmal implementieren und warten soll, das IPCAM schon für mich macht.
Ich könnte mir aber vorstellen, den Aufruf an IPCAM in irgendeiner Art und Weise zu automatisieren... (wurde evtl in einem früheren Post schon mal als Wunsch geäußert?).
Jedenfalls gehts hier darum, mein liebes Hobby der FHEM-Modul Betreuung über viele Jahre hinweg attraktiv zu halten.
Die Attraktivität steigt direkt proportional (wenn nicht sogar exponentionell) zur Beschäftigung mit spannenden Dingen :-)
Wie gesagt: ich tentiere eher dazu, IPCAM so aufzurufen, dass wir beide glücklich werden.

Zitat von: linusd am 03 Februar 2019, 18:35:10
Der notify muss auf <lastEventNotes> horchen, da sonst das Reading hierfür leer bleibt.
Das liegt sicherlich an der Abhängigkeit im Holen der Informationen.
Um Frust zu vermeiden würde ich aber empfehlen die Readings gemeinsam zu aktualisieren.

Readings gemeinsam aktualisieren: ungern. Weil dann kommt das Event erst ca 1-2 Sekunden später, als es eigentlich möglich wäre.
Nönö, das Event kommt, sobald ZM es liefert. Und die Notes kommen, sobald die API antwortet.
Ich werde aber gern die Doku so erweitern, dass User sich dieses Zeitunterschiedes bewusst sind. (wie du richtig erkannt hast, wird das Reading für lastEventNotes nämlich geleert, wenn ein neues Event kommt und erst mit der Antwort der API wieder befüllt. Hab ich extra gemacht) - um Frust zu vermeiden.

Sorry, das waren jetzt ausschließlich Alternativvorschläge oder 'Nein's .
Ich will damit die Diskussion nicht abwürgen, sondern nur meine Sicht der Dinge darlegen.

Danke für dein Engagement und deinen Input - beides ist weiterhin ganz herzlich 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.

steffen83

Hallo,

auf was für einem Gerät habt ihr Zoneminder installiert. Jemand dabei der auch einen Raspi nutzt? - Und da ne funktionierende Installationsanleitung hat?

Ich hatte nur Probleme leider. Obwohl ich das sehr spannend fände alles über ein System laufen zu lassen.
Gruß
Steffen
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

delMar

Zitat von: steffen83 am 05 Februar 2019, 15:10:33
Hallo,

auf was für einem Gerät habt ihr Zoneminder installiert. Jemand dabei der auch einen Raspi nutzt? - Und da ne funktionierende Installationsanleitung hat?

Ich hatte nur Probleme leider. Obwohl ich das sehr spannend fände alles über ein System laufen zu lassen.
Gruß
Steffen
Ich habs auf einem 'echten' Rechner laufen.
Wegen analogen Kameras auch nicht wirklich anders möglich.
Wenn aber die Kam selber Bewegungserkennung macht, kann das am Raspi tatsächlich funktionieren glaub ich
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.

steffen83

Also ich kriege die Signale schon an fhem weiter gegeben allerdings finde ich diese Zeitleiste sehr gut, wo ein Alarm war.
Zudem ich da auch ca 5 Kameras einbinden wollte.

Gesendet von meinem MI 8 mit Tapatalk

Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

delMar

@linusd: Ich hab den Stand von GitHub, den du getestet hast jetzt ins SVN gegeben, sollte also morgen auch übers Update mitkommen.

Danke nochmal fürs Testen!

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.

Solala0815

Hallo Steffen

Zitat von: steffen83 am 05 Februar 2019, 15:10:33
Hallo,

auf was für einem Gerät habt ihr Zoneminder installiert. Jemand dabei der auch einen Raspi nutzt? - Und da ne funktionierende Installationsanleitung hat?

Ich hatte nur Probleme leider. Obwohl ich das sehr spannend fände alles über ein System laufen zu lassen.
Gruß
Steffen
habe es mal mit dieser Anleitung auf einem RaspiB3+ installiert.
https://wiki.zoneminder.com/Debian_9_64-bit_with_Zoneminder_1.30.4_the_Easy_Way
Welche Probleme gibt es denn?

Tom

linusd

Hallo Martin,

danke für den Hinweis mit dem <at>!
Nachdem ich das "get <IPCAM> image" in einen eigenen notify ausgelagert hab, dass auf "alert" reagiert, ist es auch aktuell genug.  ;)

Bei einer konstruktiven Produktentwicklung muss eben der Aufwand zum Nutzen abgewogen werden.
Und .... es gibt eine Lösung.  :D

Gruß
Christian 

Florian_GT

#43
Hi,

merkwürdig. Bei mir kommt keine cpu_load mehr. Und es werden keine Settings mehr aktualisiert in Zoneminder.

2019.02.21 21:52:49.187 1: ZoneMinder (zm) - Manually triggered Login
2019.02.21 21:52:49.187 4: ZoneMinder (zm) - loginUrl: http://192.168.xxx/zm/index.php?username=fhem&password=fhem&action=login&view=console
2019.02.21 21:52:53.250 3: ZoneMinder (zm) - login status:
2019.02.21 21:52:53.250 0: error while requesting http://192.168.xxx/zm/index.php?username=fhem&password=xxxx&action=login&view=console - read from http://192.168.xxx:80 timed out


Installiert ist die aktuelle Version. Würde mal sagen, die hat einen Bug.
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)

Florian_GT

Zitat von: Florian_GT am 21 Februar 2019, 21:46:24
Hi,

merkwürdig. Bei mir kommt keine cpu_load mehr. Und es werden keine Settings mehr aktualisiert in Zoneminder.

2019.02.21 21:52:49.187 1: ZoneMinder (zm) - Manually triggered Login
2019.02.21 21:52:49.187 4: ZoneMinder (zm) - loginUrl: http://192.168.xxx/zm/index.php?username=fhem&password=fhem&action=login&view=console
2019.02.21 21:52:53.250 3: ZoneMinder (zm) - login status:
2019.02.21 21:52:53.250 0: error while requesting http://192.168.xxx/zm/index.php?username=fhem&password=xxxx&action=login&view=console - read from http://192.168.xxx:80 timed out


Installiert ist die aktuelle Version. Würde mal sagen, die hat einen Bug.

Habe im Code in der Login Funktion ein Timeout von 5s gesetzt, nun läuft es prima! Kannst du das überall rein machen, und global konfigurierbar?

Gruß
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)