- Mitglied seit
- 13 Jul 2007
- Beiträge
- 418
- Punkte für Reaktionen
- 69
- Punkte
- 28
Hallo,
für diverse Projekte/Experimente habe ich in der Vergangenheit eine PHP Klasse für den TR-064 Zugriff (SOAP) erstellt.
Zugegeben, es gibt schon ein paar davon im Netz zu finden, aber mit fritzsoap liegt nun in der Version 2.1 vor und ich denke, die Bibliothek ist nun reif genug, um sie hier vorzustellen.
Ich habe dabei den Zugriff auf die Actions so umgesetzt, dass die Verwendung so einfach wie möglich ist.
Ein Beispiel:
oder
Fakten in Kürze:
AVM stellt in knapp 30 Services fast 500 Actions zur Verfügung - die konnte ich unmöglich alle selbst programmieren! Die Klassen sind daher per Programm maschinell generisch erzeugt worden (Basis waren die Servicdescription-Files meine 7490er). Für jedes Action ist darin jeweils eine generische Function angelegt worden.
Beispiel (aus
Rund 5% der Funktionen sind bereits auscodiert - hauptsächlich in
Wenn nun ein Action benötigt wird, dessen Funktion noch generisch ist, sollte es anhand der auscodierten Beispiele und der AVM Dokumente kein Problem sein, das umzusetzen.
Wenn so weitere Funktionen nutzbar gemacht werden, dann spielt doch die Ergebnisse als PR auf GitHub zurück - dann haben zukünftig alle etwas davon.
Aus der README.md:
Grüße
Black Senator
für diverse Projekte/Experimente habe ich in der Vergangenheit eine PHP Klasse für den TR-064 Zugriff (SOAP) erstellt.
Zugegeben, es gibt schon ein paar davon im Netz zu finden, aber mit fritzsoap liegt nun in der Version 2.1 vor und ich denke, die Bibliothek ist nun reif genug, um sie hier vorzustellen.
Ich habe dabei den Zugriff auf die Actions so umgesetzt, dass die Verwendung so einfach wie möglich ist.
Ein Beispiel:
PHP:
$fritzbox = new x_voip($url, $user, $password);
$fritzbox->x_AVM_DE_DialNumber('#9');
PHP:
$fritzbox = new hosts($url, $user, $password);
$meshList = $fritzbox->x_AVM_DE_GetMeshListPath();
Fakten in Kürze:
- Für jeden Service besteht eine gleichnamige Klasse, in der alle Actions des Service als Funktionen enthalten sind - man muss also nur anhand der der AVM Dokumentation wissen, wie Service und Action lauten, die man benötigt.
- Jede Klasse (=Service) ist in einer gleichlautenden PHP Datei codiert.
- In jeder Klasse sind die jeweiligen Actions als Funktionen codiert
(die Namen sind gleich, jedoch an PHP angepasst: erster Buchstabe klein und-
als_
) - Ebensowenig, wie man sich also um URI und Location kümmern muss, muss man sich auch nicht um die korrekte Adressierung der URL und insbesondere des SOAP Ports kümmern (siehe hier).
AVM stellt in knapp 30 Services fast 500 Actions zur Verfügung - die konnte ich unmöglich alle selbst programmieren! Die Klassen sind daher per Programm maschinell generisch erzeugt worden (Basis waren die Servicdescription-Files meine 7490er). Für jedes Action ist darin jeweils eine generische Function angelegt worden.
Beispiel (aus
x_homeauto.php
):
PHP:
/**
* setSwitch
*
* automatically generated; complete coding if necessary!
*
* in: NewAIN
* in: NewSwitchState
*
*/
public function setSwitch()
{
$result = $this->client->SetSwitch();
if (is_soap_fault($result)) {
$this->getErrorData($result);
error_log(sprintf("Error: %s (%s)! Could not ... from/to FRITZ!Box", $this->errorCode, $this->errorText));
return;
}
return $result;
}
x_contact.php
(ansonsten noch in hosts.php
, x_filelinks.php
, x_storage.php
, x_tam.php
und x_voip.php
).Wenn nun ein Action benötigt wird, dessen Funktion noch generisch ist, sollte es anhand der auscodierten Beispiele und der AVM Dokumente kein Problem sein, das umzusetzen.
Wenn so weitere Funktionen nutzbar gemacht werden, dann spielt doch die Ergebnisse als PR auf GitHub zurück - dann haben zukünftig alle etwas davon.
Aus der README.md:
contributions are highly appreciated. Share your enhancements! With your PR, everyone benefits from further completion!
Grüße
Black Senator
Zuletzt bearbeitet: