AVM FritzBox USB-Fernaschluss per Script aktivieren/deaktivieren

Hallo!

Ich habe leider immer wieder mal das Problem, dass meine Fritzbox 7570 die angeschlossene FHZ1300 nicht mehr erkennt und dann keine angeschlossenen Geräte meldet. Abhilfe schafft hier am Einfachsten der Neustart des USB-Fernaschlusses in der Fritzbox.

Nun bin ich auf der Suche nach einer Möglichkeit, den Fernanschluss mit einem Script zu stoppen bzw. zu starten, ähnlich wie die Skripte um den AB oder das WLAN zu steuern.

Abgesehen davon dass ich keine Ahnung habe wie die nötigen Codezeilen aussehen müssten (Für den AB ist es ja wohl diese Zeile: $wlan = http_post_fields($fritzgui, array(‚getpage‘ => $fritzseite, ‚sid‘ => $SID, ‚wlan:settings/ap_enabled‘ => $ein))) befürchte ich, dass beim aktivieren des Fernaschlusses die Auswahl der unterstützten Geräte schwierig werden könnte…

Kann mir jemand von den Fritz-Box-Profis hier weiter helfen?

Vielen Dank schon einmal!

Kannst ja mal hiermit rumspielen.

<!-- Post Form -->
<form method="POST" action="../cgi-bin/webcm" target="_self" id="uiPostForm" name="uiPostForm">
<!-- Refresh Form -->
<input type="hidden" name="sid" value="c1bb7f788d186f7c" id="uiPostSid">
<input type="hidden" name="getpage" value="../html/de/menus/menu2.html" id="uiPostGetPage">
<input type="hidden" name="errorpage" value="../html/de/menus/menu2.html" id="uiPostErrPage">
<input type="hidden" name="var:pagename" value="aura" id="uiPostPageName">
<input type="hidden" name="var:errorpagename" value="aura" id="uiPostErrorPageName">
<input type="hidden" name="var:menu" value="net" id="uiPostMenu">
<input type="hidden" name="var:pagemaster" value="" id="uiPostPageMaster">
<input type="hidden" name="time:settings/time" value="" id="uiPostDateTime">
<input type="hidden" name="box:settings/webui_cookie" value="" disabled>
<!-- END Refresh Form -->

<Input type="hidden" name="aura:settings/enabled" value="0" id="uiPostAuraEnabled" disabled>
<Input type="hidden" name="aura:settings/aura4storage" value="0" id="uiPostSpeicher" disabled>
<input type="hidden" name="aura:settings/aura4printer" value="0" id="uiPostDrucker" disabled>
<input type="hidden" name="aura:settings/aura4other" value="0" id="uiPostOther" disabled>

</form>
<!-- END Post Form -->

<form name="logoutForm" action="../cgi-bin/webcm" method="POST">
<input type="hidden" name="sid" value="c1bb7f788d186f7c">
<input type="hidden" name="security:command/logout" value="">
<input type="hidden" name="getpage" value="../html/confirm_logout.html">
</form>
</body>
</html>

und hier zum ein und ausschalten des Fernanschlusses.

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

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

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'net', 'var:pagename' => 'aura');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="aura:settings/enabled" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(51688 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 1);
    }
    else
    {
       SetValue(51688 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 0);
    }

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

?>

Wow, nicht dass ich wirklich überrascht wäre, aber dennoch immer wieder begeistert über die schnellen und hilfreichen Antworten hier im Forum - vielen Dank dafür!

Mit dem Code hier funktioniert auf jeden Fall schon einmal das An- und Ausschalten mit der Gerätegruppe „Andere (z.B. Scanner)“:

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

Was mir noch nicht ganz einleuchtet ist der Teil im Script:

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'net', 'var:pagename' => 'aura');
    $sendcheck = http_post_fields($fritzgui, $checksetting);
    preg_match('@name="aura:settings/enabled" value="([10])"@i', $sendcheck, $matches);
    if (isset($matches[1]) && $matches[1] == 1)
    {
        SetValue(36702 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 1);
    }
    else
    {
       SetValue(36702 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 0);
    }

Sieht aus wie eine weitere Abfrage ob das An-/Ausschalten erfolgreich war?!
Da das aktivieren einige Sekunden dauert bin ich mir nicht sicher ob die Rückmeldung zuverlässig wäre, und warum eine Integer-Variable und keine Boolean-Variable verwendet wird?

Auf jeden Fall muss ich jetzt nur noch einen Weg finden, das AVM-Fernanschluss-Tool neu zu starten um eine erneute Verbindung herzustellen - ich werde es mal mit der Installation als Service probieren, bin aber gespannt ob dort der Autostart für die zu verbindenden Geräte funktioniert. Das ganze dann evtl. noch mit dem IPS-Watchdog verbinden um den IPS-Dienst neu zu starten, und ich muss mir so schnell nicht wieder was von meiner Freundin anhören wenn die Rolladen mal wieder nicht hochfahren und die Heizung kalt bleibt… :loveips:

Nochmals vielen Dank und einen schönen restlichen 3. Advent!

Tobias

Hallo Tobias,

es ist eine boolvariable, diese zeigt dir an ob ein oder ausgeschaltet. Die Variable übergibst Du einfach dem Script. Eigene Aktion.

Der Code funktioniert genauso wie ich ihn oben gepostet habe!

danke, hat mir sehr geholfen.
folgendes funktioniert bei mir aber nicht.
mir ist aufgefallen, dass $matches leer ist.
somit bekomm ich leider keine rückmeldung obs geschaltethat. (aber es funktioniert ja)

braucht man nicht auch eine wartezeit zum aktivieren/deaktivieren?

    $checksetting = array('getpage' => $fritzseite, 'var:menu' => 'net', 'var:pagename' => 'aura'); 
    $sendcheck = http_post_fields($fritzgui, $checksetting); 
    preg_match('@name="aura:settings/enabled" value="([10])"@i', $sendcheck, $matches); 
    if (isset($matches[1]) && $matches[1] == 1) 
    { 
        SetValue(36702 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 1); 
    } 
    else 
    { 
       SetValue(36702 /*[Fritzbox\Fernanschluss\Fernanschluss]*/, 0); 
    }  

Hallo,

ich bin durch die Suche auf das Forum gestoßen.

Ich suche das selbe wie der Treadsteller. Nur für die Fritz Box 7390.

Telnet habe ich eingeschaltet.

Nehme an das Script muss in eine Stapelverarbeitungsdatei kopiert werden?

Danke im Vorraus.

Hier geht es um php basierte Skripte für die Haussteuerngssoftware IP Symcon. Sicher dass du sowas suchst? :wink: