[gelöst]Fritzbox Verbindungsdauer anzeigen?

Begonnen von no_Legend, 31 Januar 2019, 06:46:07

Vorheriges Thema - Nächstes Thema

no_Legend

Hallo Leute,

eine Frage in bezug auf die Fritzbox.
Ist es möglich angezeigt zu bekommen, wie lange die Fritzbox schon eine Verbindung in Internet hat?
Im WebIF der FB steht ja eine Zeit, diese kann ich aber in FHEM nicht finden.

Mir geht es darum, zu Protokollieren, wann die Verbindung abgebrochen ist.
Habe Kabel Internet, also keine Zwangstrennung.

Auf die IP zu schauen ist nicht die lösung, da diese sich nicht zwangsläufig ändern muss.

Danke und Gruß Robert
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.

CoolTux

Da wirst Du Dir wohl ein userReadings bauen müssen. Ich könnte da sowas bei mir auch nicht finden.
box_IpExtern wäre das Reading dessen Zustand Du zum rechnen nehmen kannst. Wäre dann aber nur eine in etwa Rechnung.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

no_Legend

#2
Zitat von: CoolTux am 31 Januar 2019, 07:02:08
Da wirst Du Dir wohl ein userReadings bauen müssen. Ich könnte da sowas bei mir auch nicht finden.
box_IpExtern wäre das Reading dessen Zustand Du zum rechnen nehmen kannst. Wäre dann aber nur eine in etwa Rechnung.

Das ist ja echt schade.
Da wird der Radiosender ausgegeben, aber wie lange die Verbindung oder ob alle SIP Nummern verbunden sind nicht?

Dass muss man bei AVM nicht verstehen.

Edit:

Kann es sein, dass man doch den Wert raus bekommt?
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf
Seite 2 NewUptime?

Gruß Robert
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.

Christoph Morrison

Zitat von: no_Legend am 31 Januar 2019, 07:27:44
Das ist ja echt schade.
Da wird der Radiosender ausgegeben, aber wie lange die Verbindung oder ob alle SIP Nummern verbunden sind nicht?

Dass muss man bei AVM nicht verstehen.

Edit:

Kann es sein, dass man doch den Wert raus bekommt?
https://avm.de/fileadmin/user_upload/Global/Service/Schnittstellen/wanipconnSCPD.pdf
Seite 2 NewUptime?

Gruß Robert

Korrekt, NewUptime enthält als Wert die Sekunden seit der letzten neu hergestellten Verbindung.
Du bekommst das komplette Entity so:

get <fritzbox> tr064Command WANIPConnection:1 wanipconnection1 getInfo

Zurück liefert das dann (bei mir):

Service='WANIPConnection:1'   Control='wanipconnection1'   Action='getInfo'
----------------------------------------------------------------------
$VAR1 = {
          'GetInfoResponse' => {
                               'NewName' => 'internet',
                               'NewEnable' => '1',
                               'NewLastConnectionError' => 'ERROR_NONE',
                               'NewNATEnabled' => '1',
                               'NewExternalIPAddress' => '<anonymous>',
                               'NewDNSOverrideAllowed' => '1',
                               'NewMACAddress' => '<anonymous>',
                               'NewConnectionStatus' => 'Connected',
                               'NewDNSEnabled' => '1',
                               'NewRSIPAvailable' => '0',
                               'NewRouteProtocolRx' => 'Off',
                               'NewPossibleConnectionTypes' => 'IP_Routed, IP_Bridged',
                               'NewConnectionType' => 'IP_Routed',
                               'NewConnectionTrigger' => 'OnDemand',
                               'NewDNSServers' => '<anonymous>',
                               'NewUptime' => '4075276'
                             }
        };


Der letzte Wert interessiert uns. Wir haben es jetzt aber noch nicht als Reading. Das geht über userReadings:

connection_uptime {
    my  $resp = fhem("get $name tr064Command WANIPConnection:1 wanipconnection1 getInfo",1);
        $resp =~/'NewUptime' => '(.*)'/;
    return $1;
},


Im Reading connection_uptime liegt dann der aktuelle Wert in Sekunden.

Ich habe in meiner 99_myUtils.pm noch eine Funktion liegen, die mir Sekundenwerte in eine textuelle Zeitdifferenz konvertiert:

sub timediff2str($)
{
    my $s = shift;

    return sprintf ":%02d", $s if $s < 60;

    my $m = $s / 60; $s = $s % 60;
    return sprintf "%02d:%02d", $m, $s if $m < 60;

    my $h = $m /  60; $m %= 60;
    return sprintf "%02d:%02d:%02d", $h, $m, $s if $h < 24;

    my $d = $h / 24; $h %= 24;
    return sprintf "%d Tage, %02d Stunden, %02d Minuten, %02d Sekunden", $d, $h, $m, $s;
}


Wenn du die auch übernimmst, kannst du das userReadings so modifizieren:

connection_uptime {
    my  $resp = fhem("get $name tr064Command WANIPConnection:1 wanipconnection1 getInfo",1);
        $resp =~/'NewUptime' => '(.*)'/;
    return timediff2str($1);
},


Als Resultat (Ausschnitt aus list):
2019-01-31 07:51:28   connection_uptime 47 Tage, 04 Stunden, 15 Minuten, 05 Sekunden

no_Legend

Zitat von: Christoph Morrison am 31 Januar 2019, 07:53:01
Korrekt, NewUptime enthält als Wert die Sekunden seit der letzten neu hergestellten Verbindung.
Du bekommst das komplette Entity so:

get <fritzbox> tr064Command WANIPConnection:1 wanipconnection1 getInfo

Zurück liefert das dann (bei mir):

Service='WANIPConnection:1'   Control='wanipconnection1'   Action='getInfo'
----------------------------------------------------------------------
$VAR1 = {
          'GetInfoResponse' => {
                               'NewName' => 'internet',
                               'NewEnable' => '1',
                               'NewLastConnectionError' => 'ERROR_NONE',
                               'NewNATEnabled' => '1',
                               'NewExternalIPAddress' => '<anonymous>',
                               'NewDNSOverrideAllowed' => '1',
                               'NewMACAddress' => '<anonymous>',
                               'NewConnectionStatus' => 'Connected',
                               'NewDNSEnabled' => '1',
                               'NewRSIPAvailable' => '0',
                               'NewRouteProtocolRx' => 'Off',
                               'NewPossibleConnectionTypes' => 'IP_Routed, IP_Bridged',
                               'NewConnectionType' => 'IP_Routed',
                               'NewConnectionTrigger' => 'OnDemand',
                               'NewDNSServers' => '<anonymous>',
                               'NewUptime' => '4075276'
                             }
        };


Der letzte Wert interessiert uns. Wir haben es jetzt aber noch nicht als Reading. Das geht über userReadings:

connection_uptime {
    my  $resp = fhem("get $name tr064Command WANIPConnection:1 wanipconnection1 getInfo",1);
        $resp =~/'NewUptime' => '(.*)'/;
    return $1;
},


Im Reading connection_uptime liegt dann der aktuelle Wert in Sekunden.

Ich habe in meiner 99_myUtils.pm noch eine Funktion liegen, die mir Sekundenwerte in eine textuelle Zeitdifferenz konvertiert:

sub timediff2str($)
{
    my $s = shift;

    return sprintf ":%02d", $s if $s < 60;

    my $m = $s / 60; $s = $s % 60;
    return sprintf "%02d:%02d", $m, $s if $m < 60;

    my $h = $m /  60; $m %= 60;
    return sprintf "%02d:%02d:%02d", $h, $m, $s if $h < 24;

    my $d = $h / 24; $h %= 24;
    return sprintf "%d Tage, %02d Stunden, %02d Minuten, %02d Sekunden", $d, $h, $m, $s;
}


Wenn du die auch übernimmst, kannst du das userReadings so modifizieren:

connection_uptime {
    my  $resp = fhem("get $name tr064Command WANIPConnection:1 wanipconnection1 getInfo",1);
        $resp =~/'NewUptime' => '(.*)'/;
    return timediff2str($1);
},


Als Resultat (Ausschnitt aus list):
2019-01-31 07:51:28   connection_uptime 47 Tage, 04 Stunden, 15 Minuten, 05 Sekunden

Danke Christoph

Probiere es gleich aus.

Danke und Gruß Robert
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.

loescher

Hi!

Nur noch als Ergänzung:
Ich hatte bereits den Fall, dass die DSL Leitung funktioniert, also die FB "meint" dass Internet da ist, es aber trotzdem nicht geht. (Problem beim Provider...)
Solche Fälle deckt auch folgendes simples Monitoring auf:

define Internet PRESENCE lan-ping 8.8.8.8 60
attr Internet eventMap present:online absent:offline
attr Internet event-on-change-reading .*


Und dann das ganze noch als Graph, dann sieht man gleich die tägliche Verfügbarkeit  :)

LG,
Stephan.

Christoph Morrison

Zitat von: loescher am 31 Januar 2019, 21:11:11
Nur noch als Ergänzung:
Ich hatte bereits den Fall, dass die DSL Leitung funktioniert, also die FB "meint" dass Internet da ist, es aber trotzdem nicht geht. (Problem beim Provider...)

Das prinzipiell Vorgehen verfolge ich auch, aber so hast du vor allem eine Überwachung ob der DNS-Server von Google verfügbar ist oder nicht und nicht ob dein Uplink funktioniert. Dazu musst du mehrere Endpunkte anpingen und daraus dann ein Korrelat bilden. Ich frage einfach mehrere verschiedene Endpunkte ab und wenn mehr als x nicht erreichbar sind (oder die NewConnectionStatus der Fritzbox schlicht keine Verbindung meldet), dann bin ich vermutlich offline (und schalte mal die ganzen Remote-API ab; Withings, HTTPMOD und sowas).

no_Legend

Hi,

ich grad das Thema noch mal aus.
Ich hab mal eine Frage, ich bekomme es nicht hin, zwei fritzboxen abzufragen.
Wenn ich die FBs einzeln von Hand abfrage funktioniert es aber.

Ich benutze bei beiden Fritz!Boxen das gleiche Script.

Hat da jemand eine Idee zu?

Danke und Gruß Robert
Docker FHEM immer aktuell,4x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
Homematic, Shelly, Tasmota, MQTT, Unifi Network usw.