Fragen zu: Scripts für Fritzbox/Repeater/Fritzfon ab V2.5 und PHP 5.4.x

Da das ganze zu den Fritzbox-Scripten jetzt doch recht unübersichtlich wird, habe ich mir mal erlaubt einen neuen Post dazu zu eröffnen.
Bezüglich des Scriptes „Anruferliste abholen“ habe ich eine Frage:
Wie kann ich jetzt die Daten in eine Variable schreiben lassen, damit sie so aussehen wie auf dem Screenshot und die letzten 20 Anrufe angezeigt werden?

Grüße, Jürgen

Genauso wie in der alten Version, daran hat sich nichts geändert. Das einzige was anderst ist, sind die cURL Aufrufe, hat aber mit deiner Anzeige nichts zutun.

Danke Rainer,
habe es jetzt mal folgendermaßen versucht:

<?
//IPS_SetScriptTimer(40694 /*[Objekt #40694 existiert nicht]*/, 20);

$fritzbox = 'fritz.box';
$fritzseite  = '../html/de/menus/menu2.html';
$filename    = IPS_GetKernelDir()."\\webfront\\user\\Fritzbox\\Anrufliste.csv";// anpassen
$password    = 'weber503412';

$ch = curl_init('http://' . $fritzbox . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if ($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/de/menus/menu2.html");
    preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
   if (isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

//Anrufliste aktualisieren
curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=foncalls");
curl_exec($ch);

curl_setopt($ch, CURLOPT_POSTFIELDS, "getpage=../html/de/FRITZ!Box_Anrufliste.csv&sid={$SID}");
$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 4);
$anrufliste = $anrufliste[3];
//print_r($anrufliste);
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);


$filename = "../webfront/user/Fritzbox/Anrufliste.csv";
$id = @fopen($filename, "r");
while ($data = fgetcsv($id, filesize($filename),";"))
$table[] = $data;
@fclose($id);

echo "<table width='995' border='0' cellspacing='0' cellpadding='0' style = 'background-color:#283040'>"; // Farbe anpassen oder style entfernen

foreach($table as $row)
{
    echo "<tr>";
    foreach($row as $data)
    echo '<td width="auto"><div align="center">'.$data.'</div></td>';
    echo "</tr>
";
}
echo "</table>
";

curl_close($ch);

?>

Funktioniert auch einigermaßen. Jedoch ist die erste Zeile nach links verschoben: Name steht über Typ usw.
In der Anruferliste.csv steht es auch so verschoben drin. Was muss ich da ändern?

Gruß, Jürgen

Hallo Jürgen,

anbei mal meine Auswertung, ob die anderst aussieht, weis ich nicht. Ich nutze dafür was ganz anderes.

<?
$filename = "../webfront/user/Fritzbox/Anrufliste.csv";
$id = @fopen($filename, "r");
$i = 0;
while (($data = fgetcsv($id, filesize($filename), ";")) && $i < 22)
{
    $i++;
      if ($data[0] == 1) $data[0] = "<img src=\"../user/icons/fixed/Callin.png\" title=\"eingehender Anruf\">";
    if ($data[0] == 2) $data[0] = "<img src=\"../user/icons/fixed/Callinfailed.png\" title=\"Anruf in Abwesenheit\">";
    if ($data[0] == 3) $data[0] = "<img src=\"../user/icons/fixed/Callout.png\" title=\"ausgehender Anruf\">";
    //print_r($data);
    $table[] = $data;

}
@fclose($id);
    //print_r($data[1]);
echo "<table width='980' align='center'>";
//$str = "<table width='100%' align='center'>";
foreach($table as $row)
{
    echo "<tr>";
    //$str.= "<tr>";
    foreach($row as $data)
    echo "<td width='auto'><div align='center'>$data</div></td>";
    //$str.= '<td>'.$data.'</td>';
    echo "</tr>";
    //$str.= "</tr>";
}
echo "</table>
";
//$str .= "</table>";

//SetValue(29663 /*[Fritzbox\Anruflisten\Anrufliste Rainer]*/, $str);

//IPS_SetScriptTimer($IPS_SELF, 0);
?>

Hallo Rainer, erstmal Danke.
Bei Deinem Auswertungsscript sieht es leider auch nicht viel besser aus. Liegt anscheinend an der csv-Datei. Aber wieso wird meine csv-Datei denn anders geschrieben als Deine? Liegt das an meiner FB 7390? Kann man das beeinflussen?

Gruß, Jürgen

Hallo Jürgen,

habs dir mal angepasst. :wink:

Einfach ersetzen.

$anrufliste = curl_exec($ch);
$anrufliste = explode(';', $anrufliste, 2);
$anrufliste = $anrufliste[1];
$fileHandle = @fopen($filename, 'wb+');
@fwrite($fileHandle, $anrufliste);
@fclose($fileHandle);

Das gibts ja nicht. Da wurden ja tatsächlich nur die zwei Zahlen ausgetauscht. Könntest Du mir das mal erklären? Was geben die zwei Zahlen an?

Nochmals Danke und Grüße,

Jürgen

Die haben wohl was an der csv geändert. Die Zahlen geben die Position des Array an. Setz dir ein print_r($anrufliste); Dann wird es dir vielleicht klarer.

Hallo,

ich bekomme jetzt immer diese Fehlermeldung:

Fatal error:  Call to undefined function mb_convert_encoding() in [Zuhaus\Fritz\DNS] on line 21

Liegt es vielleicht an V2.6 #2506?

Edit: >Erweiterung php_mbstring.dll nicht geladen. Version stimmt nicht überein: PHP: 5.4.4, EXT: 5.4.0

Hat jemand die richtige für mich?

In Anhang.

php_mbstring.rar (437 KB)

Vielen Dank Rainer,
es funktioniert wieder.:slight_smile:

Wäre schön wenn die Erweiterungen der einzelnen Versionen in der Doku wären.:smiley:

Die Erweiterungen, werden in der Regel automatisch beim Liveupdate upgedatet. Ansonsten, hilft es auch den ext-Ordner zu löschen und das Live-Update nochmal laufen lassen. Dann musst Du halt wieder aussortieren was Du nicht benötigst.

Hallo Rainer,
genau das hatte ich so gemacht:

allerdings hatte ich dann nur noch 4 Erweiterungen:
php_curl, php_gd2,php_gettext, php_soap

Kannst Du mir noch bei einem anderen Problem helfen. Folgendes Skript funktioniert nicht mehr:

<?
$fritzbox_ip = 'fritz.box';
$password    = '******';

$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);

if ($session_status_simplexml->iswriteaccess == 1)
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));
    curl_setopt($ch, CURLOPT_POSTFIELDS, "login:command/response={$response}&getpage=../html/de/menus/menu2.html");
    preg_match('/name="sid" value="([0-9a-f]*)"/', curl_exec($ch), $matches);
   if(isset($matches[1]) && $matches[1] != '0000000000000000')
   {
      $SID = $matches[1];
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}
curl_close($ch);
$home = file("http://fritz.box/home/home.lua?sid=".$SID);
print_r($home);
$tag = substr(trim($home[567]), -10);
$time = substr(trim($home[568]), -5);
$ip = substr(trim($home[569]), -13);
echo ("Verbunden seit ".$tag." ".$time." IP: ".$ip);
SetValue(55712 /*[Zuhaus\Fritz\DSL]*/,"Verbunden seit ".$tag." ".$time." 
\r  IP: ".$ip);
?>

Ich habe mir einiges aus der Übersichtsseite rausgezogen z.b. „Verbunden seit“.
Ich habe: FRITZ!Box Fon WLAN 7390 Firmware: FRITZ!OS 05.22

allerdings hatte ich dann nur noch 4 Erweiterungen:

Dann weis ich auch nicht was paresy da veranstaltet. Habs grad mal probiert. Jetzt kommen nur noch die 4. Das letzte mal waren alle Erweiterungen drinnen.

Was geht an dem Script nicht. Sieh dir das print_r an und pass die Zeilen an wenn sie nicht mehr stimmen. Ich hab keine 7390.

Habe ich gemacht. Die Daten sind im Array nicht mehr drinnen. Irgenwie passt diese $SID nicht:

$home = file(„http://fritz.box/home/home.lua?sid=“.$SID);
$SID: [1] => f1172e3cb88562a6

Meine Übersichtsseite im Browser:
http://fritz.box/home/home.lua?sid=323882ed4ccee2eb

Derzeitige Ausgabe:
Verbunden seit „] = true, true, IP: TAT“] = true,

Ich habe keine Ahnung was ich da ändern muss.:o

Das ist doch nicht die Ausgabe von print_r($home) ?

Die SID in deinem Browser ist immer eine andere wie im Script!

siehe Anhang

Das steht jetzt in [275]. Allerdings muss man das ganze noch einwenig entrümpeln. :smiley: Wenn Du einen Moment Zeit hast, bau ich es um.

Da war ich wohl Blind:o

Das wäre suupiiii:D

Tausch es mal aus. Kann sein, dass Du bei der IP noch ein bischen schieben musst. Bei mir passt es so.

$home = file("http://fritz.box/home/home.lua?sid=".$SID);
//print_r($home);
$data = explode(",", $home[275]);
$tag = substr($data[0], -10);
$time = $data[1];
$ip = substr($data[3], 0, -8);
echo "Verbunden seit ".$tag.$time." mit".$ip;