Fritz!Box API für PHP (inkl. Login-Sessions)

FritzBox PHP API - WOL-Modul

Moinmoin!

Für ein kleines Projekt von mir brauchte ich ein Script das mir einen Rechner aus dem Standby holt.
Da es entweder generell oder nur bei mir nicht möglich ist ein WOL-Paket von einem WLAN-Rechner aus zu senden musste ich mich an die Funktion der FritzBox halten und ich bin sehr dankbar das ich diese API gefunden habe die mit zeigte wie ich diese anzusprechen habe.

Um etwas zurück zu geben habe ich meinen Code an das Format der PHP-API angepast und möchte hier das FritzBox-WOL-Modul vorstellen.

Nocheinmal vielen Dank für die schöne API und viel Spaß mit dem WOL-Modul :eek:)

Gruß,
-whirpool

-------------------------------------------------------------------------------
Anmerkungen:
-Getestet ist es mit einer FritzBox 7390. Wenn sich andere Modelle in den Bezeichnungen unterscheiden müsste da natürlich nachgebessert werden.
-Ich bin nicht mit dem Error-Handling vertraut und habe mich einfach an die verwendete Schablone gehalten.
-Es existiert kein Check ob eine übergebene DeviceID auch tatsächlich existiert, bei einem übergebenen Namen hingegen schon.
-Ich erhebe keinen Anspruch auf den Code. Tüftelt nach herzenswusch daran rum!
-------------------------------------------------------------------------------

Anhang anzeigen fritzbox_wol.php.zip
PHP:
<?php
/**
 * Fritz!Box PHP tools CLI script to start a suspended PC via WakeOnLan
 *
 * Must be called via a command line, shows a help message if called without any or an invalid argument
 * Can log to the console or a logfile or be silent
 *
 * Check the config file fritzbox.conf.php!
 * 
 * @author   whirpool <contact me via PM at http://www.ip-phone-forum.de>
 * @author   Gregor Nathanael Meyer <Gregor [at] der-meyer.de>
 * @license  http://creativecommons.org/licenses/by-sa/3.0/de/ Creative Commons cc-by-sa
 * @version  0.2 2014-04-16
 * @package  Fritz!Box PHP tools
 */

try
{
	// load the fritzbox_api class
	require_once('fritzbox_api.class.php');
	$fritz = new fritzbox_api();

	// init the output message
	@$message = date('Y-m-d H:i') . ' ';

	// Process the 'list' argument
	if( isset($argv[1]) and strtolower($argv[1]) == "list")
	{
		// read the current settings
		$formfields = array('getpage' => '/net/network_user_devices.lua');
		$output = $fritz->doGetRequest($formfields);

		// Magically match the fields we need
		preg_match_all("|\{[^\}]*?\[\"UID\"\][^\"]+\"([^\"]+)\"".	// this is the FritzBox internal DeviceID
					"[^\}]*?\[\"ethernet\"\][^\"]+\"1\"". 			// only match cable connected devices (WiFi has a value of '0')
					"[^\}]*?\[\"ip\"\][^\"]+\"([^\"]+)\"". 			// grep the device IP
					"[^\}]*?\[\"name\"\][^\"]+\"([^\"]+)\"|s"		// grep the device name
					,$output, $matchArr, PREG_SET_ORDER);

		// Output a list of known devices with name, IP and deviceID
		echo "\n\n Name                     IP                  DeviceID\n";
		foreach($matchArr as $num => $content) {
			echo " ".str_pad($content['3'],25).str_pad($content['2'],20).$content['1']."\n";
		}
		echo "\n";
	}

	// Process arguments suppling a DeviceID
	elseif( isset($argv[1]) and (preg_match("/^landevice[\d]+$/", $argv[1]) or preg_match("/^-id=(landevice[\d]+)$/", $argv[1], $idArr)) )
	{
		if(preg_match("/^landevice[\d]+$/", $argv[1])) {
			$deviceID = $argv[1];
		} else {
			$deviceID = $idArr[1];
		}

		// Triggering the WOL-Package
		$formfields['getpage'] = "/net/edit_device.lua";
		$formfields['btn_wake'] = "";
		$formfields['dev'] = $deviceID;
		$output = $fritz->doPostForm($formfields);
		$message .= "Sent WOL-Package to device: ".$deviceID;
	}

	// Process argument suppling the Device-Name
	elseif( isset($argv[1]) and preg_match("/^-name=(.+)$/", $argv[1], $nameArr) )
	{
		// read the current settings
		$formfields = array('getpage' => '/net/network_user_devices.lua');
		$output = $fritz->doGetRequest($formfields);

		// Try to match the DeviceName to a DeviceID
		if(preg_match("|\{[^\}]*?\[\"UID\"\][^\"]+\"([^\"]+)\"".		// this is the FritzBox internal DeviceID
					"[^\}]*?\[\"ethernet\"\][^\"]+\"1\"".				// only match cable connected devices (WiFi has a value of '0')
					"[^\}]*?\[\"name\"\][^\"]+\"".$nameArr[1]."\"|s"	// match the device name
					,$output, $matchArr))
		{
			// Triggering the WOL-Package
			$formfields['getpage'] = "/net/edit_device.lua";
			$formfields['btn_wake'] = "";
			$formfields['dev'] = $matchArr[1];
			$output = $fritz->doPostForm($formfields);
			$message .= "Sent WOL-Package to device: ".$matchArr[1]." (".$nameArr[1].")";
		}

		// Notify the User if the given DeviceName could not be matched to a DeviceID
		else
		{
			if ( $fritz->config->getItem('logging') == 'console' )
			{
				echo '
  No device named "'.$nameArr[1].'" was found!
  Please check your spelling or run with the \'list\' argument to see all currently known devices!

';
			}
			else
			{
				$fritz->logMessage($message . 'ERROR: No WOL capable device named \''.$nameArr[1].'\' found!');
			}
			$fritz = null; // destroy the object to log out
			exit;
		}
	}

	// Display a help message if no (valid) CLI argument was given
	else
	{
		if ( $fritz->config->getItem('logging') == 'console' )
		{
			echo '
  Sends a WOL-Magic-Packet to a given Device waking it from Standby
  
  Usage on UNIX systems:
    /path/to/php ' .  $argv[0] . ' {list | DeviceID | -id=DeviceID | -name=DeviceName}
  
  Usage on Windows systems:
    "c:\path\to\php.exe" ' .  $argv[0] . ' {list | DeviceID | -id=DeviceID | -name=DeviceName}
  
  DeviceID
  The DeviceID is NOT the MAC but a FritzBox internal ID!
  The DeviceID changes if/when the FritzBox is rebooted!
  Run with the \'list\' argument to see a list of known IDs/Names.

  Examples:
  WakeUp a Computer with the DeviceID \'landevice1234\'
    /path/to/php ' .  $argv[0] . ' landevice1234
    /path/to/php ' .  $argv[0] . ' -id=landevice1234
  WakeUp Bob\'s Computer named \'BobsComputer\'
    /path/to/php ' .  $argv[0] . ' -name=BobsComputer
  WakeUp Paul\'s Computer named \'Pauls Computer\'
    /path/to/php ' .  $argv[0] . ' -name="Pauls Computer"

';
		}
		else
		{
			$fritz->logMessage($message . 'ERROR: Script was called without or with an invalid argument');
		}
		$fritz = null; // destroy the object to log out
		exit;
	}
}

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
?>
 
Hallo zusammen,

vielen Dank und Respekt an alle, die diese API entwickelt und erweitert haben. Tolle Arbeit!
Da wir in unserem kleinen Betrieb sehr oft die Rufumleitung auf eine andere Nummer legen müssen, war die Fritzbox-API genau das Richtige, um das Einloggen und händische Ändern der RUL durch einen einzelnen Klick auf unserer zugangsgeschützten Seite zu ersetzen. Dazu muss das Paket natürlich auf dem Server laufen.

Neben den üblichen Anfangsschwierigkeiten (Einstellungen auf der Fritzbox für dyn. DNS, remote- & lokalen Login, RUL und der richtigen Konfiguration der fritzbox_user.conf.php) entpuppte sich vorallem unser Hoster (Strato) als Stolperfalle.
Der unterstützt zwar php in verschiedenen Versionen und cURL, letzteres aber nicht über https (Info gefunden in der Strato-Hilfe)! Der remote-login der Fritzbox läuft aber nur über https :| Wer es trotzdem versucht erhält nicht etwa eine Fehlermeldung sondern das php-Script bricht kommentarlos bei der Initialisierung einer neuen fritzbox_api ab. Dort werden in initSID() die beiden Funktionen doPostForm und doGetRequest aufgerufen, die cURL verwenden.

Vielleicht hilft das jemand mal weiter, der vor einem ähnlichen Problem steht.
Die Lösung war nun diese beiden Funktionen durch cURL-freie Versionen zu ersetzen.
Der Aufruf von doGetRequest
PHP:
$session_status_simplexml = simplexml_load_string($this->doGetRequest(array('getpage' => $loginpage)));
wird ersetzt durch
PHP:
$url = $this->config->getItem('fritzbox_url').$loginpage;
$session_status_simplexml = simpleXML_load_file($url,"SimpleXMLElement",LIBXML_NOCDATA);

In der doPostForm-Funktion habe ich die cURL-Befehle durch folgendes ersetzt:
PHP:
$options = array(
		           'http' => array(
		                  'header'  => "Content-type: application/x-www-form-urlencoded",
		                  'method'  => 'POST',
		                  'content' => http_build_query($formfields),
		           ),
		     );
$context  = stream_context_create($options);
$output = file_get_contents($url, false, $context);

Bitte beachtet, dass ich damit nicht alle Kombinationen aus neuem/alten Loginverfahren und remote/lokal user unterstütze, sondern nur das neue Login per remote.
 
Zuletzt bearbeitet:
Ach Strato… Coole Lösung (von Dir, nicht von Strato). Ich würde aber einfach generell bei den doGetRequest- und doPostForm-Methoden ansetzen, dann wäre das eine Lösung für alle. Vielleicht hat ja jemand Lust, einen API-Fork für cURL-lose Umgebungen zu bauen und zu unterhalten. Das Problem ist, dass man das dann immer sauber mittesten muss, wenn es neue Scripte gibt.
 
Ach Strato… Coole Lösung (von Dir, nicht von Strato).
Danke. Ja, Strato, cURL ja aber nur ohne https, da muss man erstmal draufkommen...

Ich würde aber einfach generell bei den doGetRequest- und doPostForm-Methoden ansetzen, dann wäre das eine Lösung für alle. Vielleicht hat ja jemand Lust, einen API-Fork für cURL-lose Umgebungen zu bauen und zu unterhalten.
Oder alternativ einen (weiteren) Parameter in der config (use_curl_with_https), der dann per if-Anweisung in den doGetRequest- und doPostForm-Methoden die curl/curl-lose Version wählt... Nur so ne Idee
 
Zuletzt bearbeitet:
Daran hatte ich auch zuerst gedacht. Aber: Das erhöht den Testaufwand, wenn sich was ändert. Und man schleppt Code mit, den die meisten nie brauchen. Daher würde ich einen Fork samt Maintainer bevorzugen.

Oder, noch besser: Bei Strato meckern gehen. Was fahren die denn für einen Film? cURL, aber nur ohne SSL, das sollte ein Hoster schon aktivieren oder cURL nicht anbieten. Schlimm genug, dass wie die Zertifikate nicht prüfen. Das gefällt mir sowieso nicht, aber ich stecke in cURL nicht so sehr drin, dass ich eine einfache Möglichkeit wüsste, nur mit bekannten Zertifikaten zu arbeiten. Meines Wissens nach verlässt sich cURL da auf die im System installieren Rootzertifikate. Falls da jemand mehr drüber weiß, her mit Infos. Am liebsten wäre es mir, wenn man auf einfachem Weg Zertifikatsinformationen (etwa den Fingerabdruck) in die Config eintragen könnte und die API sich dann nur mit boxen verbindet, die dieses Zertifikat liefern. Wenn die Box überhaupt ein individuelles Zertifikat liefert und nicht ein AVM-Standardzertifikat. Dann hilft eh nur ein VPN, was ich so oder so für die bessere Lösung halte, zumindest schlafe ich mit sowas besser, habe den Fernzugriff nirgendwo aktiviert, weil ich dem nicht traue. Zu Recht, wie sich ja jüngst herausgestellt hat.

Liebe Grüße,
Gregor
 
Du hast Recht: wäre mehr Code und mehr Testaufwand. Allerdings hätte ich mir zielsicher dann zuerst denn falschen (master-)fork runtergeladen & installiert und mich dann gewundert warums nicht funktioniert (kommt man ja nicht so ohne weiteres drauf auf so einen Schwachs...).

Andererseits gibts - wie du schon richtig sagst - nicht viele mit dieser Konstellation (Fritzbox-API auf Server & Hoster == Strato (bzw. cURL ohne SSL/kein cURL)), sodass der Nutzen eh mager ausfallen würde...
 
Mir ist aufgefallen, dass die Steuerung des WLAN-Gastzugangs bei einem aktuellen Fritz!OS 6 die Verschlüsselung ausschaltet, weil AVM das Feld dafür umbenannt hat. Zudem gibt es da ein paar neue Optionen, die auch deaktiviert werden, wenn man das alte Script schalten lässt. Ich habe das also mal aktualisiert, so dass es wieder läuft:

Code:
<?php
/**
 * Fritz!Box PHP tools CLI script to enable or disable the WLAN guest access
 * since v0.4 it works only with the current Fritz!OS 6, since the WPA-settings field was renamed
 * from wpa_modus to sec_mode and there are some new checkboxes
 * if you use an older Fitz!OS, stick to v0.3
 *
 * Must be called via a command line, shows a help message if called without any or an invalid argument
 *
 * Check the config file fritzbox.conf.php!
 * 
 * @author   Gregor Nathanael Meyer <Gregor [at] der-meyer.de>
 * @license  http://creativecommons.org/licenses/by-sa/3.0/de/ Creative Commons cc-by-sa
 * @version  0.4 2014-05-01
 * @package  Fritz!Box PHP tools
 */

try
{
  // load the fritzbox_api class
  require_once('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
  {
    if ( $fritz->config->getItem('logging') == 'console' )
    {
      echo '
  Enables or disables the WLAN guest access of a Fritz!Box
  
  Usage on UNIX systems:
    /path/to/php ' .  $argv[0] . ' {0|1} [optional: PASSWORD]
  
  Usage on Windows systems:
    c:\path\to\php.exe ' .  $argv[0] . ' {0|1} [optional: PASSWORD]
  
  0 disables the guest access
  1 enables the guest access
  
  The optional argument PASSWORD sets a new guest access password (min 8 chars)
  Defaults to false, so the current password is kept.
  ';
    }
    else
    {
      $fritz->logMessage('ERROR: Script was called without or with an invalid argument');
    }
    exit;
  }
  $wpa_key = (isset($argv[2]) && strlen($argv[2]) >= 8 && strlen($argv[2]) <= 63) ? $argv[2] : false;

  
  // read the current settings
  $formfields = array(
    'getpage' => '/wlan/guest_access.lua',
  );
  $output = $fritz->doGetRequest($formfields);
  
  // read guest_ssid setting
  preg_match('@name="guest_ssid"[^>]+value="([^"]*)"[^>]*@', $output, $matches);
  $formfields['guest_ssid'] = isset($matches[1]) ? $matches[1] : 'defaultguestaccess';
  
  // read wpa_key setting
  preg_match('@name="wpa_key"[^>]+value="([^"]*)"[^>]*@', $output, $matches);
  $formfields['wpa_key'] = isset($matches[1]) ? $matches[1] : 'defaultwpakey';
  
  // read sec_mode setting
  preg_match('@name="sec_mode".*?<option value="(\d+)"[^>]+?selected.*?</select>@s', $output, $matches);
  $formfields['sec_mode'] = isset($matches[1]) ? $matches[1] : 'x';
  
  // read push_service setting
  preg_match('@name="push_service"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) )
  {
    $formfields['push_service'] = 'on';
  }
  
  // read group_access setting
  preg_match('@name="group_access"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) )
  {
    $formfields['group_access'] = 'on';
  }
  
  // read user_isolation setting
  preg_match('@name="user_isolation"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) )
  {
    $formfields['user_isolation'] = 'on';
  }
  
  // read down_time_activ setting
  preg_match('@name="down_time_activ"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) )
  {
    $formfields['down_time_activ'] = 'on';
  }
  
  // read down_time_value setting
  preg_match('@name="down_time_value".*?<option value="(\d+)"[^>]+?selected.*?</select>@s', $output, $matches);
  $formfields['down_time_value'] = isset($matches[1]) ? $matches[1] : '15';
  
  // read disconnect_guest_access setting
  preg_match('@name="disconnect_guest_access"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) )
  {
    $formfields['disconnect_guest_access'] = 'on';
  }
  
  // set new given setting
  if ( $mode == true )
  {
    $formfields['activate_guest_access'] = 'on';
    if ( $wpa_key !== false )
    {
      $formfields['wpa_key'] = $wpa_key;
    }
  }
  
  // do the update
  $formfields['btnSave'] = '';
  $output = $fritz->doPostForm($formfields);

  preg_match('@name="activate_guest_access"[^>]+(checked)[^>]*@', $output, $matches);
  if ( isset($matches[1]) && $mode == true )
  {
    preg_match('@name="wpa_key"[^>]+value="([^"]*)"[^>]*@', $output, $matches);
    if ( isset($matches[1]) )
    {
      $fritz->logMessage('WLAN guest access is now active. WPA-Key is "' . $matches[1] . '"');
    }
  }
  else if ( !isset($matches[1]) && $mode == false )
  {
    $fritz->logMessage('WLAN guest access is now inactive.');
  }
  else if ( isset($matches[1]) && $mode == false )
  {
    $fritz->logMessage('ERROR: WLAN guest access status change failed, should be inactive, but is still active.');
  }
  else if ( !isset($matches[1]) && $mode == true )
  {
    $fritz->logMessage('ERROR: WLAN guest access status change failed, should be active, but is still inactive.');
  }
}
catch (Exception $e)
{
  if ( isset($fritz) && is_object($fritz) && get_class($fritz) == 'fritzbox_api' )
  {
    $fritz->logMessage($e->getMessage());
  }
  else
  {
    echo(date('Y-m-d H:i') . ' ' . $e->getMessage());
  }
}
$fritz = null; // destroy the object to log out
 
Hi,
Danke für die tolle API und an alle für die vielen Beispiele. Ich konnte damit endlich ein Problemchen lösen :)
Ich habe das Problem, dass ich in meinem Büro manchmal mein Firmentelefon und manchmal mein privates haben möchte.
Das angehängte Skript schaltet die Configs einfach um :)
Vielleicht hilfts Euch :)

Grüße
Markus

Anhang anzeigen fritzbox_config_phone.zip
 
Nette Rezepte zum Wochenende. :)

Was anderes: Ich sehe immer wieder, dass Ihr ans Ende Eurer Dateien ein ?> packt, um den PHP-Block zu schließen. Dass ich das weglasse, ist aber kein Versehen, sondern volle Absicht. Bei Kommandozeilenskripten ist das im Ergebnis meistens egal, aber auf dem Webserver macht das einen Unterschied, ob nach einem eventuellen ?> noch Leerzeichen oder Leerzeilen kommen. Die werden nämlich vom Webserver im Zweifel ausgegeben und können lustige Seiteneffekte verursachen. Daher lässt man am Dateiende das schließende ?> weg, denn dann können eben nicht mehr dahinter noch unsichtbare Zeichen kommen, die Probleme machen. Für den PHP-Parser ist das kein Problem, der bekommt das Dateiende schon mit.
 
Hi,
da es mich störte, das ich dass Passwort in der conf im Klartext hinterlegen muss und ich das Skript eh immer aus der Linux-CLI benutze, hier eine Möglichkeit das Passwort von der Console zu lesen:
Passwort interaktiv eingeben:
Folgende Änderung in der fritzbox_user_conf.php:
PHP:
# set to your Fritz!Box password (defaults to no password, will be ignored, when remote config is enabled)
echo "Password: ";
$password = preg_replace('/\r?\n$/', '', `stty -echo; head -n1 ; stty echo`);
echo "\n";
$this->config->setItem('password', $password );

Source: http://stackoverflow.com/questions/...a-php-cli-password-prompt-that-hides-the-pass

Grüße
Markus
 
Hi,

ich habe nach einer Möglichkeit gesucht mehrere Rufnummer Zeitgesteuert umzuschalten. In meinem Fall nicht nur an und aus, sondern auch die Rufnummer wechseln.
So habe ich dann nämlich die Möglichkeit mit mehren Scripts per Cronjob der Fritzbox z.B. zu sagen, das die Rufumleitung nun nicht mehr ins externe Callcenter gehen soll, sondern
ab 16:00 h auf das Handy umgeleitet werden soll.

Ich habe das ganze ins vorhandene Rufumleitungsscript integriert und entsprechend die Beschreibung ergänzt.

Gruß Daniel
 

Anhänge

  • fritzbox_diversity_advanced.zip
    747 Bytes · Aufrufe: 50
Servus,

gab es diesbzgl. eine Lösung? :confused: -> "...Nachwahl von *71#2899"

Unabhängig von der Nachwahl-Problematik, habe ich beobachtet, daß interne Anrufe bei Verwendung des "fritzbox_ring_phone.php" über die interne Nummer **1 gehen, kann man dies beeinflussen? Sprich, könnte der interne Ruf auch über die **2 gehen?

Danke vorab.



Hallo,
ich habe die fritzbox_ring_phone.php geändert. Ich würde gern meinen Türöffner damit ansteuern. Hierzu brauche ich eine Nachwahl von *71#2899*

fritzbox_ring_phone.php:
<?php
$dial1 = '**51'; // set to the number to dial
$dial2 = '*71#password*';
// 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();

// update the setting
$formfields = array(
'telcfg:command/Dial' => $dial1,
sleep (3),
'telcfg:command/Dial' => $dial2,
);
$fritz->doPostForm($formfields);
$message .= 'Phone ' . $dial1 . ' ringed.';
}
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
?>


Leider funktioniert das ganze nicht, wenn ich per dail die Doorline anrufe nimmt sie ab, aber sobald ich eine zweite Rufnummer senden will läuft nichts mehr.
Hätte jemand eine Idee was ich tun könnte ?

Gruß

Frank
 
Hallo zusammen,

ich hab gerade ein Script zusammengestöpselt, dass die Temperaturwerte der Fritz!DECT 200 ausliest, die seit der aktuellen Beta (FRITZ!OS 06.10-28178) im Fronten angezeigt werden. Ich benutze das ganze für einen kleinen Infoscreen, der bei mir zuhause hängt. Das Script ist nicht besonders hübsch, funktioniert aber ;)

Vielleicht hilft's ja jemand. Verbesserungen sind natürlich herzlich willkommen...

Anhang anzeigen fritzbox_temp_sensors.php.zip

Michael
 
Mir ist aufgefallen, dass die Steuerung des WLAN-Gastzugangs bei einem aktuellen Fritz!OS 6 die Verschlüsselung ausschaltet, weil AVM das Feld dafür umbenannt hat. Zudem gibt es da ein paar neue Optionen, die auch deaktiviert werden, wenn man das alte Script schalten lässt. Ich habe das also mal aktualisiert, so dass es wieder läuft:
Funktioniert bei mir nicht, disabled immer die Verschlüsselung...

FRITZ!Box Fon WLAN 7390
FRITZ!OS 06.03
 
Schau mal, ob da, wenn Du manuell etwas änderst, ein POST-Feld mit dem Namen sec_mode gesendet wird. Das war bei meiner 7490 neu dazu gekommen und hieß vorher anders. Ansosneten musst Du mal schauen, wie das Auswahlfeld für die Verschlüsselung bei Dir heißt und das Script entsprechend anpassen.

Liebe Grüße,
spackmat
 
tatsächlich, das Feld heißt bei mir sec_mode - hat auch nen anderen Wert und zwar:

<option value="2">WPA (TKIP)</option>
<option value="3">WPA2 (CCMP)</option>
<option value="4" selected="selected">WPA + WPA2</option>
<option value="5">unverschlüsselt</option>

Hab jetzt also folgendes angepasst:

// read wlan_security setting
preg_match('@name="sec_mode"[^>]+value="([^"])"[^>]+checked[^>]*@', $output, $matches);
$formfields['sec_mode'] = isset($matches[1]) ? $matches[1] : '4';
 
tatsächlich, das Feld heißt bei mir sec_mode - hat auch nen anderen Wert und zwar:

Das war ja genau die Änderung, wegen der ich vor ein paar Beiträgen eine neue Version des Scripts gepostet habe, blätter mal etwas zurück. :)
 
Hallo zusammen,

erst mal vielen Dank für diese grandiose API und die Mühe die Ihr da reingesteckt habt! Genau das was ich gesucht habe.

Eine kleine Frage hätte ich noch. Ist es möglich die "ausgehende" Rufnummer bei fritzbox_ring_phone.php zu konfigurieren? Hat jemand eine Idee oder eine kleine Anleitung?

Im Prinzip ist es das was SuperRaven auch sucht:

...

Unabhängig von der Nachwahl-Problematik, habe ich beobachtet, daß interne Anrufe bei Verwendung des "fritzbox_ring_phone.php" über die interne Nummer **1 gehen, kann man dies beeinflussen? Sprich, könnte der interne Ruf auch über die **2 gehen?

Danke vorab.

Vielen Dank im Voraus für "sachdienliche Hinweise".

Viele Grüße
densidad
 
Versuche mal unter "Wählhilfe" auf Telefon 2 umzustellen.
 

Neueste Beiträge

Statistik des Forums

Themen
244,860
Beiträge
2,219,679
Mitglieder
371,578
Neuestes Mitglied
ingolf01
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.