!!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