Fritzbox via URL (http) steuern

Aus FHEMWiki

Einleitung

Im Gegensatz zu der anderen hier vorgestellten Lösung arbeitet diese Lösung mit einem PHP Programm, das einige API Funktionen der Fritzbox zur Verfügung stellt.
Hierbei erfolgt die Steuerung der Fritzbox mittels eines Remote Login in der gleichen Weise, wie es mittels der WEB Oberfläche der Administrator Oberfläche geschieht. Es ist also nicht zwingend notwendig, das dieser Script direkt auf der Fritzbox läuft.

Voraussetzung

Es muss PHP 5 (PHP 5.3 und 5.4) auf dem System (Raspberry PI) installiert sein.

Die Installation von PHP kann man unter anderem mit folgenden Befehlen bewerkstelligen:

sudo bash
sudo apt-get install php5
sudo apt-get install libapache2-mod-php5 libapache2-mod-perl2 php5 php5-cli \ 
     php5-common php5-curl php5-dev php5-gd php5-imap php5-ldap php5-mhash \
     php5-mysql php5-odbc php-pear php-apc

Dies ist nur eine der Möglichkeiten um PHP zu installieren und auf einem Raspberry PI hat diese Procedure ohne Probleme gearbeitet. In dieser Version werden alle notwendigen Lib für das Betreiben eines Webservers installieren. Hierbei sind sicherlich mehr Libs installiert, als für diese Funktion notwendig ist.
Die Installation kann etwas dauern. Daher sollte man das nicht so zwischendurch machen.

Basisfunktion für die Steuerung

Um eine Fritzbox mittels remote Funktionen via einer URL zu steuern, muss ein bestimmtes Anmeldeverfahren (Login-Session) verwendet werden. Eine entsprechende Funktion wird im IP-Phone Forum sehr ausführlich beschrieben und auch weiterentwickelt.
Hier hat sich das Mitglied "Spackmat" sehr intensive mit dem Thema beschäftigt und eine API Funktion und einige kleine Hilfeprogramme als Download bereitgestellt. Direkten Support gibt es nicht (Freiberufler, gegen Bezahlung natürlich doch), aber es gibt genügend Hinweise und Hilfe von anderen Beträgen.

Hier der Link zum Download der API und Basis Thread, der Grundlage für diesen Artikel ist Fritz!Box API für PHP (inkl. Login-Sessions) im IP-phone-forum

Ein Download kann nur von dieser Seite gemacht werden, da hier immer die aktuelle Version vorliegt. Es lohnt sich bei Interesse die einzelnen Beträge durchzulesen, da man hier auch andere Funktionen auffinden kann (z.B. reboot der Fritzbox). Folgende Scripte liegen hier bei (Stand 07.2013):

Basis Klasse „fritzbox_api.class.php“

Die Basis Klasse, die alle Basis Funktionen zur Steuerung des Login Verfahren beinhaltet. Änderungen sind in dieser Datei eigentlich nicht notwendig.

Konfigurationsdatei „fritzbox_user.conf.php“

In dieser Datei müssen die entsprechenden Parameter der Fritzbox eingetragen werden. Als da wären die IP Adresse, das Passwort der Weboberfläche der Fritzbox, da der Script die gleichen Aktionen wie die Weboberfläche durchführt.

# use the new .lua login method in current (end 2012) labor and newer firmwares (Fritz!OS 5.50 and up)
$this->config->setItem('use_lua_login_method', true);

Bei älteren Fritzboxen muss man hier 'false' eintragen. Dies war für eine 7570 notwendig.

# set to your Fritz!Box IP address or DNS name (defaults to fritz.box), for remote config mode, use the dyndns-name like example.dyndns.org
$this->config->setItem('fritzbox_ip', 'fritz.box');

Hier muss die IP Adresse der Fritzbox eingetragen werden. Die meisten Fritzboxen reagieren aber genau auf die url.

# set to your Fritz!Box password (defaults to no password, will be ignored, when remote config is enabled)
$this->config->setItem('password', 'Hier das Password');

Hier muss das Password der Fritzbox eingetragen werden, damit die Anmeldung des Scripts an die Fritzbox korrekt arbeitet.

Gast Wlan ein / ausschalten

Mit dieser Funktion kann man das Gast Wlan der Fritzbox ein und ausschalten. Der Parameter 0 schaltet es aus, 1 ein.

fritzbox_guestwlan_on_off.php  0 | 1

Telefon anrufen

Mit dieser Funktion kann man eine Telefonnummer anrufen. Getestet wurde es mit dem Fritz-Fon. Die Rufnummer steht am Anfang der Datei und ruft in dieser Version das erste Fritz-Fon an.

fritzbox_ring_phone.php

Rufumleitung aktivieren

Hiermit wird die Rufumleitung ein/ausgeschaltet, die in der Fritzbox entsprechend vorher konfiguiert wurde.

fritzbox_diversity0on.php 0 | 1

Gast LAN (Port 4) Schnittstellen ein/ausschalten

fritzbox_guestlan_on_off.php 0 | 1

Anrufliste auslesen

Hier kann man die Anrufliste auslesen.

fritzbox_get_foncallslist.php

Anrufbeantworter ein/ausschalten

Die Funktion schaltet den Anrufbeantworter der Fritzbox ein/aus.

fritzbox_tam_on_off.php 0 | 1

Wlan ein/ausschalten

Der folgende Code schaltet das WLAN der Fritzbox ein / aus. Der Parameter ist 0 | 1.

<?php
$dial = ''; // set to the number to dial
// init the output message
$message = date('Y-m-d H:i') . ' ';
try
{ 
  // load the fritzbox_api class
  require_once(__DIR__ . '/fritzbox_api.class.php');
  $fritz = new fritzbox_api();

  // handle the CLI arguments or give a help message
  if (isset($argv[1]) && ($argv[1] == 0 || $argv[1] == 1) )
  {
    $mode = (bool)$argv[1];
  }
  else
  {
  $mode = 0;
  }

  if( $mode == 1 )
	 {
	 $dial = '#96*1*'; // set to the number to dial
	 }
  else
	 {
	 $dial = '#96*0*'; // set to the number to dial
	 }

  // update the setting

  $formfields = array(
    'telcfg:command/Dial'      => $dial,
  );
  $fritz->doPostForm($formfields);
}
catch (Exception $e)
{
  $message .= $e->getMessage();
}

// log the result
if ( isset($fritz) && is_object($fritz) && get_class($fritz) == 'fritzbox_api' )
{
  $fritz->logMessage($message);
}
else
{
  echo($message);
}
$fritz = null; // destroy the object to log out
?>

Da dieser Befehl derzeit noch nicht in der ZIP Datei eingepflegt ist, hier ein direkter Auszug des Quell Code. Der Code basiert im Grund auf der "Dial" Funktion und verwendet die entsprechenden Rufnummern der Fritzbox zum Ein '#96*1*' und Ausschalten '#96*0*' der WLAN Verbindung.

Das Abschalten des WLAN kann man im Systemlog der Fritzbox einsehen. Hier wird folgender Logeintrag für das Ausschalten und Einschalten erzeugt.

16.07.13	17:53:18	WLAN wurde über das Telefon aktiviert (2,4 GHz).
16.07.13	17:52:44	WLAN wurde über das Telefon deaktiviert (2,4 GHz).

Links

Weiterführende Information zu diesem Thema findet man hier AVM Wiki der Fritz Box