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
attr global showInternalValues 1
Nun werden auch die versteckten Reading angezeigt.
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"); }
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.
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:
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
Jetzt einfach nur noch warten und sich wundern wie viel man so in 10 Jahren aus dem Internet herunterlädt 😉
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
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
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
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.
Gruß Daniel
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
Halo Tim,
die Readings selber bekommst du aber? Also die FritzBox ist korrekt in FHEM eingerichtet und liefert auch die Readings für den Traffic?
Gruß Danel
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.
Hallo Tim,
wenn du die Readings erhält, dann muss es ja am at-Device liegen. Am besten überprüfst du nochmal die Definition des at-Devices. Ich kann mir sonst nicht vorstellen, woran es liegen kann. Die Readings sind ja vorhanden, d.h. das Auslesen der Readings und das Senden an den Dummys klappt nicht und dafür ist ja das at-Device zuständig.
Gruß Daniel
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
INTERVAL 300
LUAQUERY 0
M3U_LOCAL ./www/images/FritzBox.m3u
M3U_URL unknown
NAME FritzBox
NR 161
REMOTE 1
SECPORT 49443
STATE Didn’t get a session ID
TELNET 0
TR064 1
TYPE FRITZBOX
WEBCM 0
Readings:
2017-02-08 09:20:11 box_fwVersion 113.06.80
2017-02-08 09:20:11 box_model FRITZ!Box 7490 [avm]
2017-02-08 09:20:11 lastReadout 13 values captured in 3.00 s
2017-02-08 08:48:25 state Didn’t get a session ID
Fhem:
LOCAL 0
definedHost 192.168.2.1
is_double_wlan -1
lastHour 0
modulVersion $Date: 2016-07-17 15:13:57 +0200 (Sun, 17 Jul 2016) $
Helper:
TimerCmd FritzBox.Cmd
TimerReadout FritzBox.Readout
Readout_running_pid:
abortFn FRITZBOX_Readout_Aborted
finishFn FRITZBOX_Readout_Done
fn FRITZBOX_Readout_Run_Web
pid 23652
Abortarg:
Attributes:
allowTR064Command 1
boxUser User1
devStateIcon .*on.*off:WLAN_on_gWLAN_off .*on.*on.*:WLAN_on_gWLAN_on WLAN..off.*:WLAN_off
icon it_router
room 0.0_Übersicht,9.6_FritzBox
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
Hallo Tim,
ich habe diese Fehlermeldung auch schonmal gehabt. Damals hatte ich ein at-Device direkt über die Befehlszeite definiert. Das wollte er dann nicht so recht übernehmen. Wenn ich das at-Device erst nur über „define atTraffic at +*00:01:00 a“ definiert und dann die richtige Definition über den DEF-Editor erstellt, dann hat es bei mir geklappt. Im FHEM-Forum hatte auch jemand dieses Problem.
Da hat ein Löschen des at-Devices geholfen und dann ein erneutes Definieren über den Umweg über den DEF-Editor.
Gruß Daniel
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
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
Hallo Thorsten, ich habe bei mir nochmal geschaut. Die FritzBox setzt den Traffic bei mir um Punkt 0:00 Uhr zurück.
Was mir bei deinem Problem zu erst einfällt, vllt ist ja die Zeit von der FritzBox und die Systemzeit des Raspberrys nicht identisch. Die FritzBox setzt um 0:00 Uhr seiner Zeit zurück, der Raspberry hat dann jedoch schon 0:05 Uhr.
Ich denke die x-Achse zu ändern wird relativ kompliziert. Da ja die Messwerte mit den Zeitpunkten der Messung verknüpft sind. Und um 0:04 hat er halt noch 8gb gemessen.
Gruß Daniel
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
Was mir grad noch eingefallen ist. Es spielen ja mehrere Zeitintervalle eine Rolle. Da ist ja zum Einen der Intervall der FritzBox, in dem die Daten geladen werden. Bei mir 300, also alle 5min. Und zum Anderen das at-Device, welches die Traffic-Dummys mit den Werten bedient. Wenn diese Intervalle ungünstig gewählt sind bzw. zu ungünstigen Zeitpunkten ausgelöst werden, dann kann es ja schon vorkommen, dass der Reset um 0:00 erst 5min später (Intervall 300 –> 5min) im Graph erscheint.
Du kannst ja mal die Intervalle verringern und schauen ob es hilft.
Gruß Daniel
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
Hallo Thorsten,
das kannst du einfach über ein atBefehl realisieren:
define atTrafficReset at *00:00:00 {if(mday==1){fhem("setreading Empfangen Empfangen_ges 0"); fhem("setreading Gesendet Gesendet_ges 0");}
So wird jedesmal um 0:00 Uhr überprüft ob aktuell der 1. Tag im Monat ist. Ist dies der Fall, dann wird das GesamtTraffic auf 0 gesetzte.
Wenn du bisschen mehr Kontrolle über die Readings haben möchtest, dann kannst du natürlich auch weitere Dummys anlegen. Zum Beispiel ein Dummy für den Tagesverbrauch, ein Dummy für den Monatsverbrauch und ein Dummy für den Gesamtverbrauch. Wenn du bisschen mehr Infos dazu möchtest, dann kannst du gerne meinen Beitrag über Stromkosten als Diagramm. Dort wird für die den Stromverrbrauch jeweils ein dummy für unterschiedliche Zeiträume eingerichtet. Und auch hübsch aufgewertet. Das kann man ja dann auch für den Traffic umsetzte.
Gruß Daniel
Hi, wie wäre der Code für die jährliche Rücksetzung?
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
Hallo Thorsten,
die Klammern stimmen alle. Du hast jedoch ein „$“ vergessen –>
...{if($mday==1)....
Des Weiteren sind die „Gänsefüßchen“ falsch. Kann jetzt natürlich auch durch die Formatierung des Kommentars passiert sein. Aber da solltest du nochmal nachschauen –> richtig: “ falsch: “
Kleiner Tipp: So welche Definitionen entweder direkt im DEF-Editor schreiben oder im Text-Editor und dann kopieren. Wenn man es in Word etc. schreibt, dann bekommt man oft Probleme mit diesen ähnlichen Zeichen.
Ich habe mir das mal nachgebaut. So hat es bei mir funktioniert:
*00:00:00 {
if($mday==1) {
my $d= ReadingsVal("Empfangen","Empfangen_ges","0");
fhem("set Empfangen_letzten_Monat $d")}
}
Und keine Scheu zu fragen, dafür betreibe ich ja diesen Blog 😉
Gruß Daniel
Danke, das war der Fehler! Vielen dank 🙂
Gruß
Thorsten
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 Lücken im Graphen.
Habt ihr dazu eine Idee? Vielen Dank
Hallo Frank,
klingt ja nach einem sehr komischen Verhalten. Mir fällt momentan leider auch keine Lösung ein.
Aber nur mal um sicher zu gehen, FHEM läuft nicht zufällig auf dem PC, welchen du Abends herunterfährst?
Das würde das Verhalten dann nämlich erklären 😉
Gruß Daniel
Hallo Daniel,
nein, FHEM läuft bei mir auf einem Pi, welcher auch extra nicht an der ausschaltbaren Steckerleiste eingesteckt ist 🙂
Naja, ich beobachte das mal und schaue es mir die nächsten Tage mal an.
Gäbe es denn eine Möglichkeit, den checkAPI-Aufruf in den at-Befehl zu integrieren? oder ein eigenes at zu schreiben, was den Aufruf einmal morgens um 00:00 Uhr durchführt?
Gruß
Frank
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 $d");
my $e= (ReadingsVal("Fritzbox",".box_TodayBytesSentLow",0)) / (1024*1024*1024) +
(ReadingsVal("Fritzbox",".box_TodayBytesSentHigh",0)) / (1024*1024*1024) ;
fhem("setreading dm_Traffic Gesendet $e");
}
Mich nervt im Moment nur die Verdopplung der beiden Gesamtwerte mit gleicher Wertigkeit, die Logs könnten sonst >30% kleiner ausfallen..
BTW,
Wie würdest du denn einen monatlichen Zähler Download-Zähler einbauen? Als LTE Geschädigter nullt sich mein verfügbares „High-Speed“ Volumen zum 14. eines jeden Monats.
Hallo Mario,
so wie ich es sehe befindet sich um Device „dm_Traffic“ die Readings „Empfangen“, „Empfangen_ges“, „Gesendet“ und „Gesendet_ges“, oder?
Befinden sich noch andere Readings im Device?
Ansonsten kannst du ja mal die Definition des LogFiles anpassen:
./log/Traffic-%Y-%m.log dm_Traffic
So, dass erstmal alle Readings vom Device „dm_Traffic“ geloggt werden. Mal schauen ob dann die Readings nur einfach geloggt werden.
Die Werte die man sich von der Fritzbox holt sind ja monatliche Werte und wird immer zum Monatsanfang genullt. Du willst aber einen Zähler haben, der vom 15. bis zum 14. eines Monats geht?
Gruß Daniel
Hallo Daniel,
danke schon mal für deine Antwort.
Ich habe das Log mal wie von Dir vorgeschlagen angepasst.
2017-07-09_20:21:40 dm_Traffic Gesendet_ges: 0.279677749611437
2017-07-09_20:21:40 dm_Traffic Empfangen_ges: 1.61540961638093
2017-07-09_20:21:40 dm_Traffic Gesendet: 107.287915229797
2017-07-09_20:21:40 dm_Traffic <strong>Gesendet_ges</strong>: 0.279677749611437
2017-07-09_20:21:40 dm_Traffic <strong>Empfangen_ges</strong>: 1.61540961638093
Die doppelten „_ges“ sind immer noch im LOG, nun fehlt dafür aber die Zeile Empfangen ???
Anbei die Liste von dm_Traffic
Internals:
NAME dm_Traffic
NR 184
STATE <div style='color:green'>DOWN 747.37 MB - (1.62 GB gesamt)
<div style='color:red'>UP 107.73 MB - (0.28 GB gesamt)
TYPE dummy
.userReadings:
HASH(0x37ea940)
HASH(0x321f6c8)
READINGS:
2017-07-09 20:30:40 Empfangen 747.365727424622
2017-07-09 20:30:40 Empfangen_ges 1.61627306602895
2017-07-09 20:30:40 Gesendet 107.7283411026
2017-07-09 20:30:40 Gesendet_ges 0.280107853002847
2017-07-08 11:39:50 state empfangen
Attributes:
room 94_Automatisation
stateFormat {sprintf("<div style='color:green'>DOWN %.2f MB - (%.2f GB gesamt)
<div style='color:red'>UP %.2f MB - (%.2f GB gesamt)"
,ReadingsVal("dm_Traffic","Empfangen",0)
,ReadingsVal("dm_Traffic","Empfangen_ges",0)
,ReadingsVal("dm_Traffic","Gesendet",0)
,ReadingsVal("dm_Traffic","Gesendet_ges",0)
)}
userReadings Gesendet_ges monotonic { ReadingsVal("dm_Traffic","Gesendet",0)/1024;;},
Empfangen_ges monotonic { ReadingsVal("dm_Traffic","Empfangen",0)/1024;;}
Zu der Frage mit Zähler ja. Mein LTE (DSL-freie Gemeinde) Monat beginnt immer am 14. und endet somit am 13 des Folgemonats.
Gruß Mario
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!
Hallo Matthias,
vielen Dank für das Lob. Deine Umsetzung ist natürlich echt komfortabler. Kam gar nicht auf die Idee einfach die FritzBox mit den Readings zu erweitern.
Werde mal bei Gelegenheit den Blog-Beitrag um diese Möglichkeit erweitern, dann kann jeder für sich entscheiden wie man es möchte ?
Gruß Daniel
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)}
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(„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“);;\
}
define FileLog_Traffic_Gesendet FileLog /stick/FHEM/logs/Traffic_Gesendet-%Y-%m.log Gesendet
define SVG_FileLog_Traffic_Gesendet_1 SVG FileLog_Traffic_Gesendet:SVG_FileLog_Traffic_Gesendet_1:CURRENT
attr SVG_FileLog_Traffic_Gesendet_1 room SVG
define FileLog_Traffic_Empfangen FileLog /stick/FHEM/logs/Traffic_Empfangen-%Y-%m.log Empfangen
define SVG_FileLog_Traffic_Empfangen_1 SVG FileLog_Traffic_Empfangen:SVG_FileLog_Traffic_Empfangen_1:CURRENT
attr SVG_FileLog_Traffic_Empfangen_1 room SVG
Im Log kommt leider nur folgendes an:
2017-09-01_00:00:27 Empfangen Empfangen: 0
2017-09-01_00:00:27 Empfangen Empfangen_ges: 0
2017-09-01_00:01:27 Empfangen Empfangen: 0
2017-09-01_00:01:27 Empfangen Empfangen_ges: 0
2017-09-01_00:02:27 Empfangen Empfangen: 0
2017-09-01_00:02:27 Empfangen Empfangen_ges: 0
2017-09-01_00:03:27 Empfangen Empfangen: 0
2017-09-01_00:03:27 Empfangen Empfangen_ges: 0
2017-09-01_00:04:27 Empfangen Empfangen: 0
2017-09-01_00:04:27 Empfangen Empfangen_ges: 0
2017-09-01_00:05:27 Empfangen Empfangen: 0
2017-09-01_00:05:27 Empfangen Empfangen_ges: 0
2017-09-01_00:06:27 Empfangen Empfangen: 0
2017-09-01_00:06:27 Empfangen Empfangen_ges: 0
2017-09-01_00:07:27 Empfangen Empfangen: 0
2017-09-01_00:07:27 Empfangen Empfangen_ges: 0
2017-09-01_00:08:27 Empfangen Empfangen: 0
2017-09-01_00:08:27 Empfangen Empfangen_ges: 0
2017-09-01_00:09:27 Empfangen Empfangen: 0
2017-09-01_00:09:27 Empfangen Empfangen_ges: 0
2017-09-01_00:10:27 Empfangen Empfangen: 0
2017-09-01_00:10:27 Empfangen Empfangen_ges: 0
2017-09-01_09:44:33 Empfangen Empfangen: 0
2017-09-01_09:44:33 Empfangen Empfangen_ges: 0
2017-09-01_09:45:33 Empfangen Empfangen: 0
2017-09-01_09:45:33 Empfangen Empfangen_ges: 0
2017-09-01_09:46:33 Empfangen Empfangen: 0
2017-09-01_09:46:33 Empfangen Empfangen_ges: 0
2017-09-01_09:47:33 Empfangen Empfangen: 0
2017-09-01_09:47:33 Empfangen Empfangen_ges: 0
2017-09-01_09:48:33 Empfangen Empfangen: 0
2017-09-01_09:48:33 Empfangen Empfangen_ges: 0
2017-09-01_09:49:33 Empfangen Empfangen: 0
2017-09-01_09:49:33 Empfangen Empfangen_ges: 0
Während ich also nicht auf der Weboberfläche von FHEM bin, wird auch nichts geloggt…
Habe auch noch einen Screenshot aus FHEM angefügt.
Bin für jede Hilfestellung dankbar, trete hier nur auf der Stelle…
Halli Philipp,
die ganzen Definition sehen in Ordnung aus. Was mir jedoch aufgefallen ist, sind die Anführungszeichen. Kann natürlich sein, dass es nur hier im Kommentar so dargestellt wird, aber da solltest du bei dir mal nachschauen.
Du schreibst zum Beispiel:
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)}
Bei ReadingsVal(„Empfangen“,“Empfangen_ges“,0) hast du dann zum Beispiel das Empfangen mit einem untern Anführungszeichen. Genau so auch bei den Readingsabfragen der Fritzbox.
Es muss jedoch immer mit zwei oberen Anführungszeichen sein. Zum Beispiel:
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)}
Überprüf das mal bei dir. Wenn es dann immer noch nicht geht, dann sag bescheid. Dann schaue ich mir deine Definitionen noch mal etwas genauer an ?
Gruß Daniel
Was ich auch gerade sehe sind das auch falsche Anführungszeichen bei dir. Du verwendest manchmal dieses:
“
richtig ist aber dieses:
"
Sehen fast gleich aus, sind aber anders ? Passiert manchmal wenn man Code direkt irgendwo ratskopiert.
Gruß Daniel
Vielen Dank für die schnelle Antwort.
In der cfg sehen die Anführungszeichen richtig aus, also wenn ich mir die cfg direkt in der Weboberfläche angucke. Das lag dann wohl am Copy&Paste, das die hier anders aussehen.
Habe trotzdem angefangen, die Anführungszeichen zu ändern, dann fiel mir der Fehler auf. Hatte den/die/das Device nicht Fritzbox benannt sondern FB6490 ?????
Jetzt läufts ??
Aber dann bliebe noch eine Frage: Warum wurden keine Daten geloggt, als ich nicht auf der Weboberfläche war?
Magie Magie, auch das funktioniert jetzt ???
? Die Magie kenn ich auch ? Hab gar nicht darauf geschaut ob der Name der FritzBox mit dem von deinem Screenshot übereinstimmt. Ganz übersehen. Aber Hauptsache es klappt nun erstmal ?
Zu der Sache mit der Weboberfläche fällt mir jetzt leider nichts zu ein. Komisch. Vllt hat es auch was mit dem falschen Namen der FritzBox zu tun. Das er dann einfach aufhört zur „arbeiten“ wenn keiner aktiv darauf schaut. Aber genau weiß ich es nicht.
Gruß Daniel
Danke, hat Super geklappt
Hammer – Danke für die Anleitung!