FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: accessburn am 17 April 2018, 16:33:07

Titel: [gelöst] Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 17 April 2018, 16:33:07
([+00:00:30] and [FritzBox3:box_ipExtern] ne "-") (setreading dummy_internetausfall logEntry 1) DOELSE (setreading dummy_internetausfall logEntry 0)

So ziehe ich mir die externe IP raus, schreibe sie wie eben in einem anderen Beitrag erfragt in einen Dummy und erstelle dann ein Plot draus.
Ist an dem DOIF etwas falsch oder kann das tatsächlich sein das ich so viele Verbindungsabbrüche (siehe Anhang) habe?
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: dkreutz am 17 April 2018, 19:36:01
Deckt sich das denn mit dem Systemlog der Fritzbox?
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 17 April 2018, 19:50:36
Ich denke Du hast einen gewaltigen Denkfehler in Deiner Vorgehensweise.

Du machst das mit dem DOIF völlig asynchron mit der Übertragung der Readings der Fritzbox. Da kann nach dem Zufallsprinzip wahrscheinlich alles rauskommen. Ich weiß nicht ob die Readings überschrieben oder temporär gelöscht werden. Ich kann das zumindest mit einem Test (deine DEF) genauso nachvollziehen.

Schau Dir mal im Event Monitor an was da passiert! Du triggerst durch Zeit und Fritzbox reading!
Im Abstand von 1 minute passiert genau dies:
Zitat2018-04-17_19:54:01 dummy_internetausfall logEntry: 0
2018-04-17_19:54:19 dummy_internetausfall logEntry: 1

Mach doch einfach ein userReadings wie hier ->
https://forum.fhem.de/index.php/topic,87065.msg794989.html#msg794989

Oder lass den teil einfach weg: [+00:00:30] and

Gruß Otto

Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 17 April 2018, 21:42:43
Du meinst einfach das DOIF auf eine Veränderung triggern lassen anstatt auf zeitbassierend?
Muss dann auch das "do always" raus?
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 17 April 2018, 22:09:04
Ich würde sagen: Ja  ;)
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 07:06:28
Okay, Plot erstellen fällt dann wohl flach, denn der letzte Eintrag ist dann schon von gestern Abend.
Kann man das kompensieren bei dieser Methode?
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 09:47:41
Moin,
Ich habe gestern mal beide Varianten in meine FB7412 (Namen bei Code Übernahme an den Aktuellen anpassen!) als userReadings eingetragen:
attr FB7412 userReadings online {(ReadingsVal($name,"box_ipExtern", "") eq "-") ? 0:1}, onlineB {ReadingsVal($name,"box_ipExtern", "") ne "-"}
onlineB ist die sparsamste Variante und liefert den direkten booleschen Wert, d.h. wahr (1) wenn die Box online ist und falsch (undef -> nix) wenn die Box offline ist.
online liefert 1 und 0 - was sowohl als Zahl als auch direkt wahr/falsch auswertbar ist. Ich würde diese Variante als universeller bevorzugen.

Wenn Du einen Plot erzeugen willst, kannst Du in der Frequenz Deiner FB Abfrage (INTERVAL) einen Eintrag im FileLog deiner Wahl erzeugen und dies auch als Plot darstellen.
Falls Du (wie ich)attr FB7412 event-on-change-reading .* gesetzt hast kann Du mitattr FB7412 event-on-update-reading onlinedie kontinuierliche Erzeugung der Werte im Log für das eine Reading wieder aktivieren.

Um mit einem notify darauf zu reagieren wäre event-on-update-reading dann allerdings kontraproduktiv! Wenn man beides will gibt es sicher viele Varianten. Spontane Idee: einfach zwei userReadings machen.

Edit: zur Vollständigkeit noch das FileLog
define FileLog_FBonline FileLog ./log/FBonline-%Y-%m.log FB7412:online.*


Edit2: mit einem DOIF kann man direkt reagieren, die Eigenschaft vom DOIF erzeugt dann keine erneute Reaktion bei wiederholtem Event
define di_FBonline DOIF ([FB7412:online])(<Code für das Internet ist wieder da>) DOELSE (<Code für das Internet ist gerade weg>)

Gruß Otto

Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 11:45:51
Zitat von: Otto123 am 18 April 2018, 09:47:41
attr FB7412 online userReadings {(ReadingsVal($name,"box_ipExtern", "") eq "-") ? 0:1}, onlineB {ReadingsVal($name,"box_ipExtern", "") ne "-"}

Kann es sein das das sich da ein Fehler eingeschlichen hat?
ZitatFritzBox3: unknown attribute online. Type 'attr FritzBox3 ?' for a detailed list.

Ich kann es nicht so ganz zurückverfolgen. Entweder ist "online" und "userReadings" vertauscht, oder ich check es nicht  ;D


EDIT:
Hab jetzt zwei neue Readings in der FB, das "online" und das "onlineB". Auch dein Filelog hab ich neu angelegt. Es bleibt jedoch leer.
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 12:06:42
Ja sorry: vertauscht, ich habe die DEF kopiert und wollte es dann noch "schön" machen. Ich habe den Post geändert.  :-[

In dem FileLog musst Du natürlich Deinen FB Namen eintragen
FB7412:online.* -> FritzBox3:online.*

Und das FritzBox3 Device muss natürlich regelmäßig die Events liefern - sonst wird nicht geloggt.
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 12:10:25
Ist eingetragen:

Internals:
   CFGFN     
   DEF        /media/usbstick/FileLog_FBonline-%Y-%m.log FritzBox3:online.*
   NAME       FileLog_FBonline
   NOTIFYDEV  FritzBox3
   NR         27353
   NTFY_ORDER 50-FileLog_FBonline
   REGEXP     FritzBox3:online.*
   STATE      active
   TYPE       FileLog
   currentlogfile /media/usbstick/FileLog_FBonline-2018-04.log
   logfile    /media/usbstick/FileLog_FBonline-%Y-%m.log
Attributes:
   group      FritzBox
   room       FritzBox


FritzBox (gekürzt):
Internals:
   APICHECKED 1
   CHANGED   
   DEF        192.168.178.1
   HOST       192.168.178.1
   INTERVAL   300
   LUAQUERY   1
   M3U_LOCAL  /opt/fhem//www/images/FritzBox3.m3u
   M3U_URL    unknown
   MODEL      FRITZ!Box 7362 SL (UI)
   NAME       FritzBox3
   NR         239
   REMOTE     1
   SECPORT    49443
   STATE      Anrufbeantworter: 0 Nachrichten
   TELNET     0
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   READINGS:
     2018-04-18 12:07:10   online          1
     2018-04-18 12:07:10   onlineB         1
Attributes:
   alias      Fritzbox WLan
   allowTR064Command 1
   event-on-change-reading online
   group      FritzBox
   icon       it_router
   room       FritzBox
   stateFormat Anrufbeantworter: tam1_newMsg Nachrichten
   userReadings online {(ReadingsVal($name,"box_ipExtern", "") eq "-") ? 0:1}, onlineB {ReadingsVal($name,"box_ipExtern", "") ne "-"}
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 12:12:39
Da hat sich jetzt bei Dir der Fehler eingeschlichen:
event-on-change-reading online

In deinem Fall diese Attribute einfach löschen  ;)
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 12:24:52
Ah, dann hab ich das falsch verstanden. Ich dachte anlegen :D
Jetzt hab ich nach einem "set update" auch etwas drin stehen:
Zitat2018-04-18_12:21:48 FritzBox3 online: 1
2018-04-18_12:21:48 FritzBox3 onlineB: 1

Das Fritzboxupdate läuft jetzt ohne das event-on-change-reading aber nicht selbstständig, oder?
Denn dieses kontinuierliche schreiben in das Log bleibt aus.

EDIT:
Ah, doch, hab INTERVAL vergessen. Ist 300 ne gute Zeit oder empfiehlst du etwas mehr oder weniger?
In meinem Fall geht es um ständige Abbrüche die ich Protokollieren möchte. 300 Sekunden finde ich dann etwas zu viel, in der Zeit kann das Netz x-mal weg und wieder da sein.
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 12:42:27
Minimum ist eine Minute sinnvoll, auf keinen Fall kürzer!

Die Frage ist aber wie schnell die FB überhaupt den Ausfall ermittelt. Die nächtliche Zwangstrennung hat bei mir letzte Nacht keinen Event erzeugt!
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 12:44:00
Zitat von: Otto123 am 18 April 2018, 12:42:27
Minimum ist eine Minute sinnvoll, auf keinen Fall kürzer!

Die Frage ist aber wie schnell die FB überhaupt den Ausfall ermittelt. Die nächtliche Zwangstrennung hat bei mir letzte Nacht keinen Event erzeugt!

Okay, und bei welchem Takt war das? Ein Reconnect dauert bei mir gute 60 Sekunden wenn ich die Hammer-Meisel-Stecker-aus-der-Dose-zieh-Methode anwende.
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 12:49:18
Ich habe derzeit 60 sec in der Abfrage. Aber was die Zwangstrennung genau macht weiß ich nicht, ich denke die ist relativ kurz.

Wenn Du sagst es dauert 60 sec. dann sollte man die FB vielleicht gar nicht öfter als 120 sec abfragen. 
Titel: Antw:Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: accessburn am 18 April 2018, 13:21:16
Okay, hab alles angepasst und läuft aktuell, ich beobachte das mal ein oder zwei Tage.

Vielen Dank für deine vorzügliche Hilfe, immer brav mit Erklärung und nicht einfach nur Code hingerotzt!
Danke schön  :)
Titel: Antw:[gelöst] Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Wernieman am 18 April 2018, 14:42:57
Die Box setzt (meines Wissens) die IP auch nach einem Abbuch nicht sofort auf 0, sondern probiert erst ein reconnect und dabei eventuell wird die IP 0. Für die Zwangstrennung, welche relativ schnell gehen sollte, also nicht gerade optimal. Da müste man auch auf IP Änderungen trickern (Weiß nur aktuell auf die schnelle nicht wie)
Titel: Antw:[gelöst] Fritzboxstatus abfragen und in Log schreiben - Verbindungsabbrüche
Beitrag von: Otto123 am 18 April 2018, 21:32:58
Hallo Werner,

ja die Zwangstrennung ist ja an sich gar nicht so interessant. Stecker raus wird zuverlässig erkannt (bei mir).

Internetausfall ist ja irgendwas komplexeres, da ist sicher "Alles" möglich.

Die Frage ist eben wirklich, was dann genau das Kriterium ist, im Zweifelsfall die Erreichbarkeit einer Adresse im Internet die garantiert online ist  ;)

Aber wenn es bei accessburn häufiger ist, schaun wir doch mal was raus kommt.

Schönen Abend
Otto