Probleme mit Scripts Fritzbox 7270

Wenn die 7170 Session unterstützt, sollte es grundsätzlich gehen. Das erfährst Du aus deiner Firmware, desweiteren musst Du sehen ob die Parameter identisch sind, ansonsten wird das nix.

Hier mal das komplette Script(7270) mit Rückmeldung und Debugausgabe im PopupFenster Webfront.
Dort siehst Du dann, bei Klick auf Ein/Aus wenn vorhanden die SessionID und den Zustand ob Ein oder Ausgeschaltet.

Passwort und Variablen ID unten anpassen!!

<?
if ($IPS_SENDER == "Execute")
{
    echo "Dieses Script kann nicht von Hand gestartet werden.";
    return;
}

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];
          print_r($SID);
       }
       else
       {
          echo "Fehler: Login fehlgeschlagen";
          return;
        }
    }

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

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'wlan', 'var:pagename' => 'common');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="wlan:settings/ap_enabled" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
       print_r($matches);
        SetValue(54707 /*[Fritzbox\Wlan\Wlan 5 GHz\Wlan]*/, 1);
    }
    else
    {
        print_r($matches);
       SetValue(54707 /*[Fritzbox\Wlan\Wlan 5 GHz\Wlan]*/, 0);
    }

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

?>

Moin JPaeper,

habe das von RWN im letztem Thread gepostete Skript auf meiner FB7170 gerade einmal getestet und es hat auf Anhieb funktioniert. (Habe allerdings auch nichts anderes erwartet.:wink: )

Benutzt Du auch die neueste Firmwareversion auf der Fritzbox?
Funktioniert nämlich erst ab einer bestimmten Version. Meine 7170 läuft mit „Firmware-Version 29.04.76“
Vielleicht liegt es ja daran.

Dann hatte ich damals noch das Problem das die dlls zwar in der php.ini auftauchten aber nicht geladen wurden.
Bitte einmal phpinfo kontrollieren ob auch wirklich alle benötigten geladen wurden.
Bei mir lag es an zwei

-Einträgen in der php.ini ([siehe hier #22-#34](http://www.ip-symcon.de/forum/f52/probleme-scripts-fritzbox-7270-a-8269/index3.html#post69581))

Gruß Stefan

Hallo Rainer und Stefan,

Euch beiden vielen Dank! Ich muss jetzt erst noch bis Sonntag nachmittag auf eine Steuer-Seminar :frowning: und werde mich dann noch mal daran versuchen:).
Die Fritz!Box hat bei mir die neuste Firmware (kann ich jetzt von hier leider nicht genau sehen welche).

also bis dann, werde mich auf jeden Fall melden.

Joachim

So, liebe Leute, jetzt des Rätsels Lösung:
Es fehlte ein Kennwort! Ich hatte für die Einstellungen meiner Fritz!Box vorher kein Kennwort vergeben und es im Skript deswegen zum „Leerstring“ (

password    = '';

) gemacht, das schien die Fritz!Box aber so nicht zu akzeptieren. Ich konnte in den Ereignissen der Fritz!Box jedoch sehen, das ein Zugriff von meinem IPS-Rechner erfolgt war. Also setzte ich mal das Kennwort und siehe da: Es funktioniert (auch mit der 7170)!:smiley:

Also zwei Dinge:

  1. Nochmals Dank für Eure tolle Unterstützung!:slight_smile:
  2. Her mit den anderen Skripten!:wink:

Ein verschneiter Gruß aus dem Norden

Joachim

Hallo Leute,

ich beschäftige mich gerade etwas intensiver mit dem Thema Fritz!Box.
Die Daten die über den Port 1012 gesendet werden, sehen ja vom Prinzip so aus:

Ausgehende Anrufe:
datum;CALL;ConnectionID;Nebenstelle;GenutzteNummer;AngerufeneNummer;

Eingehende Anrufe:
datum;RING;ConnectionID;Anrufer-Nr;Angerufene-Nummer;

Zustandegekommene Verbindung:
datum; CONNECT; ConnectionID; Nebenstelle;Nummer;

Ende der Verbindung:
datum;DISCONNECT;ConnectionID;dauerInSekunden;

Weiß jemand welche Werte die ConnectionID (insbesondere maximal)annehmen kann? Sind das die zur Verfügung stehende „Kanäle“ z.B. 2xISDN + 2xSIP?

Joachim

@Rainer:
Was genau muss ich anpassen, damit ich die Onlinezeit eines Benutzer am heutigen Tag herausbekomme?

Ich verstehe das Prinzip nicht und bekomme bei

$ip2 = $ipuser2[1];

ein

Notice:  Undefined offset:  1 ...

Hallo Ralf,

ich kenne deine Einstellungen von der Box nicht.

Notice:  Undefined offset:  1 ...

sagt dir das keine Daten vorhanden sind.

Schick mir mal deine Seite per PM, die von der Box.

Auch hier Danke Rainer :), die Lösung steht im andern Beitrag.

Hi @all,

ich habe nun auch meine Fritzbox mittels der hier veröffentlichten Scripte eingebunden. Klappt soweit auch wunderbar, nur die Rufumleitung will noch nicht so ganz.

Es wird die Integer-Variable für das „Umleiten zu“ irgendwie nicht gesetzt.

Hier das Script:

<?
if ($IPS_SENDER == "WebFront")
{
    $fritzbox_ip = 'fritz.box';
    $fritzgui    = 'http://fritz.box/cgi-bin/webcm';
    $fritzseite  = '../html/de/menus/menu2.html';
    $password    = 'xxxxx';
    $ein         = '1';
    $aus         = '0';
    $handy_heiko = '015xxx';
    $handy_biene = '016xxx';

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

    switch($IPS_VALUE)
    {
       case 0:
            $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $aus));
       break;
       case 1:
            $umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));
       break;
       case 10: // Wert der Integervariable
          SetValue(11463 /*[Netzwerk\Telefonanlage\Details\Rufumleitung\Anrufe umleiten zu]*/,10);
          $heiko = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handy_heiko));
       break;
       case 11: // Wert der Integervariable
          SetValue(11463 /*[Netzwerk\Telefonanlage\Details\Rufumleitung\Anrufe umleiten zu]*/,11);
          $biene = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'var:menu' => 'fon', 'var:pagename' => 'rulall1', 'telcfg:settings/CallerIDActions0/Destination' => $handy_biene));
       break;
    }

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'fon', 'var:pagename' => 'rulall');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="telcfg:settings/CallerIDActions0/Active" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(10111 /*[Netzwerk\Telefonanlage\Details\Rufumleitung\Status]*/ , 1);
    }
    else
    {
        SetValue(10111 /*[Netzwerk\Telefonanlage\Details\Rufumleitung\Status]*/ , 0);
    }

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

?>

Wo liegt der Hund begraben. Ich finde den Fehler einfach nicht.

Die Integer hat die Werte 10 : Handy Heiko und 11: Handy Biene zugeordnet, ein eigenes Variablenprofil bekommen sowie das Script zugeordnet.

Gruß

Jimmy

Wie sieht denn die Rufumleitung in der Box aus?

telcfg:settings/Diversity0/Active

musst Du ersetzen.

Ursprünglich hatte ich keine drin. Das funktionierte nicht.

Dann habe ich eine angelegt. Dann wollte ich eine zweite anlegen, dann feuert die Fritzbox die erste wieder weg.

Wie lege ich denn vernüftig eine an, damit das mit dem Script harmonisiert?

Eigentlich brauche ich doch zwei. Eine auf die eine Handynummer und eine zweite auf die zweite.

Gruß

Jimmy

aufjeden Fall erstmal das im Script austauschen. Da das mit der letzten Firmware geändert wurde.
Wenn Du 2 Umleitungen schalten willst, musst Du das Script entsprechend anpassen.

In welchen Zeilen muss ich ersetzen?

Die?

$umleitung = http_post_fields($fritzgui, array('getpage' => $fritzseite, 'sid' => $SID, 'telcfg:settings/CallerIDActions0/Active' => $ein));

… und was heisst anpassen? In dem Beispielscript wurde doch auch auf zwei Telefone umgeleitet.

Sorry, aber irgendwie raff ich das Ganze noch nicht.

5mal musst Du es ersetzten, überall wo es falsch ist.

In dem Beispielscript wurde doch auch auf zwei Telefone umgeleitet.
das ist richtig aber nur mit einer Rufumleitung und nicht mit 2 so wie Du es geschrieben hast.

Ersetzen erledigt.

Vielleicht haben wir uns missverstanden. Ich möchte mittels dieses „Toggles“ entweder auf die eine ODER auf die andere Nummer umleiten.

Muss ich dazu noch etwas tun? Wenn ja, was und wo?

Gruß

Jimmy

Nö, dann passt es.

So, die Integer wechselt jetzt. Umleitung wird auch ein- und ausgeschaltet.

Nur wird die Nummer nicht geändert, wenn ich die zweite der Umleitungen auswähle. Die Integer-Variable wechselt aber, nur die Box bekommt die Nummer nicht übermittelt.

Sicher? mach mal einen refrech der Fritzseite, dann steht auch die richtige Nummer da.

Nee, leider nicht. Hatte auch an ein Refresh-Problem gedacht, dann erst refresh -> keine Änderung, außer dass Umleitung aktiv. Dann alle Browser geschlossen (manchmal hilft es ja), aber auch dann nicht. Es wird jedes Mal lediglich der Toggle raus- bzw. reingenommen.

Bild von der Umleitung der Box.