Hallo XRhs5,
dann bleibt dir wohl nur der Umstieg auf die 2017er oder 2019er Version. Gibt es beide als Community Edition. - Entwickelt habe ich das Projekt mit der 2017er.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Hab die 2019er installiert und nach einem Konfigurationsproblem mit nuget, klappt es jetzt auch.
Vielen Dank.
Hallo inflames2k
Ich möchte jetzt nicht faul wirken, aber ich finde auch nach langer Suche die Antwort nicht und hoffe, dass du mir helfen könntest.
Ich arbeite mit deiner 1.0 Version und bin in der Lage die FritzBox neu zu starten. (die anderen Versionen habe ich nicht zum laufen gekriegt)
Was ich haben müsste ist, dass ich die FritzBox für 15min offline nehmen kann, damit ich eine neue IP meines Providers erhalte.
Ich hätte 2 mögliche Ansätze:
Ich wäre dir dankbar, wenn du mir mit deiner API helfen könntest.
Vielen lieben Dank
nullpunkt
Ich weiß noch nicht mal genau, wie sich die Box verhält, wenn man die DSL-Verbindung kappt und ob das nicht automatisch wieder eine neue Verbindung aufbaut.
Zur Version 1.0 hab ich leider keine Ahnung mehr wie es aufgebaut war.
In der aktuellen Version stehen dir in WANIPConnectionClient und WANPPPConnectionClient je nachdem welche Verbindungsart du hast Methoden zur Verfügung zum Beenden der Internetverbindung und zum Neuaufbau der Verbindung.
Was mich aber eher interessiert, woran scheiterst du bei der aktuellen Version? - In wie fern bekommst du die nicht zum laufen? => das gerne per PN. Damit müssen wir den Thread hier nicht zu ballern.
Wissen ist nicht alles. Man muss es auch anwenden können.
PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |
Leider funktioniert das aktuelle NuGet PS.Fritzbox.API in der Version 1.2.4 nicht mehr. In der Zeile " DeviceLocator locator = new DeviceLocator();" kommt der Vermerk im Code: "veraltet", "Use FritzDevice.LocateDeviceAsync() - Will be made internal in Version 2.0" . Dieses Update kann ich leider nicht finden. Ich arbeite mit VS 2022 und c#. Kann mir bitte jemand helfen?
Du musst kein Update herunterladen, sondern einfach nur einen anderen Aufruf benutzen.
Die Info (kein Fehler) weist lediglich darauf hin, dass anstelle dieses Codes
DeviceLocator locator = new DeviceLocator();
var devices = await locator.DiscoverAsync()
der folgende Code zu verwenden ist.
var devices = await FritzDevice.LocateDeviceAsync();
Besten Dank. Leider führt die Syntax "var devices = await FritzDevice.LocateDevicesAsync()" (Achtung: LocateDevice** s**) zu einem anderen
Fehler: PS.FritzBox.API.SOAP.SoapFaultException: "s:Client; UPnPError
{urn:schemas-upnp-org:control-1-0}errorCode: 401
{urn:schemas-upnp-org:control-1-0}errorDescription: Invalid Action
Auch 2 Zeilen später in meine Code bleibt ein Problem mit der bisherigen Syntax:
var client = await device.GetServiceClient<DeviceConfigClient>(ConnectionSettings); -->
"GetServiceClient ist veraltet, Use GetServiceClient<T> without parameters. Username and password are used from FritzDevice"
Das Ziel ist "await client.RebootAsync();"
Was mache ich falsch?
Hab jetz kurz Deine geposteten Info-Meldungen gelesen, kurz auf GitHub geschaut und 4 Zeilen später funktioniert das einwandfrei.
using System.Net;
using PS.FritzBox.API;
DeviceFactory factory = new();
FritzDevice device = await factory.CreateDeviceAsync(IPAddress.Parse("192.168.111.1")); // Musst Du mit Deiner IP anpassen
Console.WriteLine($"Device: {device.FriendlyName}");
device.Credentials = new NetworkCredential("Username", "Password"); // Deine Zugangsdaten
Console.WriteLine("Device credentials set.");
DeviceConfigClient service = device.GetServiceClient<DeviceConfigClient>();
Console.WriteLine("Connected");
Die Meldungen sagen Dir ja, was Du hättest machen müssen. Und statt dem "Suchen" der Fritzbox, hab ich einfach die IP direkt angegeben.
Fertig.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Bestens, schon einmal vielen Dank! Nicht gelöst ist das Folgeproblem: ein "await service.RebootAsync()" zum Neustart der Fritzbox erzeugt jetzt den Fehler "Der Wert darf nicht NULL sein - Parametername uirString" .
Dieses Problem habe ich nicht, wenn ich an dieser Stelle die Credentials über den alten Weg ConnectionSettings settings = new ConnectionSettings {}
eingebe und dann die alte Syntax (die in VS 2022 grün markiert wird) verwende:
var client = await device.GetServiceClient<DeviceConfigClient>(settings);
hier klappt ein client.RebootAsync();
Wenn Du Deinen Code einfach im Editor als Code markieren würdest, dann kann man es sogar besser lesen. Habs erneut für dich editiert.
Du kannst Dir einfach das Projekt auf GitHub ziehen und anschauen, wie es funktioniert. Es ist Open Source.
https://github.com/inflames2k/PS.FritzBox.API
Ich hatte nun 15 Minuten Zeit, hab das einfach mal gemacht. Der Code auf GitHub ist etwas neuer als im NuGet Paket - und an manchen Stellen einfacher.
Man muss am Client eigentlich nur noch IP, Port und Credentials angeben - und man ist sofort verbunden.
using PS.FritzBox.API;
DeviceConfigClient client = new("http://192.168.111.1:49000/", timeout: 10_000, "Username", Password);
Console.WriteLine("Connected");
Führe ich den Reboot aus, wird der sofort ohne Murren ausgeführt.
await client.RebootAsync();
Console.WriteLine("Reboot");
Deswegen: das Projekt ist Open Source. Zieh Dir einfach den Code, schau ihn an - und mach Deine Änderungen, wenn Du etwas anders haben willst. Und wenn Du anderen noch was gutes tun willst, dann veröffentliche Deine Anpassungen / Verbesserungen / Aktualisierung.
Das ist das tolle an Open Source.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Besten Dank! Als im Programmiere nur mäßig Erfahrener stoße ich leider an meine Grenzen. Ich habe das ursprüngliche Nuget aus meinem Projekt entfernt, von Github das genannte Projekt PS.Fritzbox.API herunter geladen, in mein Projekt eingebunden, einen Verweis in mein Hauptprogramm eingefügt. Deine Programm- Zeilen werden fehlerfrei im Editor dargestellt, jedoch kommt es zu unzähligen Warnungen CS1591 ("XML- Kommentar... fehlt"). Dazu lässt sich das Reboot wie von Dir geschildert leider nicht ausführen. In einer Zeile XDocument soapResponse = XDocument.Load(sr) kommt es zum Abbruch mit Fehler: System.Xml.XmlException: "Das Start-Tag 'HR' in Zeile 1 Position 106 stimmt nicht mit dem Ende-Tag 'BODY' überein. Zeile 1, Position 157."
Ich denke, da mit Warnungen zu einem veralteten Code mein aktualisierter Code funktioniert, lohnt keine weitere Zeit zu investieren. Dennoch vielen Dank!