FritzBox - aktuelle Gespräche anzeigen

Hallo,
ich hab ein Script, welches die aktuellen Gespächer der FritzBox anzeigt. Getriggert wird das ganze durch eine Registervariable. Seit 24.5. (ich denke, da war mein Update auf OS 5.50 durch die KBW) wird das Script nicht mehr getriggert. Muss man hier auch etwas anpassen wie bei der Anruferliste oder kennt jemand eine andere mögliche Fehlerquelle ? Da ich zu dem Zeitpunkt in Urlaub war, ist sicher, dass an den Scripten nichts verändert wurde.

Grüße Chrissiboy

Hast du die Protfreigabe auf der Fritzbox gemacht??

der wurde bestimmt nach dem Update geschlossen

#965 waehlen. Dies oeffnet einen TCP Port auf 1012

danke - funktioniert wieder :wink:

Moin…

… magst Du das Skript welches Du benutzt oder den Link zum passenden Beitrag posten?

Danke,
Peter

ja, klar doch - habe ich irgendwo hier im Forum gefunden und leicht angepasst - somit wird meine Anruferliste nicht durch einen Timer getriggert, sondern durch signalisierte Gespräche in der Fritzbox.

<?php
$host = "xxx.xxx.xxx.xxx";

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;

                // folgende beide Nummern sollen nicht berücksichtigt werden 

                if ($data[4] == "xxxxxx" or $data[4] == "xxxxxxxxxxx")
    					 break;
                $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;

               // folgende Nummern sollen nicht berücksichtigt werden   

                if ($data[3] == "xxxxxx" or $data[3] == "xxxxxx")
    					 break;
                if ($data[4] == "xxxxxx")
    					 break;
                $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];
                IPS_Sleep(1000);
                removeConnection($connectionID);
                break;
        }
        IPS_RunScript(58322 /*[Fritz!Box\Anruferliste\Auslese-Skript]*/);
        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;
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Status", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Zeit", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nummer - Intern", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nummer - Extern", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Nebenstelle", $parentID));
    IPS_DeleteVariable(IPS_GetVariableIDByName("Verbindung ".$connectionID." - Leitung", $parentID));
   }
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;
}
?>



Hallo zusammen,

das Skript ist klasse.Danke an alle beteiligten.
Aber irgendwie bekomme ich Fehlermeldungen.Es funktioniert trotzdem.Habe es mal mit eingehenden Gesprächen probiert und die Anruferliste wird aktualisiert.

Hier die Fehlermeldung aus dem Messagelog:
RegVar Handler result: <br />
<b>Warning</b>: Profile type and variable type do not match in <b>C:\IP-Symcon\scripts\55309.ips.php</b> on line <b>156</b><br />

Habe ich was vergessen oder falsch gemacht?

Grüße
Robert

@chrissiboy

Gibt es da eine Möglichkeit, anstatt der Nummer aus der Fritzbox den hinterlegten Namen zu erhalten (für die Sprachausgabe)?

Danke und Gruß,
Andreas

kann ich leider nicht sagen, da ich das Telefonbuch der Box nicht benutze