Fritzbox Internet Traffic auslesen um es zu loggen

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

Vorheriges Thema - Nächstes Thema

Cruiser79

Moin moin,

um das Datenvolumen meiner Fritzbox in FHEM zu loggen habe ich mir das Fritzbox Modul eingerichtet und ein userReading angelegt, welches über die TR064 Schnittstelle die TotalBytesReceived und TotalBytesSend ausliest, so das ich diese Readings wiederum in ein Logfile loggen kann.

TotalBytesReceived {
my $resp=fhem( "get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalBytesReceived");;$resp =~/\'NewTotalBytesReceived\' => '(.*)'/;;return $1;;},
TotalBytesSend {
my $resp=fhem( "get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalPacketsSent");;$resp =~/\'NewTotalPacketsSent\' => '(.*)'/;;return $1;;}


Klappt soweit auch ganz gut. Habe nun aber das Problem, das mein Logfile zugemüllt wird mit den get-Requests und dem entsprechendem Response der Fritzbox.
Frage wäre nun also, ob man diese Logeinträge irgendwie unterdrücken kann?
Andernfalls wäre auch noch die Frage, ob es eine andere (bessere) Möglichkeit gibt, den aktuellen Traffic der Fritzbox auszulesen? Gibt es ein weiteres Modul, was ich noch nicht kenne, das diese Aufgabe erledigt?

Gruß,
Tim
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

klausw

Sofern du noch Telnet zugriff auf die FB hast könnte SYSMON was für dich sein.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Cruiser79

Zitat von: klausw am 16 Dezember 2015, 11:06:24
Sofern du noch Telnet zugriff auf die FB hast könnte SYSMON was für dich sein.
Habe die neueste Firmware, somit kein Telnetzugriff mehr möglich  >:(
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

klausw

Zitat von: Cruiser79 am 16 Dezember 2015, 09:19:14
Frage wäre nun also, ob man diese Logeinträge irgendwie unterdrücken kann?
Andernfalls wäre auch noch die Frage, ob es eine andere (bessere) Möglichkeit gibt, den aktuellen Traffic der Fritzbox auszulesen? Gibt es ein weiteres Modul, was ich noch nicht kenne, das diese Aufgabe erledigt?
Welches Loglevel haben diese Einträge? Mit Verbose und einer geringeren Zahl als die im Logeintrag kannst du diese unterdrücken
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Wernieman

Sorry, aber vor dem Posten bitte lesen, was der Threadersteller will:
ZitatKlappt soweit auch ganz gut. Habe nun aber das Problem, das mein Logfile zugemüllt wird mit den get-Requests und dem entsprechendem Response der Fritzbox.

Genau das kriegst Du mit den 3 Parametern nicht weg ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Ralf W.

Deshalb habe ich den Eintrag ja auch sofort wieder gelöscht. Du hast in den 5 Sekunden zwischen "Schreiben" und "Löschen" den Eintrag gesehen.

MfG
http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

Ralf W.

http://twitter.com/RWausD
Schon gewusst, dass Haarausfall zu einer Glatze führen kann?

FHEM: NUC7PJYH2, Ubuntu Server 22.04.2 LTS, HMCCU - RaspberryMatic, DE ConBee II, diverse Sensoren und Aktoren.

Cruiser79

Zitat von: klausw am 16 Dezember 2015, 11:16:26
Welches Loglevel haben diese Einträge? Mit Verbose und einer geringeren Zahl als die im Logeintrag kannst du diese unterdrücken
Ist der Loglevel der Einträge die Zahl nach dem Datum?
2015.12.16 12:08:30 3: get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalBytesReceived : Service='WANCommonInterfaceConfig:1'   Control='wancommonifconfig1'   Action='GetTotalBytesReceived'

Somit Level 3?
Ein verbose 2 auf mein FritzBox Modul hilft nur leider nicht gegen die Logeinträge. Denkfehler, oder Fehler im Modul?

Zitat von: Ralf W. am 16 Dezember 2015, 11:44:34
Hallo,

vielleicht hilft Dir das Modul FBREMOTE mit der URL http://fritz.box/internet/inetstat_counter.lua.

MfG
Interessant, werde ich mir demnächst mal anschauen. Falls dieses Modul aber ein Abfragen der Weboberfläche macht, ist die Frage, ob es auch schon die neueste Firmware unterstützt.
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

klausw

Zitat von: Cruiser79 am 16 Dezember 2015, 12:13:25
Ist der Loglevel der Einträge die Zahl nach dem Datum?
2015.12.16 12:08:30 3: get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalBytesReceived : Service='WANCommonInterfaceConfig:1'   Control='wancommonifconfig1'   Action='GetTotalBytesReceived'

Somit Level 3?
Ein verbose 2 auf mein FritzBox Modul hilft nur leider nicht gegen die Logeinträge. Denkfehler, oder Fehler im Modul?
Interessant, werde ich mir demnächst mal anschauen. Falls dieses Modul aber ein Abfragen der Weboberfläche macht, ist die Frage, ob es auch schon die neueste Firmware unterstützt.

genau die Zahl hinter der Uhrzeit ist der Loglevel.
verbose 2 habe ich auch drinstehen und bekomme bei deinem Beispiel keine Einträge im Log
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Cruiser79

Zitat von: klausw am 16 Dezember 2015, 12:28:16
genau die Zahl hinter der Uhrzeit ist der Loglevel.
verbose 2 habe ich auch drinstehen und bekomme bei deinem Beispiel keine Einträge im Log
Im Fritzbox Modul habe ich verbose 2 stehen. Dafür habe ich aber noch ein attr global verbose 3 gefunden, was hier vielleicht der Punkt ist. Überschreibt das verbose des Fritzbox Moduls nicht das globale verbose?
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

klausw

Zitat von: Cruiser79 am 16 Dezember 2015, 13:24:20
Im Fritzbox Modul habe ich verbose 2 stehen. Dafür habe ich aber noch ein attr global verbose 3 gefunden, was hier vielleicht der Punkt ist. Überschreibt das verbose des Fritzbox Moduls nicht das globale verbose?
Doch, für die Fritzbox Meldungen wird es überschrieben. Aber evtl. musst du es im Dummy oder wo auch immer du die Abfrage machst setzen.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

tupol

Es gibt die versteckten Readings
.box_TodayBytesReceivedHigh (Faktor 2^32)
.box_TodayBytesReceivedLow
.box_TodayBytesSentHigh (Faktor 2^32)
.box_TodayBytesSentLow

Ansonsten wird der gepostete Logeintrag vermutlich von der sub fhem() erzeugt.

Wernieman

Zitat von: tupol am 16 Dezember 2015, 20:37:40
Es gibt die versteckten Readings
.box_TodayBytesReceivedHigh (Faktor 2^32)
.box_TodayBytesReceivedLow
.box_TodayBytesSentHigh (Faktor 2^32)
.box_TodayBytesSentLow

Wie kriegt man diese Sinnvoll in ein Logfile? (Mit Graf?)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Cruiser79

Zitat von: klausw am 16 Dezember 2015, 17:36:59
Doch, für die Fritzbox Meldungen wird es überschrieben. Aber evtl. musst du es im Dummy oder wo auch immer du die Abfrage machst setzen.
Ich habe kein Dummy, ich habe im FritzBox Device ein UserReading definert, wie ich es im ersten Post eingefügt habe. Somit müsste meines Erachtens nach das verbose auch triggern, sofern es denn vom FritzBox Modul benutzt wird.

Zitat von: tupol am 16 Dezember 2015, 20:37:40
Es gibt die versteckten Readings
.box_TodayBytesReceivedHigh (Faktor 2^32)
.box_TodayBytesReceivedLow
.box_TodayBytesSentHigh (Faktor 2^32)
.box_TodayBytesSentLow

Ansonsten wird der gepostete Logeintrag vermutlich von der sub fhem() erzeugt.

Was sind denn versteckte Readings? Und was heisst High und Low bei den Werten?
Kann ich der sub fhem denn das loggen austreiben? Wahrscheinlich dann nur mit einem verbose 2 auf global!?

Gruß,
Tim
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

tupol

Wie geschrieben. Low + High * 2^32

Wahrscheinlich ja. Ansonsten muss Du Dich an die Framework-Entwickler wenden. Aber keine Ahnung wer konkret.
PS: Evtl. wird der Log-Eintrag auch von userReading erzeugt.

Cruiser79

Kann mir nochmal jemand erklären, was denn verstecke Readings sind und wie man an die ran kommt?

Gruß,
Tim
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

dev0

Es sind Readings mit einem Punkt am Anfang des Names. Sie werden dadurch nicht in der FHEMWEB Detailansicht unter Readings angezeigt. Zugriff erfolgt wie bei normalen Readings auch.

Wernieman

Gibt es eigentlich eine Möglichkeit, sich solche Reading trotzdem anzeigen zu lasen?

Oder ist zu dem Wissen, das es sie gibt, Insiderknowhof erforderlich?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

dev0


Cruiser79

Zitat von: dev0 am 18 Dezember 2015, 09:18:53
list <device> zeigt sie an.
Wenn ich bei mir ein list FritzBox mache, bekomme ich zwar die "normalen" Readings angezeigt, von den Punkt-Readings fehlen aber alle.


Internals:
   APICHECKED 1
   HOST       fritz.box
   INTERVAL   300
   LUAQUERY   1
   M3U_LOCAL  ./www/images/FritzBox.m3u
   M3U_URL    undefined
   NAME       FritzBox
   NR         235
   PERL       Modul functionality limited because of missing perl modules: Net::Telnet
   REMOTE     1
   SECPORT    49443
   STATE      WLAN: on gWLAN: off
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   Readings:
     2015-12-18 10:04:46   TotalBytesReceived 2048743464
     2015-12-18 10:04:46   TotalBytesSend  1040900
     2015-12-18 10:04:46   alarm1          Wecker 1
     2015-12-18 10:04:46   alarm1_state    off
     2015-12-18 10:04:46   alarm1_target   FON 1
     2015-12-18 10:04:46   alarm1_time     00:00
     2015-12-18 10:04:46   alarm1_wdays    daily
     2015-12-18 10:04:46   alarm2          Wecker 2
     2015-12-18 10:04:46   alarm2_state    off
     2015-12-18 10:04:46   alarm2_target   FON 1
     2015-12-18 10:04:46   alarm2_time     00:00
     2015-12-18 10:04:46   alarm2_wdays    daily
     2015-12-18 10:04:46   alarm3          Wecker 3
     2015-12-18 10:04:46   alarm3_state    off
     2015-12-18 10:04:46   alarm3_target   FON 1
     2015-12-18 10:04:46   alarm3_time     00:00
     2015-12-18 10:04:46   alarm3_wdays    daily
     2015-12-18 10:04:46   box_connect     5
     2015-12-18 10:04:46   box_cpuTemp     54
     2015-12-18 10:04:46   box_dect        off
     2015-12-18 10:04:46   box_fwVersion   113.06.50
     2015-12-18 10:04:46   box_guestWlan   off
     2015-12-18 10:04:46   box_guestWlanRemain 0
     2015-12-18 10:04:46   box_ipExtern    xxxx
     2015-12-18 10:04:41   box_model       FRITZ!Box 7490 [avm]
     2015-12-18 10:04:46   box_moh         default
     2015-12-18 10:04:46   box_powerRate   38
     2015-12-18 10:04:46   box_rateDown    3.638
     2015-12-18 10:04:46   box_rateUp      0.452
     2015-12-18 10:04:46   box_stdDialPort fon1
     2015-12-18 10:04:46   box_tr064       on
     2015-12-18 10:04:46   box_tr069       on
     2015-12-18 10:04:46   box_wlan_2.4GHz on
     2015-12-18 10:04:46   box_wlan_5GHz   on
     2015-12-18 10:04:46   fon1            Telefon
     2015-12-18 10:04:46   fon1_intern     1
     2015-12-18 10:04:46   fon1_out        SIP0
     2015-12-18 10:04:46   fon2            Telefon
     2015-12-18 10:04:46   fon2_intern     2
     2015-12-18 10:04:46   fon2_out        SIP0
     2015-12-18 10:04:46   lastReadout     156 values captured in 1.47 s
     2015-12-18 10:04:46   mac_xxxxx
     2015-12-18 10:04:46   state           WLAN: on gWLAN: off
     2015-12-18 10:04:46   tam1            Anrufbeantworter
     2015-12-18 10:04:46   tam1_newMsg     0
     2015-12-18 10:04:46   tam1_oldMsg     0
     2015-12-18 10:04:46   tam1_state      on
     2015-12-18 10:04:46   user01          (guest)
     2015-12-18 10:04:46   user01_thisMonthTime 3:50
     2015-12-18 10:04:46   user01_todaySeconds 0
     2015-12-18 10:04:46   user01_todayTime 0:00
     2015-12-18 10:04:46   user01_type     Guest
   Fhem:
     LOCAL      0
     definedHost undefined
     is_double_wlan 1
     lastHour   0
     modulVersion $Date: 2015-12-15 21:09:40 +0100 (Tue, 15 Dec 2015) $
     radioCount 40
     sid        x
     sidTime    x
     Landevice:
       [..]
     Radio:
       0
       1
       10
       11
       12
       13
       14
       15
       16
       17
       18
       19
       2
       20
       21
       22
       23
       24
       25
       26
       27
       28
       29
       3
       30
       31
       32
       33
       34
       35
       36
       37
       38
       39
       4
       5
       6
       7
       8
       9
   Helper:
     TimerCmd   FritzBox.Cmd
     TimerReadout FritzBox.Readout
Attributes:
   allowTR064Command 1
   boxUser    xxx
   room       xxx
   userReadings TotalBytesReceived {my $resp=fhem( "get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalBytesReceived");;$resp =~/\'NewTotalBytesReceived\' => '(.*)'/;;return $1;;}, TotalBytesSend {my $resp=fhem( "get FritzBox tr064Command WANCommonInterfaceConfig:1 wancommonifconfig1 GetTotalPacketsSent");;$resp =~/\'NewTotalPacketsSent\' => '(.*)'/;;return $1;;}
   verbose    2
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

dev0

#20
Musste jetzt auch kurz suchen, aber es muss folgendes noch gesetzt sein:
attr global showInternalValues 1

EDIT: dann werden sie aber auch bei den Readings in der GUI angezeigt.

wmr72

Zitat von: Cruiser79 am 16 Dezember 2015, 22:20:29
Kann ich der sub fhem denn das loggen austreiben? Wahrscheinlich dann nur mit einem verbose 2 auf global!?

Ja, kann man, indem man als zweiten Parameter eine 1 übergibt, also
fhem("get <device> <irgendwas>", 1)


Das steht recht versteckt in der commandref ganz unten: http://fhem.de/commandref.html#perl

Wolfgang

Pseudex

Als UserReading kann man die versteckten Werte auch raus holen!

box_TodayBytesReceived {ReadingsNum("FritzBox", ".box_TodayBytesReceivedLow",0)
+ReadingsNum("FritzBox", ".box_TodayBytesReceivedHigh",0)*2^32;}
,box_TodayBytesSent {ReadingsNum("FritzBox", ".box_TodayBytesSentLow",0)
+ReadingsNum("FritzBox", ".box_TodayBytesSentHigh",0)*2^32;}

Shojo

Da ich aktuell auch versuche anständige Daily Traffic Stats aus der Fritzbox zu holen, habe ich den alten Thread hier gefunden.

Allerdings ist mir aufgefallen das sich bei mir .box_TodayBytesReceivedLow, .box_TodayBytesReceivedHigh, .box_TodayBytesSentLow und .box_TodayBytesSentLow bei einen neuen DHCP Lease von meinen Provider zurücksetzten.

Daher habe ich versucht an den Daten der Fitzbox über http://fritz.box/internet/inetstat_counter.lua zu kommen, leider scheitere ich hier.
Das hatte ich gefunden https://www.symcon.de/forum/threads/20405-Funktionierende-Scripts-für-FRITZ%21OS-05-50-7390?s=3f74fd8309104f2c3e87a9861fcd904d&p=203506#post203506 ,
ich bin mir nicht sicher wie ich das unter FHEM bewerkstelligen soll.

Hat das schon mal einer von euch versucht oder ein Tipp für mich?

Gruß
Dennis

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

Shojo

So ich bin etwas weitergekommen.....

Wenn man ein Post auf http://fritz.box/internet/inetstat_counter.lua?sid=<DeineSessionID> absetzt bekommen man die Stats als HTML ausgeliefert.
Jetzt stellt sich aber noch die Herausforderung sich eine aktuelle gültige SessionId zu besorgen, und den Spaß dann im FHEM zu verarbeiten. 
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

Otto123

Hallo Dennis,

hast Du mal geschaut ob die Werte über TR064 abrufbar sind?

Im Wiki gibt es dazu auch etwas -> https://wiki.fhem.de/wiki/FRITZBOX
Da steht auch was von getluaquery  ;)

Aber ich habe keine praktischen Tipps.

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

Shojo

Hiho Otto,
Zitat von: Otto123 am 26 Juni 2018, 11:46:50
hast Du mal geschaut ob die Werte über TR064 abrufbar sind?
ja habe ich, aber das gibt leider die Schnittstelle nicht her. 

Zitat von: Otto123 am 26 Juni 2018, 11:46:50
Im Wiki gibt es dazu auch etwas -> https://wiki.fhem.de/wiki/FRITZBOX
Da steht auch was von getluaquery  ;)
Das hatte ich auch gesehen aber meine Versuche damit was zu erreichen sind leider erfolglos geblieben.

Danke dir für deine Anteilname :) 

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

Cruiser79

Zitat von: Shojo am 26 Juni 2018, 09:57:14
So ich bin etwas weitergekommen.....

Wenn man ein Post auf http://fritz.box/internet/inetstat_counter.lua?sid=<DeineSessionID> absetzt bekommen man die Stats als HTML ausgeliefert.
Jetzt stellt sich aber noch die Herausforderung sich eine aktuelle gültige SessionId zu besorgen, und den Spaß dann im FHEM zu verarbeiten.

Ich hätte da noch httpmod als Idee. Schaue dir mal https://wiki.fhem.de/wiki/HTTPMOD#Advanced_configuration_to_create_a_valid_session_id_that_might_be_necessary an, nach dem Muster solltest du den Login und das nachfolgende Auslesen auf der Fritzbox auch hinbekommen.

Gruß,
Tim
FHEM auf Raspberry Pi
HM-CFG-LAN mit HM-TC-IT-WM-W-EU, HM-CC-RT-DN, HM-WDS10-TH-O, HM-LC-SW1-FM, HM-LC-Bl1-FM
Signalduino mit Elro AB440, LOGILINK WS0002, IT CMR-1000

Shojo

Zitat von: Cruiser79 am 26 Juni 2018, 12:24:22
Ich hätte da noch httpmod als Idee.
Ja das sieht schon sehr mächtig aus, bloß ich werde nicht schlau draus wie ich den Login realisieren soll.

Hatte zwar den PHP Code gefunden, wüsste ihn aber nicht im FHEM mit httpmod umzusetzen...

<?
$fritzbox_ip = '192.168.178.1';
$password    = 'xxxxx';

$ch = curl_init('http://192.168.178.1/login_sid.lua');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$login = curl_exec($ch);
$session_status_simplexml = simplexml_load_string($login);
if ($session_status_simplexml->SID != '0000000000000000')
{
   $SID = $session_status_simplexml->SID;
}
else
{
   $challenge = $session_status_simplexml->Challenge;
   $response = $challenge . '-' . md5(mb_convert_encoding($challenge . '-' . $password, "UCS-2LE", "UTF-8"));

   curl_setopt($ch, CURLOPT_POSTFIELDS, "response={$response}&page=/login_sid.lua");
   $sendlogin = curl_exec($ch);
   $session_status_simplexml = simplexml_load_string($sendlogin);

   if ($session_status_simplexml->SID != '0000000000000000')
   {
   $SID = $session_status_simplexml->SID;
   }
   else
   {
      echo "Fehler: Login fehlgeschlagen";
      return;
    }
}

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

Benjamin50


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

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.