Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst CGI Befehle via Webseite an IPCAM senden

Mitglied: weaslflink

weaslflink (Level 1) - Jetzt verbinden

02.02.2016, aktualisiert 04.02.2016, 2988 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 :
01.
http://[IP-der-Kamera]/cgi-bin/hi3510/ptzctrl.cgi?-act=right
Schwenken Stoppen:
01.
http://[IP-der-Kamera]/cgi-bin/hi3510/ptzctrl.cgi?-act=stop
usw.

Wenn ich nun hieraus einen Hyperlink erstelle werde ich zur Seite weitergeleitet mit folgender Rückmeldung
01.
call ptz funtion success
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.
01.
 
02.
<p><iframe name="response" src="" style="visibility:hidden"</iframe></p>
03.
<a href="http://192.168.186.42/cgi-bin/hi3510/ptzctrl.cgi?-act=stop" target="response">Stop</a>
04.
......
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

Ich bedanke mich im Voraus für die Hilfe
Mitglied: 126919
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 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 . Als Grundlage also schon mal ein Anfang für dein Projekt ...
01.
<!doctype html>
02.
<html>
03.
<head>
04.
<meta charset="utf-8">
05.
<title>Ajax CAM Test</title>
06.
<style type="text/css">
07.
	body { font-family:Verdana, Geneva, sans-serif; font-size: 13px}
08.
	table.control td {
09.
	text-align: center;
10.
	line-height:30px;
11.
	height: 30px;
12.
	width: 30px;
13.
}
14.
#status {
15.
	color:red;
16.
	font-weight:bold;	
17.
}
18.
</style>
19.
</head>
20.

21.
<!-- jQuery Library laden (kann natürlich bei Bedarf auch lokal heruntergeladen und dann eingebunden werden) -->
22.
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
23.

24.
<script type="text/javascript">
25.
/* Funktion die die Befehle entgegen nimmt und an die Kamera schickt
26.
Parameter 1 = Ein String welchen Befehl den die Kamera ausführen soll
27.
Parameter 2 = Wenn dieser Wert größer 0 ist, dann wird der Stop-Befehl mit der angegebenen Anzahl an Sekunden verzögert ausgeführt.
28.
*/
29.
function SendCommand(cmd, step){
30.
	// URL der Kamers (ohne Parameter)
31.
	var url = 'http://[IP der CAM]/cgi-bin/hi3510/ptzctrl.cgi';
32.
	// Aktion welche in der Variablen 'cmd' steht via GET-Request an die Kamera senden
33.
	$.get(url,{'-act': cmd}).done(function(data){
34.
		$('#status').text("Current command: " + cmd); // Bei erfolg Status im DIV ausgeben
35.
		// Wenn ein step angegeben wurde starte timer und führe dann den Stop-Befehlaus
36.
		if(step != 0){
37.
			window.setTimeout(function(){
38.
				// Stop-Aktion an CAM senden
39.
				$.get(url,{'-act': 'stop'}).done(function(data){
40.
					$('#status').text("Stopped"); // Status nach Aktion ausgeben
41.
				});	
42.
			},step * 1000); //Timeout von Sekunden in Millisekunden umrechnen
43.
		}
44.
	}).fail(function(data){
45.
		$('#status').text("Failure to send command: " + data.statusText); //Bei einem Fehler Status im DIV ausgeben
46.
	});
47.
}
48.
</script>
49.
<body>
50.
<table width="90" height="90" border="0" cellpadding="0" cellspacing="0" class="control">
51.
  <tr>
52.
    <td>&nbsp;</td>
53.
    <td><a href="#" onClick="SendCommand('up',2)">Up</a></td>
54.
    <td>&nbsp;</td>
55.
  </tr>
56.
  <tr>
57.
    <td><a href="#" onClick="SendCommand('left',2)">Left</a></td>
58.
    <td><a href="#" onClick="SendCommand('stop',0)">Stop</a></td>
59.
    <td><a href="#" onClick="SendCommand('right',2)">Right</a></td>
60.
  </tr>
61.
  <tr>
62.
    <td>&nbsp;</td>
63.
    <td><a href="#" onClick="SendCommand('down',2)">Down</a></td>
64.
    <td>&nbsp;</td>
65.
  </tr>
66.
</table>
67.
<!-- Status DIV in dem Meldungen der Ajax Requests erscheinen -->
68.
<div id="status"></div>
69.
</body>
70.
</html>
Hoffe das der Code dir etwas hilft, viel Spass beim Schwenken

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

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

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
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
01.
 
02.
<?php
03.
$cmd=$_GET["cmd"];
04.
$stop="stop";
05.
$url="http://[IP-KAMERA]/cgi-bin/hi3510/ptzctrl.cgi?-act=";
06.
$del="rm ptz*";
07.
	shell_exec("wget $url$cmd && sleep 1 && wget $url$stop && $del");
08.
?>

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
01.
 
02.
<a href="control.php?cmd=right" target="control">Rechts</a>
03.
<a href="control.php?cmd=down" target="control">Unten</a>
04.
<a href="control.php?cmd=left" target="control">Links</a>
05.
<a href="control.php?cmd=up" target="control">Oben</a>
06.
<p></p>
07.
<iframe name="control" style="display:none"></iframe>


Man kann das alles bestimmt noch etwas sauber und schöner schreiben aber es funktioniert und das ist die Hauptsache

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

Lg Weaslflink
Bitte warten ..
Ähnliche Inhalte
Exchange Server

"Send on Behalf anstelle" von "Send as"

gelöst Frage von arduinoExchange Server3 Kommentare

Hallo Wir haben auf unserem Exchange 2010 verschiedene Shared Mailboxen, die von Usern mit der Send-as Berechtigung genutzt werden. ...

Batch & Shell

Powershell Send-Mailmessage

gelöst Frage von TestwilliBatch & Shell2 Kommentare

Guten Morgen zusammen, bräuchte mal Hilfe bei dem cmdlet Get-ChildItem / Send-MailMessage, Verschicke mit Send-MailMessage Emails mit Anhang. Das ...

Router & Routing

Kein Zugriff auf IPCam über das Internet

Frage von achkleinRouter & Routing3 Kommentare

Hallo, ich habe eine IP-Kamera eingerichtet, auf diese soll über das Internet zugegriffen werden. Die Kamera hat im LAN ...

Webentwicklung

CGI-Upload-Script hinter nginx-Reverse-Proxy

gelöst Frage von DexthaWebentwicklung1 Kommentar

Hallo, ich tausche gerade meinen Apache-Reverse-Proxy gegen einen nginx-Reverse-Proxy ab. Ich habe auf dem Applikationsserver eine Upload-Formular, welches mit ...

Neue Wissensbeiträge
Sicherheit
Böser Bug in Domänenkennwortrichtlinie!
Information von DerWoWusste vor 3 StundenSicherheit

Ich spiege mal Borncity: In Kürze: Nutzt Ihr eine Domänen-Kennwortrichtlinie der herkömmlichen Art (keine PSO-Richtlinie)? Ja? Und plant Ihr, ...

Windows Tools
7-Zip v19.0 MSI silent uninstall
Tipp von Dirmhirn vor 1 TagWindows Tools5 Kommentare

Hi, ich versuchte grade 7-Zip v19.0 MSI silent zu deinstallieren. mit msiexec /x stürzt mir immer der Explorer ab. ...

Windows 10

Theoretisches dauerhaftes Abschalten von Windows-Updates (Windows 10)

Tipp von beidermachtvongreyscull vor 1 TagWindows 105 Kommentare

Moin Kollegen, ich weiß, ich weiß, nur ein Wahnsinniger sperrt Windows-Updates, aber dennoch gibt es Gründe, Windows 10 auf ...

Windows Installation

Windows Install ISO mit übergroßer Install.wim auf FAT32 übertragen

Tipp von Lochkartenstanzer vor 6 TagenWindows Installation11 Kommentare

Moin Kollegen, Viele von euch werden sicher aus praktischen Gründen nicht nur DVDs oder "virtuelle" CD-Laufwerke (Zalman, IODD) zum ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Ca. 120 Ubiquiti Unifi AP-AC Pro in einem Netz
Frage von aditzLAN, WAN, Wireless20 Kommentare

Hallo Ubiquiti-Spezialisten, geplant ist ein flächendeckendes WLAN für ein Altenheim mit den oben genannten APs. Ich habe mal auf ...

Windows 10
Win10 Build Nummer auslesen
Frage von MotoMicWindows 1017 Kommentare

Hallo, ich habe hier einen Windows 10 Pro installierten Rechner. Leider ist mir nicht bekannt, welche Build Nummer installiert ...

Sicherheitsgrundlagen
Sperrung der IMAP Aktivierung: GMail für Apple Mail - in einer Schul-Google-Suite
Frage von lazylandSicherheitsgrundlagen15 Kommentare

Hallo, ich würde mich sehr über Eure Einschätzung und Rat freuen: Der Administrator einer Google Suite (Schule) löscht aus ...

Server-Hardware
Anschaffung neuer Server
Frage von tschip1801Server-Hardware14 Kommentare

unsere Firma bekommt einen neuen Server, ich bin schon sehr lange nicht mehr so tief im geschehen um hier ...