Online-Zähler (Traffic) der FritzBox auslesen

Bearbeitet am 14.06.2016: Erstellen eines eigenen Readings für den täglichen Traffic

Das Modul FritzBox stellt neben den bekannten Readings (Anrufe, ….) auch Readings zur Verfügung die in der Standartkonfiguration von FHEM nicht direkt angezeigt werden. Zu diesen versteckten Readings zählt auch der Online-Zähler. In diesem Beitrag erkläre ich euch wie ihr diese Readings sichtbar macht und in FHEM den Tagesverbrauch und den Gesamtverbrauch plottet.

Einrichtung in FHEM

Um in FHEM auch die versteckten Readings anzeigen zu lassen, bedarf es ein globales Attribut

Nun werden auch die versteckten Reading angezeigt.

Traffic_reading

Wie man erkennt, gibt es vier Readings die etwas mit dem Traffic zu tun haben. Es gibt je zwei für die Empfangenen und für die Gesendeten Daten. Diese sind noch jeweils in HIGH und LOW unterteilt. Den Gesamtwert erhält man durch folgende Gleichung:

LOW + HIGH * 2^32

Die Readings geben jeweils die Werte für den aktuellen Tag wieder. Den Gesamtverbrauch muss man innerhalb von FHEM selber ermitteln. Mehr dazu weiter unten.

Um mit diesen Werten arbeiten zu können, ist es am einfachsten, diese mit Hilfe von einem at-Befehl an einen dummy zu schicken. Dazu definieren wir uns zunächst einen at-Erweiterungsmodul:

Als auszuführender Befehl geben wir erstmal den Platzhalter „xx“ an. Später im Editor fügen wir dann den endgültigen Befehl ein. Als Zeitangabe habe ich 1 Minute gewählt. Man sollte jedoch darauf achten, dass es hier nichts bringt, den Befehl alle 5 Sekunden auszuführen, obwohl das Modul FritzBox nur jede Minute aktualisiert wird.

Anschließend noch je einen Dummy für Empfangen und Gesendet:

Nun wird es Zeit den eigentlichen Befehl von atTraffic zu definieren. Dazu öffnen wir den DEF-Editor von atTraffic und fügen folgenden Befehl ein:

 FHEM Traffic Fritzbox

Da die Readings die Werte in Bytes ausgeben, nehme ich noch einige mathematische Spielereien vor um die Werte in GigaByte zu erhalten. Einmal das umwandeln in MB (geteilt durch 1000*1000) und anschließend noch das Umrechnen in GigaByte (geteilt durch 1000).

Die eingetragene Definition erstellt die Variablen „d“ und „e“ und setzt das entsprechende dummy.

Die Dummys Gesendet und Empfangen erhalten nun jede Minute einen aktuellen Wert. Den gesamten Traffic erhalten wir nun durch ein userReading, welches wir wie folgt definieren

Das gleiche entsprechend für den Empfangen-Dummy. Der Zusatz monotonic bewirkt, dass das Reading „Gesendet“ (der tägliche Traffic) dem userReading Gesendet_ges dazu addiert wird. Sollte sich also das Reading „Gesendet“ beim Tageswechsel wieder auf 0 setzen, fängt „Gesendet_ges“ nicht auch bei 0 an, sondern zählt weiter hoch.

FHEM_FritzBox_Traffic_Daten

Die Readings lassen sich nun in ein LogFile schreiben:

Wichtig ist es, darauf zu achten, Gesendet und Empfangen jeweils in ein getrenntes LogFile zu schreiben, da wir zwei getrennte Plots erstellen wollen.

Über den Plot-Editor erstellen wir uns nun den Plot:

create SVG Traffic

SVG Traffic

Wir erhalten nun eine grafische Darstellung des Online-Zählers der FritzBox. Der Vorteil gegenüber dem direkten Zugriff über die FritzBox ist der, dass man den Verbrauch auch über einen längeren Zeitraum verfolgen kann. Der Online-Zähler der FritzBox zeigt nur den Verbrauch vom aktuellen und letzten Monat an.

Zum Schluss kann man noch ein paar optischen Anpassungen vornehmen. Zu einem das stateFormat:

Für Gesendet entsprechend anpassen.

Und das Hinzufügen eines Symbols:

bzw.

Traffic FritzBox Plot

Jetzt einfach nur noch warten und sich wundern wie viel man so in 10 Jahren aus dem Internet herunterlädt 😉

9 Kommentare zu “Online-Zähler (Traffic) der FritzBox auslesen

  1. Hallo,

    ich finde dies sehr interessant und wollte dies bei mir auch direkt einsetzen.

    Leider klappte „define dummy Gesendet“ nicht. Es muss glaube ich „define Gesendet dummy“ heißen. Und bei dem Befehl: attr Gesendet userReading Gesendet_ges monotonic { ReadingsVal(„Gesendet“,“state“,0)}
    Bekomme ich immer „unknown attribute userReading“
    Ich nehme an, es muss userReadings heißen?

    Viele Grüße
    Jay

    • Hi,
      vielen Dank für dein Interesse.
      Mit den beiden Anmerkungen hast du recht gehabt. Habe es im Beitrag verbessert. Danke für den Hinweis. Hat es den mit den Änderungen geklappt?

      Viele Grüße
      Daniel

  2. hi, wenn ich das hier wie oben in den FHEM Editor eingebe:
    define FritzBox FRITZBOX
    attr FritzBox allowTR064Command 1
    attr FritzBox room Wohnzimmer

    define atTraffic at +*00:01:00 {
    my $d= ((ReadingsVal(„FritzBox“,“.box_TodayBytesReceivedLow“,0) / (1000*1000) ) / 1000 + ( ReadingsVal(„FritzBox“,“.box_TodayBytesReceivedHigh“,0) * 4294967296 / (1000*1000) ) / 1000);
    fhem(„set Empfangen $d“);

    my $e= ((ReadingsVal(„FritzBox“,“.box_TodayBytesSentLow“,0) / (1000*1000) ) / 1000 + ( ReadingsVal(„FritzBox“,“.box_TodayBytesSentHigh“,0) * 4294967296 / (1000*1000) ) / 1000);
    fhem(„set Gesendet $e“);
    }
    define Empfangen dummy
    define Gesendet dummy

    kommt:

    Unknown command my, try help. Unknown command fhem(„set, try help. Unknown command my, try help. Unknown command fhem(„set, try help. Unknown command }, try help.

    habt ihr da eine Idee was da falsch sein könnte?

    • Hallo,
      so wie es aussieht hat es etwas mit dem Befehle „set Empfangen $e“ zu tun. Eigentlich müsste es so funktionieren. Ich habe es jedoch selber vor einiger Zeit etwas optimiert. Ich setze nicht mehr das state-Reading vom Device „Empfangen“ sondern habe ein extra Reading erstellt um es ein bisschen übersichtlicher zu gestalten.
      Anstelle mit „set Empfangen $e“ setze ich das Device nun mit folgendem Befehl:
      „setreading Empfangen Empfangen $e“. Das Device „Empfangen“ erhält nun das Reading „Empfangen“. Vielleicht klappt dies ja auch bei dir. Bei Gelegenheit passe ich den Beitrag mal an.
      Gruß Daniel

  3. Hallo,
    Vielen Dank für die Anleitung! Echt klasse.
    Ich verstehe jedoch den Screenshot mit dem PLOT nicht ganz.

    1. Im Plot-Editor: Wieso gebe ich in der Zeile wo ich „Aktuell [GB]“ definiere, die Spalte „3“ an. und nicht 4?
    2. Auch das RegEx für Aktuell [GB]“ erscheint mir seltsam. Ich meine weil man da mit .* arbeitet?
    3. Wie sehen die Plots nach mehreren Tagen aus?
    Wenn ich Aktuell und Gesamt in einem Plot mische… Habe ich dann nicht in der Y-Achse extreme werte?
    Der Gesamt Zähler wird im laufe der Zeit extrem hohe Werte erreichen, währen der aktuell Zähler immer bei 0 anfängt. => die Y Skala muss also Werte zwischen 0 und z.B. 100 (bzw noch höher) abbilden oder? Durch so eine extremes Intervall auf der Y Achse wird der „Aktuell-Graph“ wohl nicht schön werden oder ist mein Verständniss falsch?

    Würde mich über Feedback sehr freuen!

    • Hallo Stefan,
      danke für das Lob.

      Bei Punkt 1 und 2 hat sich leider ein Fehler in meinem Beitrag eingeschlichen, bzw. ich habe vergessen das Bild anzupassen. Wie bereits in der Antwort auf patmans Kommentar erwähnt, habe ich das dummy-device „Gesendet“ bzw. „Empfangen“ bisschen angepasst. Anstatt das Reading „state“ mit dem aktuellen Traffic zu beschreiben, habe ich ein extra Reading angelegt mit dem Namen „Gesendet“ bzw. „Empfangen“ –> deswegen der Befehl „setreading Empfangen Empfangen $e“ im atTraffic-Device.
      Der aktuelle Wert wird also im Reading „Empfangen“ / „Gesendet“ gespeichert, nicht mehr im state-reading. Deswegen ändert sich auch die Spalte von Spalte 3 auf Spalte 4 und der Eintrag bei RegEx ist dann auch entsprechend „Empfangen.Empfangen“ bzw. „Gesendet.Gesendet“. Deine Vermutung ist also richtig.

      Zu Punkt 3: Der Graph sieht später so aus, dass auf der rechten Seite die Y-Achse von 0-.. geht –> So weit, wie halt der tägliche Traffic ist.
      Auf der linken Seite fängt die Y-Achse jedoch nicht bei 0 an, sondern viel höher, je nach Gesamt-Verbrauch. Sehr gut ist dies auch im letzten Bild zu sehen.
      Dadurch, dass die rechte und linke Y-Achse andere Skalierungen haben, sehen beide Graphen eigentlich ganz ok aus. Möchte man natürlich, dass die Skala beim Gesamt-Verbrauch auch bei 0 anfängt, dann ist es sinnvoll zwei getrennte Graphen zu erstellen, da sonst, wie du schon erwähnst, der aktuelle Verbrauch irgendwann total unter geht.

      Hoffe ich konnte dir etwas weiter helfen und sorry für den Fehler meinerseits. Werde morgen das Bild entsprechend anpassen.

      Gruß Daniel

    • Hallo Daniel,
      Danke für die schnelle und verständliche Antwort. Jetzt hab ich alles verstanden.

      Werde jetzt öfter bei dem Blog reinschaun :).

      Danke & Gruss
      Stefan

  4. Hallo,

    klasse Anleitung!

    Eine Kleinigkeit will bei mir nicht funktionieren. Die dunkelgrüne Linie liegt nicht so auf dem hellgrünen Bereich auf, wie in deinem Beispiel. Die Linie für Empfangen durchzieht einfach das Hellgrüne. Dasselbe im Gesendet-Plot. Das sieht nicht wirklich schön aus.

    Was überseh ich? Oder habe ich etwas vergessen?

    • Hallo Roberto,

      danke für das Lob. Beim Bild im Beitrag ist es nur ein Zufall, dass beide Linien aufeinander liegen. Das liegt daran, dass ich der Y-Achse keinen Festen Zahlenbereich zugewiesen habe. FHEM stellt deswegen den Bereich der Y-Achse automatisch fest.
      Da kann es dann zufällig mal sein, dass die beiden Linien aufeinander liegen.

      Heute zum Beispiel liegen sie nicht aufeinander.

      Traffic Linien

      Gruß Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*