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

Hallo. Ich habe das Script unter Xammp installiert.

Leider klappt es nicht bei mir. Vielleicht kann mir jemand hier weiterhelfen. Ich bekomme folgende Fehlermeldung:
Fatal error: Uncaught exception 'Exception' with message 'ERROR: Login failed with an unknown response.'

Infos:
Ich habe die aktuelle Version 0.5.0b7 installiert (curl und xml tools sind alle Vorhanden ).
Ichb habe die 7270 v3 Variante des Routers
Mein FritzboxOs ist die FRITZ!OS 05.53, Firmware-Version: 74.05.53

Nachtrag: Wenn ich über die Webkonsole "Keine Anmeldung (nicht empfohlen) " wähle, scheint alles zu klappen.

Zusatzfrage: Bei mir dauert eine Abfrage ca. 11 Sekunden. Hat jemand paar Tipps, wie man es beschleunigen könnte? Beim der iPhone App dauert die z.B. die Abfrage nach der Anruferliste unter einer Sekunde. Liegt es an meiner Xampp und PHP(v 5.5) ?
 
Zuletzt bearbeitet:
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
 
Warum das so lange dauert, weiß ich nicht. Ich vermute, da läuft irgendetwas schief. Auf PHP-Seite gibt es da keine Bremse. Das Script arbeitet so schnell, wie die Box eben antwortet. Und da ein wenig XML parsen nicht so wahnsinnig viel Arbeit ist, sollte das Script auch auf langsamen Systemen eigentlich keine merkliche Verzögerung erzeugen.

Login-Probleme liegen meistens an nicht passender Config. Je nach Fritz!OS und Einstellung muss man verschiedene Kombinationen von Username und Passwort und alter oder neuen Login-Methode benutzen. Unknown Response deutet darauf hin, dass die Box etwas anderes liefert, als das Script erwartet. Mit PHP 5.5 habe ich das allerdings alles nicht getestet, vielleicht gibt es auch da ein Problem. Ich würde an Deiner Stelle mal testweise wie in der Anleitung vorgeschlagen ein ganz nacktes PHP 4.4 runterladen, also kein XAMPP oder sonstiges Drumherum.
 
Hallo,
irgendwie funktioniert das Script bei mir nicht.

Ehrlich gesagt, weiß ich nicht genau, ob ich es überhaupt richtig aufrufe.

Ich gebe folgendes in die Browserzeile ein:
192.168.178.111:8000/Visu/fritzbox_api_php/Dect.php 0

Dann steht im Browser:
Not Found

The requested URL /Visu/fritzbox_api_php/Dect.php 0 was not found on this server.

Und wenn ich im Browser folgendes eingebe:
Steht das im Browser:
Enables or disables the DECT base of a Fritz!Box Fon Usage on UNIX systems: /path/to/php {0|1} Usage on Windows systems: c:\path\to\php.exe {0|1} 0 disables the DECT base 1 enables the DECT base

Kann mir jemand sagen wie ich dieses Script aufrufe ?
Also Telefon klingeln lassen und die Anrufliste anzeigen lassen klappt.

Vielen Dank für eure Hilfe.
 
Die Scripte sind normalerweise für den Aufruf auf der Kommandozeile und ohne Webserver gedacht, nicht für den Aufruf via Browser. Solange man keine Parameter übergeben muss, ist das relativ egal, aber wenn man Parameter übergeben muss, wie die 0 in diesem Fall, muss man das Script entsprechend umbauen. Der obere Teil ist für die Parameterübergabe zuständig bzw. die Ausgabe der Anleitung, welche Parameter wie übergeben werden müssen. Das kann dann alles weg und die entsprechenden Variablen übergibt man dann in der URL ...php?parameter1=x&parameter2=y, im Script tauchen die dann als $_GET['parameter1'] und $_GET['parameter2'] auf.

Liebe Grüße,
Gregor
 
Hallo,
wollte mal danke sagen für die Bereitstellung der API und der Scripts hier im Forum.
Das läuft bei mir auf einem Synology NAS. Über die Hausautomation openHAB kann ich jetzt auf der 6360 Weckruf absetzen sowie WLan gezielt ein/ausschalten.
Einschalten z.b. wenn ein bestimmtes Bluetooth Handy in die Reichweite kommt, ausschalten bei Abwesenheit und kein WLan Gerät mehr aktiv.
Holger
 
Klingelsperre

Hallo, vielen Dank für die tolle API. Es funktioniert super. Ich habe gleich mal Klingelsperre ergänzt : Anhang anzeigen fritzbox_ring_block_1.zip

Code:
fritzbox_get_ring_block_state.php
: liefert 0 oder 1 zurück (0=Klingelsperre aus, 1=Klingelsperre aktiv)

analog lässt sich die Klingelsperre mit

Code:
fritzbox_set_ring_block_state.php 0

aus- oder

Code:
fritzbox_set_ring_block_state.php 1

anstellen.
 
Zuletzt bearbeitet:
Hallo Loeppel,

ich habe mir dein Skript angesehen.
Prinzipiell genau das, was ich benötige. Der Export aus CardDAV sowie die Transformation in das Fritzbox-Format funktioniert tadellos.
Wenn ich die XML Datei in eine Datei schreiben lasse, so wird sie bei einem manuellen Upload auch akzeptiert.
Lediglich den Upload in die Fritzbox bekomme ich nicht hin. Die Fritzbox API in deinem Modul ist etwas überaltert.
Ich habe zwar selbst versucht, die API auszutauschen und die Funktion "doPostFile" anzupassen.

Das Login wird vom Router erfolgreich geloggt. Es tut sich auch etwas, aber der Upload ist leider nicht erfolgreich:
Upload to fritzbox at fritz.box...Done.
FritzBox: Error while uploading xml to fritzbox


Ich habe zwar durchaus Programmierkenntnisse, leider aber nicht in PHP. Daher komme ich nicht recht vorwärts.
Hast Du für dich diese Version noch weiterentwickelt, so dass sie auf aktuellen Firmware-Versionen noch läuft?

Viele Grüße
Thomas


Hab das ganze mal um Telefonbuch Import sowie Export erweitert und auf github gestellt:
https://github.com/carlos22/fritzbox_api_php

Bastle gerade an einem CardDAV to Fritzbox automatisierten export - ist auch bald fertig.

@spackmat: Ist CC-by-sa nichte eine etwas seltsame lizenz für source code? Was spricht gegen AGPL oder MIT/BSD?
 
Hallo Zusammen,

trotz nicht existierender PHP Kenntnisse habe ich es glücklicherweise geschafft,
1. das CardDAV Skript mit einer aktuellen fritzbox-API auszustatten,
2. die fritzbox api bzgl. einer Fileupload-Funktionalität zu erweitern
3. den CardDAV Export zu optimieren und
4. das Skript als Gesamtes zum Laufen zu bekommen.

Ich werde noch ein wenig Feintuning vornehmen und dann ist es einsatzbereit!
Die vcard-API funktioniert nicht sonderlich zuverlässig bei Telefonnummern mit selbst-definierten Bezeichnern. Ich habe zwar bereits einen Workaround gefunden, aber vollends zufrieden bin ich noch nicht.

Wichtig ist aber, dass das Skript jetzt von meinem NAS aus das Telefonbuch auf der Fritzbox regelmässig updated ;-)
Ein breites Grinsen kann ich mir zu fortgeschrittener Stunde nicht verkneifen :dance:

Gruß
Thomas
 
@weichi: Nice!
 
@weichi: Ist ja lustig - genau DAS habe ich die letzten Tage ebenfalls gemacht und auch bei mir tut's das jetzt :D

Da ich meinen Raspberry mit ownCloud "vergewaltigt" habe und dort ab jetzt die Kontakte und Termine meines Mobiltelefons speichere, habe ich eine Lösung für die Fritzbox gebraucht. Mit ein bißchen Google habe ich die Scripte gefunden und es trotz null Erfahrung mit Php geschafft, daß alles mit meiner 7270 mit neuester Firmware läuft.

Ich habe in carddav2fb.php noch zusätzlich einen optionalen Kontaktgruppenfilter eingebaut, sowie die Zuordnung einer Kontaktgruppe (default = "VIP") zu "wichtigen" Personen im Fritzbox-Telefonbuch. Weiterhin kann ich dem Script eine abweichende Konfig-Datei per Parameter übergeben (kein Parameter = config.php). Optional kann man auch eine Telefonbuch-XML-Datei in einem Pfad speichern, anstelle den Upload zur Box anzustoßen.

Was noch fehlt sind die E-Mail-Einträge, sowie direkte Unterstützung der zusätzlichen Telefonbücher in der Box...
 
Zuletzt bearbeitet:
Hallo,

ich benutze die Scripte jetzt auch unter Ubuntu.

Tolle Arbeit.

Unter Linux musste ich in der "fritzbox_user.conf.php" Zeile 40 '\foncallsdaten.csv' in '/foncallsdaten.csv' ändern damit es funktioniert.

Gruß Stefan
 
Klar, die Pfade müssen natürlich zum System passen.
 
Hallo,
ich benutze die Fritz!Box API für PHP unter Ubuntu vor allem um mittels Taster mein Gast-WLan an/aus zu schalten. Das ganze funktioniert über den Gira Homeserver sehr gut. Bis zum nötigen Sicherheitsupdate von avm vor wenigen Tagen.

Kann mir jemand helfen das folgende script anzupassen? Ich habe von PHP keine Ahnung. Oder hat jemand das Script schon angepasst?.
Ich verwende die Fritzbox Cable 6360 und das Script fritzbox_guestwlan_on_off.php

Vielen Dank für jede Hilfe!
 
Hallo Zusammen,

habe im Moment auch mit Login- Problemen zu kämpfen. Allerdings scheint es mit dem aktuellen Sicherheitsupdate (FB 7390 OS 06.03) nicht zusammenzuhängen:

Die Fehlermeldung beim Login lautet:

"Response of initialization call /login_sid.lua in initSID was not xml-formatted."

An der CFG habe ich nichts geändert, allerdings schon probiert mal mit und ohne Benutzernamen ein Login hinzubekommen.

Aber ich habe gerade von Debian Squeeze auf Wheezy umgestellt. Unter Squeeze funktioniert der Login nach wie vor auch mit der aktuellen Firmware. Egal ob in der CFG nur das PW oder auch der Benutzername aktiv ist. PHP ist:

PHP 5.3.3-7+squeeze18 with Suhosin-Patch (cli) (built: Dec 12 2013 17:23:07)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH

Unter Wheezy habe ich PHP mit genau dem gleichen Aufruf installiert, wie in der Anleitung angegeben (apt-get install php5-cli php5-curl). Die Version ist jetzt:

PHP 5.4.4-14+deb7u7 (cli) (built: Dec 12 2013 15:35:15)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

Gibt es dafür schon eine Lösung oder einen einfachen Weg dem Problem auf die Schliche zu kommen?

Viele Grüße

Frank
 
Zuletzt bearbeitet:
@domizilit: Ich habe gerade mal die API mit einer 7390 und aktueller Firmware 6.03 getestet, funktioniert wie zuvor. Allerdings habe ich keinen Fernzugang getestet, vielleicht hat AVM da was geändert. Hat das jemand getestet?


@fidodido: Eigentlich arbeitet PHP 5.4 ohne Probleme, ich selber benutze ein Windows-Build von 5.4.0. Zum debuggen kannst Du mal vor Zeile 230 in der fritzbox_api.class.php den Befehl
Code:
var_dump($this->doGetRequest(array('getpage' => $loginpage))); exit;
einfügen und schauen, was da zurück kommt. Normalerweise sollte da ein XML-Dokument kommen. Falls das so ist, änder das mal zu
Code:
var_dump(simplexml_load_string($this->doGetRequest(array('getpage' => $loginpage)))); exit;
, da sollte dann ein SimpleXML-Objekt kommen. Wenn nicht, ist vielleicht SimpleXML deaktiviert? Nur so ein Tipp ins Blaue.

Liebe Grüße und viel Erfolg.
 
Ich bin mir nicht sicher, ob das so zuverlässig funktioniert, ich würde es also bevorzugen, die fürs System passenden Pfade einzutragen. Ansonsten kann man auch DIRECTORY_SEPARATOR benutzen, aber das ist eher so mittel sexy.
 
Es funktioniert schon seit DOS Zeiten mit dem Schrägstrich. Der einzige Grund, warum Pfade mit Backslash angezeigt werden, ist dass DOS gleichzeitig Anleihen bei CPM und UNIX gemacht hat. Vom CPM kam der Schrägstrich für Optionen, und dann wurde der Schrägstrich für Pfade und einen Backslash geändert. Aber bei den Systemaufrufen funktioniert beides.

Wenn Dir das nicht gefällt, ist DIRECTORY_SEPARATOR immer noch besser als dem Anwender zu sagen, dass das Skript (unnötigerweise) geändert werden muss.
 
Nicht das Script selber muss geändert werden (das würde, wenn überhaupt, DIRECTORY_SEPARATOR benutzen), sondern der Wert in der Config, wohin die betreffende Datei geschrieben werden soll. Das ist ein kleiner, aber feiner Unterschied und ich bin Freund davon, dass Leute in ihrer Config die Pfade so eintragen, wie sie sie in ihrem System auch sehen.

Aber Du hast Recht, PHP nimmt laut Handbuch unter Windows auch / als Pfadseparator an. Ich werde das in Zukunft bei Defaultwerten, wie dem in dieser Config, berücksichtigen und da nur / benutzen. Das sorgt für weniger Überraschung.

Nachtrag: Eine Quelle für das Verhalten, vom Handbuch abgesehen, ist folgender Post http://alanhogan.com/tips/php/directory-separator-not-necessary
 
Zuletzt bearbeitet:
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.