Neues Modul: 70_ZoneMinder, 71_ZM_Monitor

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

Vorheriges Thema - Nächstes Thema

td

#15
Hallo Martin,

"list zm:
Internals:
   APILoginStatus 200
   DEF        192.168.1.200 fhem fhem2018
   DeviceName 192.168.1.200:6802
   FD         47
   HTTPCookies ZMSESSID=07df8ea62f7563ca6d204e51540148aa; zmCSS=flat; zmSkin=classic
   NAME       zm
   NOTIFYDEV  global
   NR         716
   PARTIAL   
   STATE      opened
   TYPE       ZoneMinder
   ZM_API_VERSION =
   ZM_VERSION ion=
   HTTPCookieHash:
     ZMSESSID:
       Options    path=/; HttpOnly
       Value      07df8ea62f7563ca6d204e51540148aa
     zmCSS:
       Options    expires=Thu, 31-Aug-2028 10:59:33 GMT; Max-Age=311040000
       Value      flat
     zmSkin:
       Options    expires=Thu, 31-Aug-2028 10:59:33 GMT; Max-Age=311040000
       Value      classic
   READINGS:
     2018-10-23 13:47:34   CPU_Load        ersion="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Object not found!</title>
<link rev="made" href="mailto:%5bno%20address%20given%5d" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
    body { color: #000000; background-color: #FFFFFF; }
    a:link { color: #0000CC; }
    p, address {margin-left: 3em;}
    span {font-size: smaller;}
/*
     2018-10-23 12:59:34   authHash        4f9d4d08f024324be4b7fa8562f0fee3
     2018-10-23 13:45:43   state           opened
   helper:
     ZM_AUTH_HASH_SECRET >
<!DOCTYPE html PUBLIC
     ZM_HOST    192.168.1.200
     ZM_PASSWORD
     ZM_USERNAME fhem
     apiInitialized 1


Im ZM-log taucht nichts relevantes auf.

fhem-log:
2018.10.23 13:56:34 4: ZM_Monitor (zmEinfahrt) - Incoming event: CPU_Load: ersion="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Object not found!</title>
<link rev="made" href="mailto:%5bno%20address%20given%5d" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
    body { color: #000000; background-color: #FFFFFF; }
    a:link { color: #0000CC; }
    p, address {margin-left: 3em;}
    span {font-size: smaller;}
/*
2018.10.23 13:56:34 4: ZM_Monitor (zmEinfahrt) - ignoring


set Einfahrt alarmState on funktioniert aber beispielsweise.

Die ZM-Version ist 1.30.4; das fhem-Modul habe ich heute erst aktualisiert.

Gruß
td

delMar

Zitatset Einfahrt alarmState on funktioniert aber beispielsweise.
Ja, das läuft direkt über den TCP-Port, nicht über die HTTP-API.

APILoginStatus ist auf 200, das heißt, der API-Login hat funktioniert...

Kannst du bitte den API-Call, der zB CPU-Load liefert mal manuell aufrufen? Das 'Object not found' im Titel ist seltsam.
Beispiele findest du hier: https://zoneminder.readthedocs.io/en/stable/api.html

Die API-Version wird nämlich zB auch nicht ausgelesen...
Fragen über fragen hier... kann leider jetzt nicht genauer nachforschen, hoffentlich am Abend

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.

td

Stimmt, das läuft ja über ztrigger.

thomas@olymp:~> curl -XGET https://wildspring.dyndns.org/zm/api/host/getLoad.json
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.


Tscha......

SSL will ich nicht abschalten, ein kommerzielles Zertifikat lohnt sich nicht.
Mit Option "-k" komme ich weiter (Unterdrückung Zertifikatsprüfung).

Ich befürchte, ohne eine Moduloption zur Unterdrückung der Prüfung komme ich nicht weiter.
"set alarmState" reicht mir aber auch schon aus.

Gruß
td

delMar

Zitat von: td am 23 Oktober 2018, 15:01:00
SSL will ich nicht abschalten, ein kommerzielles Zertifikat lohnt sich nicht.
Kommerzielles Zertifikat ist nicht nötig. Ich selber verwende letsencrypt.org
War wirklich einfach, aber ist vielleicht nicht jedermanns sache.

Zitat von: td am 23 Oktober 2018, 15:01:00
Ich befürchte, ohne eine Moduloption zur Unterdrückung der Prüfung komme ich nicht weiter.
Ich bin mir nicht sicher, ob das Problem wirklich das Zertifikat ist, weil fürs Connecten zur API eigentlich die IP verwendet wird, die du beim define angegeben hast.
Die publicURL wird nur für zB pubStreamUrl etc verwendet...
Oder hast du intern im LAN auch SSL?
Das würde es dann erklären.

Zitat von: td am 23 Oktober 2018, 15:01:00
"set alarmState" reicht mir aber auch schon aus.
Ja, würd mich aber schon freuen, alle use-cases bedienen zu können :-)
Wenn du wirklich intern auch SSL hast, dann baue ich auch gern die Option zum Unterdrücken der Prüfung ein.
Muss ich nur suchen, wie das geht (und checken, ob das wirklich das Problem ist)

Und mir fällt gerade ein: dass der Connect zur API derzeit nur über HTTP gemacht wird.
Als erstes werde ich ein Attribut einbauen, dass dich auf https umschalten lässt.

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.

td

Zitat von: delmar am 23 Oktober 2018, 15:15:06
Kommerzielles Zertifikat ist nicht nötig. Ich selber verwende letsencrypt.org
War wirklich einfach, aber ist vielleicht nicht jedermanns sache.
Ich bin mir nicht sicher, ob das Problem wirklich das Zertifikat ist, weil fürs Connecten zur API eigentlich die IP verwendet wird, die du beim define angegeben hast.
Die publicURL wird nur für zB pubStreamUrl etc verwendet...
Oder hast du intern im LAN auch SSL?
Das würde es dann erklären.
Ja, würd mich aber schon freuen, alle use-cases bedienen zu können :-)
Wenn du wirklich intern auch SSL hast, dann baue ich auch gern die Option zum Unterdrücken der Prüfung ein.
Muss ich nur suchen, wie das geht (und checken, ob das wirklich das Problem ist)

Und mir fällt gerade ein: dass der Connect zur API derzeit nur über HTTP gemacht wird.
Als erstes werde ich ein Attribut einbauen, dass dich auf https umschalten lässt.

schöne Grüße
Martin
Hallo Martin,

letsencrypt ist eine feine Sache, aber alle vier Monate ein neues Zertifikat ausstellen zu lassen, ist mir zu aufwendig.
Aus meinem internen Netz heraus sollte es tatsächlich funktionieren, das kann ich aber derzeit nicht testen.

Danke für Dein Entgegenkommen.

Gruß
td

delMar

Zitat von: td am 23 Oktober 2018, 15:19:32
letsencrypt ist eine feine Sache, aber alle vier Monate ein neues Zertifikat ausstellen zu lassen, ist mir zu aufwendig.
Musst du garnicht, da gibts einen Daemon, der das für dich erledigt.
Genau so bequem, wie du dein dyndns aktualisierst.

btw: vielleicht willst du deine posts editieren und ein paar sachen rausnehmen...

Zitat von: td am 23 Oktober 2018, 15:19:32
Danke für Dein Entgegenkommen.
Gern. Valides Feedback macht das Produkt nur besser :-)
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.

td

Zitat von: delmar am 23 Oktober 2018, 15:23:14
Musst du garnicht, da gibts einen Daemon, der das für dich erledigt.
Genau so bequem, wie du dein dyndns aktualisierst.
Weiss ich, aber für die Validierung muß auf Port 80 ein Web-Server laufen. Bei mir liegt da SSH drauf und daher muß ich immer manuell ran.

td

delMar

Zitat von: td am 23 Oktober 2018, 15:27:07
Weiss ich, aber für die Validierung muß auf Port 80 ein Web-Server laufen. Bei mir liegt da SSH drauf und daher muß ich immer manuell ran.
das ist nur für die erstmalige einrichtung nötig. das zert update wird dann nur von innen heraus getriggert und benötigt keinen tatsächlichen zugriff mehr, iirc.
aber das ist eigentlich schon off-topic. du wirst schon wissen, was für dich am besten funktioniert.
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

Zitat von: Florian_GT am 20 Oktober 2018, 21:36:12
Danke. Ich habe es heute eingespielt, und einen logininterval von 600 (also alle 10 Minuten) eingestellt. Da bin ich mal gespannt...

Hallo delmar,

ich habe bis heute getestet, und konnte mit der neuen Version und dem von mir eingestellten Interval keine Probleme mehr feststellen. Macht vielleicht sinn, dass auch im SVN so zu hinterlegen.

Gruß Florian
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: Florian_GT am 28 Oktober 2018, 00:46:40
ich habe bis heute getestet, und konnte mit der neuen Version und dem von mir eingestellten Interval keine Probleme mehr feststellen. Macht vielleicht sinn, dass auch im SVN so zu hinterlegen.
Danke Florian!
Nachdem ich selber bis Mitte der Woche zumindest keine Probleme feststellen konnte, hab ich diese Version auch schon ins SVN gegeben. Wenn du also das Update machst, solltest du alles wie bereits gewohnt vorfinden.

Werde heute Abend außerdem noch versuchen, das Problem von td zu lösen.
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

@td, was mich stutzig macht:
der API login wurde auf port 80 versucht, wo ZoneMinder offenbar nicht läuft.
Trotzdem ist ein HTTP-200 als API-Login Result in den Internals vermerkt.
Gibts dort auch ein index.php?

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.

delMar

@td: auf GitHub findest du eine neue Version.
Ich check sie auch gleich ins SVN ein, da sie bei mir problemlos läuft.
(wirst du aber erst morgen übers FHEM Update bekommen, denke ich)

Es gibt ein neues Attribut im ZoneMinder device:
usePublicUrlForZmWeb
Zusätzlich dazu musst du natürlich auch das Attribut publicUrl gesetzt haben.
Dann wird der API-Login und generell alle queries dorthin so versucht, wie in dem Beispiel von dir angegeben.

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

Hi delmar,

zunächst mal vielen Dank für das super Modul!!!

Könntest Du evtl. noch die ausgelösten Zonen in den Readings ausgeben?
Ich hatte in meiner bisherigen Lösung mit einem shell Script und Datenbankabfragen nur eine PushoverNachricht zusammengebaut.
Hierbei fand ich die Benennung der ausgelösten Zonen als sehr hilfreich bei der ersten Einschätzung.
Darüber hinaus würde ich z.B. gerne nur das Licht an der Haustür einschalten, wenn die Zone dort ausgelöst wird.
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.
Letzterer wäre sicher der Königsweg und würde eine weitere Verarbeitung mit fhem-Boardmitteln ermöglichen. :D

Ich werde mich zwar in die Api-Specs und Deinen Modulcode noch weiter einlesen um konkretere Vorschläge machen zu können,
würde mich ab sehr freuen wenn Du das umsetzten würdest.

Gerne stelle ich mich auch als Alphatester zur Verfügung. 8)

Gruß
Christian

delMar

Zitat von: linusd am 06 Januar 2019, 08:08:47
zunächst mal vielen Dank für das super Modul!!!
Danke, freut mich, wenns funktioniert.

Zitat von: linusd am 06 Januar 2019, 08:08:47
Könntest Du evtl. noch die ausgelösten Zonen in den Readings ausgeben?
Leider wird von ZoneMinder die Zone bei Events nicht übergeben.

Du kannst das Log-Statement in 70_ZoneMinder.pm in Zeile 589 aktivieren, dann siehst du im Log, was die Events aus ZoneMinder enthalten. (ich hab grad einen SVN commit gemacht, wo dieses statement mit verbose 5 aktiv ist, wird aber erst morgen Teil des FHEM-updates sein).

Dein use-case ist 100% valide, leider hab ich die Daten schlicht und ergreifend nicht.
Vielleicht ist das mit ZoneMinder 1.32 besser geworden, das Update hab ich aber noch nicht geschafft.

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

Hi Martin,

das ist tatsächlich nicht viel.

2019.01.06 20:29:30 5: zm: dispatch event:2|off|1546802970|1873
2019.01.06 20:29:30 5: Handling event for logical device zm_2
2019.01.06 20:29:30 4: Connection accepted from WEB_192.168.0.xx_46848


Hier steckt jedoch die EventID (hier 1873) drin, mit dessen Hilfe über die API alle Information zum Event im JSON-Format abgerufen werden können.  ;)

https://zoneminder.readthedocs.io/en/stable/api.html#retrieve-event-id-1000

Die 1000 ist hier die EventID

http://server/zm/api/events/1000.json


Gruß
Christian