FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: pitman am 30 Mai 2016, 23:17:18

Titel: Gelöst: Curl, XML, HTTPMOD (Hikvision Kamera über FHEM steuern)
Beitrag von: pitman am 30 Mai 2016, 23:17:18
Hallo zusammen,

ich habe in meinem Garten eine HIKVISION-Kamera im Einsatz.

In der Kamerasoftware habe ich definiert, dass die Kamera auf einen Einbruchsversuch reagiert.
Wenn in einem bestimmten Ausschnitt des Kamerabildes über mehrere Sekunden eine Bewegung registriert wird, dann wird der Alarm ausgelöst.

Im Falle der Alarmauslösung wird zum einen eine Aufnahme auf meinem NAS gespeichert, zum anderen wird mir eine eMail zugesendet in der 3 Screenshots der Situation angehängt sind.

Dies ist, solange wir nicht zu Hause sind, super!

Wenn wir allerdings zu Hause im Garten sind, dann überschlägt sich mein Handy mit Alarmmails.

Ich würde daher gerne folgendes umsetzen.

Per FHEM würde ich gern über einen Schalter auslösen, dass der Mailversand gestoppt, die Aufzeichnung auf den NAS aber weiterläuft.

Ich habe bereits herausgefunden, dass ich der Kamera per PUT ein XML-File zusenden muss, um die gewünschte Einstellung vorzunehmen.
Den Inhalt der XML-Files (für Ein- und Ausschalten der Funktion) habe ich bereits ermittelt.

Laut Internet scheint man die Information per CURL an die Kamera senden zu können:
ZitatIntrusion Detection => OK
curl http://user:password@ip:port/ISAPI/Smart/FieldDetection/1  >resp.xml
curl -T IntrusionDetection0.xml  http://user:password@ip:port/Smart/FieldDetection/1
curl -T IntrusionDetection1.xml  http://user:password@ip:port/ISAPI/Smart/FieldDetection/1

Jetzt kenne ich mich aber leider weder mit XML noch mit CURL noch mit HTTPMOD aus.

Daher wäre ich dankbar, wenn ihr mir eventuell auf die Sprünge helfen könntet.

Kann mir jemand helfen?

Grüße und vielen Dank vorab
pitman
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 31 Mai 2016, 01:17:51
Ich schreibe es nochmal anders. Ich habe versucht herauszufinden, wie ich mit httpmod den Inhalt der xml-Datei an die Kamera senden kann.
Ich kriege es aber nicht hin.

Mir fehlt in diesem speziellen Punkt der Zugang zum Verständnis.

Daher hoffe ich auf Unterstützung.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 31 Mai 2016, 15:40:57
Könnt ihr mir kurz einen Hinweis geben, ob meine Fragestellung:

a) zu banal
oder
b) mit FHEM so nicht umzusetzen ist

Je nach Antwort könnte ich das Ganze dann ad acta legen, oder meine Recherche nochmal intensivieren.

Danke!
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: dev0 am 31 Mai 2016, 17:01:57
"Ich kriege es nicht hin" ist ein schlechter Ausgangspunkt um eine sinnvolle Antwort schreiben zu können. Studiere die command ref / wiki und stell konkrete Fragen, wenn du nicht weiter kommst. HTTPMOD oder system call mit curl oder wget sollte aber möglich sein. HttpUtils (siehe wiki) wäre auch eine Alternative.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 31 Mai 2016, 18:32:38
Das gebe ich wohl zu, dass der Ausgangspunkt ein schlechter ist.

Ich habe allerdings viel recherchiert und da ich grundsätzlich weiß, dass es mittels CURL gehen soll, genau das aber mit FHEM nicht hinbekomme, hatte ich gehofft, hier in den Anfängerfragen einen Tipp hierzu zu bekommen.

Ich schaue mir dann nochmal HTTPMOD, system call, curl, wget und HttpUtils an.

Vielleicht werde ich dieses Mal schlauer.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: dev0 am 31 Mai 2016, 18:50:04
Tipps gerne, aber man muss doch wissen wo es hakt. Z.B. Wie kann ich curl/wget aus fhem heraus aufrufen?
Die Dokumentation zu den Modulen ist die command ref, wenn dort etwas für dich unverständlich ist, dann kann man auch konkrete Fragen stellen.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 31 Mai 2016, 22:49:24
Ok, aber genau das ist meine Frage:
Wie kann ich CURL aus FHEM heraus aufrufen.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 31 Mai 2016, 22:56:11
Schau mal hier (http://www.fhemwiki.de/wiki/HttpUtils). Da solltest Du einige Infos für Dich finden.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 31 Mai 2016, 22:59:06
Und hier (https://forum.fhem.de/index.php?topic=33765.0)

Und hier (https://forum.fhem.de/index.php?topic=45176.135)
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 31 Mai 2016, 23:08:22
Vielen Dank!
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 13 Juni 2016, 15:36:56
Ich möchte noch einmal um Hilfe bitten:

Mittlerweile weiß ich, dass ich die eMail-Funktion durch folgende XML ausschalten kann:
Zitat<?xml version="1.0" encoding="UTF-8"?>
<EventTriggerNotificationList version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
</EventTriggerNotificationList>

Ich weiß, dass ich die XML folgendermaßen an die Kamera senden kann:
Zitatcurl -T mailaus.xml http://user:password@ip:port/ISAPI/EVENT/triggers/fielddetection-1/notifications

Ich habe zunächst versucht dies als RAW-Befehl über IPCAM zu senden, was allerdings nicht funktioniert.

Dann habe ich mich dank Eurer Hinweise eingelesen.
Aber mein FHEM-Wissen ist an dieser Stelle zu beschränkt um weiter zu kommen.

Ich würde gerne genau das tun, was ich oben beschrieben habe, finde aber den Ansatzpunkt nicht.
Konkrete Fragen:
-wo speichere ich die mailaus.xml?
-wie kann ich den obigen curl-Befehl in FHEM ausführen?
-mit welchem Modul kann ich mein Ziel erreichen

Vielen Dank
pitman
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 14 Juni 2016, 17:54:10
Ok, vielleicht funktioniert es so:

FHEM läuft auf einem RPI. Ich erstelle ein Shellscript:
alarmaus.sh

Ich weiß noch nicht, wie das Script genau aufgebaut sein muß, aber es sollte dann folgende Zeile enthalten:
curl -T mailaus.xml http://user:password@ip:port/ISAPI/EVENT/triggers/fielddetection-1/notifications

Und dieses Shellscript rufe ich über FHEM auf.

Bin ich auf dem richtigen Weg? Ist das ein gangbarer Weg?
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 14 Juni 2016, 17:59:09
Kannst Du den gesamten Befehl nicht aus fhem auf rufen? Sollte doch gehen.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 14 Juni 2016, 21:13:27
Wie müsste der Aufruf erfolgen?

So eine Schaltung stelle ich mir vor:
define Alarm_Aus DOIF ([Schalter1:state] eq "close") (curl -T mailaus.xml http://user:password@ip:port/ISAPI/EVENT/triggers/fielddetection-1/notifications)

Frage 1:
Was muß im zweiten Teil der Klammer angepasst werden?

Frage 2:
Wo auf dem RPI müsste die "mailaus.xml" abgelegt werden?
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 14 Juni 2016, 21:41:00

define Alarm_Aus DOIF ([Schalter1:state] eq "close") ({ qx(curl -T mailaus.xml http://user:password@ip:port/ISAPI/EVENT/triggers/fielddetection-1/notifications) })


Bin nicht so der DOIF User aber schau mal ob das klappt und wenn nicht im Log schauen was er meckert
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 14 Juni 2016, 22:28:38
Danke!

Im Log steht nun folgendes:
Zitat2016.06.14 22:21:02 1: PERL WARNING: Can't exec "curl": No such file or directory at (eval 20127580) line 1.
2016.06.14 22:21:02 3: eval: { qx(curl -T /opt/fhem/mailaus.xml http://user:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }
(user, pwd, ip sind natürlich korrekt gefüllt > nur hier unkenntlich gemacht)

Ich habe die mailaus.xml auf dem RPI in das Verzeichnis opt/fhem gelegt.
Ist die Verzeichnisangabe in dem CURL-Aufruf korrekt?

Wobei sich die Fehlermeldung Can't exec "curl" wohl auf etwas anderes bezieht.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 14 Juni 2016, 22:32:50
schau mal ob fhem eine Shell hat. Eventuell brauch er das.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 14 Juni 2016, 22:41:39
Kannst Du das eventuell näher erläutern?
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 14 Juni 2016, 23:00:03
Ok fangen wir mal klein an


Bitte gebe einmal genau das hier in die Command Zeiel von FHEM ein

{ qx(curl www.heise.de) }


Dann sollte Dir FHEM html Code anzeigen.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 14 Juni 2016, 23:01:37
Ich frage mal lieber doch blöd. curl ist aber schon installiert, oder. Also bitte mal auf dem FHEM Server als User anmelden und curl in der Shell eingeben.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 14 Juni 2016, 23:35:21
Danke für die blöde Frage.

Für mich war das Neuland. Hab CURL jetzt installiert und läuft soweit auf dem RPI.

Gebe ich nun folgendes in die Befehlszeile von FHEM ein:
Zitat{ qx(curl -T /opt/fhem/mailaus.xml http://admin:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }

landet folgende Fehlermeldung im LOG:
Zitatcurl: (6) Couldn't resolve host 'admin'
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 15 Juni 2016, 05:13:04
Dann müssen wir da jetzt etwas probieren.


{ qx(curl -T /opt/fhem/mailaus.xml 'http://admin:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications') }


Probiere mal so.
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 15 Juni 2016, 10:56:07
Ich habe jetzt diverse Versuche gestartet:
Zitat
{ qx(curl -X PUT -T mailaus.xml http://admin:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }
{ qx(curl -X PUT -T mailaus.xml 'http://admin:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications') }
{ qx(curl -X PUT -T mailaus.xml "http://admin:pwd@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications") }
{ qx(curl -X PUT -T mailaus.xml http://'admin':'pwd'@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }

Leider hat nichts funktioniert.
Die Fehlermeldungen sind immer:
Zitatcurl: (6) Couldn't resolve host 'admin'


Setze ich den Aufruf ohne die Angabe von admin und pwd ab, erhalte ich folgende Info:
Zitat<!DOCTYPE html>
<html><head><title>Document Error: Unauthorized</title></head>
<body><h2>Access Error: 401 -- Unauthorized</h2>
<p>Authentication Error: Your client does not have permission to access URI /ISAPI/EVENT/triggers/fielddetection-1/notifications from this server.</p>
</body>
</html>
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 15 Juni 2016, 11:39:59

{ qx(curl -X PUT -T mailaus.xml http://admin:pwd\@192.168.178.27/ISAPI/EVENT/triggers/fielddetection-1/notifications) }


Bitte mal so testen, achte auf das escapen des @

oder


{ qx(curl -X PUT -T mailaus.xml 'http://admin:pwd\@192.168.178.27/ISAPI/EVENT/triggers/fielddetection-1/notifications') }
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: pitman am 15 Juni 2016, 12:38:42
 ;D
Das war es!
Ich hatte schon angefangen die Anführungszeichen zu escapen.
Auf das @ bin ich nicht gekommen.

Vielen, vielen Dank für Deine Unterstütung.
Toll, dass Du mir bis zum Schluß weitergeholfen hast, obwohl ich mich ziemlich dämlich angestellt habe  :-[

Eine letzte Frage fällt mir gerade noch ein:
Macht es Sinn User und Passwort der Kamera nicht in der fhem.cfg zu speichern?
Falls ja, was wäre eine gute Lösung?
Titel: Antw:Curl, XML, HTTPMOD
Beitrag von: CoolTux am 15 Juni 2016, 13:25:44
By the first, Bitte Dein Threadtitel auf Gelöst stellen und Deine komplette Perlsyntax noch mal hier reinstellen.

Ich denke mal das ist eigentlich egal. Das ganze wird eh im Klartext übermittelt da http und nicht https.
Titel: Antw:Gelöst: Curl, XML, HTTPMOD (Hikvision Kamera über FHEM steuern)
Beitrag von: pitman am 15 Juni 2016, 15:00:38
@Threadtitel: Geändert.
@Syntax: Kommt gleich.
@Https: Ist bei der Kamera möglich. Gucke ich mir mal an...

Nochmal vielen Dank!
Titel: Antw:Gelöst: Curl, XML, HTTPMOD (Hikvision Kamera über FHEM steuern)
Beitrag von: CoolTux am 15 Juni 2016, 15:06:24
Aber bitte doch. Sehr gerne.



Grüße
Titel: Antw:Gelöst: Curl, XML, HTTPMOD (Hikvision Kamera über FHEM steuern)
Beitrag von: pitman am 15 Juni 2016, 15:19:15
Herausforderung:
Ich habe eine Kamera von HIKVISION im Einsatz.
Wenn im Garten eine Bewegung registriert wird, dann wird ein Video auf dem NAS gespeichert und ich werde mit 3 Snapshots per Mail  über diesen Alarm informiert.
Wenn ich allerdings zu Hause bin, dann nerven diese Alarmmails.
Ich möchte daher, dass zwar weiterhin jede Bewegung auf dem NAS gespeichert wird, aber der Mailversand ausgeschaltet wird.


Lösung:

Zunächst muß Curl z.B. per Putty auf dem Raspberry Pi installiert werden.
sudo apt-get install curl



Dann habe ich in dieser Anleitung von Hikvision ermittelt, welchen Wert ich verändern möchte und wie der grundsätzliche Aufbau des Links dazu ist:
http://oversea-download.hikvision.com/uploadfile/Leaflet/ISAPI/HIKVISION%20ISAPI_2.0-IPMD%20Service.pdf (http://oversea-download.hikvision.com/uploadfile/Leaflet/ISAPI/HIKVISION%20ISAPI_2.0-IPMD%20Service.pdf)
Per Browser ist es möglich sich den jeweiligen XML-Inhalt anzusehen. Änderungen in der Konfigurationsoberfläche der Kamera führen zu veränderten XML-Inhalten.
So kann herausgefunden werden, was genau an die Kamera gesendet werden muss.
http://ip/ISAPI/EVENT/triggers/fielddetection-1/notifications


Wie beschrieben, möchte ich möchte bei dem Smartereignis Einbruch den Mailversand deaktivieren.
Aktuell ist der Mailversand in der Kamerakonfiguration aktiviert.
Über folgenden Befehl habe ich dann den Inhalt der xml in die Datei mail_an.xml in das Verzeichnis /opt/fhem geschrieben:
{ qx(curl http://user:pwd\@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications > mail_an.xml) }

Die xml sieht in diesem Fall so aus:
<?xml version="1.0" encoding="UTF-8"?>
<EventTriggerNotificationList version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
<EventTriggerNotification>
<id>email</id>
<notificationMethod>email</notificationMethod>
<notificationRecurrence>beginning</notificationRecurrence>
</EventTriggerNotification>
</EventTriggerNotificationList>



Schaltet man den Mailversand beim Smartereignis Einbruch aus, dann hat sich die XML folgendermaßen verändert:
<?xml version="1.0" encoding="UTF-8"?>
<EventTriggerNotificationList version="2.0" xmlns="http://www.hikvision.com/ver20/XMLSchema">
</EventTriggerNotificationList>

Per Befehl speichere ich auch diese ab:
{ qx(curl http://user:pwd\@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications > mail_aus.xml) }


Es ist natürlich auch möglich die XML-Inhalte im Browser zu öffnen und dann manuell in eine XML-Datei zu schreiben und auf dem Raspberry Pi zu speichern.




In FHEM kann ich dann über die beiden folgenden Befehle den Mailverand ein- und ausschalten.
{ qx(curl -T mail_an.xml http://user:pwd\@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }
{ qx(curl -T mail_aus.xml http://user:pwd\@ip/ISAPI/EVENT/triggers/fielddetection-1/notifications) }


Auf dem gleichen Weg ist es möglich alle Einstellungen der Kamera aus FHEM heraus zu ändern.
Das oben verlinkte HIKVISION-Dokument zeigt auf, was möglich ist.


Danke für die tolle Hilfe hier!
Vielleicht kann es ja mal irgendjemand gebrauchen.