Downstream/Upstream Geschwindigkeit der FritzBox auslesen

Hhhm dann hatte ich ein Verständnisproblem. Die Daten werden richtig angezeigt.

Ich dachte mi wird angezeigt wie Hoch die maximale Down-/Upload Verbindung ist. Gibt es hierzu auch ein Script?

VG

Thorsten

Heute ein Firmwareupdate gemacht auf 6.20 Fritzbox 7390.
War immer auf der aktuellen Firmware und das Script lief vorher.
Danach Fehler

 Debug: Invalid Response:[HTTP/1.1 500 Internal Server Error
DATE: Wed, 01 Oct 2014 21:59:58 GMT
SERVER: FRITZ!Box Fon WLAN 7390 UPnP/1.0 AVM FRITZ!Box Fon WLAN 7390 84.06.20
CONNECTION: close
CONTENT-LENGTH: 433
CONTENT-TYPE: text/xml; charset="utf-8"

<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring>UPnPError</faultstring>
<detail>
<UPnPError xmlns="urn:schemas-upnp-org:control-1-0">
<errorCode>401</errorCode>
<errorDescription>Invalid Action</errorDescription>
</UPnPError>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>]

Der Tip von http://www.ip-symcon.de/forum/threads/11741-Downstream-Upstream-Geschwindigkeit-der-FritzBox-auslesen?p=230910#post230910 hat geholfen.
Danke

Bei mir hat es auch geholfen! Danke!

Ich bin gerade dabei alle meine FritzBox abfragen auf Soap umzustellen, dabei habe ich auch diese Werte gefunden.
Ich versuche das die Tage mal fertig umzusetzen.
Allerdings habe ich noch Probleme mit SoapFunktionen welche ein Bindestrich im Namen haben.
Da wird nur immer invalid action zurück gemeldet :mad:
Sogar an das Telefonbuch, aktive Netzwerkgeräte, Wlan-Daten inkl Gastzugang und die Anrufliste kommt man dort ohne das parsen der lua Webseiten. Somit wohl auch etwas Firmware-Upgrade fester als bisher.
Michael
PS: Und setzen von Werten sollte auch gehen, also Gastzugang einschalten, Wecker stellen, Rufumleitung setzen etc…

Hallo,

im Falle meiner FB 6360 liest das Script zwar die Werte aus, aber die sind nochmal um dem Faktor 100 falsch, das musste ich noch eine kleine Korrektur machen.

Ich habe die Werte einfach mit den Trafficmessungen meines Switches vergliechen, der Echtzeitdaten pro Port rausgibt.

Versuche mal die direkten Werte der Box-eigenen Traffic-Messung auszulesen
Findest du jetzt hier gleich im ersten Post http://www.ip-symcon.de/forum/threads/25745-FritzBox-mit-SOAP-auslesen-und-steuern?p=235989#post235989

Ja auch hier, aber im dritten Post.
Allerdings ist das ganze ein ‚Bausatz‘. Also Infos raussuchen aus Post 3 und eins der Scripte aus Post 2 übertragen und Attacke :smiley:
http://www.ip-symcon.de/forum/threads/25745-FritzBox-mit-SOAP-auslesen-und-steuern?p=235991#post235991

Michael
PS: Habe ja auch eine 6360 und bei mir sind die berechneten Up / Down -Werte von den (mit ohne dem unterstützen microtime) Script hier und die nativen Werte der Box unter „NewByteSendRate“ & „NewByteReceiveRate“ fast identisch. Auf keinen Fall um den Faktor 10 oder gar 100 falsch. Und stimmen mit der WebUI der FB und den Daten meines Switch überein. Schon sehr merkwürdig.

Habe versucht, so wie es in diesem Post steht http://www.ip-symcon.de/forum/thread…910#post230910, das entsprechend zu ändern doch hat es nicht funktioniert, ich habe eine 7390.

-<service>

<serviceType>urn:schemas-upnp-org:service:WANDSLLinkConfig:1</serviceType>

<serviceId>urn:upnp-org:serviceId:WANDSLLinkC1</serviceId>

<controlURL>/igdupnp/control/WANDSLLinkC1</controlURL>

<eventSubURL>/igdupnp/control/WANDSLLinkC1</eventSubURL>

<SCPDURL>/igddslSCPD.xml</SCPDURL>

</service>

so sieht der Eintrag in meiner XML-Datei aus.

Gruß

Ich glaub das ist der falsche Abschnitt in der XML.
Geht das hier ?
WAN Up-/Download Speed – IP-Symcon
Michael

Ich verwende dieses Skript…


$address = "192.168.3.1";

//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];

$contentRecv = 'POST /igdupnp/control/WANDSLLinkC1  HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPAction: "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesReceived"
Content-Length: '.(302+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetTotalBytesReceived xmlns:m="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

$contentSent = 'POST /igdupnp/control/WANDSLLinkC1  HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPAction: "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesSent"
Content-Length: '.(298+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetTotalBytesSent xmlns:m="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

//Installer
if ($IPS_SENDER == "Execute")
{
    IPS_SetHidden($IPS_SELF, true);
    IPS_SetName($IPS_SELF, "Auslese-Skript");
    $parentObject = IPS_GetObject($parentID);
    if ($parentObject['ObjectType'] !== 1)
    {
        $instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($instanceID, $parentID);
        $parentID = $instanceID;
        IPS_SetParent($IPS_SELF, $parentID);
        IPS_SetName($instanceID, "FritzBox-Auslastung");
        IPS_SetIcon($instanceID, "Gauge");
    }
    IPS_SetScriptTimer($IPS_SELF, 10);

    if(!IPS_VariableProfileExists("InternetSpeed_kbs")) {
       IPS_CreateVariableProfile("InternetSpeed_kbs", 2);
       IPS_SetVariableProfileText("InternetSpeed_kbs", "", " kb/s");
       IPS_SetVariableProfileDigits("InternetSpeed_kbs", 2);
    }
}

$totalRecv = GetTextBetween(SendPacket($contentRecv), "<NewTotalBytesReceived>", "<\/NewTotalBytesReceived>");
$totalSent = GetTextBetween(SendPacket($contentSent), "<NewTotalBytesSent>", "<\/NewTotalBytesSent>");
$vidRecv = CreateVariableByName($parentID, "TotalRecv", 2, 1, "", true);
$vidSent = CreateVariableByName($parentID, "TotalSent", 2, 2, "", true);

$varRecv = IPS_GetVariable($vidRecv);
$varSent = IPS_GetVariable($vidSent);

SetValue($vidRecv, $totalRecv);
SetValue($vidSent, $totalSent);

$time = microtime(true);

$vidDn = CreateVariableByName($parentID, "Downstream", 2, 3, "InternetSpeed_kbs");
$vidUp = CreateVariableByName($parentID, "Upstream", 2, 4, "InternetSpeed_kbs");

SetValue($vidDn, max(0, ($totalRecv - $varRecv['VariableValue']['ValueFloat']) / (($time - $varRecv['VariableUpdated'])) / 1024));
SetValue($vidUp, max(0, ($totalSent - $varSent['VariableValue']['ValueFloat']) / (($time - $varSent['VariableUpdated'])) / 1024));

function SendPacket($content) {
    global $address;
    $port = 49000 /*[Objekt #49000 existiert nicht]*/;

    $fp = fsockopen ($address, $port, $errno, $errstr, 10);
    if (!$fp) {
        echo "$errstr ($errno)<br />
";
    } else {
        fputs ($fp, $content);
        $ret = "";
        while (!feof($fp)) {
            $ret.= fgets($fp,128);
        }
        fclose($fp);
    }
    if(!(strpos($ret, "200 OK") === false)) {
       return $ret;
    } else {
       die("Invalid Response: ".$ret);
    }
}

function GetTextBetween($string, $start, $end){
    preg_match_all( "/$start(.*)$end/U", $string, $match );
    return $match[1][0];
}

function CreateVariableByName($id, $name, $type, $position, $profile="", $hidden=false)
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetPosition($vid, $position);
        IPS_SetHidden($vid, $hidden);
        IPS_SetVariableCustomProfile($vid, $profile);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
    }
    return $vid;
}

?>

Gruß

Eben noch mal nachgesehen.
WANDSLLinkC1 ist falsch, du bist zu weit unten in der XML.
WANCommonIFC1 brauchst du.

Davon abgesehen ist es sinnvoller die SOAP-Requests nicht mehr per Hand nachzubauen.
Darum ja der Link zum Wiki.
Wichtig ist auch immer die Firmware der Box. Da hier häufiger mal Änderungen durchgeführt werden.

Michael

Super Danke dir, jetzt geht’s wieder, das mit der Firmware habe ich gemerkt.
Werde das wenn ich das andere so weit habe mal in angriff nehmen.

Gruß

Nach so langer Zeit der Unwissenheit, will ich es jetzt endlich wissen…

…die Variablen „TotalRecv“ und „TotalSent“. Was verbirgt sich dahinter? Ich finde in der Fritzbox, beim Online-Zähler, keinen auch nur annähernd passenden Wert :confused:

Danke und Grüße,
Chris

Bei funktioniert alles soweit.
Bis auf die Werte(siehe Bild), ich habe eine 100er Telekom Leitung.
Kann das stimmen?

<?

$address = "Fritz.box";

//Ab hier nichts mehr ändern
$object = IPS_GetObject($IPS_SELF);
$parentID = $object['ParentID'];

//$contentRecv = 'POST /upnp/control/WANCommonIFC1 HTTP/1.1
$contentRecv = 'POST /igdupnp/control/WANCommonIFC1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPAction: "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesReceived"
Content-Length: '.(302+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetTotalBytesReceived xmlns:m="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

//$contentSent = 'POST /upnp/control/WANCommonIFC1 HTTP/1.1
$contentSent = 'POST /igdupnp/control/WANCommonIFC1 HTTP/1.1
Cache-Control: no-cache
Connection: Close
Pragma: no-cache
Content-Type: text/xml; charset="utf-8"
User-Agent: Microsoft-Windows/6.1 UPnP/1.0
SOAPAction: "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1#GetTotalBytesSent"
Content-Length: '.(298+strlen($address)).'
Host: '.$address.':49000

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><m:GetTotalBytesSent xmlns:m="urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1"/></SOAP-ENV:Body></SOAP-ENV:Envelope>
';

//Installer
if ($IPS_SENDER == "Execute")
{
    IPS_SetHidden($IPS_SELF, true);
    IPS_SetName($IPS_SELF, "Auslese-Skript");
    $parentObject = IPS_GetObject($parentID);
    if ($parentObject['ObjectType'] !== 1)
    {
        $instanceID = IPS_CreateInstance("{485D0419-BE97-4548-AA9C-C083EB82E61E}");
        IPS_SetParent($instanceID, $parentID);
        $parentID = $instanceID;
        IPS_SetParent($IPS_SELF, $parentID);
        IPS_SetName($instanceID, "FritzBox-Auslastung");
        IPS_SetIcon($instanceID, "Gauge");
    }
    IPS_SetScriptTimer($IPS_SELF, 10);
    
    if(!IPS_VariableProfileExists("InternetSpeed_kbs")) {
       IPS_CreateVariableProfile("InternetSpeed_kbs", 2);
       IPS_SetVariableProfileText("InternetSpeed_kbs", "", " kb/s");
       IPS_SetVariableProfileDigits("InternetSpeed_kbs", 2);
    }
}

$totalRecv = GetTextBetween(SendPacket($contentRecv), "<NewTotalBytesReceived>", "<\/NewTotalBytesReceived>");
$totalSent = GetTextBetween(SendPacket($contentSent), "<NewTotalBytesSent>", "<\/NewTotalBytesSent>");
$vidRecv = CreateVariableByName($parentID, "TotalRecv", 2, 1, "", true);
$vidSent = CreateVariableByName($parentID, "TotalSent", 2, 2, "", true);

$varRecv = IPS_GetVariable($vidRecv);
$varSent = IPS_GetVariable($vidSent);

SetValue($vidRecv, $totalRecv);
SetValue($vidSent, $totalSent);

$time = microtime(true);

$vidDn = CreateVariableByName($parentID, "Downstream", 2, 3, "InternetSpeed_kbs");
$vidUp = CreateVariableByName($parentID, "Upstream", 2, 4, "InternetSpeed_kbs");

SetValue($vidDn, max(0, ($totalRecv - $varRecv['VariableValue']['ValueFloat']) / (($time - $varRecv['VariableUpdated'])) / 1024));
SetValue($vidUp, max(0, ($totalSent - $varSent['VariableValue']['ValueFloat']) / (($time - $varSent['VariableUpdated'])) / 1024));

function SendPacket($content) {
    global $address;
    $port = 49000;

    $fp = fsockopen ($address, $port, $errno, $errstr, 10);
    if (!$fp) {
        echo "$errstr ($errno)<br />
";
    } else {
        fputs ($fp, $content);
        $ret = "";
        while (!feof($fp)) {
            $ret.= fgets($fp,128);
        }
        fclose($fp);
    }
    if(!(strpos($ret, "200 OK") === false)) {
       return $ret;
    } else {
       die("Invalid Response: ".$ret);
    }
}

function GetTextBetween($string, $start, $end){
    preg_match_all( "/$start(.*)$end/U", $string, $match );
    return $match[1][0];
}

function CreateVariableByName($id, $name, $type, $position, $profile="", $hidden=false)
{
    global $IPS_SELF;
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
        $vid = IPS_CreateVariable($type);
        IPS_SetParent($vid, $id);
        IPS_SetName($vid, $name);
        IPS_SetPosition($vid, $position);
        IPS_SetHidden($vid, $hidden);
        IPS_SetVariableCustomProfile($vid, $profile);
        IPS_SetInfo($vid, "this variable was created by script #$IPS_SELF");
    }
    return $vid;
}

?>

Ich habe die Icons so gespeichert kann sie aber dann bei der Auswahl nicht finden ???

Hi,

eher nicht. Wenn es DSL 100 ist kann der UpStream max. ca. 40MBit/sec sein. Warum benutzt Du nicht das Modul Fritzbox-Projekt?

Ralf

Das habe i h gestern noch gefunden. Das werde ich dann auch verwenden

Hi,
benutze aber die Legacy Console zum Installieren mit der Web-Console geht es nicht.

Ralf

Vielen Dank für die Info.
Habe es gestern installiert und funktioniert auch alles.
Heute ging nur auf einmal die ganze Licht Heizungs steurung nicht mehr.
Zeigt Fehler Zeitüberschreitung beim Warten auf Antwort, und das bei allen Aktionen ob ich die Temp bei der Heizung ändern will oder ein Licht schalten will,

Was läuft da schief?