HTTP-Befehle an Kamera senden

…aber ich muss jetzt auch weg…

Machen wir morgen dort weiter?

Joachim

Hast Du das Ausrufezeichen korrekt eingefügt?

Ja habe das ! korrekt eingefügt.

Leider ändert sich der Status von grün auch nicht, wenn ich über die Instar Konfig Seite den Alarm ausschalte.

Ja wir können gerne morgen weiter machen.

Bin auf jeden Fall schon mal überglücklich, dass wir soweit gekommen sind.

Besten Dank. und gn8

Also der Status wird jetzt zumindest als „on“ erkannt.

Wenn ich über Webfront den Alarm einschalte, dann springt der Button auch auf grün.

Ausschalten geht leider noch nicht über das Webfront.

Wenn ich über die Instar Konfig Seite gehe und dort den Alarm ausschalte, dann bleibt der Button grün.

Erst wenn ich manuell das „Paramter_aktual“ Script ausführe, springt der Button von „grün“ auf „aus“

Kann es sein, dass ich dem Script vielleicht ein Ereignis hinzufügen muss? Sodass also das Script alle 30 Sekunden ausgeführt wird?

Also: eine manuelle Ausführung des Skriptes „Parameter_aktualisieren“ ist nur sinnvoll, wenn Du etwas über die WebGui der Kamera geändert hast. Ich habe bei mir zwar einen Trigger mit 10 Minuten drauf, der ist aber im Normalfall nicht notwendig.
Die Aktualisierung - also die Ausführung dieses Skriptes - ist aber dann sinnvoll, wenn Du einen der Button geklickt hast. Deswegen solltest Du die Zeile:

IPS_RunScript(Objekt-ID des Parameter_aktualisieren-Skriptes); 

in Dein Aktionsskript einfügen, diese sorgt dann dafür, dass der Wert des Buttons aktualisiert wird…
Das Ganze sollte dann komplett irgendwie so aussehen:

include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xxx", "admin", "DeinPasswort", 80, 5, !GetValueBoolean(DeinButton), GetValueBoolean(DeinButton));
 IPS_RunScript(Objekt-ID des Parameter_aktualisieren-Skriptes);
 

Joachim

Hi Joachim,

ich hatte das Script schon so gemacht, wie du es geschrieben hattest.


<?
include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xxx:xx", "xxx", "xxx", 80, 5, 1, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt Alarm An]*/), GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt Alarm An]*/));
IPS_RunScript(10407 /*[Skripte\Paramter_aktualisieren_Einfahrt]*/);
?>

Und hier das Paramter Script


<?

include ('f_IP-Cam.ips.php');

list($BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus) = IP_Cam_Parameterstatus("192.168.178.xxx:xx", "xxx", "xxx", 80);

SetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt Alarm An]*/, $BewegungsmelderStatus);

?>

Trotzdem haut der Status noch nicht wirklich hin. Und ich kann den Alarm auch nicht über WebFront AUSSCHALTEN.

hier noch der Inhalt vom f_IP-Cam Script


<?

//*************************************************************************************************************
// Diese Funktion setzt verschiedene Parameter der IP-Cam
function IP_Cam_Parameter($ip, $user, $passwort, $port, $BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus)
{
$BewegungsmelderSensibilitaet = 10 - $BewegungsmelderSensibilitaet;
$BewegungsmelderStatusInt = (int)$BewegungsmelderStatus;
$MailversandStatusInt = (int)$MailversandStatus;

file_get_contents("http://$ip:$port/set_alarm.cgi?motion_armed=$BewegungsmelderStatusInt&mail=$MailversandStatusInt&motion_sensitivity=$BewegungsmelderSensibilitaet&motion_compensation=1&user=$user&pwd=$passwort");

return;
}

//*************************************************************************************************************
// Diese Funktion liest den Parameterstatus aus einer IP-Cam aus
function IP_Cam_Parameterstatus($ip, $user, $passwort, $port)
{
// Befehlsaufruf erstellen
$Befehl = "http://".$ip.":".$port."/get_params.cgi?"."user=".$user."&pwd=".$passwort;
// Kamera Auslesen
$handle = fopen($Befehl,"r"); // String öffnen
$parameter = "";
$parameter = stream_get_contents($handle); // String einlesen
//echo $parameter;
$parameterstatus = array();
$parameterstatus = explode(";",$parameter);

// Bewegungsmelder Sensibilität auslesen
$BewegungsmelderSensibilitaet = 10 - (intval(substr($parameterstatus[150], -1, 1)));

// Bewegungsmelder Aktivierung auslesen
If ((intval(substr($parameterstatus[149], -1, 1)))== 1)
    {
    $BewegungsmelderStatus = true;
    }
elseif ((intval(substr($parameterstatus[149], -1, 1)))== 0)
    {
    $BewegungsmelderStatus = false;
    }

// Mailversand Aktivierung auslesen
If ((intval(substr($parameterstatus[159], -1, 1)))== 1)
    {
    $MailversandStatus = true;
    }
elseif ((intval(substr($parameterstatus[159], -1, 1)))== 0)
    {
    $MailversandStatus = false;
    }

return array($BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus);
}

?>

Auf jeden Fall hast Du hier:

IP_Cam_Parameter("192.168.178.xxx:xx", "xxx", "xxx", 80, 5, 1, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt Alarm An]*/), GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt Alarm An]*/));
 

eine „1“ zu viel! Bitte daher die „1,“ löschen!

Joachim

das darf nicht wahr sein :slight_smile:

plötzlich geht alles…

man man man :slight_smile:

ich danke dir :slight_smile: vielen vielen Dank…

Wenn Du den Bewegungsmelder selbst in IPS auswerten willst, kannst Du Dich ja wieder melden…:smiley:

Joachim

Hm…Was bringt mir das? Ich könnte dann vielleicht ein Skript ausführen oder?

Kann ich eigentlich den Alarm jetzt auch über einen HomeMatic Sender Ein-und Ausschalten?

Ja, mit der Information das der Bewegungsmelder ausgelöst hast kannst Du im IPS - was immer Du möchtest - auslösen…
(Bei mir wird das Webfront dann z.B. auf die Seite der Kamera geschaltet und eine Stimme sagt „Bewegungsmelder xx wurde ausgelöst“, aber es gibt ganz sicher noch ganz viele andere Möglichkeiten…)

Du kannst die Bewegungsmelder auch mit Deiner Homematic-FB ein- bzw. ausschalten - dabei kann ich Dir aber nicht direkt helfen, da ich eine solche FB nicht habe. Im Prinzip läuft es dann aber wieder so, dass Du ein sehr sehr ähnliches Skript wie unter Deinem Button anlegst, dieses mal aber durch die FB ausgelöst…

Joachim

Na dann lass uns den Status des Bewegungsmelders auswerten :slight_smile:

Okay…:wink:

Hier also eine weitere Funktion die Du dort hin kopieren solltest, wo auch die anderen sind:

//*************************************************************************************************************
// Diese Funktion prüft ob der Bewegungsmelder ausgelöst wurde
function IP_Cam_BewegungsmelderAusloesung($ip, $user, $passwort, $port)
{
// Befehlsaufruf erstellen
$Befehl = "http://".$ip.":".$port."/get_status.cgi?"."user=".$user."&pwd=".$passwort;
// Kamera Auslesen
$handle = fopen($Befehl,"r"); // String öffnen
$Status = "";
$Status = stream_get_contents($handle); // String einlesen
//echo $Status;
$Alarmstatus = array();
$Alarmstatus = explode(";",$Status);

if (intval(substr($Alarmstatus[6], -1, 1)) == 1)
  {
  $BewegungsmelderAusloesung = true;
  }
  else
  {
  $BewegungsmelderAusloesung = false;
  }

return $BewegungsmelderAusloesung;
}

Da die Kamera selbst Dir keine Information sendet musst Du das folgende Skript zyklisch ausführen (bei mir habe ich 5 sek eingestellt). Dazu eine Variable Typ Boolean erstellen unter darunter dieses Skript:

include ('f_IP-Cam.ips.php');

$BewegungsmelderAusloesung = IP_Cam_BewegungsmelderAusloesung("IP Deiner Cam", "admin", "Passwort", 80);

SetValueBoolean(Objekt-ID einer Boolean Variablen, $BewegungsmelderAusloesung);

Und jetzt kommt etwas mit kleinem „Trick“. Der Button selbst hat keine Aktionsskript weil er Dir ja nur als Information dient. Damit er aber im Webfront „schön“ dargestellt wird solltest Du ihm als Aktion ein Leerskript (Das ist ein Skript das keinerlei Programmanweisungen enthält) zuweisen.

Joachim

Mist…Mir ist noch eine Sache aufgefallen…

Die Funktion „Sende Mail“ wird nicht mit angeschaltet.

Das müeen wir noch hinkriegen :slight_smile:

Sonst geht alles :slight_smile:



<?

//*************************************************************************************************************
// Diese Funktion setzt verschiedene Parameter der IP-Cam
function IP_Cam_Parameter($ip, $user, $passwort, $port, $BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus)
{
$BewegungsmelderSensibilitaet = 10 - $BewegungsmelderSensibilitaet;
$BewegungsmelderStatusInt = (int)$BewegungsmelderStatus;
$MailversandStatusInt = (int)$MailversandStatus;

file_get_contents("http://$ip:$port/set_alarm.cgi?motion_armed=$BewegungsmelderStatusInt&mail=$MailversandStatusInt&motion_sensitivity=$BewegungsmelderSensibilitaet&motion_compensation=1&user=$user&pwd=$passwort");

return;
}

//*************************************************************************************************************
// Diese Funktion liest den Parameterstatus aus einer IP-Cam aus
function IP_Cam_Parameterstatus($ip, $user, $passwort, $port)
{
// Befehlsaufruf erstellen
$Befehl = "http://".$ip.":".$port."/get_params.cgi?"."user=".$user."&pwd=".$passwort;
// Kamera Auslesen
$handle = fopen($Befehl,"r"); // String öffnen
$parameter = "";
$parameter = stream_get_contents($handle); // String einlesen
//echo $parameter;
$parameterstatus = array();
$parameterstatus = explode(";",$parameter);

// Bewegungsmelder Sensibilität auslesen
$BewegungsmelderSensibilitaet = 10 - (intval(substr($parameterstatus[150], -1, 1)));

// Bewegungsmelder Aktivierung auslesen
If ((intval(substr($parameterstatus[149], -1, 1)))== 1)
    {
    $BewegungsmelderStatus = true;
    }
elseif ((intval(substr($parameterstatus[149], -1, 1)))== 0)
    {
    $BewegungsmelderStatus = false;
    }

// Mailversand Aktivierung auslesen
If ((intval(substr($parameterstatus[159], -1, 1)))== 1)
    {
    $MailversandStatus = true;
    }
elseif ((intval(substr($parameterstatus[159], -1, 1)))== 0)
    {
    $MailversandStatus = false;
    }

return array($BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus);
}

//*************************************************************************************************************
// Diese Funktion prüft ob der Bewegungsmelder ausgelöst wurde
function IP_Cam_BewegungsmelderAusloesung($ip, $user, $passwort, $port)
{
// Befehlsaufruf erstellen
$Befehl = "http://".$ip.":".$port."/get_status.cgi?"."user=".$user."&pwd=".$passwort;
// Kamera Auslesen
$handle = fopen($Befehl,"r"); // String öffnen
$Status = "";
$Status = stream_get_contents($handle); // String einlesen
//echo $Status;
$Alarmstatus = array();
$Alarmstatus = explode(";",$Status);

if (intval(substr($Alarmstatus[6], -1, 1)) == 1)
  {
  $BewegungsmelderAusloesung = true;
  }
  else
  {
  $BewegungsmelderAusloesung = false;
  }

return $BewegungsmelderAusloesung;
}

?>

In diesem Skript musst Du ein weiteres „!“ hinzufügen:

include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xxx", "admin", "DeinPasswort", 80, 5, !GetValueBoolean(DeinButton), !GetValueBoolean(DeinButton));
 IPS_RunScript(Objekt-ID des Parameter_aktualisieren-Skriptes);  


…und zwar vor dem letzten Parameter. Das bewirkt, dass Bewegungsmelder und Mailversand immer parallel aus- bzw eingeschaltet werden.

Wenn Du den Mailversand dauerhaft einschalten möchtest, müsste es so aussehen:

include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xxx", "admin", "DeinPasswort", 80, 5, !GetValueBoolean(DeinButton), 1;
 IPS_RunScript(Objekt-ID des Parameter_aktualisieren-Skriptes);  


…der letzte Parameter wird „fest“ auf „1“ gesetzt…

Joachim

Perfekt. Jetzt eght alles. Ich freu mich. Vielen Dank nochmals an dich.

Nochmal eine Sache :slight_smile:

Habe jetzt an IPS ein Wandsnder von Homematic angelernt.

Er hat 5 Boolean Variablen.

Ich würde jetzt gerne über diesen den Alarm aller 4 Cams ein- und ausschalten.

Über Webfront geht das. Habe für alle 4 Cams die entsprechenden Scripte gebaut und Buttons angelegt.

Also 4x dieses hier


<?
include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xx:xx", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
 IPS_RunScript(10407 /*[Skripte\Kamera\Einfahrt_Paramter]*/);
?>

Wie kann ich jetzt am einfachsten diese 4 Scripte mit dem Wandsender verknüpfen?

Nein, es reicht einmal:

include ('f_IP-Cam.ips.php'); 
IP_Cam_Parameter("192.168.178.xx:xx", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.xx:xx", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.xx:xx", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.xx:xx", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
  IPS_RunScript(10407 /*[Skripte\Kamera\Einfahrt_Paramter]*/); 

Die IP müssen die der vier Kameras sein…

Joachim

Nachtrag: Noch etwas vergessen: Statt dem Status des Buttons musst Du hier die Statusvariable Deiner Homematic FB nehmen!

Also ein neues Skript und dort dann nicht den Button sondern den Sender rein?


<?
include ('f_IP-Cam.ips.php'); 
IP_Cam_Parameter("192.168.178.1:1", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.2:2", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.3:3", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
IP_Cam_Parameter("192.168.178.4:4", "xx", "xx", 80, 5, !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/), !GetValueBoolean(45553 /*[Haus\Haus verlassen \Einfahrt\Alarmfunktion]*/));
  IPS_RunScript(10407 /*[Skripte\Kamera\Einfahrt_Paramter]*/);  
?>

verstehe das nicht so richtig. :frowning:

Welche der Variablen ist die Status Variable, die ich nehmen soll?

Ich habe kein Homematic daher kann ich nur vermuten…

Also irgendeine Variable ändern ja ihren Zustand, wenn Du die Überwachung über die FB ein- bzw. ausschalten willst. Du legst also auf das (neue) Skript ein neues Ereignis was dann ausgelöst wird, wenn sich genau diese Variable ändert. Diese Variable-ID muss dann auch in das Skript.

Aber Achtung: Bei den Buttons ist es ja so, da diese beim Klicken genau den anderen Status als der Zielstatus haben, deswegen ist das „!“ vor diesen Variablen. (Im Ausgangszustand ist die Buttonvariable im Webfront z.B. „false“, der „Endzustand“ soll aber „true“ sein, daher wird an die Funktion der Variablenwert „umgekehrt“, die Bewegungsmelder gehen an und wenn nun mit der anderen Funktion der Status abgefragt wird wird dieses „true“ auf die Anzeige im Webfront übertragen!)

Wie es sich bei Deiner Homematic FB verhält weiß ich aber nicht genau, deswegen solltest Du bei „Nichtfunktion“ zur Probe mal die Ausrufezeichen entfernen.

Joachim