[Frage] TR069 enable für FB 7490

asmir

Neuer User
Mitglied seit
14 Jan 2016
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Versuche gerade mittels Java + Soap und TR-064 Support – ManagementServer TR069 für eine Fritz!Box 7490 anzuschalten. Leider nur teilweise erfolgreich.

Was ich bis jetzt habe: 1
Code:
    public void X_SetTR069Enable (){
    HashMap<String, String> values = new HashMap<>();   
    values.put("NewTR069Enabled", "1"); 
    this.com.sendRequest(FritzAction.X_SetTR069Enable, URN.ManagementServer, values);
}
2
Code:
    public void SetUpgradeManagement(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewUpgradesManaged", "0"); //SetUpgradeManagement
        this.com.sendRequest(FritzAction.SetUpgradeManagement, URN.ManagementServer, values);
    }
URN
Code:
public enum URN {

ManagementServer("urn:dslforum-org:service:ManagementServer:1","mgmsrv"), 
DeviceInfo("urn:dslforum-org:service:DeviceInfo:1","deviceinfo")
.......
;

private final String urn;
private final String controlUrlSuffix;

private URN(String urn, String controlUrlSuffix) {
    this.urn = urn;
    this.controlUrlSuffix = controlUrlSuffix;
}
ACTION
Code:
public enum FritzAction {
    Reboot("Reboot"),
    FactoryReset("FactoryReset"),
    AddVoIPAccount("X_AVM-DE_AddVoIPAccount"),
    InitChallenge("InitChallenge"),
    SetVoIPEnableAreaCode("SetVoIPEnableAreaCode"),
    GetNumberOfClients("X_AVM-DE_GetNumberOfClients"),
    DeleteClient("X_AVM-DE_DeleteClient"),
    X_SetTR069Enable("X_SetTR069Enable")
    ........

2 funktioniert aber 1(X_SetTR069Enable) nicht. Hat jemand eine Idee oder einen anderen Ansatz?
Die Doku zu TR-064 Support – ManagementServer unter http://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/mgmsrvSCPD.pdf
 
Was heißt denn "funktioniert nicht" genau? Fehlercodes?

URL für den ACS ist gesetzt, wenn Du versuchst, das "enabled" zu setzen?

Was gibt denn "GetInfo" aus?

Das "UpgradesManaged" ist unabhängig von TR-069 (m.W., auch wenn es in der tr069.cfg landet) und kann auch gesetzt werden (und wird im GUI berücksichtigt - z.B. werden die Update-Möglichkeiten ausgeblendet), ohne daß eine funktionierende Konfiguration (für TR-069) vorhanden ist. Wenn aber beim "enable" geprüft wird, ob die notwendigen Daten zur Kontaktaufnahme mit dem ACS vorhanden sind, könnte das die Ursache sein, daß es nicht funktioniert.
 
Hallo PeterPawn. Vielen Dank vorerst für die schnelle Antwort. Wollte oben nicht irgend eine Abhängigkeit zwischen "UpgradesManaged" und TR-069 darstellen.
Es ging mir nur darum zu zeigen die Art der Parameter übermittlung mit soap ähnlich ist und bei zweiten funktioniert und beim ersten nicht. Mit funktioniert nicht meinte ich:
wenn ich eine vorher-nachher Vergleich der Konfigdatei mache sehe ich bei z.B UpgradesManaged die Parameter die ich übermittelt die methode fürs enablen von TR-069 hat aber kein einflus. Fehlermeldung gibt es keine.
Anbei Vorher-nachher Vergleich der relevanten Stelle:
Vorher:
Code:
tr069cfg {
        enabled = no;
        litemode = no;
        tr181_support = no;
        dhcp43_support = yes;
        igd {
                DeviceInfo {
                        FirstUseDate = "1970-01-01 01:00:00";
                }
                managementserver {
                        url = "";
                        username = "";
                        password = "";
                        URLAlreadyContacted = no;
                        LastInformReq = "1970-01-01 01:00:00";
                        LastSuccessfulContact = "1970-01-01 01:00:00";
                        URLbyDHCPIface = "";
                        PeriodicInformEnable = no;
                        PeriodicInformInterval = 0;
                        PeriodicInformTime = "1970-01-01 01:00:00";
                        UpgradesManaged = no;
                        ACSInitiationEnable = yes;
                        SessionTerminationWithEmptyPost = no;
                        ConnectionRequestUsername = "";
                        ConnectionRequestPassword = "";
                        dnsprefer = tr069dnsprefer_ipv4;
                }
        }

Code:
tr069cfg {
        enabled = no;
        litemode = no;
        tr181_support = no;
        dhcp43_support = yes;
        igd {
                DeviceInfo {
                        ProvisioningCode = "abc";
                        FirstUseDate = "1970-01-01 01:00:00";
                }
                managementserver {
                        url = "http://example.com";
                        username = "$$$$ZSLTYQZM5EV3AQF526TVY14CO3QXVFRESHCHMJLB5DNUIZPQODBZMZDHZPTMAMZSHS6PIEG1SZVLWKX1";
                        password = "$$$$AEQW6C6K2YSLQTUVS43BFMRIGM1ZX14IOOCBEM62KMOOKSEJIOG5MAOMZE6WWB4DYMUEYQOI21HAEKX1";
                        URLAlreadyContacted = no;
                        LastInformReq = "1970-01-01 01:00:00";
                        LastSuccessfulContact = "1970-01-01 01:00:00";
                        URLbyDHCPIface = "";
                        PeriodicInformEnable = no;
                        PeriodicInformInterval = 0;
                        PeriodicInformTime = "1970-01-01 01:00:00";
                        UpgradesManaged = yes;
                        ACSInitiationEnable = yes;
                        SessionTerminationWithEmptyPost = no;
                        ConnectionRequestUsername = "";
                        ConnectionRequestPassword = "";
                        dnsprefer = tr069dnsprefer_ipv4;
                }

erfolgreich bei: ProvisioningCode, url, username, password, UpgradesManaged
nicht erfolgreich bei : enabled,PeriodicInformEnable,PeriodicInformInterval
 
Zuletzt bearbeitet:
Hintergrund: Mitarbeitern mit Homeoffice zugang zu gewähren und die Boxen über ACS erreichen zukönnen um etwaige konfigurations Änderungen vorzunehmen oder einfach monitoren.
Ich bin neu in der Materie. Erste Stelle nach der uni. Vorgänger nicht mehr in der Firma.
 
Ich werde immer noch nicht richtig schlau aus Deiner Beschreibung ... der vorher/nachher-Vergleich mag ja auch irgendwo eine Berechtigung haben, aber gibt es denn nun einen Fehlercode beim HTTP-Request oder gibt es keinen? Eine "Fehlerbeschreibung" würde ich tatsächlich nicht erwarten, aber einen Fehlercode (401, 402, 501, irgendwas) sollte es m.E. schon geben, wenn ein Aufruf nicht richtig ausgeführt werden kann. Bei einer "Fehlermeldung" in Textform wüßte ich irgendwie auch gar nicht so richtig, wo und wie die übermittelt werden sollte (außer eben im HTTP-Response-Header).

Auch funktionieren (mit Ausnahme von "X_SetTR069Enable", was nicht funktioniert, wie ich schon verstanden habe, obwohl Du die Klippen mit und ohne "d" im Namen dem Augenschein nach richtig genommen hast) nach Deinen Angaben bisher nur die Requests, die einen einzelnen Parameter verwenden. Daß das bei "SetPeriodicInform" drei Parameter in einem Aufruf braucht, hast Du schon gelesen? Vielleicht verstehe ich das ja auch nur nicht richtig, was Du da wirklich machst ... das "SetPeriodicInform"-Beispiel fehlt ja auch in #1.

Was Du bei der Aufgabenstellung mit "UpgradesManaged" willst, verstehe ich aber auch nicht ... damit würdest Du die Verantwortung für Firmware-Updates übernehmen (ich bin mir nicht sicher, ob Dir das klar ist). Mit einer Steuerung/Kontrolle für Homeoffice-Installationen hat das keinen wirklichen Zusammenhang ... bei so einem Update werden auch die TR-069-Einstellungen normalerweise nicht geändert. Wenn Du verhindern willst, daß an den Boxen Deine Einstellungen gelöscht werden (bzw. bestimmte Einstellungen unmittelbar im Anschluß wieder setzen willst), geht das auf anderen Wegen besser (provider additive). Aber das ist dann wieder ein anderes Thema ...
 
Es gibt keinen Fehlercode (weder im Request noch im Java-code). Was ich nicht verstehe ist: Es gibt Requests mit einem oder mehreren Parameter die einwandfrei funktionieren
wie z.B. folgende :
Code:
public class LANHostConfigManagement extends AbstractSoapCommunicator {
    
    public void setIPInterface(String ipAddress, String subnetMask) {
        HashMap<String, String> values = new HashMap<>();
        values.put("NewEnable", "true");
        values.put("NewIPAddress", ipAddress);
        values.put("NewSubnetMask", subnetMask);
        values.put("NewIPAddressingType", "static");
        
        this.com.sendRequest(FritzAction.SetIPInterface, URN.LANHostConfigManagement, values);
    }
    
    public void setAddressRange(String minAddress, String maxAddress) {
        HashMap<String, String> values = new HashMap<>();
        values.put("NewMinAddress", minAddress);
        values.put("NewMaxAddress", maxAddress);
        
        this.com.sendRequest(FritzAction.SetAddressRange, URN.LANHostConfigManagement, values);
    }

    public LANHostConfigManagement(FritzBoxSoapCommunicator com) {
        super(com);
    }
}
oder
Code:
public  void setVoIPAccount(Integer index, String voipNumber, String registrar,  String user, String password, String outboundProxy, String stun) {
        HashMap<String, String> values = new HashMap<>();

        values.put("NewVoIPAccountIndex", index.toString());
        values.put("NewVoIPRegistrar", registrar);
        values.put("NewVoIPNumber", voipNumber);
        values.put("NewVoIPUsername", user);
        values.put("NewVoIPPassword", password);
        values.put("NewVoIPOutboundProxy", outboundProxy);
        values.put("NewVoIPSTUNServer", stun);

        try {
            this.com.sendRequest(
                    FritzAction.AddVoIPAccount, URN.X_VOIP, values);
        } catch(Exception e) {
            e.printStackTrace();
        }

aber folgende mit AUSNAHMEN!!! wie zum Beispiel für das enablen von tr-069 obwohl ich identisch vorgehe wie bei den oberen Bereichen

Code:
public class FritzTR069 extends AbstractSoapCommunicator{

    public FritzTR069(FritzBoxSoapCommunicator com) {
         super(com);
    }
    
    public void X_SetTR069Enable (){
        HashMap<String, String> values = new HashMap<>();   
        values.put("NewTR069Enabled", "True"); //X_SetTR069Enable
        this.com.sendRequest(FritzAction.X_SetTR069Enable, URN.ManagementServer, values);
    }
    
    public void SetPeriodicInform(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewPeriodicInformEnable", "yes"); //SetPeriodicInform
        values.put("NewPeriodicInformInterval", "300"); //SetPeriodicInform
        values.put("NewPeriodicInformTime", "1970-01-01 01:00:00"); //SetPeriodicInform
        this.com.sendRequest(FritzAction.SetPeriodicInform, URN.ManagementServer, values);
    }
    public void SetConnectionRequestAuthentication(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewConnectionRequestUsername", "");//SetConnectionRequestAuthentication
        values.put("NewConnectionRequestPassword", "");//SetConnectionRequestAuthentication 
        this.com.sendRequest(FritzAction.SetConnectionRequestAuthentication, URN.ManagementServer, values);
    }
    public void SetUpgradeManagement(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewUpgradesManaged", "true"); //SetUpgradeManagement
        this.com.sendRequest(FritzAction.SetUpgradeManagement, URN.ManagementServer, values);
    }
    public void SetManagementServerURL(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewURL", "http://example.com"); //SetManagementServerURL
        this.com.sendRequest(FritzAction.SetManagementServerURL, URN.ManagementServer, values);
    }
    public void SetManagementServerUsername(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewUsername", "abc"); //SetManagementServerUsername
        this.com.sendRequest(FritzAction.SetManagementServerUsername, URN.ManagementServer, values);
    }
    public void SetManagementServerPassword(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewPassword", "abc"); // SetManagementServerPassword
        this.com.sendRequest(FritzAction.SetManagementServerPassword, URN.ManagementServer, values);
    }
    public void SetProvisioningCode(){
        HashMap<String, String> values = new HashMap<>();
        values.put("NewProvisioningCode", "abc");//
        this.com.sendRequest(FritzAction.SetProvisioningCode, URN.DeviceInfo, values);
    }
}

siehst du irgend etwas was falsch ist aber nicht zum Fehlercode führt sondern einfach ignoriert wird?
gibt es einen Anderen Ansatz TR-069 bei Boxen, welche nicht vom Provider stammen sondern auf freim Markt erworben werden, zu enablen
 
Meines Erachtens ist Dein Format für "datetime"-Variablen falsch ... nach der TR-064-Spezifikation (S. 14) muß das anders aussehen.

Auch die "Boolean"-Variablen müßten nach der Spezifikation als "0" oder "1" gesetzt werden, bei Dir finde ich in #6 jetzt (nachdem es in #1 noch richtig aussah mit "1", ich habe es selbst auch nicht getestet mit allen denkbaren Angaben) drei verschiedene Schreibweisen (und verstehe wieder nicht, welche davon funktioniert und welche nicht) mit "true", "True" und "yes".

Ich weiß ja nicht, was AVM da als Validator eingebaut hat (bestimmt ändert sich das auch, denn es gibt ja u.a. auch neue Schnittstellen an dieser Stelle in neuen Versionen und ggf. abweichendem Zeichenvorrat) und ob der tatsächlich alles mögliche als "boolean"-Wert akzeptiert oder ob Du nur in dem verzweifelten Versuch, da irgendein Ergebnis zu erzielen, jetzt alles durcheinander wirfst.

Ansonsten würde ich tatsächlich den Ansatz mit einer "provider additive"-Konfiguration für sinnvoller und dauerhafter halten, wenn jemand seinem Personal an Arbeitsplätzen im Home-Office FRITZ!Boxen zur Verfügung stellt. Der überlebt dann auch Firmware-Updates, das Rücksetzen auf Werkseinstellungen und sogar Recovery-Versuche (die dann abgelehnt werden) - der einfachere Weg in meinen Augen.
 
Hatte den Verdacht das es eventuell an den Parametern liegen konnte. Habe alles probiert (true,1,yes,on,True,TRUE...) jedoch kein Erfolg. Probiers nächste Woche weiter. Melde mich wenn ich eine Lösung finde.
Vielen Dank und schönes WE.
 
Kostenlos!

Neueste Beiträge

Statistik des Forums

Themen
248,864
Beiträge
2,303,155
Mitglieder
378,516
Neuestes Mitglied
jpttpee