FritzBox 7270 an IPS V2.2

Hallo
Habe heute eine Fritzbox 7270 bekommen und würde diese gerne in IPS einbinden. Habe schon hier im Forum gesucht und tolle Scripte gefunden.
Was muß ich für Instanzen anlegen, damit ich die Fritzbox auslesen kann?

Gruß computerpap

Den Beitrag hatte ich gelesen, aber irgendwie hagelt es beim Ausführen des Scriptes Fehlermeldungen. Das Paßwort habe ich eingetragen, und eine Variable mit Profil ~String habe ich auch erstellt.


Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : Space required after the Public Identifier in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]:                                                  ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : SystemLiteral " or ' expected in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]:                                                  ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]: Entity: line 1: parser error : SYSTEM or PUBLIC, the URI is missing in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Warning:  simplexml_load_string() [function.simplexml-load-string]:                                                  ^ in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 18

Notice:  Trying to get property of non-object in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 21

Notice:  Trying to get property of non-object in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 27

Notice:  Undefined variable: IPS_VALUE in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 39

Notice:  Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 44

Notice:  Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 47

Gruß computerpap

Wenn ich statt

$fritzbox_ip = 'fritz.box';

folgendes eingebe,

$fritzbox_ip = '192.168.0.1';

dann kommen nur noch diese Fehlermeldungen


Notice:  Undefined variable: IPS_VALUE in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 39

Notice:  Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 44

Notice:  Undefined variable: SID in D:\Programme\IP-Symcon\scripts\34160.ips.php on line 47


wie wäre es denn, wenn Du die benötigten extension mal einbindest. Dann sind auch die Fehlermeldungen weg.

Ich habe php_curl.dll, php_http_ips.dll und php_mbstring.dll nach ext kopiert und in der php.ini aufgerufen. Dienst neugestartet.
Welche extension muß denn noch eingebunden werden?

Gruß computerpap

Ich glaube die php_http_ips.dll brauchst Du nicht nimm mal die php_http.dll und ich glaube noch die php_xmlrpc.dll

dll.rar (219 KB)

Das Kernproblem ist wohl eher, dass du das Script „von Hand“ startest. Dafür ist es nicht vorgesehen, da IPS_VALUE „beim triggern“ gefüllt wird.

Hallo

Das Script wird alle 300s von einem Timer gestartet.
Hier mal ein Auszug aus meiner php.ini:


```php

max_execution_time=30
register_globals=on
error_reporting=E_ALL
extension_dir=D:\Programme\IP-Symcon\ext
extension = ixed.5.3ts.dll
extension = php_gd2.dll
extension = php_gettext.dll
extension = php_mysql.dll
extension = php_soap.dll
extension = php_sqlite.dll
extension = php_curl.dll
extension = php_http.dll
extension = php_http_ips.dll
extension = php_mbstring.dll
extension = php_xmlrpc.dll

Trotzdem bekomme ich noch die 3 Fehlermeldungen von oben.
Hab mal noch ein Bild von meinem Objektbaum angehängt.

Gruß computerpap

Liest Du den Anrufbeantworter alle 300sek aus :confused:
Verstehe ich jetzt nicht, für was, die Variable wird gesetzt oder nicht!

Außerdem musst Du wenn Du tiggerst die Variable welche die Daten für $IPS_VALUE enthält triggern.

hier das Script mit Statusrückmeldung des Anrufbeantworters.
Er wird über das Webfront Ein oder Ausgeschaltet. Folglich steht in deinem Variablenprofil 1 oder 0, true oder false, welches die Daten für $IPS_VALUE sind.

<?
if ($IPS_SENDER == "WebFront")
{
    $fritzbox_ip = 'fritz.box';
    $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = 'xxxxxxx';
    $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);
    //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);
       $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;
        }
    }

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

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'home', 'var:pagename' => 'fondevices');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="tam:settings/TAM0/Active" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(12388 /*[Fritzbox\Anrufbeantworter\Rainer\Anrufbeantworter1]*/, 1);
    }
    else
    {
       SetValue(12388 /*[Fritzbox\Anrufbeantworter\Rainer\Anrufbeantworter1]*/, 0);
    }

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

?>

Liest Du den Anrufbeantworter alle 300sek aus

Das ist nur für Testzwecke, wenn alles funktioniert, würde ich den Anrufbeantworter 2x am Tag auslesen lassen.
Das Script läuft jetzt ohne Fehler.
Das mit den Variablen hab ich noch nicht verstanden, könnte mir jemand mal ein Bild von seinen Objektbaum zeigen?

Gruß computerpap

Du hast es immer noch nicht verstanden.

Du brauchst keinen Timer um den Anrufbeantworter auszulesen.

Dieser wird geschaltet und per Rückmeldung siehst Du ob ein oder aus!!!

Was hast Du mit den Variablen nicht verstanden.

Variablen - IP-Symcon :: Automatisierungssoftware

Sorry wenn ich es nicht gleich kapiere, ich bin weder IPS- noch PHP-Experte,
nur mal zu meiner Verteidigung.:wink:

Also ich hab es jetzt genauso gemacht wie bei Rainer, wenn ich in Webfront den Anrufbeantworter einschalte kommt:
„Fehler: Login fehlgeschlagen“

Paßwort und IP sind aber definitiv richtig.

Gruß computerpap

im Script ist ein auskommentiertes print_r. Mach mal die 2 // davor weg, speichern und im Webfront mal schalten. es sollte dann die Fehlerkonsole aufgehen. Poste mal was da steht.

Das wird ausgegeben

SimpleXMLElement Object
(
[iswriteaccess] => 0
[SID] => 0000000000000000
Challenge => ade505b7
)
Fehler: Login fehlgeschlagen

Gruß computerpap

passt.

Sicher das dein Passwort stimmt.

ersetzt das mal und poste das Ergebnis.

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);
       print_r($login);

Anbei der Bildschirmausdruck.

ok,

austauschen und Ergebnis posten.

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);
        print_r($login);
       $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];
          print_r($SID);
       }

Hier wieder der Screenshot

er schreibt dein Login nicht.

warum hast Du die php_http_ips.dll nicht eingebunden !