CGI Befehle via Webseite an IPCAM senden

Mitglied: weaslflink

weaslflink (Level 1) - Jetzt verbinden

02.02.2016, aktualisiert 04.02.2016, 4570 Aufrufe, 7 Kommentare

Hallo Zusammen,

ich hoffe ihr könnt mir weiterhelfen. Vorab ich kenne mich nicht gut mit JavaScript aus.

Mein Vorhaben ist, meine IP-Kamera über meine Webseite steuern zu können. Mein Problem hierbei ist, dass ich nicht genau weiß wie ich es hin bekomme, dass die Befehle zur Kamerasteuerung nur ausgeführt werden und nicht als Seite geladen werden.

Die Befehle der Kamera sehen z.b so aus
Schwenken Rechts :
Schwenken Stoppen:
usw.

Wenn ich nun hieraus einen Hyperlink erstelle werde ich zur Seite weitergeleitet mit folgender Rückmeldung
und die Kamera schwenkt bis der "Stop"-Befehl ausgeführt wird.

Ich habe es auch mit einem unsichtbaren IFRAME probiert, hat jedoch leider nicht funktioniert, da hier die Kamera anscheinend nicht angesprochen wurde. Der Vollständigkeit halber wurde folgender Code verwendet.

In Zuge meiner Recherche habe ich herausgefunden, dass es mit Javascript und Ajax funktionieren sollte, da man hier die Adresse ansprechen aber die Antwort unterdrücken kann.

Das I-Tüpfelchen des ganzen wäre eine "Step" Funktion, soll heißen:
Befehl Schwenken
warte X Sekunden
Befehl Stop

Bevor jetzt die "Hater" kommen :D, Ich erwarte und möchte keine Copy-Paste Antwort, sondern das ganze auch wenig verstehen ;-) face-wink

Ich bedanke mich im Voraus für die Hilfe
Mitglied: 126919
126919 (Level 1)
LÖSUNG 02.02.2016, aktualisiert 04.02.2016
Cherio @weaslflink,

hier ein möglicher Code welcher mit den ausreichend erläuternden Kommentaren versehen wurde:
Da ich hier deine Kamera natürlich nicht für einen Test da habe ;-) face-wink ist der Code nur unter Vorbehalt funktionsfähig auch wegen eventuellen Sicherheitsrestriktionen der CAM. Aber mit den beigefügten Kommentaren im Code und der jQuery API Dokumentation solltest du das hinbekommen zumal du ja richtigerweise etwas davon lernen willst :-) face-smile. Als Grundlage also schon mal ein Anfang für dein Projekt ...
Hoffe das der Code dir etwas hilft, viel Spass beim Schwenken :-) face-smile

fk
VMWare , Silicon Valley
Bitte warten ..
Mitglied: weaslflink
03.02.2016 um 07:19 Uhr
Guten Morgen Flachkoepper ,

Vielen Dank für deine rasche Antwort. Ich werde mich gleich mal versuchen den Code nachfolgen und ausprobieren.
Ich melde mich sobald ich nicht weiter komme bzw es funktioniert hat ;-) face-wink

Lg weaslflink
Bitte warten ..
Mitglied: weaslflink
03.02.2016 um 11:15 Uhr
Hallo Flachkoepper ,

also ich bekomme es nicht ganz zum laufen. Das merkwürdige ist, dass ich keine Meldungen im DIV Container Status angezeigt bekomme.

am Code habe ich Zeile 33 geändert
von
$.get(url,{'-act': cmd}).done(function(data){
zu
$.get(url,{'?-act'=: cmd}).done(function(data){
da der http request http://192.168.*.*/cgi-bin/hi3510/ptzctrl.cgi?-act=stop"ist.

Kann man den Code irgendwie debuggen um Zeile für Zeile durchzugehen ?

lg weaslflink
Bitte warten ..
Mitglied: 126919
126919 (Level 1)
LÖSUNG 03.02.2016, aktualisiert 04.02.2016
Zitat von @weaslflink:

Das merkwürdige ist, dass ich keine Meldungen im DIV Container Status angezeigt bekomme.
JavaScript zufällig über NoScript und Konsorten deaktiviert ?
am Code habe ich Zeile 33 geändert
von
$.get(url,{'-act': cmd}).done(function(data){
zu
$.get(url,{'?-act'=:
Falsch. Das Fragezeichen und das Gleichheitszeichen dürfen hier nicht stehen weil das jQuery automatisch macht, dieser Parameter enthält nur ein reines Array der Daten die aus Eigenschaft : Wert Paaren bestehen! Das sind ja die GET-Parameter die an die CAM mit der URL als Get-Request gesendet werden.

Kann man den Code irgendwie debuggen um Zeile für Zeile durchzugehen ?
Nutze die Developer-Tools der Browser (F12) die enthalten einen JavaScript Debugger.

Du solltest auch sicherstellen das die CAM Remote XMLHTTPRequests per Same-Origin Policy überhaupt zulässt. Das lässt sich im HTTP-Response Header überprüfen, den du dir ebenfalls mit den Developer-Tools anzeigen lassen kannst.

Das es einfach wird habe ich ja nicht gesagt. Du musst dir schon mal die Doku dazu genauer ansehen, dann hättest du auch obige fehlerhafte Anpassung nicht gemacht, du wolltest ja etwas Arbeit :-) face-smile dann ran ans Lesen...
Bitte warten ..
Mitglied: weaslflink
04.02.2016 um 15:32 Uhr
Hey,
hatte gestern leider keine Zeit mehr alles auszuprobieren, hatte mich aber noch ein bisschen in die Materie eingelesen.
Ich hatte so ein Brett vorm Kopf. F12 klar ! Hätte man eigentlich auch von selbst drauf kommen können aber ok :-D face-big-smile.

Zu meinem aktuellen Stand:

Ich hab meinen Webserver (Raspberry PI 2) nur über https laufen, daher musste ich auch die jQuery API über https laden.
Bekomme jetzt auch eine Meldung im DIV Container angezeigt nur leider nicht die erwünschte.

Das jetzige Problem ist, dass ich mixed Content habe weil die Kamera nur über http erreichbar ist und mein Server nur über https.
Mein Lösungsansatz wäre entweder die Kamera über https zu tunneln oder, da bin ich gerade dabei zu recherchieren, ob ich das auch über jQuery hin bekomme, was natürlich die bessere Lösung ist.

Weaslflink
Bitte warten ..
Mitglied: 126919
126919 (Level 1)
04.02.2016, aktualisiert um 18:00 Uhr
angezeigt nur leider nicht die erwünschte.
Wie gesagt keine Kamera (Du sprichst ja immer nur von "Kamera" und nennst noch nicht mal den Typ) keine Info dazu, kein Test, sorry ... Ich schätze die SameOrigin Policy greift bei dieser.

Ich würde die Kommunikation mit der Kamera nicht direkt über das Frontend via JavaScript vornehmen sondern die Kommunikation ein PHP-Script indirekt erledigen lassen welches die Befehle via curl an die Cam sendet und dein JavaScript dann via Ajax die Befehle an dein PHP-Script sendet, damit erschlägst du zwei Fliegen mit einer Klappe und die Probleme mit SSL und der JavaScript SameOrigin-Policy sind Geschichte.
Bitte warten ..
Mitglied: weaslflink
10.02.2016, aktualisiert um 11:41 Uhr
Hallo,
dein Tipp mit der Kommunikation über ein PHP-Scrip hatte mich auf eine Idee gebracht. Warum nicht via shell_exec die Kamera steuern.
Das ganze habe ich so umgesetzt.

control.php

Ich musste hier am Ende nochmal den Befehl "rm ptz*" einfügen da mir der wget Befehl logischerweise eine Datei mit der Antwort der Kamera erstellt.

Die HTML-Datei über welche der Stream und Steuerung eingebunden schaut so aus (nur Steuerungsteil).
livefeed.html


Man kann das alles bestimmt noch etwas sauber und schöner schreiben aber es funktioniert und das ist die Hauptsache :-) face-smile

Ich bedanke mich nochmal bei dir für deine großartige Hilfe Flachkoepper.

Lg Weaslflink
Bitte warten ..
Heiß diskutierte Inhalte
Off Topic
Realistische Gehaltsvorstellung für eine "IT-Allroundkraft"
gelöst JiggyLeeVor 1 TagFrageOff Topic22 Kommentare

Hallo an alle, ich hege momentan den Wunsch mich von der alten verstaubten Behörden Bürokratie und langweiliger Aufgaben los zu lösen und in einem ...

Windows 10
Windows 10 Geschwindigkeitprobleme trotz viel mehr Gb Ram
Matthes88Vor 1 TagFrageWindows 1048 Kommentare

Hallo ihr lieben aaaalso : Da mein neuer Arbeitsspeicher (32gb) von meiner alten Windows 7 version (max mit 8gb kompatibel) nicht angenommen wurde, habe ...

Humor (lol)
Tipp: Dinge, die man besser nicht klaut
altmetallerVor 1 TagTippHumor (lol)14 Kommentare

Hallo, so wurde meiner Hündin z.B. heute der (eingeschaltete) GPS-Tracker mit Mobilfunkanbindung quasi "direkt vom Halsband weggefunden". Akku hatte noch 60% :-P Und ich ...

Grafikkarten & Monitore
Monitorhalterung mit 80cm Armlänge
ben1300Vor 1 TagFrageGrafikkarten & Monitore7 Kommentare

Guten Abend ! ich bin auf der Suche nach einer Monitorhalterung, im besten Fall ohne Bohrung für einen 28" Monitor (Vesa Halterung). Nun kommt ...

Netzwerkmanagement
Sicherheitsrisiken Synology DS Admin Konto
RitchtoolsVor 21 StundenFrageNetzwerkmanagement6 Kommentare

Hallo Zusammen, ich habe die Pflege von einem Firmen NAS übernommen (Synology) es sind mehrere Rechner im Netzwerk die auf Daten zugreifen. Leider hat ...

Microsoft
Datenkrake - Browser
DennisWeberVor 18 StundenErfahrungsberichtMicrosoft6 Kommentare

Hallo zusammen, ich empfehle euch mal definitiv in "Temp" Verzeichnis eures Browsers zu schauen. Es war für mich erschreckend, wie viele wichtige Dokumente und ...

Cloud-Dienste
Cloud PBX bzw. IP Telefon für Ausland
decehakanVor 1 TagFrageCloud-Dienste3 Kommentare

Hallo Zusammen, Ich suche Cloud Telefon ( Cloud PBX, IP-Telefon), sodass ich von Ausland aus über eine deutsche Rufnummer auf mein Handy erreichbar bin. ...

LAN, WAN, Wireless
Starlink im Unternehmen?
0xFFFFVor 3 StundenFrageLAN, WAN, Wireless17 Kommentare

Guten Morgen Admins, leider leiden wir darunter, dass wir uns hier in DE noch in einem Entwicklungsland was die Internetanbindung angeht, sehr. Nun kam ...