+ Antworten
Seite 1 von 35 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 350
  1. #1
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,219

    Wink Anruferliste aus FritzBox auslesen

    Dieses Skript liest die Anruferliste der FritzBox aus und erstellt eine Tabelle die im WebFront als TextBox dargestellt werden kann.

    Der Vorteil dieser Version ist, dass sie KEINE PHP Extensions benötigt.
    Die HTTP/CURL/MBString Extensions werden nicht benötigt.

    Dank an RWN - Der Code basiert auf auf seinen Skripten

    Vorraussetzung: Eine FritzBox mit einer Firmware besser als xx.xx.76

    Um die Icons für eingehende/abgehende Anrufe anzuzeigen, müsst ihr im folgenden Ordner die Icons reinkopieren:

    Code:
    /webfront/user/fritz/Callin.png
    /webfront/user/fritz/Callinfailed.png
    /webfront/user/fritz/Callout.png
    Passende Icons: http://www.ip-symcon.de/forum/82275-post45.html

    PHP-Code:
    <?

    //Konfiguration
    $fritzbox 'fritz.box';
    $fritzgui 'http://' $fritzbox '/cgi-bin/webcm';
    $password 'blabla';
    $anzeigen = array(123); //1 = Kommend, 2 = Kommend (Fehler), 3 = Gehend
    $anzahl 10;

    //Ab hier nichts mehr ändern
    $object IPS_GetObject($IPS_SELF);
    $parentID $object['ParentID'];

    //Installer
    if ($IPS_SENDER == "Execute")
    {

        
    IPS_SetHidden($IPS_SELFtrue);
        
    IPS_SetName($IPS_SELF"Auslese-Skript");

        
    $parentObject IPS_GetObject($parentID);
        if (
    $parentObject['ObjectType'] !== 1)
        {
            
    $instanceID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
            
    IPS_SetParent($instanceID$parentID);
            
    $parentID $instanceID;
            
    IPS_SetParent($IPS_SELF$parentID);
            
    IPS_SetName($instanceID"Anruferliste");
        }
        
        
    IPS_SetScriptTimer($IPS_SELF300);

    }

    $login file_get_contents('http://' $fritzbox '/cgi-bin/webcm?getpage=../html/login_sid.xml');

    $session_status_simplexml = @simplexml_load_string($login);

    if(
    $session_status_simplexml === false)
    {
        die(
    "Fehler beim einlesen der XML Daten. Wahrscheinlich ist eine zu alte Firmware installiert");
    }
    else if (
    $session_status_simplexml->iswriteaccess == 1)
    {
        
    $SID $session_status_simplexml->SID;
    }
    else
    {
       
    $challenge $session_status_simplexml->Challenge;
        
    $response $challenge '-' md5(iconv("UTF-8""UCS-2LE"$challenge '-' $password));
       
    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html''login:command/response' => $response));
       
        
    $opts = array('http' =>
                                    array(
                                        
    'method' => 'POST',
                                     
    'header' => 'Content-Length: '.strlen($postdata)."\r\n".
                                                    
    'Content-Type: application/x-www-form-urlencoded',
                                        
    'content'=> $postdata
                
    )
        );

        
    $context  stream_context_create($opts);
       
    $sendlogin file_get_contents($fritzguifalse$context);
       
       
    preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i'$sendlogin$matches);
       if (isset(
    $matches[1]) && $matches[1] != '0000000000000000')
       {
          
    $SID $matches[1];
       }
       else
       {
          echo 
    "Fehler: Login fehlgeschlagen";
          return;
        }
    }

    //Anrufliste aktualisieren
    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html','sid' => $SID'var:menu' => 'home''var:pagename' => 'foncalls'));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $getnewlist file_get_contents($fritzguifalse$context);

    //Anrufliste abholen
    $postdata http_build_query(array('getpage' => '../html/de/FRITZ!Box_Anrufliste.csv''sid' => $SID));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $anrufliste file_get_contents($fritzguifalse$context);
    $anrufliste explode("\n"$anrufliste);

    $str "<table width='90%' align='center'>"// Farbe anpassen oder style entfernen
    $str .= "<tr><td></td><td><b>Datum</b></td><td><b>Name/Rufnummer</b></td><td><b>Nebenstelle</b></td><td><b>Zeit</b></td></tr>";

    $pos 0;
    for(
    $i=3$i<=sizeof($anrufliste); $i++)
    {
        
    $eintrag explode(";"$anrufliste[$i]);
        if(
    strlen($eintrag[2]) > 0)
          
    $eintrag[3] = $eintrag[2];
        unset(
    $eintrag[2]);
        if(
    strlen($eintrag[4]) > 0)
          
    $eintrag[5] = $eintrag[4];
        if(
    strlen($eintrag[3]) == 0)
          
    $eintrag[3] = "Unbekannt";
        unset(
    $eintrag[4]);
        
    $caller $eintrag[0];
        switch(
    $caller) {
           case 
    1:
              
    $eintrag[0] = "<img src=/user/fritz/Callin.png>";
              break;
           case 
    2:
              
    $eintrag[0] = "<img src=/user/fritz/Callinfailed.png>";
              break;
           case 
    3:
              
    $eintrag[0] = "<img src=/user/fritz/Callout.png>";
              break;
            default:
               
    $eintrag[0] = "";
               break;
        }
        if(
    in_array($caller$anzeigen))
        {
            
    $str .= "<tr>";
            foreach(
    $eintrag as $data)
                
    $str .= '<td>'.$data.'</td>';
            
    $str .= "</tr>";
            
            
    $pos++;
        }
        if(
    $pos >= $anzahl)
            break;
    }
    $str .= "</table>";

    $vid CreateVariableByName($parentID"Content"3);
    IPS_SetIcon($vid"Speaker");
    IPS_SetVariableCustomProfile($vid"~HTMLBox");
    SetValue($vid$str);

    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html''sid' => $SID'security:command/logout' => 'logout'));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $logout file_get_contents($fritzguifalse$context);

    function 
    CreateVariableByName($id$name$type)
    {
        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");
        }
        return 
    $vid;
    }

    ?>
    Angehängte Grafiken Angehängte Grafiken  
    Geändert von paresy (12.04.10 um 11:18 Uhr)

  2. #2
    Registriert seit
    Nov 2006
    Ort
    Bayreuth
    Beiträge
    121

    Hay
    habe mal die Icons überarbeitet

    viel spass

    mike
    Angehängte Grafiken Angehängte Grafiken        
    Geändert von paresy (12.04.10 um 11:20 Uhr)

  3. #3
    Registriert seit
    Apr 2008
    Beiträge
    718

    [... das zitieren können wir uns einfach mal sparen...]

    Ich habe das um eine Suche des Namens erweitert.

    PHP-Code:
    //Konfiguration
    $fritzbox 'fritz.box';
    $fritzgui 'http://' $fritzbox '/cgi-bin/webcm';
    $password 'blablablablablabl';
    $anzeigen = array(123); //1 = Kommend, 2 = Kommend (Fehler), 3 = Gehend
    $anzahl 17;                 // Anzahl der Anrufe einstellen
    $namenbeschneiden 50;       // Den Namen abschneiden nach


    //Ab hier nichts mehr ändern
    function TextAbschneiden($Text$Laenge)
    {
        
    $GekuerzterText substr($Text0strpos(wordwrap($Text$Laenge-1"*!U-M-B-R-U-C-H*"), "*!U-M-B-R-U-C-H*"));

        if(
    $GekuerzterText)
        {
            return 
    $GekuerzterText;
        }
        else
        {
            return 
    $Text;
        }
    }
    function 
    TelSuche($callerNumber) {
    $url_orig="http://www.klicktel.de/inverssuche/index/search?method=searchSimple&_dvform_posted=1&phoneNumber=#TEL#";
    $url=str_replace("#TEL#","$callerNumber",$url_orig);
    $handle=fopen("$url""r");
    if (!
    $handle)
    {
       
    // error cannot open file
       
    echo("ERROR : CANNOT OPEN URL : '$url'\r\n");
    }
    $lineNb 0;
    $searchTag0 'namelink';
    $searchTag01 '<strong>';
    $searchTag02 '</strong>';
    $found ;
    while(!
    $found && !feof($handle))
    {
        
    $lineNb++;
        
    $buffer fgets($handle);

        if (
    strpos($buffer$searchTag0) != false)
        {
            
    //echo "Name gefunden in Zeile: ".$lineNb."\n";
            
    $found ;

            
    $startLN strpos($buffer$searchTag01);
            
    $endeFN strpos($buffer$searchTag02) ;
            
    $name substr($buffer$startLN+8$endeFN) ;
            
    $foundName1 $name;
        }
        else {
    $foundName1 "Unbekannt";}
    }
    fclose($handle);
    $foundName1 html_entity_decode($foundName1);
    return 
    $foundName1;
    }


    $object IPS_GetObject($IPS_SELF);
    $parentID $object['ParentID'];

    //Installer
    if ($IPS_SENDER == "Execute")
    {

        
    IPS_SetHidden($IPS_SELFtrue);
        
    IPS_SetName($IPS_SELF"Auslese-Skript");

        
    $parentObject IPS_GetObject($parentID);
        if (
    $parentObject['ObjectType'] !== 1)
        {
            
    $instanceID IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
            
    IPS_SetParent($instanceID$parentID);
            
    $parentID $instanceID;
            
    IPS_SetParent($IPS_SELF$parentID);
            
    IPS_SetName($instanceID"Anruferliste");
        }

        
    IPS_SetScriptTimer($IPS_SELF300);

    }

    $login file_get_contents('http://' $fritzbox '/cgi-bin/webcm?getpage=../html/login_sid.xml');

    $session_status_simplexml = @simplexml_load_string($login);

    if(
    $session_status_simplexml === false)
    {
        die(
    "Fehler beim einlesen der XML Daten. Wahrscheinlich ist eine zu alte Firmware installiert");
    }
    else if (
    $session_status_simplexml->iswriteaccess == 1)
    {
        
    $SID $session_status_simplexml->SID;
    }
    else
    {
       
    $challenge $session_status_simplexml->Challenge;
        
    $response $challenge '-' md5(iconv("UTF-8""UCS-2LE"$challenge '-' $password));
       
    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html''login:command/response' => $response));

        
    $opts = array('http' =>
                                    array(
                                        
    'method' => 'POST',
                                     
    'header' => 'Content-Length: '.strlen($postdata)."\r\n".
                                                    
    'Content-Type: application/x-www-form-urlencoded',
                                        
    'content'=> $postdata
                
    )
        );

        
    $context  stream_context_create($opts);
       
    $sendlogin file_get_contents($fritzguifalse$context);

       
    preg_match('@<input type="hidden" name="sid" value="([A-Fa-f0-9]{16})" id="uiPostSid">@i'$sendlogin$matches);
       if (isset(
    $matches[1]) && $matches[1] != '0000000000000000')
       {
          
    $SID $matches[1];
       }
       else
       {
          echo 
    "Fehler: Login fehlgeschlagen";
          return;
        }
    }

    //Anrufliste aktualisieren
    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html','sid' => $SID'var:menu' => 'home''var:pagename' => 'foncalls'));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $getnewlist file_get_contents($fritzguifalse$context);

    //Anrufliste abholen
    $postdata http_build_query(array('getpage' => '../html/de/FRITZ!Box_Anrufliste.csv''sid' => $SID));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $anrufliste file_get_contents($fritzguifalse$context);
    $anrufliste explode("\n"$anrufliste);

    $str "<table width='90%' align='center'>"// Farbe anpassen oder style entfernen
    $str .= "<tr><td></td><td><b>Datum</b></td><td><b>Name</b></td><td><b>Rufnummer</b></td><td><b>Nebenstelle</b></td><td><b>Zeit</b></td></tr>";

    $pos 0;
    for(
    $i=3$i<=sizeof($anrufliste); $i++)
    {
        
    $eintrag explode(";"$anrufliste[$i]);
            if(
    $eintrag[2] == "")
          
    $eintrag[2] = TextAbschneiden(TelSuche($eintrag[3]), $namenbeschneiden);
            if(
    strlen($eintrag[4]) > 0)
          
    $eintrag[5] = $eintrag[4];
        if(
    strlen($eintrag[3]) == 0)
          
    $eintrag[3] = "Keine Nummer";
        unset(
    $eintrag[4]);
        
    $caller $eintrag[0];
            switch(
    $caller) {
           case 
    1:
              
    $eintrag[0] = "<img src=/user/fritz/Callin.png>";
              break;
           case 
    2:
              
    $eintrag[0] = "<img src=/user/fritz/Callinfailed.png>";
              break;
           case 
    3:
              
    $eintrag[0] = "<img src=/user/fritz/Callout.png>";
              break;
            default:
               
    $eintrag[0] = "";
               break;
        }
        if(
    in_array($caller$anzeigen))
        {
            
    $str .= "<tr>";
            foreach(
    $eintrag as $data)
                
    $str .= '<td>'.$data.'</td>';
            
    $str .= "</tr>";

            
    $pos++;
        }
        if(
    $pos >= $anzahl)
            break;
    }
    $str .= "</table>";

    $vid CreateVariableByName($parentID"Content"3);
    IPS_SetIcon($vid"speaker");
    IPS_SetVariableCustomProfile($vid"~HTMLBox");
    SetValue($vid$str);

    $postdata http_build_query(array('getpage' => '../html/de/menus/menu2.html''sid' => $SID'security:command/logout' => 'logout'));

    $opts = array('http' =>
                                array(
                                    
    'method'  => 'POST',
                                 
    'header'=> 'Content-Length: '.strlen($postdata)."\r\n".
                                               
    'Content-Type: application/x-www-form-urlencoded',
                                    
    'content' => $postdata
            
    )
    );

    $context  stream_context_create($opts);
    $logout file_get_contents($fritzguifalse$context);

    function 
    CreateVariableByName($id$name$type)
    {
        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");
        }
        return 
    $vid;

    Geändert von paresy (12.04.10 um 11:18 Uhr)

  4. #4
    Registriert seit
    Feb 2005
    Ort
    Lübeck
    Beiträge
    22,219

    Habe mal alle Beiträge aufgeräumt. Ladet euch das für euch passende Skript neu und tauscht es aus. Dann wird alles wieder gut. Die Icons sind jetzt per default png, weil die von Mike einfach toll sind

    paresy

  5. #5
    Registriert seit
    Apr 2008
    Beiträge
    718

    Super geht bei mir! Dankeschön.

  6. #6
    Registriert seit
    Apr 2010
    Beiträge
    1

    Standard Problem mit Content-Variable: HTMLBox

    Hallo zusammen,

    das Skript ist echt super. Nur leider springt die Content-Variable nach kurzer Zeit von HTMLBox wieder in String zurück. Wie kann ich das dauerhaft auf HTMLBox einstellen?

    Danke im voraus

  7. #7
    Registriert seit
    Dec 2006
    Ort
    Leverkusen
    Beiträge
    613

    Weil dann folgende Zeile in deinem Skript scheinbar noch nicht angepasst:

    PHP-Code:
    IPS_SetVariableCustomProfile($vid"~HTMLBox"); 
    Bei Dir wird dort wohl noch "~TextBox" stehen.
    Viele Grüße, Obi
    ___________________
    PC Ausstattung:

    Asus eee Top 1602 mit ipsymcon V4.x an FMZ 1300 USB

  8. #8
    Registriert seit
    Aug 2009
    Beiträge
    171

    Hallo zusammen,

    hier mal eine kleine Erweiterung, die das Update sofort nach Beendigung eines Anrufes ausloesst und zusaetzlich bei einem Anruf eine kleine Notification im Webfont anzeigt.
    Um das möglich zu machen muss auf der Fritzbox der Anrufmonitor freigeschaltet werden. Dazu auf einem analogen Anschluss #96*5* waehlen. Dies oeffnet einen TCP Port auf 1012 an dem IPS lauschen kann.

    das Notify Script:
    PHP-Code:
    <?
    $callmonitor 
    explode(";"$IPS_VALUE);

    print 
    $IPS_VALUE;

    if (
    $callmonitor[1] == "RING")
    {
    WFC_SendNotification 21503 /*[WebFront Configurator]*/"Anruf!"$callmonitor[3], ""60);
    }

    if (
    $callmonitor[1] == "DISCONNECT")
    {
    IPS_RunScript(16820 /*[Telefon\Anruferliste\Auslese-Skript]*/);
    }

    ?>
    Gruss, Michael

    PS. ich denke, das ist noch ausbaufähig
    Angehängte Grafiken Angehängte Grafiken  

  9. #9
    Registriert seit
    Aug 2008
    Beiträge
    263

    Danke Michael,

    endlich eine Alternative zur Benachrichtigung durch das fehlerhafte ISDN-Modul.
    Übrigens: der Anrufmonitor der Fritzbox lässt sich auch von jedem DECT-Gerät freischalten.
    Viele Grüsse aus Berlin
    Robert

    http://www.niemehrheizoel.de

  10. #10
    Registriert seit
    Jan 2007
    Ort
    Nidda(Hessen)
    Beiträge
    7,331

    @ robi,

    nicht das es sowas noch nicht gegeben hätte.

    http://www.ip-symcon.de/forum/72671-post20.html

    das gibt es noch zig mal in anderen Ausführungen.
    Gruß Rainer


    Unmögliches wird sofort erledigt, Wunder dauern etwas länger.


Ähnliche Themen

  1. Fritzbox 7270 Traffic auslesen
    Von Tom_ im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 21.04.10, 09:01
  2. Anruferliste der Fritzbox
    Von coolice im Forum Skripte, PHP, SQL
    Antworten: 21
    Letzter Beitrag: 24.09.09, 12:47
  3. Fritzbox auslesen und auswerten
    Von RWN im Forum Anleitungen / Nützliche PHP Skripte
    Antworten: 9
    Letzter Beitrag: 24.07.08, 19:23
  4. IPS Anrufen über Fritzbox
    Von TK6 im Forum Allgemeine Diskussion
    Antworten: 2
    Letzter Beitrag: 12.02.08, 15:07
  5. Daten von der FritzBox auslesen.
    Von Marcel77 im Forum Allgemeine Diskussion
    Antworten: 14
    Letzter Beitrag: 22.02.07, 16:32