Fritzbox Internet Traffic auslesen um es zu loggen

Begonnen von Cruiser79, 16 Dezember 2015, 09:19:14

Vorheriges Thema - Nächstes Thema

Beta-User

...oder in den Quellcode...

readingsSingleUpdate findet sich eher selten in 72_FRITZBOX.pm ;) .

Nach einem bulk-update (und damit auch intern nach einem singleUpdate) werden dann als erstes alle userReadings errechnet, danach stateFormat evaluiert (?) und erst zum Schluß wird dann alles externe getriggert. Details (nach meinem Verständnis) ab hier: https://svn.fhem.de/trac/browser/trunk/fhem/fhem.pl#L4704

Daher ist es das Ding mit den zwei Enden, welchen der beiden Werte man zum Trigger erklärt, es könnte auch irgendwas (fast) beliebiges anderes aus dem bulk sein, Hauptsache, es ist möglichst was, was nicht auch noch (irgendwann sonst) über ein single-update getriggert wird...

Beide Werte sind jedenfalls auch schon aktualisiert und können abgerufen werden.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Frank_Huber

Ok, dann ist es einfach.
Ich triggere auf das "low" reading, da sich dieses öfters ändert.

Danke euch für die Erhellung. 😉

duffy6

Funktioniert das hier noch mit der neuen AVM Fritzbox Version V7.25?
(neues Login Verfahren)

Grüße
duffy6

Frank_Huber


swsmily

#49
Zitat von: Otto123 am 11 Februar 2020, 13:18:57
Falls mal wieder jemand auf diesen Thread stösst und das Archiv schon wieder archiviert ist :)

Ich habe das mal zusammengefasst, ich hoffe man darf das bei so archivierten Webseiten.
Also der Original Artikel in einer Raw Def zusammengefasst. Mit der Anmerkung:
* das die Rechnung falsch ist.
* man die versteckten Readings nicht sichtbar machen muss, um sie auszulesen :)
# Inhalt aus https://web.archive.org/web/20190309062949/https://waschto.eu/traffic/

attr global showInternalValues 1

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 Empfangen dummy
attr Empfangen userReadings Empfangen_ges monotonic { ReadingsVal("Empfangen","Empfangen",0)}
attr Empfangen stateFormat {sprintf("%.2f GB - %.2f GB",ReadingsVal("Empfangen","Empfangen",0),ReadingsVal("Empfangen","Empfangen_ges",0))}
attr Empfangen icon control_arrow_down@green

define Gesendet dummy
attr Gesendet userReadings Gesendet_ges monotonic { ReadingsVal("Gesendet","Gesendet",0)}
attr Gesendet stateFormat {sprintf("%.2f GB - %.2f GB",ReadingsVal("Gesendet","Gesendet",0),ReadingsVal("Gesendet","Gesendet_ges",0))}
attr Gesendet icon control_arrow_up@red

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


Da mir die Original Rechnung komisch gestaltet ist, habe ich mir einfach zwei UserReadings mit klaren Formeln gemacht (für die Raw Def:

2**32 -> 2^32           -> 4294967296 (Faktor für das "High" Double Word)
2**30 -> 1024*1024*1024 -> 1073741824 (GB)
2**20 -> 1024*1024      -> 1048576 (MB)
2**10                   -> 1024 (kB)

attr FritzBox userReadings todayReceived {(ReadingsVal($name,".box_TodayBytesReceivedLow",0) + ReadingsVal($name,".box_TodayBytesReceivedHigh",0) * 2**32) / 2**30},\
todaySent {(ReadingsVal($name,".box_TodayBytesSentLow",0) + ReadingsVal($name,".box_TodayBytesSentHigh",0) * 2**32) / 2**30}

Wer auf dem Land lebt (so wie ich  ::) ), kann die Werte auch in MB darstellen und den Teiler umstellen: 2**20

Oder macht das im Original Artikel verwendete Konstrukt (Wert /(1000*1000)/1000) irgendeinen tieferen Sinn? Genauigkeit? Geschwindigkeit?

Gruß Otto

Das Forum bietet unterdessen echt auf alles eine Antwort. Super! Genau das hab ich gesucht.  ;D

Allerdrings ist mir aufgefallen, dass die Werte die im Online-Zähler der Fritzbox angezeigt werden näher an die Berechnung kommt, wenn man tatsächlich mit 1000 statt 1024 rechnet.

Fritzbox selbst zeigt bei mir bei "Empfangen" gerade genau 7000mb an,
Berechnung mit den Werten in FHEM:
.box_TodayBytesReceivedLow = 2703295899
.box_TodayBytesReceivedHigh = 1

Soweit ich verstanden habe müssen bei "High=1" 4294967296 zu Low addiert werden = 6998263195

6998263195 /1000/1000 = 6998,263195
6998263195 /1024/1024 = 6674,063869

Damit ist das Ergebnis mit 1000 statt 1024 näher an dem dran, was die Fritzbox selbst im Online-Zähler anzeigt.

Welcher Wert nun genauer ist für die Abrechnung beim Provider (LTE-Tarif in einem Bungalow), das steht natürlich auf einem anderen Blatt.
Lässt sich leider aber auch nicht vergleichen, da die Provider leider oft sehr zeitverzögert den aktuellen Verbrauch online anzeigen.


EDIT: gibt es eine Möglichkeit bei einem Volumentarif (kann man ja in der Fritzbox einstellen) diese Werte auch auszulesen?

Otto123

naja es gibt da auch noch, für den Techniker schwer realisierbare Feinheiten: https://de.wikipedia.org/wiki/Byte
Und nach diesem Artikel hat AVM (und Du :) ) Recht und wir müssten bei dieser Berechnung die Maßeinheit berichtigen.
1 Mebibyte (MiB) = 1024 × 1024 Byte
Allerdings gruselt es bei mir wenn ich Mebibyte lese  ;D ;D ;D und in einen alten Kopf will so manches nicht rein. Theoretisch haben die Amis seit meiner Schulzeit auch SI Einheiten und rechnen in der Praxis immer noch in Füßen  :o ;D :o

ZitatEDIT: gibt es eine Möglichkeit bei einem Volumentarif (kann man ja in der Fritzbox einstellen) diese Werte auch auszulesen?
Dazu kann ich nichts beitragen
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

swsmily

Da gehts mir genauso. Obwohl ich Fachinformatiker bin, sind für mich Megabyte 1024 Kilobyte. Mebibyte usw. klingt gruselig  ;D

Mich hat nur eben verwundert, dass in der Fritzbox andere Werte raus kamen als in FHEM umgerechnet werden.
Die Auswertung muss für mich auch nicht 100% genau sein. Es geht um einen LTE-Tarif mit rund 13GB und ich möchte da einfach über FHEM grob den Verbrauch auslesen. Wer weiß, ob der Provider den Verbrauch genauso abrechnet, wie es die Fritzbox misst.

Im alten Tarif ging das mit HTTPMod sehr gut, da über eine Webseite die Verbrauchs-Prozente des Providers ohne Anmeldung ausgelesen werden konnten. Der neue Provider zeigt diesen Wert erst an, wenn man sich einloggt. Dazu noch in einer generierten Grafik, was wahrscheinlich nicht wirklich mit HTTPMod auslesbar ist.