HTTP-Befehle an Kamera senden

Das was Du unter 5. gepostet hat, ist der Funktionaufruf…Du musst ihn selbstverständlich mit Deinen Daten (IP, Passwort usw. füllen…

Joachim

Und wo genau muss diese Funktion hin? Ich stehe gerade voll auf dem Schlauch. Sorry.

Ich muss das doch alles verlinken.

Die Boolean Variable hat das AktionsSkript „Include“ Und das „include“ Skript hat deine Funktion.

Jetzt müsstest du mir bitte sagen, WO ich die eigentliche Funktion einbauen soll.

Soll ich einfach noch eine Instanz erstellen mit dem Inhalt


  IP_Cam_Parameter("192.168.178.xxx", "admin", "DeinPasswort", 80, 5, GetValueBoolean(DeinButton), GetValueBoolean(DeinButton));  

???

Und was muss bei dieser Funktion an dieser Stelle rein?
GetValueBoolean(DeinButton) --> soll dort die ObjektId der Boolean Variable?

Die Funktion („f_IP-Cam.ips.php“) kannst Du im Prinzip überall im IPS speichern. Sie wird - wenn Du im IPS ein neues Skript anlegst - im Skripte-Ordner von IPS gespeichert.

Im Aktionsskript des Buttons rufst dann das zweite Stript auf, dass im Prinzip nur zwei Programmschritte hat:

  1. Der Include-Befehl, damit die Funktion diesem Skript bekannt ist
  2. Den Funktionsaufruf selbst.

Also, Du solltest ein Skript haben das diesen Inhalt hat:

//*************************************************************************************************************
// 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;
}

Dann hast Du denn Button, damit rufst Du ein zweites Skript auf, das ungefähr folgenden Inhalt hat:

include ('f_IP-Cam.ips.php');
IP_Cam_Parameter("192.168.178.xxx", "admin", "DeinPasswort", 80, 5, GetValueBoolean(DeinButton), GetValueBoolean(DeinButton)); 

Du musst Dort selbstverständlich Deine IP usw. eintragen!
„DeinButton“ ist die Objekt-ID Deines Buttons (kann man auch anders machen, aber dazu vielleicht später mehr…)

Letzteres machtst Du dann für alle fünf Kameras bzw. Buttons (Deine Switch-Variablen), die Funktion brauchst Du nur einmal…

(Was noch nicht an dieser Stelle funktioniert ist die Aktualisierung des Buttons - schau bitte erst einmal in die WEBGUI der Kamera ob das Schalten erfolgreich war - dazu muss dann der Status aus der Kamera ausgelesen werden!)

Joachim

Ich denke, dass ich es jetzt endlich kapiert habe…Sorry…Aber mache das zum ersten Mal :slight_smile:

Bekomme jetzt aber diesen Error, wenn ich das Skript ausführe…

Warning: include(f_IP-Cam.ips.php): failed to open stream: No such file or directory in C:\IP-Symcon\scripts\46471.ips.php on line 2

Warning: include(): Failed opening ‚f_IP-Cam.ips.php‘ for inclusion (include_path=’.;C:\php\pear’) in C:\IP-Symcon\scripts\46471.ips.php on line 2

Fatal error: Call to undefined function IP_Cam_Parameter() in C:\IP-Symcon\scripts\46471.ips.php on line 3
Abort Processing during Fatal-Error: Call to undefined function IP_Cam_Parameter()
Error in Script C:\IP-Symcon\scripts\46471.ips.php on Line 3

Mein „Include-Skript“ schaut so aus


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

…dann findet er die Datei mit der Funktion nicht…
Unter welchem Namen hast Du sie abgespeichert?

Joachim

Also eigentlich „f_IP-Cam“ aber bei Wert im Objekt Baum steht „20307.ips.php“

Soll ich diesen Wert einsetzen?

EDIT: Dann passiert das gleiche. Kommt der selbe Error.

Entweder das oder die Datei über den Skript-Editor umbenennen…

juhu. Das Editieren im Editor hat geholfen.

Jetzt geht es :slight_smile:

10000000 mal DANKE an dich…

Allerdings schaltet leider die AlarmFunktion noch nicht ein.

Aber: Um die Variable bzw. den Button „aktuell“ zu halten, musst Du den aktuellen Status aus der Kamera auslesen.

Wollen wir das heute machen??

So Joachim…Ich habe es jetzt geschafft…

Ich kann jetzt den Alarm im WebFront einschalten.

Aber leider nicht ausschalten.

Muss jetzt ja irgendwie dem Button zwei Funktionen mitteilen.

Oder muss ich zwei Buttons bauen?

Damit lässt es sich ANschalten


<?
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]*/));
?>

Ja, man könnte es über zwei Button machen - das ist aber nicht sehr „schön“ - oder mit anderen Worten: Man macht das einfach nicht…:wink:

Um den Button-Status anzupassen benötigst Du den Status aus Deiner Kamera!

Füge folgende Funktion dort ein, wo Du auch die andere Funktion hast:

//*************************************************************************************************************
// 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);
}

Dann machst Du ein zweites (neues) Skript dort, wo Du das andere Kamera-Skript hast, nenne as z.B. „Parameter_aktualisieren“:

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

list($BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus) = IP_Cam_Parameterstatus("IP-Deiner Kamera", "admin", "Passwort", 80);

SetValueBoolean("Objekt-ID von Deinem Button", $BewegungsmelderStatus);


In das Skript was Du vorhin erstellt hast fügst Du folgende Programmzeile hinzu:

IPS_RunScript(Objekt-ID von dem oberen (zweiten) Skript);

Es passiert also folgendes:
Wenn Du den Button klickst wird der Bewegungsmelder-Status geändert, danach wird mit der neu eingefügten Programmzeile bewirkt, dass der Status des Buttons aktualisiert wird.

Joachim

Ok das habe ich alles so wie beschrieben erledigt.

Allerdings lässt sich die Funktion noch immer nicht über einen Button ein- und ausschalten.

Gibt es irgendwelche Fehlermeldungen?

Nein. Leider nein.

Im Webfront habe ich also EINEN Button. Mit dem kann ich die AlarmFunktion einschalten. Sehe dann auch auf der Instar Seite, dass die Funktion an ist.

Drücke ich aber jetzt auf den Button „off“, dann bleibt die Funktion dennoch an.

Muss ich nicht irgendwo reinschreiben

"include (‚f_IP-Cam.ips.php‘);
IP_Cam_Parameter(„192.168.178.xxx“, „admin“, „DeinPasswort“, 80, 5, 0 GetValueBoolean(DeinButton), GetValueBoolean(DeinButton));

???

Die 0 für „aus“ habe ich ja bisher noch nirgends drin.

Ich kann jetzt schlecht in Deine Konfiguration schauen…

Führe dieses Skript bitte einmal manuell aus (so wie Du es konfiguriert hast):

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

list($BewegungsmelderSensibilitaet, $BewegungsmelderStatus, $MailversandStatus) = IP_Cam_Parameterstatus("IP-Deiner Kamera", "admin", "Passwort", 80);

SetValueBoolean("Objekt-ID von Deinem Button", $BewegungsmelderStatus);  

Warning: Wrong parameter type for SetValueBoolean() in [Skripte\Paramter_aktualisieren] on line 7

Was steht in Zeile 7?

Noch etwas:

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

Die Änderung gegenüber Deinem Skript ist das Ausrufezeichen, bitte dieses auch bei Dir ändern!

Joachim

Zeile 7 des Skriptes „Paramter aktualisieren“


SetValueBoolean("45553", $BewegungsmelderStatus);

die ID 45553 ist die von dem Button.

Die Anführungszeichen müssen weg…

OK. Jetzt leuchtet der Button „grün“ auf, wenn die Alarmfunktion an ist.

Aber ich kann leider noch immer nicht über den Button die Funktion wieder ausschalten.