Einfache Anrufanzeige mit Fritzbox 7170

Hallo,

ich habe über die Suche leider nichts vernünftiges gefunden…:

Gibt es eine einfache Möglichkeit, den Namen eines Anrufers an einer Fritzbox 7170 in IPS in eine Variable zu schreiben?

Was wird benötigt und wie muss man das einrichten? Ich würde das dann am Ende an ein EDIP als „Infotafel“ schicken…bitte als step-by-step für Dummies :slight_smile:

Vielen Dank vorab & Gruß
dreamy1

Sicher gibt es das. Die ganzen Scripts dazu stehen hier irgendwo geschrieben.

Du kannst auch die Scripts für die 7270 verwenden, nur dass Du das Login soweit ich weiss bei der 7170 nicht benötigst.

Das sollte dafür reichen. http://www.ip-symcon.de/forum/68406-post11.html

Vielen Dank Rainer!

Bei mir scheiterts im Moment an der #965 zum Freischalten des Anrufmonitors in der Fritzbox :frowning:

Mein ISDN-Telefon hängt direkt am S0-Bus und ein analoges Telefon ist direkt über Funk ans DECT-Modul der Fritzbox angebunden…also kein Telefon direkt angesteckt. Damit kann ich scheinbar den Port in der 7170 nicht freischalten…so ein Mist. Übers Webinterface der Fritzbox gehts auch nicht.

Woher weisst Du das es scheitert, hast es ausprobiert.

Ja, da kommt sofort „bu-bi-bi…kein Anschluss unter dieser Nummer…“.

Hui, mit einer 0 davor kommt ein kurzer Bestätigungston…ich glaube jetzt hats geklappt.

Nächstes Problem:

Ich bekomme einen Socket Error, „Connection refused“ - liegt das am Passwort an meiner Fritzbox?

Nö, der Port ist nicht offen.

und wenn du einfach dein dect mal kurz analog ansteckst und zuweist?
oder haste nur nebenstellen im einsatz?

cu.
uriel2006

ps:
vileicht haste ja noch nen altes modem rumkullern, damit gehts auch;)

Danke,

ich mach mich mal auf die Suche nach einem alten Telefon…

Sodele,

die Fritzbox hat jetzt Kontakt zu IPS :slight_smile:

Ein Problem habe ich noch: der letzte Anrufer bleibt in der Variable stehen und wird bei einem „disconnect“ nicht zurückgesetzt.

So sieht mein Script aus:

<?

// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);

// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
  $array["Nummer"][1] = "0170xxxx";
  $array["Name"]  [1] = "dreamy1 Handy";
  $array["Nummer"][2] = "xxxxxxx";
  $array["Name"]  [2] = "xxxx";
  $array["Nummer"][3] = "xxxxxx";
  $array["Name"]  [3] = "xxxx";
  $array["Nummer"][4] = "xxxxx";
  $array["Name"]  [4] = "xxxx";
  $array["Nummer"][5] = "";
  $array["Name"]  [5] = "xxxx";
  $array["Nummer"][6] = "xxxxxx";
  $array["Name"]  [6] = "xxxx ";

// Daten aus Registervariable auswerten
switch($daten[1])
{
    case "RING":
   $Rufnummer = ($daten[3]);
    if(in_array($Rufnummer, $array["Nummer"]))
   {
       $intern = array_search($Rufnummer, $array["Nummer"]);
       SetValue(59121 /*[Fritzbox\Dummy Module\Fritzbox]*/, $array["Name"][$intern]);
       //echo "Anruf von " .  $array["Name"][$intern];
       return;
   }
   else
   {
      $Rufnummer = "unbekannt";
   }
   break;
   case "DISCONNECT":
   RegVar_SetBuffer(26953 /*[Fritzbox\Register Variable]*/, "");
   return;
   break;
}

?>

Ich habe die Rückwärtssuche entfernt, die brauche ich nicht. Nach dem Auflegen soll der letzte Anruf gelöscht werden. Was mich wundert, dass im Script von Rainer ein RegVar_SetBuffer benutzt wird, ein entsprechendes Gegenstück am Anfang aber nicht da ist :slight_smile:

Kann mal jemand draufschauen?

Vielen Dank vorab!

SetValue(59121 /*[Fritzbox\Dummy Module\Fritzbox]*/, ""; 

ansonsten setzt Du die Variable ja nicht zurück beim Disconnect.

Das RegVar set Buffer, löscht die Registervariable, das braucht kein Gegenstück.

Ah, danke - ich dachte das Löschen der Registervariable sei dafür zuständig und schon ausreichend. Warum wird die Registervariable eigentlich gelöscht - wird die ohnehin nicht bei einem Anruf neu beschrieben?

Vielen Dank für die Erklärung!

Ja sicher wird sie neu beschrieben. Es könnte ja noch was drinnen stehen, deshalb halt noch mal löschen. Leer ist Leer :slight_smile:

Auch wieder wahr :slight_smile:

Rainer, vielen Dank mal an der Stelle für den klasse Support!

Hallo,

ich habe mein Script nun um einen Timestamp erweitert…leider will der nicht so richtig :frowning:

Bei einem Anruf soll die aktuelle Uhrzeit in eine Stringvariable geschrieben werden - nur leider steht da nach einem Anruf nichts drin. Kann mal jemand schauen?

Vielen Dank!

<?

// Daten aus Registervariable lesen
$daten = explode(";", $IPS_VALUE);

// Nummern ohne Eintrag im öffentlichen Telefonbuch welche aber bekannt sind und übertragen werden ($intern).
// unendlich erweiterbar
  $array["Nummer"][1] = "0170xxx";
  $array["Name"]  [1] = "xxx";
  $array["Nummer"][2] = "";
  $array["Name"]  [2] = "*Unterdrückt*";
  $array["Nummer"][3] = "xxxxxx";
  $array["Name"]  [3] = "xxx";
  $array["Nummer"][4] = "xxxxx";
  $array["Name"]  [4] = "xxx";
  $array["Nummer"][5] = "xxx";
  $array["Name"]  [5] = "xxx";
  $array["Nummer"][6] = "xxxxxx";
  $array["Name"]  [6] = "xxx";

// Daten aus Registervariable auswerten
switch($daten[1])
{
    case "RING":
   $timestamp = time();
	$datum = date("d.m.Y",$timestamp);
  	$uhrzeit = date("H:i",$timestamp);
	SetValueString(49978 /*[Fritzbox\Dummy Module\Letzter Anruf um]*/, $datum," - ",$uhrzeit," Uhr");
   $Rufnummer = ($daten[3]);
    if(in_array($Rufnummer, $array["Nummer"]))
   {
       $intern = array_search($Rufnummer, $array["Nummer"]);
       SetValue(59121 /*[Fritzbox\Dummy Module\Fritzbox_Anruf_von]*/, $array["Name"][$intern]);
       //echo "Anruf von " .  $array["Name"][$intern];
       return;
   }
   else
   {
      SetValue(59121 /*[Fritzbox\Dummy Module\Fritzbox_Anruf_von]*/, $Rufnummer);
   }
   break;
   case "DISCONNECT":
   RegVar_SetBuffer(26953 /*[Fritzbox\Register Variable]*/, "");
   return;
   break;
}

?>

so wie bei mir steht doch alles gut drinne.
wozu brauchste denn die string?

cu.
uriel2006

Hmm, kein Fehler im Script oben?

Die String benötige ich zum späteren Senden an ein „Objekt“, welches demnächst im Project Showcase vorgestellt wird :slight_smile:

sorry hatte mir dein script nicht weiter angeschaut.
habe gedacht du brauchst es nur zur kontrolle wann wer angerufen hat.

cu.
uriel2006

    SetValueString(49978 /*[Fritzbox\Dummy Module\Letzter Anruf um]*/, $datum," - ",$uhrzeit," Uhr"); 

Mach mal mal so:

    SetValueString(49978 /*[Fritzbox\Dummy Module\Letzter Anruf um]*/," $datum, - ,$uhrzeit, Uhr"); 

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;
}
?>