FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: HansDampfHH am 12 Februar 2016, 12:31:45

Titel: Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: HansDampfHH am 12 Februar 2016, 12:31:45
Hallo, ich habe mir ein PHP-Script gebaut welches ich durch FHEM trigern kann.
In dem PHP-Script schalte ich über CURL die Motion Detection meiner Webcam an bzw. aus.
Funktioniert eigentlich perfekt.

Nun wollte ich den Versuch unternehmen das ganze aus FHEM direkt heraus zu realisieren.
Soweit ich das verstanden habe sollte das mit HTTPMOD auch gehen.

Aktuell sieht meine Variante wie folgt aus:


define PM HTTPMOD http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi 60
attr PM verbose 5
attr PM set01Name MotionDetection
attr PM set01TextArg
attr PM set01URL http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi
attr PM setHeader1 Content-Type: application/x-www-form-urlencoded
attr PM setHeader2 Connection: keep-alive
attr PM setHeader3 Referer: http://192.168.178.44/md.asp
attr PM setHeader4 User-Agent: Mozilla/5.0
attr PM set01Data {"set" :{"action":"update", "ipcamSource":"md.asp", "MD_delay":"1", "MD_enable":$val, "MotionDelay":"1", "MD_SMTPenable":"1", "MD_FTPenable":"0"}}


Mittels set PM MotionDetection "1" erfolgt der Aufruf.
Im Log gibt es auch keine besonderen Hinweise:


PM: Read Callback: Request type was Set01,
header: HTTP/1.0 200 OK
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/plain
Connection: close
Date: Fri, 12 Feb 2016 11:22:21 GMT
Server: lighttpd/1.4.28-devel-1981M, buffer empty


Aber die Option wird nicht gesetzt.
Im PHP-Script werden die Parameter einfach auch nur per CURL gesendet.
Das läuft 1A.

Hat jemand bitte einen Hinweis wie ich hier weiter komme um das zu lösen?
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: frank am 12 Februar 2016, 12:54:26
schau dir mal die beispiele im wiki an. http://www.fhemwiki.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_and_send_data_to_a_device (http://www.fhemwiki.de/wiki/HTTPMOD#Advanced_configuration_to_define_a_set_and_send_data_to_a_device)
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: HansDampfHH am 12 Februar 2016, 14:00:27
Den Abschnitt kenne ich, daraus ist ja meine Logik entstanden.
Wobei da scheinbar auch ein Fehler drin steckt:
define MyDevice none 0

Da fehlt ja komplett das Modul HTTPMOD.
Sollte es nicht richtig heißen:
define MyDevice HTTPMOD none 0

Aber vielleicht hast du ja noch einen Hinweis, wie ich den Problem auf die Schliche komme?
Im Log sieht das ja gut aus, nur geschaltet wird an der Webcam nicht.


2016.02.12 13:55:12 5: PM: set called with MotionDetection on
2016.02.12 13:55:12 5: PM: set found option MotionDetection in attribute set01Name
2016.02.12 13:55:12 5: PM: set found on in rmap and converted to 1
2016.02.12 13:55:12 4: PM: set will now set MotionDetection -> 1
2016.02.12 13:55:12 5: PM: AddToQueue called, initial send queue length : 0
2016.02.12 13:55:12 5: PM: AddToQueue adds type Set01 to URL http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi, data {"set" :{"action":"update", "ipcamSource":"md.asp", "MD_delay":"1", "MD_enable":1, "MotionDelay":"1", "MD_SMTPenable":"1", "MD_FTPenable":"0"}}, header Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Referer: http://192.168.148.37/md.asp
User-Agent: Mozilla/5.0
2016.02.12 13:55:12 5: PM: HandleSendQueue called, qlen = 1
2016.02.12 13:55:12 4: PM: HandleSendQueue sends request type Set01 to URL http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi, data {"set" :{"action":"update", "ipcamSource":"md.asp", "MD_delay":"1", "MD_enable":1, "MotionDelay":"1", "MD_SMTPenable":"1", "MD_FTPenable":"0"}}, header Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Referer: http://192.168.148.37/md.asp
User-Agent: Mozilla/5.0, timeout 2
2016.02.12 13:55:12 4: HttpUtils url=http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi
2016.02.12 13:55:12 4: http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi: HTTP response code 200
2016.02.12 13:55:12 4: HttpUtils http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi: Got data, length: 0
2016.02.12 13:55:12 4: HttpUtils http://USER:PASS@192.168.178.44/camera-cgi/admin/param.cgi: Zero length data, header follows:
2016.02.12 13:55:12 4:   Pragma: no-cache
2016.02.12 13:55:12 4:   Cache-Control: no-cache
2016.02.12 13:55:12 4:   Content-Type: text/plain
2016.02.12 13:55:12 4:   Connection: close
2016.02.12 13:55:12 4:   Date: Fri, 12 Feb 2016 12:55:12 GMT
2016.02.12 13:55:12 4:   Server: lighttpd/1.4.28-devel-1981M
2016.02.12 13:55:12 5: PM: Read Callback: Request type was Set01,
header: HTTP/1.0 200 OK
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/plain
Connection: close
Date: Fri, 12 Feb 2016 12:55:12 GMT
Server: lighttpd/1.4.28-devel-1981M, buffer empty
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: frank am 12 Februar 2016, 14:37:25
ZitatDa fehlt ja komplett das Modul HTTPMOD.
Sollte es nicht richtig heißen:
define MyDevice HTTPMOD none 0
das beispiel ist dann für das DEF und nicht für fhem.cfg, passt also schon.

die anführungszeichen werden nicht in den string eingebaut, siehe dein log
Zitat.... "MD_delay":"1", "MD_enable":1, "MotionDelay":"1", ...

mach das wie im wiki. im attr set01Data die anführungszeichen um das "$val" und im set aufruf die anführungszeichen bei "1" weglassen. dann entfällt auch das attr set01TextArg.
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: HansDampfHH am 12 Februar 2016, 16:41:13
Okay, das bringt leider keine Veränderung den Parameter als String zu übergeben.
Gleicher Log-Output. Sehr schade, wäre deutlich schöner direkt aus FHEM diesen Schalter zu nutzen.
Könnte ich auf mein CURL-Script verzichten.
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: frank am 12 Februar 2016, 16:52:36
du musst mal im netzwerk sniffen, zb mit wireshark. es gibt sicher noch einen unterschied.
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: HansDampfHH am 12 Februar 2016, 17:59:26
Hm, wenn ich mit Wireshark aufzeichne und auf der "echten" Setup-Seite der Webcam den Post-Request absetze wird das in Wireshark aufgezeichnet.
Wenn ich den Filter setze: http.request.method == "POST"
...sehe ich den Request und auch die Header und Params.

Wenn ich in FHEM set PM MotionDetection on absetze wird da kein POST aufgezeichnet.
Verstehe ich das Modul HTTPMOD komplett falsch? WIrd da kein Post-Request abgesetzt?
Titel: Antw:Mittels HTTPMOD die Webcam Motion Detection schalten
Beitrag von: StefanStrobel am 13 Februar 2016, 09:45:33
Hallo,

wenn Du set01Data angibst, dann erzeugt "set MotionDetection" auch einen Post. Es ist aber leicht sich mit Wireshark selbst auszutricksen. Im Zwiefelsfall würde ich eher die Requests über die BurpSuite schicken. Da siehst man leichter was tatsächlich auf HTTP-Ebene passiert.
In jedem Fall aber fehlt in Deinen Post-Daten das Anführungszeichen. Dein Kamera akzeptiert den String sonst wohl nicht.

attr PM set01Data {"set" :{"action":"update", "ipcamSource":"md.asp", "MD_delay":"1", "MD_enable":"$val", "MotionDelay":"1", "MD_SMTPenable":"1", "MD_FTPenable":"0"}}

Wenn es dann immer noch nicht klappt, muss noch weitere Unterschiede geben zwischen dem Request vom Browser und dem Request, den Du mit HTTPMOD definiert hast. Da hilft dann wieder die BurpSuite ...

Gruss
    Stefan