!!Gelöst!! FritzBox Online Zähler auslesen

Begonnen von Shadow3561, 25 Juni 2017, 17:15:53

Vorheriges Thema - Nächstes Thema

JoWiemann

Hallo,

wenn ich mich richtig erinnere wurde unter waschto.eu/traffic nur gezeigt, wie man den Traffic der FB auslesen kann. Dafür gibt es im FRITZBOX Modul mittlerweile eigene Readings.

Pro Netzwerkgerät geht das auch, aber dafür müsste ich im FRITZBOX Modul etwas entsprechendes hinterlegen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

#16
Hallo,

morgen mit dem Update kommt folgende Erweiterung:

Bei "get <name> lanDeviceInfo <number>" wird bei vorhandener Kindersicherung, nur dann wird gemessen, zusätzlich folgendes ausgegeben:

USEABLE: Zuteilung in Sekunden
UNSPENT: nicht genutzt in Sekunden
PERCENT: in Prozent
USED: genutzt in Sekunden
USEDSTR: ss:mm von Kontingent ss:mm

Beispielausgabe:
MAC:28:56:5A:44:E3:58 IPv4:192.168.0.113 UID:landevice2975 NAME:HPLaserJet ACCESS:limited USEABLE:61200 UNSPENT:38040 PERCENT:37.84 USED:23160 USEDSTR:06:26 von 17:00 Stunden DEVTYPE:wlan STATE:CONNECTED ONLINE:ONLINE REALTIME:0
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Hallo,

falls Du das nun auswerten möchtest, hier ein Beispiel:

Zunächst einen Dummy:
defmod HPLaserOnline dummy
attr HPLaserOnline readingList Useable Unspent Percent Used UsedStr

Nun ein at:
defmod get_HPLaser_Info at 2024-02-08T23:58:00 {\
  my $hpInfo = fhem("get FritzBox lanDeviceInfo 2975", 1);;\
\
  my ($data) = ($hpInfo =~ /USEABLE:(\d+).UNSPENT/);;\
  fhem("set HPLaserOnline Useable $data", 1);;\
  \
  ($data) = ($hpInfo =~ /UNSPENT:(\d+).PERCENT/);;\
  fhem("set HPLaserOnline Unspent $data", 1);;\
\
  ($data) = ($hpInfo =~ /PERCENT:(\d+\.?\d+).USED/);;\
  fhem("set HPLaserOnline Percent $data", 1);;\
\
  ($data) = ($hpInfo =~ /USED:(\d+).USEDSTR/);;\
  fhem("set HPLaserOnline Used $data", 1);;\
  \
  ($data) = ($hpInfo =~ /USEDSTR:(.*?).DEVTYPE/);;\
  fhem("set HPLaserOnline UsedStr $data", 1);;\
}

Dann kannst Du auf HPLaserOnline noch ein Log setzen und schon bekommst Du den täglichen Online-Konsum in Sekunden.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Aurel_B

Als Nachtrag da ich auch die tägliche Datenmenge erfassen wollte: habe bei archive.org eine archivierte Version abgerufen (https://web.archive.org/web/20181222100934/https://waschto.eu/traffic/), das hat wunderbar geklappt. Ich hänge zur Sicherheit hier noch eine PDF Kopie an.
Ich habe es so wie in der Anleitung beschrieben umgesetzt und dann für meine Bedürfnisse angepasst. Es funktioniert alles tiptop!

Aurel_B

#19
Ah vielleicht noch interessant an dieser Stelle: die aktuellen MBit/s Werte (box_rateDown/box_rateUp) liefern bei mir sehr komische Werte und scheinen auch nur eine Momentaufnahme zu sein. Ich ermittle daher die gemittelten Werte über 60s (bei mir das Ausleseintervall für die Fritzbox), hier der relevante Code falls das jemand auch so einbauen möchte:

attr global showInternalValues 1
attr FritzBox stateFormat {sprintf("Down: %.1f MBitS, %.0f MB today<br />\
Up:  %.1f fMBitS, %.0f MB today<br />\
IP: %s<br />\
uptime: %s<br />", ReadingsVal($name, 'DownMBitS', 0), ReadingsVal($name, 'DownMB_Today', 0), ReadingsVal($name, 'UpMBitS', 0), ReadingsVal($name, 'UpMB_Today', 0), ReadingsVal($name, 'box_ipv4_Extern', 0), ReadingsVal($name, 'box_uptimeConnect', 0))}
attr FritzBox userReadings DownMBitS { sprintf("%.1f", (ReadingsVal($name, 'DownMB_Today', 0) - ReadingsVal($name, 'DownMB_Today_OldVal', 0))*8/60)},\
UpMBitS { sprintf("%.1f", (ReadingsVal($name, 'UpMB_Today', 0) - ReadingsVal($name, 'UpMB_Today_OldVal', 0))*8/60)}

attr FritzBox userReadings DownMBitS { sprintf("%.1f", (ReadingsVal($name, 'DownMB_Today', 0) - ReadingsVal($name, 'DownMB_Today_OldVal', 0))*8/60)},\
UpMBitS { sprintf("%.1f", (ReadingsVal($name, 'UpMB_Today', 0) - ReadingsVal($name, 'UpMB_Today_OldVal', 0))*8/60)}


defmod n_FritzBox notify FritzBox:box_dsl_downStream:.* {\
my $fritzbox = 'FritzBox';;\
my $oldVal = ReadingsVal($fritzbox, 'DownMB_Today', 0);;\
my $d = ((ReadingsVal($fritzbox,".box_TodayBytesReceivedLow",0) / (1024 * 1024) ) + ( ReadingsVal($fritzbox,".box_TodayBytesReceivedHigh",0) * 4294967296 / (1024 * 1024) ) );;\
fhem("setreading $fritzbox DownMB_Today $d");;\
fhem("setreading $fritzbox DownMB_Today_OldVal $oldVal");;\
 \
$oldVal = ReadingsVal($fritzbox, 'UpMB_Today', 0);;\
my $e= ((ReadingsVal("FritzBox",".box_TodayBytesSentLow",0) / (1024 * 1024) ) + ( ReadingsVal("FritzBox",".box_TodayBytesSentHigh",0) * 4294967296 / (1024 * 1024) ) );;\
fhem("setreading $fritzbox UpMB_Today $e");;\
fhem("setreading $fritzbox UpMB_Today_OldVal $oldVal");;\
}

JoWiemann

Hallo,

Du kannst Dir gerne mal die javascript API der FritzBox ansehen.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

JoWiemann

Hallo,

hier noch eine Aufschlüsselung:

get <name> javaScript [json] monitor/online
gibt die Devices zurück, für die in der FB Weboberfläche unter Internet/Online-Monitor/Einzelne Geräte Devices zur Überwachung ausgewählt worden sind.

[monitor/online/5 ... monitor/online/0] beinhaltet die 10 Minuten Zeitreihen der 5 Sekunden Daten, wobei 5 für die ältesten und 0 für die aktuellsten Werte steht. Es werden also 50 Minuten in fünf 5 Sekunden Zeitreihen zur Verfügung gestellt.

Durch den optionalen Parameter [json] erfolgt die Rückgabe als plain JSON und kann entsprechend in eigenen Verarbeitungen genutzt werden.

Grüße Jörg

PS: Steht allerdings frühestens ab FritzOS 8.00, bei Cable ab 8.04, zur Verfügung. Da ich keine Box mehr habe mit FritzOS < 8.00 kann ich nicht prüfen, ob eine entsprechende Funktion dort vorhanden war.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Aurel_B

Oh danke dir, das würde ich gerne ausprobieren. Allerdings liefert bei mir

get FritzBox javaScript [json] monitor/online
ein

Result of data = monitor/online
----------------------------------------------------------------------
ERROR: Bad Request

72_FRITZBOX.pm ist in der neusten Version, Fritbox OS ist VERSION 08.20.00

Gibt es da einen Trick? Habe in der Dokumentation leider nix gefunden.

JoWiemann

Hallo,

bitte die [] Klammern weglassen. Die zeigen in der generischen Schreibweise nur an, dass es sich um einen optionalen Parameter handelt.
get FritzBox javaScript json monitor/online

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Aurel_B

Danke dir für deine rasche Antwort, das mit den Klammern macht voll Sinn ....  Leider geht der Befehl immer noch nicht, er liefert

{"Error":"Bad Request","ResetSID":"1"}
Im Log steht nix bei "verbose 5". Ich habe zum Testen unmittelbar vorher ein "set FritzBox update" gemacht, gewartet, bis nach ein paar Sekunden die Readings aktualisiert wurden und dann den javaScript Befehl abgeschickt. Hat leider auch nix bewirkt. Weisst du, wo das Problem sein könnte?

JoWiemann

Zitat von: Aurel_B am 25 August 2025, 09:26:26Weisst du, wo das Problem sein könnte?

Hm,

also entweder an der FritzBox, welche hast Du, oder (sorry) vor dem Bildschirm.

Bitte einmal verbose im FritzBox Device auf 4 setzten und dann den Befehl noch einmal ausführen. Den Log-Ausschnitt dann bitte posten.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Aurel_B

Kann gut sein, dass da auf meiner Seite her irgendwas nicht so läuft wie es sollte. Log sagt:

2025.08.26 08:52:03.077 3: [FritzBox | 7530 | 164.08.02 | Get.3690] - BASIC:get FritzBox javaScript [2] json monitor/online
2025.08.26 08:52:03.077 4: [FritzBox | 7530 | 164.08.02 | Get.3701] - EXPANDED:get FritzBox javaScript monitor/online
2025.08.26 08:52:03.077 4: [FritzBox | 7530 | 164.08.02 | open_Web_Connection.13993] - EXPANDED:checking HOST -> 192.168.1.254
2025.08.26 08:52:03.079 4: [FritzBox | 7530 | 164.08.02 | open_Web_Connection.14033] - EXPANDED:using old SID from 08:51:47
2025.08.26 08:52:03.080 4: [FritzBox | 7530 | 164.08.02 | call_javaScript.14550] - EXPANDED:Request data via API javaScript.
2025.08.26 08:52:03.080 4: [FritzBox | 7530 | 164.08.02 | call_javaScript.14554] - EXPANDED:URL: http://192.168.1.254/api/v0/monitor/online
2025.08.26 08:52:03.114 4: [FritzBox | 7530 | 164.08.02 | call_javaScript.14567] - EXPANDED:Response: {"errors":[{"message":"bad path: \/online.","code":3002}]}
2025.08.26 08:52:03.114 4: [FritzBox | 7530 | 164.08.02 | call_javaScript.14571] - EXPANDED:
Bad Request

JoWiemann

Hallo,

Du hast eine FB 7530 mit FritzOS 8.02. Da funktioniert das nicht. Du könntest die aktuelle Labor aufspielen, dann bist Du dabei.

Leider kann man über das FritzOS nicht sauber abgrenzen, ob die Abfrage funktioniert oder nicht. Ist halt auch FB abhängig.

Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

Aurel_B

Ok alles klar, das macht Sinn. Ich kann mit meiner Lösung von https://forum.fhem.de/index.php?msg=1346638 gut leben und schaue in ein paar Monaten, ob mit einer neuen FritzBox Version alles klappt. Danke!