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.

Sale
AVM FRITZ!Box 7580 WLAN AC + N Router...
AVM - Zubehör
289,00 EUR - 56,80 EUR 232,20 EUR
Sale
AVM FRITZ!Box 7490 WLAN AC + N Router (VDSL/ADSL, 1.300...
AVM - Zubehör
289,00 EUR - 95,10 EUR 193,90 EUR

Letzte Aktualisierung am 20.09.2017 / Affiliate Links / Bilder von der Amazon Product Advertising API

Einrichtung in FHEM

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

attr global showInternalValues 1

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:

define atTraffic at +*00:01:00 xx

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:

define Empfangen dummy
define Gesendet dummy

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:

+*00:01:00 {
my $d= ((ReadingsVal("FritzBox",".box_TodayBytesReceivedLow",0) / (1000*1000) ) / 1000 + ( ReadingsVal("FritzBox",".box_TodayBytesReceivedHigh",0) * 4294967296 / (1000*1000) ) / 1000);
fhem("setreading Empfangen Empfangen $d");
 
my $e= ((ReadingsVal("FritzBox",".box_TodayBytesSentLow",0) / (1000*1000) ) / 1000 + ( ReadingsVal("FritzBox",".box_TodayBytesSentHigh",0) * 4294967296 / (1000*1000) ) / 1000);
fhem("setreading Gesendet Gesendet $e");
}

 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

attr Gesendet userReadings Gesendet_ges monotonic { ReadingsVal("Gesendet","Gesendet",0)}

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:

define FileLog_Traffic_Gesendet FileLog ./log/Traffic_Gesendet-%Y-%m.log Gesendet

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:

attr Empfangen stateFormat {sprintf("%.2f GB - %.2f GB",ReadingsVal("Empfangen","Empfangen",0),ReadingsVal("Empfangen","Empfangen_ges",0))}

Für Gesendet entsprechend anpassen.

Und das Hinzufügen eines Symbols:

attr Empfangen icon control_arrow_down@green

bzw.

attr Gesendet icon control_arrow_up@red

Traffic FritzBox Plot

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

Hinterlasse einen Kommentar

41 Kommentare auf "Online-Zähler (Traffic) der FritzBox auslesen"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
Jay
Gast
Jay

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

patman
Gast
patman

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?

Stefan V
Gast
Stefan V
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… weiterlesen »
Roberto
Gast
Roberto

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?

Tim
Gast
Tim

Hi Daniel, hab alles genau wie hier angegeben durchgeführt, doch leider bekomme ich absolut keine Werte rein. Der FileLog -text  bleibt leer. Und im „at“ wird auch nur angezeigt das gleich das neue „Reading“ kommt. Aber es wird einfach kein Wert aus der Fritzbox gelesen.

Bitte hier um kurze Unterstützung.

Gruß Tim

Tim
Gast
Tim

Hey Daniel, ja die Readings von der FritzBox bekomme ich, lasse mir diese auch ständig per Email zuschicken. Daher bekomme ich die Readings rein.

Ich habe

allowTR064Command 1

und soweit alles übernommen von deiner Anweisung.

Tim
Gast
Tim
Hi Daniel, ich habe nochmal nachgeforscht und mir ist aufgefallen das keine aktuellen Readings reinkommen. Hab ich daran gesehen das die DebianMail immer die gleiche Externe IP mitschickt. D.h. „NEIN“ die Readings kommen nicht sauber rein. Denke das ist der Grund warum die Trafficanzeige keine Change hat was anzuzeigen. Didn’t get a session ID  !!! Ich habe das Device schon mehrmals gelöscht >> reboot >> neuangelegt >> reboot etc. Ich bekomme einfach keine Verbindung mehr zur Fritzbox! Hast Du evtl. eine Idee ? Gruß Tim Internals:    APICHECKED 1    DEF        192.168.2.1    HOST       192.168.2.1… weiterlesen »
Tim
Gast
Tim

Nachtrag : Ein FHEM Update hat geholfen ! Eine Verbindung steht wieder… doch irgendwie hab ich immer noch ein Fehler.

Hier mal ein Auszug aus der FHME LOG :

atTraffic: Unknown command { my, try help. Unknown command fhem("setreading, try help. Unknown command my, try help. Unknown command fhem("setreading, try help. Unknown command } , try help.

+*00:01:00 {
my $d= ((ReadingsVal("FritzBox",".box_TodayBytesReceivedLow",0) / (1000*1000) ) / 1000 + ( ReadingsVal("FritzBox",".box_TodayBytesReceivedHigh",0) * 4294967296 / (1000*1000) ) / 1000);
fhem("setreading Empfangen Empfangen $d");

my $e= ((ReadingsVal("FritzBox",".box_TodayBytesSentLow",0) / (1000*1000) ) / 1000 + ( ReadingsVal("FritzBox",".box_TodayBytesSentHigh",0) * 4294967296 / (1000*1000) ) / 1000);
fhem("setreading Gesendet Gesendet $e");
}

Gruß Tim

 

 

Tim
Gast
Tim

Daniel ! ! Es läuft…  🙂

Sehr gut, vielen Dank für den Tip!

Hast Du evtl. ein paar Informationen bezüglich Fhem/FritzBox und Licht schalten bei Anruf?  Da komm ich auch nicht weiter… wenn es Dir hier zu viel wird können wir auch gerne über Email weiterschreiben.

Callmonitor in FHEM definieren:

define Telefon FB_CALLMONITOR 192.168.1.1
attr Telefon event-on-change-reading event

Licht einschalten bei Anruf

define TelefonLichtAn notify Telefon {\
if(ReadingsVal("Telefon","internal_number","") eq "56789"\
ReadingsVal("Telefon","external_number","") eq "0177xxxxxxx") {\
fhem ("set LAMPE on-for-timer 30") }\
}

Vielen Dank für deine Unterstützung, bin ein Fan von deinem Block, mach weiter so!

Gruß Tim

Thorsten Meißner
Gast
Thorsten Meißner

Hallo,

super Anleitung. Bie mir ist jedoch das Problem das in der Datenbank der Täglicher Zähler der Fritzbox erst um 00:05 bei null begint. Im Plott ist das dann mit der Autoskalierung problematisch. Da um Mitternacht die Linie bei zb 8 Gb und dann 5 Minuten später auf fast null Abfällt…. Gibt es dafür eine Lösung, zb das Reading 5 Minuten auszusetzen oder dass der Grapg erst ab 00:05 angängt?

 

Vielen dank

 

Gruß

Thorsten

Thorsten Meißner
Gast
Thorsten Meißner

Hallo,
Die Zeiten sind bei synron. Als Übergangslösung werde das at Modul welches die Readings ausliest von 23:59 bist 00:06 mit einem notify disbablen.

Gruß

Thorsten

Thorsten Meißner
Gast
Thorsten Meißner

Hallo Daniel,

wie könnte ich das anstellen das er den Zähler des gesamten Traffics am Monatsende zurücksetzt?

Das Problem, dass das Reading der Fritzbox erst um 00:05 zurückgesetzt wird habe ich erstmal mit den automatischen Disablen des „atTraffic“ von 23:59 bis 00:06 gelöst..

 

Gruß

Thorsten

Thorsten Meißner
Gast
Thorsten Meißner

Hey,

danke für die Hilfe. Jetzt möchte ich zum Monatsende einen Dummy den Verbauch des vergangenen Monat verpassen….. Dafür habe ich folgenden atBefehl gebastelt

*00:00:00 {if(mday==1) { my $d= ReadingsVal(„Empfangen“,“Empfangen_ges“,“0″); fhem(„set Empfangen_letzten_Monat $d“)} }

Ich wollte erst nicht hier fragen, aber irgendwie komme ich nicht weiter….. ich denke da ist irgendwo eine Klammer falsch…..

danke

Gruß

Thorsten

 

Thorsten Meißner
Gast
Thorsten Meißner

Danke, das war der Fehler! Vielen dank 🙂

Gruß

Thorsten

Frank
Gast
Frank
Hallo, ich habe auch mal angefangen, mir fhem auf einem Pi zu installieren und die FritzBox war jetzt mein erster Anwendungsfall. An sich funktioniert das auch sehr gut, allerdings ist mir aufgefallen, dass das Auslesen des Traffic „pausiert“, wenn ich nicht in der Oberfläche bin. So ist mir folgendes aufgefallen: – Abends PC ausschalten (und ins Bett gehen 🙂 ) – morgens wieder anmachen und bei fhem einloggen – Trafficzähler hat den gleichen Stand wie am Vorabend, hat sich auch nicht auf 0 gesetzt – Über einen Aufruf z.B. von checkAPI passt es dann wieder Das führt natürlich zu unschönen… weiterlesen »
Mario S
Gast
Mario S
Hallo, erstmals muss ich mich für die gute Anleitung bedanken. In meinem anfängerischen Leichtsinn habe ich direkt auch angefangen, einige Teile so umzustellen wie ich es mit vorstellen kann. Dabei bin ich im Log auf einige doppelt gelesene Werte gestossen und finde den Grund dafür nicht. ./log/Traffic-%Y-%m.log dm_Traffic:Empfangen:.*|dm_Traffic:Empfangen_ges:.*|dm_Traffic:Gesendet:.*|dm_Traffic:Gesendet_ges:.* Auszug aus dem Log. 2017-07-08_22:31:49 dm_Traffic Empfangen: 0.856641943566501 2017-07-08_22:31:49 dm_Traffic Gesendet_ges: 0.042000139132142 2017-07-08_22:31:49 dm_Traffic Empfangen_ges: 0.153444118797779 2017-07-08_22:31:49 dm_Traffic Gesendet: 0.159122024662793 2017-07-08_22:31:49 dm_Traffic Gesendet_ges: 0.042000139132142 2017-07-08_22:31:49 dm_Traffic Empfangen_ges: 0.153444118797779 Die beiden Werte habe ich mittels at in einem Dummy zusammengefasst: +*00:01:00 {my $d= (ReadingsVal("Fritzbox",".box_TodayBytesReceivedLow",0)) / (1024*1024*1024) + (ReadingsVal("Fritzbox",".box_TodayBytesReceivedHigh",0)) / (1024*1024*1024); fhem("setreading dm_Traffic Empfangen… weiterlesen »
Matthias
Gast

Echt cooles Tutorial, gerade erst entdeckt 🙂 Direkt mal umgebaut, klappt wunderbar! Allerdings habe ich mir die zwei Dummys gespart und alles direkt als neue Readings wieder mit auf die FritzBox geschrieben und dann direkt das stateFormat von der FritzBox geändert. Dann spare ich ein paar Geräte und das mit den Plots klappt trotzdem wunderbar 😉 Allerdings lese ich es aus dem DBLog aus.

Danke für den super Input!

Philipp
Gast
Philipp
Hallo Daniel, Vielen Dank für das Tutorial. Habe es gestern Abend eingerichtet, bekomme keine Fehlermeldung aber auch keine anderen Readings ins Log als „0“. Auch bei mehrmaliger Kontrolle kann ich den Fehler leider nicht finden. Vielleicht findet dein geschultes Auge den Fehler. Aus der fhem.cfg ### Fritzbox define FB6490 FRITZBOX attr FB6490 allowTR064Command 1 ### Traffic define Empfangen dummy attr Empfangen icon control_arrow_down@green attr Empfangen stateFormat {sprintf(„%.2f GB – %.2f GB“,ReadingsVal(„Empfangen“,“Empfangen“,0),ReadingsVal(„Empfangen“,“Empfangen_ges“,0))} attr Empfangen userReadings Empfangen_ges monotonic { ReadingsVal(„Empfangen“,“Empfangen“,0)} define Gesendet dummy attr Gesendet icon control_arrow_up@red attr Gesendet stateFormat {sprintf(„%.2f GB – %.2f GB“,ReadingsVal(„Gesendet“,“Gesendet“,0),ReadingsVal(„Gesendet“,“Gesendet_ges“,0))} attr Gesendet userReadings Gesendet_ges monotonic { ReadingsVal(„Gesendet“,“Gesendet“,0)}… weiterlesen »
Screenshot_2017-09-01 10.12.05_PgsqcZ.png
Markus
Gast
Markus

Danke, hat Super geklappt

wpDiscuz