Kauftipp DLINK 932L

Ahhh ein grünes Lämpchen ! Danke

Ein Bild hat noch gefehlt

dlink.jpg

Ich möchte die Bewegungserkennung der Kamera über IPS abschalten, wenn jemand zuhause ist.

Dazu habe ich versucht, CGI-Befehlen zu nutzen. Wenn ich die Kamera mit <ip>/motion.cgi aufrufe, bekomme ich auch die aktuellen Einstellungen angezeigt, aber schalten kann ich sie nicht. Ein <ip>/motion.cgi?enable=no funktioniert also nicht. Die Benutzerzugriffskontrolle habe ich vorher deaktiviert.

Mit dem Problem bin ich offenbar nicht allein. Aber gibt es auch eine Lösung?

Grüße
galleto

Hab dafür folgendes Skript geklöppelt (wird über ein Variablen-Ereignis geschaltet) :

<?

// *** Daten der Kamera anpassen ***

$user = "abc";
$pw = "123";
$ip = "192.168.x.y";


// *** ab hier nichts mehr ändern ***

if($_IPS['VALUE']) $switch = 1;
else $switch = 0;

$sURL = $ip."/setSystemMotion";
$sMessage = "MotionDetectionEnable=".$switch."&ConfigSystemMotion=Save";

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $sURL);
	 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
	 curl_setopt($ch, CURLOPT_USERPWD, $user.":".$pw);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $sMessage);

    $sResult = curl_exec($ch);
    if (curl_errno($ch)) print curl_error($ch);
    else
   	 {
        curl_close($ch);
        return $sResult;
	    }
?>

Man sieht es nicht, aber das hat mich Tage gekostet. Halblaie eben. :wink:

Grüße
galleto

Bekomme folgende Fehlermeldung:

Notice: Undefined index: VALUE in /var/lib/symcon/scripts/48398.ips.php on line 12

Hat jemand eine Idee was ggf. angepasst werden muss?

Besten Dank

Nö, da muss nix angepasst werden. Aber eine auslösende Variable musst Du an das Skript hängen, sozusagen den Schalter.

EDIT: Zum Nachlesen.

Grüße
galleto

Vielen Dank für die schnelle Rückmeldung

Ich habe eine Variable unter dem Skript angelegt und als Aktion das Skript hinterlegt.

switch.PNG

Bin begeistert, dass aktivieren bzw. deaktivieren der Bewegungserkennung funktioniert :loveips:

Einzig der Status des Buttons „an“ bzw. „aus“ wird im Webfront nicht angezeigt.

Und das funktioniert? :eek:

Häng mal Deine Variable als Ereignis an das Skript und verknüpfe sie mit folgendem Skript:

<?

if($_IPS['SENDER'] == "WebFront")
	{
   SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
	}

?>

Grüße
galleto

Mit der neuesten Firmware funktionieren die Skripte offensichtlich nicht mehr. :confused:

Hat das schon jemand gelöst?

Grüße
galleto

Zum Fixen des Skripts für die neue Firmware benötige ich Hilfe.

Das Skript schaltet in der Cam nichts mehr. Eine Fehlermeldung erhalte ich aber auch nicht. :confused:
EDIT sagt: Ein „echo curl_exec($ch)“ bringt „The request is forbidden“.

Das sind die letzten Release-Notes:

  1. Upgrade mydlink agent to 2.1.0-b27.
  2. Change the HTTPs self-signed certificate to SHA2 algorithms.
  3. Support Mydlink UID mechanism (mdb get dev_uid)
  4. Change the support page hyperlink of Firmware Upgrade web-UI to Building Networks for People | D-Link Deutschland.
  5. Updated OpenSSL to v0.9.8o.
  6. Remove mDNSResponder daemon on the unit.
  7. Remove the Bonjour settings from the Network Setup web-UI.
  8. Change the default system time to 2016-01-01
  9. Update the years in the copyright statement for IP Camera’s web-UI to 2016.
  10. Add authentication to CGI /config/stream_info.cgi.
  11. Offer the password validation on console port. (Console’s Password is synchronized with the admin’s password)

Frühere Release-Notes enthalten außerdem noch folgende möglicherweise relevante Punkte:

  • Add the login check mechanism to solve Brute Force Attack issue
  • Remove SSL, change to support TLS.

Das ist das Skript:

<?
// *** Daten der Kamera anpassen ***

$user = "abc";
$pw = "123";
$ip = "192.168.x.y";


// *** ab hier nichts mehr ändern ***

if($_IPS['VALUE']) $switch = 1;
else $switch = 0;

$sURL = $ip."/setSystemMotion";
$sMessage = "MotionDetectionEnable=".$switch."&ConfigSystemMotion=Save";

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $sURL);
	 curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC ) ;
	 curl_setopt($ch, CURLOPT_USERPWD, $user.":".$pw);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $sMessage);

    $sResult = curl_exec($ch);
    if (curl_errno($ch)) print curl_error($ch);
    else
   	 {
        curl_close($ch);
        return $sResult;
	    }
?>

Kann mir jemand sagen, an welcher Stelle Anpassungen notwendig sind? Danke!

Grüße
galleto

Lösung selbst gefunden! :smiley:

Im Skript muss folgende Zeile im Block „$ch = curl_init();“ ergänzt werden:

curl_setopt($ch, CURLOPT_REFERER, 'http://'.$ip.'/motion.htm');

Die D-Link-Leute haben außerdem die aktuellste Firmware von 08/2016 zurückgezogen und empfehlen jetzt wieder die Firmware von 10/2015.

Grüße
galleto

Falls es nicht funktioniert und $sResult folgenden Fehler enthält…

Error: File Not Found
getfile: Cannot open URL(/etc_ro/web/setform/setSystemMotion,No such file or directory)

…dann muss im Skript der Inhalt von CURLOPT_POSTFIELDS wie folgt angepasst werden:


//alt:
$sMessage = "MotionDetectionEnable=".$switch."&ConfigSystemMotion=Save";

//neu:
$sMessage = "ReplySuccessPage=motion.htm&MotionDetectionEnable=".$switch."&ConfigSystemMotion=Save";

Grüße
galleto