Gelöst: Curl, XML, HTTPMOD (Hikvision Kamera über FHEM steuern)

Begonnen von pitman, 30 Mai 2016, 23:17:18

Vorheriges Thema - Nächstes Thema

pitman

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.

CoolTux

schau mal ob fhem eine Shell hat. Eventuell brauch er das.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

Kannst Du das eventuell näher erläutern?

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

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'

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

#22
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>

CoolTux


{ 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') }
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

 ;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?

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

@Threadtitel: Geändert.
@Syntax: Kommt gleich.
@Https: Ist bei der Kamera möglich. Gucke ich mir mal an...

Nochmal vielen Dank!

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

pitman

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
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.