Frage: Einbindung zoneminder

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

Vorheriges Thema - Nächstes Thema

Braakhekke

Hallo Martin,

Du hast hier Recht. Es wäre nur praktisch gewesen. Freu mich schon auf der der Möglichkeit Text im Monitor anzeigen zu lassen.

schöne Grüße,

Ben
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice

delMar

Hallo,

Zitat von: Braakhekke am 17 September 2018, 14:17:49
Freu mich schon auf der der Möglichkeit Text im Monitor anzeigen zu lassen.

Ich hab mal probehalber versucht, so ein 'show' kommando abzusetzen, allerdings sehe ich weder am Live-Stream, noch am Recording den entsprechenden Text.

echo "5|show|100|fhem|text|showtext" | telnet localhost 6802


Was mach ich falsch? Kannst du evtl einen Screenshot posten, wie ein richtiges Ergebnis aussehen würde?

Dank dir!

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.

Braakhekke

#107
Hallo Martin,

ich habe das Script im FHEM-Verzeichnis (IP 192.168.178.X) laufen. Dieses macht ein Telnetverbindung zum Zoneminder (IP 192.168.178.Y).
Ach ja, dies funktioniert nur wenn der entsprechender Monitor im "Nodect" Modus ist.
anbei ein Beispielbild.

Grüße,

Ben
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice

delMar

Ah, ich hab's gefunden.
Man muss im Timestamp %Q hinzufügen.
Außerdem muss ZoneMinder (oder zumindest die Kamera) neu initialisiert werden (also ZM neu starten).

danke!
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

Neues Update auf GitHub: set ZM_Monitor Text 'hallo' ist jetzt umgesetzt.
Man kann somit im Timestamp einen Platzhalter %Q frei befüllen.

Ich hab bei mir jetzt übrigens auch ein IPCAM device zum Download von Images von der ZM_Monitor URL eingerichtet.
Das funktioniert meiner Meinung nach so gut, dass es wirklich keinen Grund gibt, dass in diesem Modul nochmal zu implementieren. :-)

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.

Braakhekke

Hallo Martin,

Danke, endlich bin ich das schreckliche Telnetscript los

Grüße,

Ben
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice

delMar

Ich hatte auch so ein ähnliches Script.
Deshalb hab ich dieses Modul gebaut :-D
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.

psycho160

ICh weiß nicht warum ihr das mit Telnet etc. macht, denn Zoneminder sieht dafür ein Interface vor.
Zitat

ZM_OPT_TRIGGERS

ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.


1. in den Zoneminder Einstellungen ZM_OPT_TRIGGERS aktivieren

2. habe ich ein PHP Script das sich zum Zoneminder verbindet

<?php
   $extTrigger 
$_GET['extTrigger'];
// hier die Zoneminder Server IP
   
$cfgServer "192.168.1.1";
   
$cfgPort 6802;

$conn_handle fsockopen($cfgServer$cfgPort);
 if(!
$conn_handle) {
        echo 
"Connection failed ";
   exit();
    }else{
      
//  echo "Connected <br>";
        
fputs($conn_handle$extTrigger);
    }  
fclose($conn_handle);   

?>



3. im FHEM rufe ich dieses Script auf (nonblocking -> Falls Zoneminder mal nicht läuft)


+*00:30:10 { 
my $OUTtemp = ReadingsVal("CUL_HM_HM_WDS10_TH_O_1CCC03", "temperature", "0");
my $encodedURL = urlEncode("4|show|255|display txt|cam-control|- Temp: $OUTtemp");

HttpUtils_NonblockingGet( { url=>"http://localhost/camtext.php?extTrigger=$encodedURL",  method=>"HEAD", header=>"User-Agent: TeleHeater/2.2.3\r\nAccept: application/json", callback=>sub($$$) { my ($hash, $err, $data) = @_;; Log 1, "ZM-Temp: $err/$data" } }) }


Kurze Beschreibung zum Code oben:
Lese aus meinem Temperatursensor alle 30min die Temperatur ein und schreibe sie auf das Kamerabild von Monitor 4 (siehe encodedURL)

Mache das mit einigen anderen notifys auch so und das läuft eigentlich sehr stabil.

Vl kann es jemand gebrauchen.

lg
- 2013@FHEM - 2020 Setup: Pi 4 4GB Systeme: Shelly, Tasmota, Zigbee und mittlerweile nur noch wenig Homematic. Entwicker von: tado-FHEM Modul (perlcritic 3 ^^)(https://git.wolfmajer.at/Public/FHEM-Tado)

delMar

Zitat von: psycho160 am 17 September 2018, 21:16:48
ICh weiß nicht warum ihr das mit Telnet etc. macht, denn Zoneminder sieht dafür ein Interface vor.
Telnet macht ja genau das. Es verbindet sich zu diesem Interface und sendet eine ASCII Zeichenkette.

Zitat von: psycho160 am 17 September 2018, 21:16:48
2. habe ich ein PHP Script das sich zum Zoneminder verbindet
Genau das ist eigentlich der Knackpunkt an diesem Thread: wir wollten keine externen Scripte mehr konfigurieren und warten müssen, sondern diese Funktionalität direkt in einem ZoneMinder Modul haben.
Ob in diesem externen Script dann PHP oder Telnet oder sonstwas gemacht wird, ist nebensächlich. Ich will einfach kein zusätzliches Ding zwischen FHEM und ZoneMinder haben.

Was du jetzt über dein PHP script machst, sollte auch im ZoneMinder Modul funktionieren.
Wenn das ZoneMinder Modul die Monitor-devices angelegt hat, kannst du folgendes als Notify command ausführen:

{fhem("set ZM_Monitor_4 Text ".ReadingsVal('CUL_HM_HM_WDS10_TH_O_1CCC03', 'temperature', '0'))}


Vielleicht kannst du damit was anfangen.
Sollte was fehlen, nehm ich das gern mit rein.

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.

Braakhekke

#114
Hallo Martin,

ich war, beruflich, etwas eingespannt und kann erst jetzt wieder testen. Deine neue Funktion "Text " funktioniert bei mir einwandfrei bis auf eine Kleinigkeit:
Warum wird untenstehendes nicht auf alle Drei Kameras ausgegeben:


defmod NO_TempCam notify gar_ss_Regen_Sensor:state:.*|gar_ss_Temp_WetterStation:temperature:.* {\
fhem("set ZM_Monitor_zm_1 Text Temp.".ReadingsVal('gar_ss_Temp_WetterStation', 'temperature', '0').'C '.ReadingsVal('gar_ss_Regen_Sensor', 'state', '0'));;\
fhem("set ZM_Monitor_zm_2 Text Temp.".ReadingsVal('gar_ss_Temp_WetterStation', 'temperature', '0').'C '.ReadingsVal('gar_ss_Regen_Sensor', 'state', '0'));;\
fhem("set ZM_Monitor_zm_3 Text Temp.".ReadingsVal('gar_ss_Temp_WetterStation', 'temperature', '0').'C '.ReadingsVal('gar_ss_Regen_Sensor', 'state', '0'))\
}

Das Ergebnis auf Monitor 1 ist richtig "Temp.13.6C dry", auf Monitor 2 steht "Temp.13.6C dry3" und auf Monitor 3 steht nur noch ein Leerzeichen.

Ist in mein Notify was falsch oder liegt es an das Modul?

Danke und Grüße,

Ben
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice

delMar

Hallo!
Zitat von: Braakhekke am 19 September 2018, 04:57:21
Ist in mein Notify was falsch oder liegt es an das Modul?
Wenn du verbose auf mindestens 4 stellt, solltest du im Log die Strings sehen, die an den ZM-Port 6802 geschickt werden.
Wenn es 2x funktioniert und beim dritten mal nicht, gehe ich davon aus, dass das Modul grundsätzlich funktioniert.
Wenn im Log das falsche steht, dürfte etwas im Notify nicht stimmen.

Ich selber hab festgestellt, dass ich, nachdem ich %Q zum Timestamp in ZM hinzugefügt habe, ZoneMinder komplett neu starten musste, damit Werte auch wirklich übernommen wurden. Vielleicht hast du das noch nicht gemacht, nachdem du Monitor 3 konfiguriert hast?
Außerdem ist ZoneMinder extrem heikel, was Sonderzeichen, Umlaute, etc. angeht.
Werde hier noch eine Validierung einbauen müssen.
Aber bei Monitor 3 gibts bei dir ja keinen Unterschied, was das betrifft, richtig?


Ich hab noch ein anderes Problem festgestellt.
Nach einigen Tagen wurde der Auth-Key nicht mehr aktualisiert.
Warum, weiß ich noch nicht.
Auf GitHub liegt aber eine neue Version, die auf verbose level 3 Log statements schreibt, falls die Verbindung zu ZoneMinder verloren gegangen ist.

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

Ich will kein Klugscheißer sein, aber sauberer Code macht debugging oft einfacher.
Wenn ich es richtig verstanden habe, zeigen alle 3 Kameras den selben Text?
Irgendwas in dieser Form wäre lesbarer:


defmod NO_TempCam notify gar_ss_Regen_Sensor:state:.*|gar_ss_Temp_WetterStation:temperature:.* {\
my $temp = ReadingsVal('gar_ss_Temp_WetterStation', 'temperature', '0');;\
my $rain = ReadingsVal('gar_ss_Regen_Sensor', 'state', '0');;\
Log3 'ZM_Monitor', 0, "temp: $temp, rain: $rain";;\
fhem("set ZM_Monitor_zm_1 Text Temp.$temp"."C $rain");;\
fhem("set ZM_Monitor_zm_2 Text Temp.$temp"."C $rain");;\
fhem("set ZM_Monitor_zm_3 Text Temp.$temp"."C $rain")\
}


Falls der Log-Output vom Modul selber nicht ausreichen würde, hättest du auch hier die Chance, zu loggen (was ich versucht habe, darzustellen)

Dieser Code ist aber nicht getestet, hab ich nur im Editor zusammengebastelt.

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.

Braakhekke

#117
Hallo Martin,

vielen Dank für Deine Optimierung und Änderung von mein Notify. Ich habe dies eingebaut und sicherheitshalber FHEM und Zoneminder neu gestartet. Leider muss ich schreiben dass, obwohl im LOG korrekt

2018.09.20 05:28:21 4: NO_TempCam exec {
my $temp = ReadingsVal('gar_ss_Temp_WetterStation', 'temperature', '0');;
my $rain = ReadingsVal('gar_ss_Regen_Sensor', 'state', '0');;
Log3 'ZM_Monitor', 0, "temp: $temp, rain: $rain";;
fhem("set ZM_Monitor_zm_1 Text Temp.$temp"."C $rain");;
fhem("set ZM_Monitor_zm_2 Text Temp.$temp"."C $rain");;
fhem("set ZM_Monitor_zm_3 Text Temp.$temp"."C $rain")
}
2018.09.20 05:28:21 0: temp: 12.5, rain: dry


die Werte, ich weiß das hört sich komisch an, in ZM_Monitor_zm_3 ab und zu richtig eingetragen werden, meistens aber nicht.
Kann es sein das die drei Befehle zu schnell hintereinander kommen und Zoneminder dies nicht verarbeiten kann?

Grüße,

Ben

ps. Ich habe gerade noch mal neu gestartet und manuel ein Trigger auf das Notify ausgelößt. Interessant ist dabei die "3" in in "ZM_Monitor_zm_2". Wo kommt dieser Wert her?
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice

delMar

Zitat von: Braakhekke am 20 September 2018, 05:37:07
in ZM_Monitor_zm_3 ab und zu richtig eingetragen werden, meistens aber nicht.
Mir ist auch aufgefallen, dass das nicht immer so gut funktioniert, der Neustart hat aber dann eigentlich immer geholfen.
Kann schon sein, dass ZoneMinder mit 3 Nachrichten nacheinander überfordert ist.
Durch die Variablen $temp und $rain ist jetzt ja auch sichergestellt, dass der Text identisch ist, dh an Sonderzeichen etc kanns auch nicht liegen.
Was ist, wenn du zB Monitor 2 mal herausnimmst, und nur an 1 und 3 schickst?
Zeit Monitor 3 den Text dann immer korrekt?

Zitat von: Braakhekke am 20 September 2018, 05:37:07
Interessant ist dabei die "3" in in "ZM_Monitor_zm_2". Wo kommt dieser Wert her?
Da ja, wie oben schon erwähnt, durch die Variablen sicher immer der selbe String übergeben wird, kann's eigentlich nur daran liegen, dass direkt in ZoneMinder bei der Konfiguration des Monitor Timestamps die '3' drinsteht.

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.

Braakhekke

wenn ich "ZM_Monitor_zm_2" aus dem Notify entfern und Zoneminder neu gestartet habe, erscheinen die richtige Werte in  "ZM_Monitor_zm_1" und  "ZM_Monitor_zm_3".
"%Q" ist somit richtig eingetragen

Grüße,

Ben
1 x NUC mit PROXMOX (ct FHEM mit Tablet UI, ct Zoneminder v1.30.4, ct habridge) 2 x Raspberry Pi Modell 3, WLAN, HMLAN, V 1.67 nanoCUL868, nodemcu esp8266, viele HM-Komponenten, KS300, HUEDevice