Fritzbox Internet Traffic auslesen um es zu loggen

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

Vorheriges Thema - Nächstes Thema

Shojo

Das kann ich leider nicht nutzen da die Variable bei mir nicht um Mitternacht geleert wird.

Habe mir mit diesem DOIF beholfen

([FritzBox:box_TodayGigaBytesTotal] > [?$SELF:_helperDayGigaBytesTotal])
(
set $SELF _helperDayGigaBytesTotal [FritzBox:box_TodayGigaBytesTotal],
set $SELF DayGigaBytesTotal {([$SELF:offsetDayGigaBytesTotal] + [FritzBox:box_TodayGigaBytesTotal])}
)
DOELSEIF([FritzBox:box_TodayGigaBytesTotal] < [?$SELF:_helperDayGigaBytesTotal])
(
set $SELF offsetDayGigaBytesTotal  {([$SELF:_helperDayGigaBytesTotal] + [$SELF:offsetDayGigaBytesTotal])},
set $SELF DayGigaBytesTotal {([$SELF:offsetDayGigaBytesTotal] + [FritzBox:box_TodayGigaBytesTotal])},
set $SELF _helperDayGigaBytesTotal [FritzBox:box_TodayGigaBytesTotal]
)
DOELSEIF([00:10:01])
(
set $SELF MonthGigaBytesTotal {([$SELF:MonthGigaBytesTotal] + [$SELF:DayGigaBytesTotal])},
set $SELF YearGigaBytesTotal {([$SELF:YearGigaBytesTotal] + [$SELF:DayGigaBytesTotal])},
set $SELF YearTeraBytesTotal {(sprintf('%.3f',([$SELF:YearGigaBytesTotal] / 1024)))},
set $SELF _helperDayGigaBytesTotal 0,
set $SELF offsetDayGigaBytesTotal 0,
set $SELF DayGigaBytesTotal 0
)
DOELSEIF($mday == 1 and [00:10:02])
(
set $SELF MonthGigaBytesTotal 0
)
DOELSEIF($yday == 0 and [00:10:03])
(
set $SELF YearGigaBytesTotal 0
)
FHEM auf: Shuttle PC (x64) (Docker)
Bridge: SignalESP 433mHz, ConBee (deCONZ in Docker)
Rest: ESP8266, SONOFF, Sonos, Echo Dot, Xiaomi Vacuum (root), ESP RGBWW Wifi Led Controller, Node-RED, LEDMatrix, Pixel It

SmiL3

Zitat von: Benjamin50 am 30 Juli 2018, 17:27:18
Hallo

vielleicht hilft euch das weiter.  :)


https://waschto.eu/traffic/

mfg
wolfgang

Hallo,
leider ist die Seite offline.
Könnte zufällig jemand eine Anleitung Posten um es nach zu bauen?

Danke
MfG Matti


SmiL3


Frank_Huber

Hat aber einen Fehler, Umrechnung KB / MB / GB wird mit 1024 gerechnet, nicht mit 1000.

Das solltest im at anpassen, sonst stimmen die Werte nicht

JoWiemann

Sorry, aber 1024 ist schon richtig. Hier sind 2er Potenzen die Grundlage.

1024 KByte = 1 MByte
1024 MByte = 1 GByte
1024 GByte = 1 TByte
usw.


Gesendet von iPhone mit Tapatalk
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

Frank_Huber

Zitat von: JoWiemann am 11 Februar 2020, 09:25:55
Sorry, aber 1024 ist schon richtig. Hier sind 2er Potenzen die Grundlage
Sag ich doch. :-)
Im Link wird mit 1000 gerechnet.

JoWiemann

Wer lesen kann... Sorry


Gesendet von iPhone mit Tapatalk
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

Otto123

#38
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
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

dombar

Die Frage die Ich mir stelle ist warum wird das als ein Intervall gemacht?
Warum nicht auf ein Notify wenn die Readings von der FB kommen?
1x FB7490, 2x FBDECT200, 1x RPI als Öltankanzeige mit TEK603, 1x Synology NAS, 1xCUL FS20, 2x CCU3, 1xFS20DWT , 1x FS20 DI22-4, 1x FS20IR, 3x FS20ST, 1 x KS300, 3x HM-LC-Sw1PBU-FM, 6x HM-ES-PMSw1-Pl,  Siemens S7 CPU 315 für Stromzähler auf S0 Basis uvm.

Otto123

Zitat von: dombar am 19 Februar 2020, 21:33:42
Warum nicht auf ein Notify wenn die Readings von der FB kommen?
Oder einfach UserReadings - siehe mein vorhergehender Post. ;) Und geloggt wird einfach ins vorhandene FritzBox Log.

Man braucht kein einziges zusätzliches Devices.

Gruß Otto
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

dombar

Stimmt da hast du auch recht! Habe Ich nicht drüber nachgedacht! ???
1x FB7490, 2x FBDECT200, 1x RPI als Öltankanzeige mit TEK603, 1x Synology NAS, 1xCUL FS20, 2x CCU3, 1xFS20DWT , 1x FS20 DI22-4, 1x FS20IR, 3x FS20ST, 1 x KS300, 3x HM-LC-Sw1PBU-FM, 6x HM-ES-PMSw1-Pl,  Siemens S7 CPU 315 für Stromzähler auf S0 Basis uvm.

Frank_Huber

Hi,

Ich grabe das hier nochmal aus...

Ich bin gerade dabei alle meine Userreadings mit einem klaren Trigger zu versehen.
Hier tue ich mich aber schwer einen Trigger zu definieren da ja zwei Readings in die Berechnung eingehen.
Ich sehe leider an den Timestamps nicht welches Reading zuletzt gefüllt wird.

Wie könnte man das denn vernünftig lösen?

Danke & Grüße
Frank

Otto123

Hallo Frank,

ich kann falsch liegen, aber ich behaupte die Readings werden alle mit einem Rutsch (bulkupdate) geschrieben. Zumindest hatte ich das mal so ermittelt und auch was dazu gelesen.
In sofern - ist es eventuell das Teil mit den zwei Enden?  8)

schräge Idee: mach temporär zwei userReadings eins so und eins anders und schau ob es unterschiedliche Ergebnisse gibt?

Gruß Otto
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

LuckyDay

ZitatWie könnte man das denn vernünftig lösen?

Eventmonitor guggen wie/wann die Readings reinkommen