Probleme mit Scripts Fritzbox 7270

Eigentlich ist das keine Fehlermeldung, sondern eine Benachritigung das es Ein bzw. Ausgeschaltet wurde.

Hallo Uwe
Danke für deine Hilfe. Kannst du mir sagen, was ich im Script ändern muß, damit diese Meldung nicht mehr kommt?
Ob das WLAN an oder aus ist, seh ich ja im Webfront, da brauch ich nicht noch eine Meldung.

MfG
computerpap

Hm gute Frage, nimm mal das hier.

<?
if ($IPS_SENDER == "WebFront")
{
    SetValue(55196 /*[Infos\Fritzbox\Anruferliste\Wlan]*/, $IPS_VALUE);
}

$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$password    = 'lalilu';
$ein         = '1';
$aus         = '0';

$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($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"));
   $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
   $sendlogin = http_post_fields($fritzgui, $login);
   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];
   }
}

if ($IPS_VALUE)
{
    $wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $ein));
}
else
{
   $wlan = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'wlan:settings/ap_enabled' => $aus));
}

$logout = array('getpage' => $fritzseite, 'sid' => $SID, 'security:command/logout' => 'logout');
$sendlogout = http_post_fields($fritzgui, $logout);


?>

Hallo Uwe
Dein Script funktioniert, super, vielen Dank!

MfG
computerpap

print_r($matches); 

das steht 2mal bei dir im Script, deshalb kommt die Fehlerkonsole!

Hallo zusammen,

die Scripte laufen absolut einwandfrei. Besten Dank an alle Programmierer. Bin in PHP leider „noch“ nicht so fit und habe folgendes Problem.

Ich will nur die letzten 5 Anrufer aus der Anrufliste in einer Textbox oder ähnlichem direkt im Webfront anzeigen lassen. Das ganz soll möglichst automatisch nach einem Anruf aktualisiert werden.

Hier auf dem Screenshot zu sehen .

http://www.ip-symcon.de/forum/f56/webfront-wenig-aufgehuebscht-12715/index5.html#post107549

Hat das eventuell schon jemand realisiert und wenn ja wie ?

Besten Dank

Thomas

<?
$filename = "../webfront/user/Fritzbox/Anrufliste.csv";
$id = @fopen($filename, "r");
$i = 0;
while (($data = fgetcsv($id, filesize($filename), ";")) && $i < 7)
{
    $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\">";
    $table[] = $data;
}
@fclose($id);

//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);
?>

Perfekt , Danke Rainer. Werde ich heute Abend testen.

Je nachdem wie Du deine Anrufe handelst, musst Du das Script noch entsprechend aufrufen. Ich mach das über DISCONNECT.

Funktioniert perfekt danke.

Frage noch :

Kann ich bei einer String Variablen mit dem Profil HTML-Box den Kopf in der Anzeige im Webfront ausblenden, heißt dass nur die HTML Box angezeigt wird oder geht das nicht ?

Thomas

Hallo Thomas,

nein, das geht nicht. Die HTML-Box ist Bestandteil des Profil. Du kannst nur zuklappen.

Hallo zusammen,

ich habe mich jetzt auch einige Zeit an dem PHP-Script versucht und komme leider zu keiner Lösung :frowning:

Mit einer Friztbox 7390 funktioniert der Login auf die Fritzbox leider nicht. (Somit der rest auch nicht…)

Ich nutze momentan folgenden Script-Schnipsel:

<?php
// Melde alle PHP Fehler
error_reporting(E_ALL);
echo "<pre>";
$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$filename    = "c:\\Kindersicherung.txt";// anpassen
$password    = 'MEIN-PASSWORT'; //PW eingeben

$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($ch);
$session_status_simplexml = simplexml_load_string($login);
print_r($session_status_simplexml);
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"));
   $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
echo "<br>vor Response abschicken";
   $sendlogin = http_post_fields($fritzgui, $login);
echo "<br>nach Response abschicken";
   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;
    }
}

Die Ausgabe „vor Response abschicken“ wird ausgegeben, die Ausgabe „nach Response abschicken“ wird nicht mehr ausgegeben.

Zum testen habe ich auf einem Webserver mit PHP das Script nativ eingebunden (test.php) um des direkt aufrufen zu können.

Hat zufällig wer von euch eine Idee? Ich weiß leider nicht weiter, da überhaupt keine Fehlermeldung ausgegeben wird. :frowning:

Vielen Dank & Gruß
Marc

[EDIT]
Ich muss mich korrigieren - mit IPS funktioniert das Script auf einer FritzBox 7390 perfekt!
Warum es native mit PHP nicht funktioniert verstehe ich zwar nicht - Aber egal :slight_smile:

Hallo,

leider hat es meine FB7270 geschrottet, so das ich eine FB7390 dranhängen mußte. Mit der FB7390 bekomme ich eine Socket Error. Was läuft da falsch ?:confused:

Andreas

Port vergessen zu öffnen auf der Box.

Danke Rainer,

#965 :rolleyes: hatte ich glatt vergessen zu aktivieren.

Da ich die Box bei der ersten Installation zerschossen hatte und ich nochmals einen neues Image drauf patchen mußte.

AVM hat leider ein „kleines“ Problem. Wenn du eine bei einer z.B. 7270 das Telefonbuch ausließt und danach eine 7390 aufrufst und danach etwas ändert schreibst du Müll in die Box. Das bewirkt dann zum Beispiel das du keine DECT-Geräte mehr anmelden kannst oder deine WLAN Verbindungen sind instabil und reconnecten häufig etc.
AVM kennt das Problemchen … aber würde ja fast nie passieren:mad:

Andreas

Kann mir vielleicht jemand von euch helfen und mir zeigen, was ich in abgehangenem Skript ändern muss, damit dies auch mit der neuen IPS 2.5 Version wieder läuft?

Momentan bekomme ich die Fehlermeldung:

Fatal error: Call to undefined function http_post_fields() in C:\Programme\ipsymcon_v2\scripts\18283.ips.php on line 22

Der gleiche Fehler wird wahrscheinlich nochmal auftreten bei Zeile 36.
Durch welchen neuen Befehl kann ich bitte den nicht mehr funktionierenden Befehl „function http_post_fields()“ ersetzen?

Hab mir natürlich schon die neuen Skripte angeschaut, werde daraus aber leider nicht (mehr) schlau. :confused:

<?
$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$password    = 'xxxxxx';

$ch = curl_init('http://' . $fritzbox_ip . '/cgi-bin/webcm?getpage=../html/login_sid.xml');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
curl_close($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"));
   $login = array('getpage' => $fritzseite, 'login:command/response' => $response);
   $sendlogin = http_post_fields($fritzgui, $login);
   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;
    }
}

$telefonbuch = array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'home', 'var:pagename' => 'fonbuch');
$save = http_post_fields($fritzgui, $telefonbuch);

$dateiname = "C:/Programme/IPSYMCON_V2/webfront/user/Fritzbox/fonbuch.txt"; // Name der Datei

// Datei öffnen, wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($dateiname , "w+");
fWrite($handler , $save); // Dateiinhalt in die Datei schreiben
fclose($handler);
?>

Hallo obicom,

Die Erweiterung php_http.dll wird mit PHP 5.4 nicht mehr unterstützt. Hier muß man auf die cURL-Erweiterung umsteigen.

Rainer hat mittlerweile alle seine Fritzbox-Skripte für die Version 2.5 umgebaut.

Schau Dir nochmal die Original-Threads an, dort wirst Du sicherlich fündig.

Danke Werner, das habe ich natürlich schon getan. Aber ich werde daraus nicht schlau. in dem für 2.5 angepasstem Skript wird nun mit Hilfe des Telefonbuchs nur nach dem Namen des letzten Anrufers gesucht (soweit ich das erkennen kann). Gibt es denn für den „alten“ Befehl keinen „einfachen“ Nachfolge Befehl?

Weil einfach einfach einfach ist. Nicht wirklich

Der der mit cURL nicht wirklich fit ist tut sich einfach schwer. Da zähle ich mich auch dazu.

Da ich nur die Steuerung (WLAN / AB) sowie den letzten Anruf nutze kann ich Dir leider hier nicht weiterhelfen. Da mußt Du auf ein Feedback von Rainer warten.

Sieh dir genau an was anderts geworden ist!

<?
$fritzbox_ip = 'fritz.box';
$fritzgui    = 'http://fritz.box/cgi-bin/webcm';
$fritzseite  = '../html/de/menus/menu2.html';
$password    = 'xxxxxx';

$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_setopt($ch, CURLOPT_POSTFIELDS, "getpage={$fritzseite}&sid={$SID}&var:menu=home&var:pagename=fonbuch");
$save = curl_exec($ch);

$dateiname = "C:/Programme/IPSYMCON_V2/webfront/user/Fritzbox/fonbuch.txt"; // Name der Datei

// Datei öffnen, wenn nicht vorhanden dann wird die Datei erstellt.
$handler = fOpen($dateiname , "w+");
fWrite($handler , $save); // Dateiinhalt in die Datei schreiben
fclose($handler);
curl_close($ch);
?>

Der Teil ist überall gleich, den muss man nur austauschen.

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