[Info] FBoxAPI .NET Bibliothek für die TR-064 Schnittstelle

Kruemelino

Aktives Mitglied
Mitglied seit
21 Jan 2006
Beiträge
1,314
Punkte für Reaktionen
86
Punkte
48

FBoxAPI


Dieses Projekt ist ein .NET Bibliothek für die TR-064 Schnittstelle der AVM Fritz!Box. Das Projekt ist eine Ausgliederung aus dem Addin für Microsoft Outlook: Fritz!Box Telefon-dingsbums V5 (github). Wie vielleicht einige wissen, hatte ich diese Schnittstelle bereits vor langer Zeit begonnen. Irgendwann hatte ich die Idee, diese Schnittstelle als eigenständiges Projekt auszugliedern. Es hat eine ganze Weile gedauert, bis ich den vorhandenen Code soweit angepasst hatte. Noch viel länger hat es gedauert, bis alle Services und Actions zusammengestellt waren.

Ich möchte noch ein paar allgemeine Worte verlieren:
  • Als Basis dient die Dokumentation vom AVM: Apps / TR-064.
  • Ich verwende selbst nur einen Bruchteil der verfügbaren Actions. Da die Services und Actions aus den vorliegenden Dokumentationen per Copy&Paste zusammengestellt wurden, kann ich Fehler nicht ausschließen. Es ist momentan illusorisch, das alles durchgetestet ist. Ich habe mir große Mühe gegeben und versucht potentielle Fehlerquellen gleich von vornherein auszuschließen. Falls jemand etwas finden, so bitte ich um eine Fehlermeldung.
  • Die Bibliothek ist mit vb.net geschrieben. Mir ist bewusst, dass diese Sprache nicht sonderlich beliebt ist. So mancher Wunsch nach einer C#-Version wurde schon geäußert. Grundsätzlich bin ich dem nicht abgeneigt. Jedoch bin ich mit C# nicht so vertraut, so dass ich dies momentan vor mir her schiebe. Gerne können wir hierzu uns austauschen. Vielleicht gibt es sogar jemanden, der unterstützen möchte.
  • Datentypen: Einige Actions liefern teils sehr viele Parameter (oft bei GetInfo) zurück. Damit nicht für jeden Parameter eine einzelne Variable definiert werden muss, werden diese Parameter in "Container"-Klassen zurückgegeben.

Verwendung​

Initialisierung
Die Verwendung ist recht einfach angedacht. Es muss eine neue FBoxAPI.FritzBoxTR64-Klasse instanziiert werden. Hierfür sind zwei Parameter erforderlich: IP-Adresse der Fritz!Box und die Anmeldeinformationen. Nutzername und Passwort werden in einer neuen Instanz der System.Net.NetworkCredential-Klasse hinterlegt und übergeben. Es gibt mehrere Möglichkeiten die Schnittstelle zu initiieren.
  • Übergabe der benötigten Daten als Einzel-Parameter
  • Dimensionierung einer FBoxAPI.Settings-Klasse, die alle notwendigen Daten enthält
Im Folgenden ist ein kleines Beispiel aufgeführt, wie die SessionID der Fritz!Box abgefragt werden kann.
Code:
Private Function GetSessionID() As String
    ' Bereitstellung der Variable(n), in die das Ergebnis gesetzt werden sollen.
    Dim SessionID As String = "0000000000000000"

    ' Erstelle Anmeldeinformationen für die Fritz!Box bereit
    Dim Nutzername As String = "Fritz"
    Dim Passwort As String = "Box"

    ' Anmeldeinformationen können Nothing sein, falls nur Actions ausgeführt werden, die keine Anmeldung erfordern.
    Dim Anmeldeinformationen As New Net.NetworkCredential(Nutzername, Passwort)

    ' Starte die TR-064 Schnittstelle zur Fritz!Box
    Using FBoxTR064 As New FBoxAPI.FritzBoxTR64("192.168.178.1", Anmeldeinformationen)

        ' Auswahl des Service
        With FBoxTR064.Deviceconfig

            ' Action ausführen
            If .GetSessionID(SessionID) Then
                ' Alles OK: SessionID enthält eine gültige SessionID
            Else
                ' Ein Fehler ist aufgetreten
            End If
        End With

    End Using

    Return SessionID

End Function
Alternativ:
Code:
FBoxTR064 = New FBoxAPI.FritzBoxTR64(New FBoxAPI.Settings With {.Anmeldeinformationen = New Net.NetworkCredential(Nutzername, Passwort),
                                                                .FritzBoxAdresse = "192.168.178.1",
                                                                .FBAPIConnector = New FBoxAPIConnector,
                                                                .AuraService = True})
Hinweis: Wenn der AURA-Service (AVM USB Remote Access) verwendet werden soll, muss dies bei der Initialisierung der Schnittstelle übergeben werden. Dies ist über die Eigenschaft AuraService der FBoxAPI.Settings-Klasse möglich.

Logging
Mit Hilfe des LogWriter-Schnittstelle kann eine eigene Routine verknüpft werden, die das Logging übernimmt. Die Schnittstelle gibt folgende relevante Daten in der Containerklasse FBoxAPI.LogMessage für das Logging aus:
  • Level (System.Enum) für das LogLevel (Trace bis Fatal)
  • Message (System.String)
  • Exception (System.Exception)
  • CallerMemberName (System.String)
  • CallerFilePath (System.String)
  • CallerClassName (System.String)
  • CallerLineNumber (System.String)

Beispiel für NLog:
Code:
Imports FBoxAPI

Friend Class FBoxAPILog
    Implements ILogWriter

    Private Property NLogger As Logger = LogManager.GetCurrentClassLogger

    Public Sub LogMessage(MessageContainer As LogMessage) Implements ILogWriter.LogMessage
        With MessageContainer
            Dim LogEvent As New LogEventInfo(NLog.LogLevel.FromOrdinal(.Level),
                                             .CallerClassName,
                                             .Message)

            LogEvent.SetCallerInfo(.CallerClassName, .CallerMemberName, .CallerFilePath, .CallerLineNumber)

            NLogger.Log(LogEvent)
        End With
    End Sub

    Public Sub Signal2FAuthentication(Methods As String) Implements ILogWriter.Signal2FAuthentication
        ' ...
    End Sub
End Class

Zwei-Faktor-Authentifizierung
Die Nutzung der Zwei-Faktor-Authentifizierung kann ab Fritz!OS 7.39 nicht mehr deaktiviert werden. Das Setzen verschiedener Einstellungen bedarf nun einer zusätzlichen Bestätigung durch den Nutzer. Der Ablauf des Authentifizierungsprozesses ist in X_AVM-DE_Auth beschrieben. Sobald für eine Action eine eine Zwei-Faktor-Authentifizierung erforderlich ist, signalisiert diese API dies über die FBoxAPIConnector-Schnittstelle, welche hierfür mit der Routine Signal2FAuthentication ergänzt wurde. Der Parameter Methods enhält die erlaubten Methoden, z. B. button,dtmf;*14048. Sobald der Nutzer die Authentifizierung durchgeführt hat, wird die ursprüngliche Action erneut ausgeführt. Die Ergebnisse des Authentifizierungsprozesses werden über die LogMessage ausgegeben.
  • Über die Eigenschaft AbortAuthentication kann der API signalisiert werden, dass derAuthentifizierungsprozess abgebrochen werden soll.
  • Über die Eigenschaft AuthenticationSuccesful signalisiert die API, dass der Authentifizierungsprozess abgeschlossen wurde.
Code:
Imports FBoxAPI

Friend Class FBoxAPILog
    Implements IFBoxAPIConnector

    Public Sub LogMessage(MessageContainer As LogMessage) Implements IFBoxAPIConnector.LogMessage
        ' ...
    End Sub

    Public Property AbortAuthentication As Boolean Implements IFBoxAPIConnector.AbortAuthentication

    Public Property AuthenticationSuccesful As Boolean Implements IFBoxAPIConnector.AuthenticationSuccesful

    Public Sub Signal2FAuthentication(Methods As String) Implements IFBoxAPIConnector.Signal2FAuthentication
        MsgBox(String.Format($"Zwei-Faktor-Authentifizierung: {Methods}"), MsgBoxStyle.Information, "Zwei-Faktor-Authentifizierung")
    End Sub
End Class


Hinweise zur AVM Dokumentation​

  • In der Dokumentation X_AVM-DE_AppSetup der Parameter MyFritzDynDNSEnabled der Action GetAppRemoteInfo aufgelistet. Dieser Parameter lautet aber NewMyFritzEnabled.

--- Soweit erstmal. Dieser Beitrag wird sicher noch mehrfach überarbeitet.


 
Zuletzt bearbeitet:
Wow, das ist ja ein unheimlich nützliche Bibliothek!
Damit war es soo leicht, sich einen kleinen "Voip-Wähl-Helfer" zu schreiben, Vielen Dank dafür!

Aber hat jemand eine Idee, wie ich abfragen kann, ob der Anruf noch steht oder beendet wurde?

Beste Grüße,
Der oo_dev
 
  • Like
Reaktionen: Kruemelino
Hallo,

es freut mich, dass es dir gefällt und du es nutzen kannst. Wenn du irgendwelche Fehler findest, dann gib bitte Bescheid.

Zu deiner Frage: Mir ist leider nichts bekannt, wie man Telefonate über die TR-064 Schnittstelle überwachen kann. Ich kann mir nur vorstellen, dass du klassisch den CallMonitor überwachst.
 
  • Like
Reaktionen: oo_dev
Da man in Zukunft die Zwei-Faktor-Authentifizierung nicht mehr deaktivieren kann, sah ich mich aufgefordert diese Schnittstelle dementsprechend zu erweitern. Nachdem meine ersten Tests zu mehreren Abstürzen meiner 7490 geführt haben (Wenn der Autor die SOAP-XML falsch zusammenstellt, sollte er sich nicht wundern :) ), habe ich es mittlerweile geschafft.

Die API signalisiert dem aufrufenden Programm, dass eine zusätzliche Aktion erforderlich ist und wartet so lange, wie die Fritz!Box signalisiert, dass der Authentifizierungsprozess läuft. Im Falle einer erfolgreichen Authentifizierung wird die ursprüngliche Aktion erneut ausgeführt.

Hinweis: Die nuget und github packeges sind noch nicht aktualisiert.
 
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.