Ich hätte hier noch ne ältere Bastelei. Anleitung: Gegebenenfalls den Host anpassen, ansonsten einfach ausführen. Variablen erstellen sich dann von alleine, wenn Anrufe kommen und gehen (und bleiben dann auch). Sinn der Übung war, dass ich ein vollautomatisches Skript haben wollte, das wirklich alles inklusive Socket, RegisterVariable, Dummy-Instanz und Variablenprofil erstellt :).
<?php
$host = "fritz.box";
define("STATUS_VACANT", 0);
define("STATUS_OUT_RING", 1);
define("STATUS_OUT_MISSED", 2);
define("STATUS_OUT_CONNECTED", 3);
define("STATUS_OUT_DISCONNECTED", 4);
define("STATUS_IN_RING", 5);
define("STATUS_IN_MISSED", 6);
define("STATUS_IN_CONNECTED", 7);
define("STATUS_IN_DISCONNECTED", 8);
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];
switch ($IPS_SENDER)
{
case "Execute":
IPS_SetHidden($IPS_SELF, true);
$profileID = @IPS_GetVariableProfile("PhoneConnectionStatus");
if ($profileID === false)
{
IPS_CreateVariableProfile("PhoneConnectionStatus", 1);
IPS_SetVariableProfileValues("PhoneConnectionStatus", 0, 8, 0);
IPS_SetVariableProfileIcon("PhoneConnectionStatus", "ArrowRight");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 0, "frei", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 1, "eingehend - klingelt", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 2, "eingehend - abgebrochen", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 3, "eingehend - verbunden", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 4, "eingehend - getrennt", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 5, "ausgehend - klingelt", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 6, "ausgehend - abwesend", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 7, "ausgehend - verbunden", "");
IPS_SetVariableProfileAssociation("PhoneConnectionStatus", 8, "ausgehend - getrennt", "");
}
$parentObject = IPS_GetObject($parentID);
if ($parentObject['ObjectType'] !== 1)
{
$instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
IPS_SetParent($instanceID, $parentID);
$parentID = $instanceID;
IPS_SetName($instanceID, "FRITZ!Box");
IPS_SetParent($IPS_SELF, $parentID);
}
$socketID = @IPS_GetInstanceIDByName("FRITZ!Box Socket", 0);
if ($socketID === false)
{
$socketID = IPS_CreateInstance("{3CFF0FD9-E306-41DB-9B5A-9D06D38576C3}");
IPS_SetName($socketID, "FRITZ!Box Socket");
}
CSCK_SetHost($socketID, $host);
CSCK_SetPort($socketID, 1012);
CSCK_SetOpen($socketID, true);
IPS_ApplyChanges($socketID);
$rvID = @IPS_GetInstanceIDByName("FRITZ!Box Register Variable", $parentID);
if ($rvID === false)
{
$rvID = IPS_CreateInstance("{F3855B3C-7CD6-47CA-97AB-E66D346C037F}");
IPS_SetParent($rvID, $parentID);
IPS_SetName($rvID, "FRITZ!Box Register Variable");
}
RegVar_SetRXObjectID($rvID, $IPS_SELF);
IPS_ConnectInstance($rvID, $socketID);
IPS_ApplyChanges($rvID);
break;
case "RegisterVariable":
$data = explode(";", $IPS_VALUE);
$ts = strtotime($data[0]);
$connectionID = $data[2];
switch ($data[1])
{
case "CALL":
// Datum;CALL;ConnectionID;Nebenstelle;GenutzteNummer;AngerufeneNummer;
$extension = $data[3];
$internalNumber = $data[4];
$externalNumber = $data[5];
$line = $data[6];
addConnection($connectionID, STATUS_OUT_RING, $ts, $internalNumber, $externalNumber, $extension, $line);
break;
case "RING":
// Datum;RING;ConnectionID;Anrufer-Nr;Angerufene-Nummer;
$externalNumber = $data[3];
$internalNumber = $data[4];
$line = $data[5];
addConnection($connectionID, STATUS_IN_RING, $ts, $internalNumber, $externalNumber, "", $line);
break;
case "CONNECT":
// Datum;CONNECT;ConnectionID;Nebenstelle;Nummer;
$extension = $data[3];
$internalNumber = $data[4];
$externalNumber = $data[5];
removeConnection($connectionID);
break;
case "DISCONNECT":
// Datum;DISCONNECT;ConnectionID;DauerInSekunden;
$duration = $data[3];
removeConnection($connectionID);
break;
}
break;
}
function addConnection ($connectionID, $status, $time, $internalNumber, $externalNumber, $extension, $line)
{
global $parentID;
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Status", 1, "PhoneConnectionStatus"), $status);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Zeit", 1, "~String"), $time);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Intern", 3, "~String"), $internalNumber);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Extern", 3, "~String"), $externalNumber);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nebenstelle", 3, "~String"), $extension);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Leitung", 3, "~String"), $line);
}
function removeConnection ($connectionID)
{
global $parentID;
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Status", 1, "PhoneConnectionStatus"), 0);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Zeit", 1, "~String"), 0);
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Intern", 3, "~String"), "");
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nummer - Extern", 3, "~String"), "");
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Nebenstelle", 3, "~String"), "");
SetValue(CreateVariableByName($parentID, "Verbindung ".$connectionID." - Leitung", 3, "~String"), "");
}
function CreateVariableByName($id, $name, $type, $profile = "")
{
global $IPS_SELF;
$vid = @IPS_GetVariableIDByName($name, $id);
if($vid === false)
{
$vid = IPS_CreateVariable($type);
IPS_SetParent($vid, $id);
IPS_SetName($vid, $name);
IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
}
return $vid;
}
?>