[gelöst] Fritzbox Log auswerten und für ausgewählten Eintrag MSG schicken

Begonnen von RalfRog, 20 März 2023, 15:43:59

Vorheriges Thema - Nächstes Thema

RalfRog

Edit 26.03.2023: auf Basis dieses Beitrags  ist ein Codeschnipsel https://forum.fhem.de/index.php?topic=132856.0 entstanden.

Vorbemerkung
Ich hatte mir bisher mit Hilfe der wöchentlichen Statusmail beim Inhalt "Anmeldung gescheitert" per Mailregel eine Desktopbenachrichtgung aufpoppen lassen.
Die Mail bzw. Loginfo darin dann zu suchen ist eher lästig und hat auch bis zu eine Woche Verzögerung.

Aufgrund der erweiterten Möglichkeiten mit dem Modul 72_FRITZBOX.pm und den Kommandos "get fritzbox luaData" oder "get fritzbox luaquery" kann man den Inhalt des Logfiles erhalten (siehe 2. Code-Abschnitt) und kann den String auf das Vorhandensein eines bestimmen Textes prüfen. Das funktioniert soweit ist aber aus meiner Sicht sehr umständlich wenn mehrere Dinge wie Meldung und zusätzlich Datum gefunden werden sollen.

Mein erster Wurf war:
my $loginfo = fhem("get Fritzbox luaQuery logger:status/log_separate/list(zeit,meldung)",1);
   $loginfo =~/Anmeldung des Benutzers (.*) an der.*IP-Adresse (.*) gescheitert.*falsches Kennwort/;
   fhem("msg push -1 IntruderCheck letzter Eintrag: $1 - $2",1);

Idee

Daten, Beispiel:
Result of data = 'xhr' => '1'
'lang' => 'de'
'page' => 'log'
'xhrId' => 'log'
'filter' => 'sys'
'useajax' => '1'
'no_sidrenew' => ''

----------------------------------------------------------------------
$VAR1 = {
          'data' => {
                      'wlan' => bless( do{\(my $o = 0)}, 'JSON::PP::Boolean' ),
                      'log' => [
                                 {
                                   'msg' => "Anmeldung an der FRITZ!Box-Benutzeroberfl\x{c3}\x{a4}che von IP-Adresse 2001:1111:2222::1111:2222:3333:4444.",
                                   'nohelp' => 0,
                                   'group' => 'sys',
                                   'date' => '18.03.23',
                                   'helplink' => '/help/help.lua?sid=a904ec8b9477e735&helppage=hilfe_syslog_500.html',
                                   'time' => '12:43:42',
                                   'id' => 500
                                 },
                                 {
                                   'group' => 'sys',
                                   'nohelp' => 0,
                                   'msg' => "MyFRITZ! Fehler: Der MyFRITZ!-Name wurde erfolgreich aktualisiert, anschlie\x{c3}\x{9f}end trat jedoch ein Fehler bei der DNS-Aufl\x{c3}\x{b6}sung auf.",
                                   'helplink' => '/help/help.lua?sid=a904ec8b9477e735&helppage=hilfe_syslog_535.html',
                                   'date' => '18.03.23',
                                   'time' => '11:45:32',
                                   'id' => 535
                                 },
                                 {
                                   'group' => 'sys',
                                   'nohelp' => 0,
                                   'msg' => 'Verbindung zum Online-Speicher hergestellt.',
                                   'helplink' => '/help/help.lua?sid=a904ec8b9477e735&helppage=hilfe_syslog_3330.html',
                                   'date' => '18.03.23',
                                   'time' => '11:44:00',
                                   'id' => 3330
                                 },
                                 {
                                   'msg' => 'Verbindung zum Online-Speicher beendet.',
                                   'group' => 'sys',
                                   'nohelp' => 0,
                                   'helplink' => '/help/help.lua?sid=a904ec8b9477e735&helppage=hilfe_syslog_3331.html',
                                   'date' => '18.03.23',
                                   'time' => '11:39:11',
                                   'id' => 3331
                                 }
                               ],
                      'filter' => 'sys',
                      'wlanGuestPushmail' => bless( do{\(my $o = 1)}, 'JSON::PP::Boolean' ),
                      'show' => {
                                  'usb' => $VAR1->{'data'}{'wlanGuestPushmail'},
                                  'fon' => $VAR1->{'data'}{'wlanGuestPushmail'},
                                  'wlan' => {
                                              'has_wpa3_support' => $VAR1->{'data'}{'wlan'},
                                              'has_wpa2_support' => $VAR1->{'data'}{'wlanGuestPushmail'}
                                            },
                                  'sys' => $VAR1->{'data'}{'wlanGuestPushmail'},
                                  'net' => $VAR1->{'data'}{'wlanGuestPushmail'},
                                  'all' => $VAR1->{'data'}{'wlanGuestPushmail'}
                                }
                    },
          'timeTillLogout' => '1184',
          'time' => [],
          'hide' => {
                      'provServ' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'rrd' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'dectRdio' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'liveTv' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'mobile' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'ssoSet' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'liveImg' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'rss' => $VAR1->{'data'}{'wlanGuestPushmail'},
                      'dectMail' => $VAR1->{'data'}{'wlanGuestPushmail'}
                    },
          'pid' => 'log',
          'sid' => 'a904ec8b9477e735'
        };

Die Idee war darin den Teil "log[...{viele},{Daten}...]," in einem  Array von Hashes zu speichern um leicht auf die Inhalte wie "time" oder "date" der einzelnen Logeinträge zugreifen zu können (nachdem ich als Perlnovize erstmal versucht habe Scalare, Arrays, Hashes Zugriff und Referenzen ansatzweise zu verstehen).

Viel Zeit habe ich gebraucht um tatsächlich ein Array von Hashes zu erhalten. Zunächst haben alle Versuche neben den vielen Fehlern zu einem Array von Strings geführt. Damit kommt man nicht einzeln an die Werte wie "time" oder "date" etc.. Letzlich führte die Funktion "eval" zu Ziel.

... und die Lösung

Sub in "99_myUtils.pm"  ToDo ==> es fehlt noch "log3" zu nutzen und die Variable $name zu übergeben

Das funktioniert! Meine Frage: ist der Code ok oder Murks?
sub Intruder {
    my $logref; # später die Array-Referenz für das komplette LOG
    my $idx;    # index Zähler um String schneiden
    my $resp;   # für Zwischenwerte und Return
    my $resp1;  # für Zwischenwerte und Return
    my $resp2;  # für Zwischenwerte und Return
    my $loginfo = fhem("get fritzbox luaData xhr 1 lang de page log xhrId log filter sys useajax 1 no_sidrenew nop",1);

# Anfang bis 'log' => [ abschneiden
    $idx = index($loginfo,"'log' => [");
    $loginfo = substr($loginfo,$idx+8);

# keine Ahnung ob es nützt viel Text aus dem String zu löschen, oder kontraproduktiv da zu viel Rechenzeit
    $loginfo =~ s/'helplink' =>.*?html',?//sg;  # Zeilen mit helplink "löschen" durch ersetzen mit nichts

# Vorsicht!! da mir unklar ist ob das "\x{c3}\x{a4}" später Probleme im String verursacht
    $loginfo =~ s/\\x\{c3\}\\x\{a4\}/ae/sg;     # alle Zeilen mit ä => \x{c3}\x{a4} durch ae ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{9f\}/ss/sg;     # alle Zeilen mit ß => \x{c3}\x{9f} durch ss ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{b6\}/oe/sg;     # alle Zeilen mit ö => \x{c3}\x{b6} durch oe ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{bc\}/ue/sg;     # alle Zeilen mit ü => \x{c3}\x{bc} durch ue ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{84\}/Ae/sg;     # alle Zeilen mit Ä => \x{c3}\x{84} durch Ae ersetzen

# Ende nach Logeinträgen abschneiden
    $idx = index($loginfo,"],");
    $loginfo = substr($loginfo,0,$idx+1);

# Array aus Hashes bilden
    $logref = eval $loginfo; # hier entsteht die Referenz auf das Array
    $idx = @{$logref};       # Anzahl der Elemente: @-> dereferenziert das Array
    Log 3,"Log:System enthält $idx Eintraege";

############################
######## Ab hier Auswertung auf bestimmte Einträge
### Variablendef für die Auswerung
my $lst_intrud_tim = ReadingsVal("FritzIntruder","LastIntruderTime","");

    foreach $resp (@{$logref}) {
# Debug $resp -> {id};
            if ($resp -> {id} == 505) {           # 505 User und falsches Kennwort
                $resp1 = ($resp -> {date}."_".$resp -> {time});
# Debug $lst_intrud_tim;
# Debug $resp1;
                if ($lst_intrud_tim ne $resp1) {  # wenn die Zeit ungleich dann Daten schreiben und Schluss
                    $resp2 = ($resp -> {msg});
                    fhem("setreading FritzIntruder LastIntruderTime $resp1",1);
                    fhem("setreading FritzIntruder LastIntruder $resp2",1);
                    fhem("msg push -1 IntruderCheck letzter Eintrag: $resp2",1);
                    Log 3,"Log:System    Zeit: $resp1";
                    Log 3,"Log:System Meldung: $resp2";
                    return;                    } 

                else {                            # dann war die Zeit gleich, nix in Readings schreiben und auch Schluss
                    Log 3,"Log:System identische Zeit/Meldung, kein Update der Readings";                     
                    return;}

                Log 3,"Log:System kein User-Anmeldeversuch mit falschem Passwort";                   }       


            else {}                               # Prüfung auf andere ID weitere Tests dann aber mit elsif

                               }

return;
# return $idx;

   }

Problem

Im Log sehe ich ab und zu Errors 2/3 der Aufrufe laufen durch 1/3 bringt den Fehler.

2023.03.20 03:59:10.678 3: Log:System enthält 1588 Eintraege
2023.03.20 03:59:10.680 3: Log:System identische Zeit/Meldung, kein Update der Readings
2023.03.20 04:59:10.702 3: Log:System enthält 1588 Eintraege
2023.03.20 04:59:10.703 3: Log:System identische Zeit/Meldung, kein Update der Readings
2023.03.20 05:59:10.405 1: ERROR evaluating my $SELF=   $evalSpecials->{'%SELF'};{Intruder}: Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtils.pm line 86.

2023.03.20 05:59:10.407 3: FritzIntruder: Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtils.pm line 86.

2023.03.20 06:59:10.983 3: Log:System enthält 1588 Eintraege
2023.03.20 06:59:10.985 3: Log:System identische Zeit/Meldung, kein Update der Readings
2023.03.20 07:59:10.766 3: Log:System enthält 1588 Eintraege
2023.03.20 07:59:10.768 3: Log:System identische Zeit/Meldung, kein Update der Readings
2023.03.20 08:56:49.266 1: ERROR evaluating my $SELF=   $evalSpecials->{'%SELF'};{Intruder}: Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtils.pm line 86.

2023.03.20 08:56:49.267 3: FritzIntruder: Can't use an undefined value as an ARRAY reference at ./FHEM/99_myUtils.pm line 86.

Line 86 ist:
$idx = @{$logref};      # Anzahl der Elemente: @-> dereferenziert das Array
Aber was ist der undef. Wert für die ARRAY reference? $logref? Warum nur manchmal?


Wer kann was zum Code und zum Eroor sagen?

Gruß und Dank Ralf

FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Hallo Ralf,

am einfachsten ist es wohl ich baue in das get einen Parameter ein, der Dir das Ergebnis als hash zurück gibt. Dann ist es einfacher weiter zu verarbeiten.

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

RalfRog

#2
Da hast du wohl recht...  ;D  wäre super!

Ich war von ein paar Wochen schon mal in deinem Support-Thread auf dem Trip und hatte da irgendwas von JSON geschrieben...
Das was der Startpunkt für meine erste Versuche/Variante... :))

Wenn wir hier gerade bei Erweiterung für LOG sind: man kann im Logging ein/ausschalten, dass erweiterte man WLAN Info loggen will bzw. wählen ob man alles oder Teile sehen will.
Lt. Browser Tools gibts:
Zitatget <name> luaData:
xhr 1 filter wlan wlan off lang de page log                                                  -> off oder on erweitertes  WLAN-Logging
xhr 1 lang de page log xhrId log filter all useajax 1 no_sidrenew nop      -> Log-Einträge Alle
xhr 1 lang de page log xhrId log filter sys useajax 1 no_sidrenew nop      -> Log-Einträge System
xhr 1 lang de page log xhrId log filter wlan useajax 1 no_sidrenew nop   -> Log-Einträge WLAN
xhr 1 lang de page log xhrId log filter usb useajax 1 no_sidrenew nop    -> Log-Einträge USB
xhr 1 lang de page log xhrId log filter net useajax 1 no_sidrenew nop    -> Log-Einträge Internetverbindung
xhr 1 lang de page log xhrId log filter fon useajax 1 no_sidrenew nop    -> Log-Einträge USB

Ich glaube per luaData kommen die besseren Logdaten als mit  luaQuery (logger:status/log_separate/list(time,msg,ref,type)
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 20 März 2023, 17:36:47Wenn wir hier gerade bei Erweiterung für LOG sind: man kann im Logging ein/ausschalten, dass erweiterte man WLAN Info loggen will bzw. wählen ob man alles oder Teile sehen will.
Lt. Browser Tools gibts:
Zitatget <name> luaData:
xhr 1 filter wlan wlan off lang de page log                                                  -> off oder on erweitertes  WLAN-Logging
xhr 1 lang de page log xhrId log filter all useajax 1 no_sidrenew nop      -> Log-Einträge Alle
xhr 1 lang de page log xhrId log filter sys useajax 1 no_sidrenew nop      -> Log-Einträge System
xhr 1 lang de page log xhrId log filter wlan useajax 1 no_sidrenew nop   -> Log-Einträge WLAN
xhr 1 lang de page log xhrId log filter usb useajax 1 no_sidrenew nop    -> Log-Einträge USB
xhr 1 lang de page log xhrId log filter net useajax 1 no_sidrenew nop    -> Log-Einträge Internetverbindung
xhr 1 lang de page log xhrId log filter fon useajax 1 no_sidrenew nop    -> Log-Einträge USB


Vorschlag:

get <fritzbox> fritzLog <hash | table> <auswahlliste>

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

RalfRog

Zitat von: JoWiemann am 20 März 2023, 21:18:38Vorschlag:
get <fritzbox> fritzLog <hash | table> <auswahlliste>

Sieht sehr praktikabel aus. Bin gespannt  ;D
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

#5
Hallo Ralf,

anbei eine erste Beta (07.50.10 Beta). Ich habe das Ganze non Blocking implementiert. Für Deine eigene Verarbeitung ist eine Sub in der 99_myUtils.pm vorgesehen:

sub myUtilsFritzLogExPost($$$) {
  my ($hash, $filter, $result) = @_;

  if(defined $result->{Error}) {
    FRITZBOX_Log $hash, 2, "ERROR: fritzLogInfo: " . $result->{Error};
    return $result->{Error};
  }

  FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: \n" . Dumper $result;

  if ($filter eq "all") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: all";

  } elsif ($filter eq "sys") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: sys";

  } elsif ($filter eq "wlan") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: wlan";

  } elsif ($filter eq "usb") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: usb";

  } elsif ($filter eq "net") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: net";

  } elsif ($filter eq "fon") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: fon";

  } else {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: wrong filter";

  }

  return "done";

}

Mit dem Aufruf:
get <fritzbox> fritzLog hash <all | sys | wlan | usb | net | fon> wird eine data.lua Abfrage durchgeführt und das Ergebnis an die Sub myUtilsFritzLogExPost übergeben.

get <fritzbox> fritzLog table <all | sys | wlan | usb | net | fon> habe ich noch nicht implementiert.

Mit:
set <fritzbox> wlanLogExtended <on | off> kannst Du "Auch An- und Abmeldungen und erweiterte WLAN-Informationen protokollieren" steuern.

Da non Blocking erfolgt die Rückmeldung in den Readings:
fritzLogExPost = Status des Funktionsaufrufes myUtilsFritzLogExPost<br>
fritzLogInfo = Status der Log Informations Abfrage.

Die aktuelle Einstellung wird im Reading wlanLogEx hinterlegt.

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

RalfRog

#6
Reaktion kommt. Komme erst heut Abend dazu.
Super dein Codevorschlag... könnte aber vielleicht ne Frage verursachen  ::)


Öhhhh... war nicht gerade noch der Download da oder habe ich falsch geguckt?
Finde ihn nicht.

Wieder da  ;) HAst wohl gerade das Update auf 10a gemacht.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

RalfRog

#7
Ein erster Test  ;D

"Shutdown restart" bei disable = 1 der drei Devices  (VERSION 07.50.10a Beta)

Im FHEM Log eine Warning beim Hochlauf:
2023.03.21 17:44:00.375 1: PERL WARNING: "my" variable @webCmdArray masks earlier declaration in same scope at ./FHEM/72_FRITZBOX.pm line 3430, <$fh> line 59.

Nachdem Masterbox disable = 0 kommt eine weitere Warning
2023.03.21 17:46:21.051 3: FRITZBOX!0000 [fritzbox: API_Check_Run.1579] - INFO: Created m3u file './www/images/fritzbox.m3u'.
2023.03.21 17:46:33.319 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/72_FRITZBOX.pm line 2607.


Thema Logfunktion:
Aufruf get <name> fritzLog hash fon  => sieht gut aus, Info FHEM-Log ok. Beide Readings = done

Frage ins Blaue: wenn ich im Log die Rückgabewerte anschaue müsste der Zugriff auf die Daten so möglich sein:
Edit $hash{data}{log}[array-index 0 bis n]{msg} oder -> geht nicht
$result -> {data} -> {log} -> [array-index 0 bis n] -> {msg}  -> aber so, mal als Test per Debug auf index 4 ausgegeben.

Habe ich jetzt noch nicht eingebaut

Außerdem mal ins Unreine gesprochen:
  • mit der vorgegebenen Sub myUtilsFritzLogExPost kann man im Prinzip umgehen und direkt im AT oder Ähnlichem das get benutzen
  • wäre es andererseits sinnvoller ein get <name> fritzLog hash fon in der eigenen Sub (beliebiger eigener Name) aufzurufen um dann innerhalb der Sub den hash zurückgegeben zu bekommen. Dann ist man unabhängig vom vorgegebenen Namen.
    Bedeutet natürlich, dass das Ergebnis im Nirwana landet wenn man das get auf der Oberfläche aufruft


So ich muss nachher nochmal ein bischen weiterspielen  ;)

Jo, SUUUUPER vielen Dank!



FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 21 März 2023, 18:24:02wäre es andererseits sinnvoller ein get <name> fritzLog hash fon in der eigenen Sub (beliebiger eigener Name) aufzurufen um dann innerhalb der Sub den hash zurückgegeben zu bekommen. Dann ist man unabhängig vom vorgegebenen Namen.
Bedeutet natürlich, dass das Ergebnis im Nirwana landet wenn man das get auf der Oberfläche aufruft[/li][/list]

Dann musst Du Dich selber um das non Blocking kümmern. Bei non Blocking läuft ja die Abarbeitung asynchron zu den anderen Fhem Prozessen. Das Ergebnis muss ja dann irgendwo hin, wo es weiter verarbeitet werden kann. Die vorgegeben Sub wird im Moment einfach als Abzweig für die eigene Verarbeitung genutzt und zwar noch in der asynchronen Abarbeitung. Erst nach der Rückkehr wird der non Blocking Prozess ordnungsgemäß beendet.

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

#9
Zitat von: RalfRog am 21 März 2023, 18:24:02Ein erster Test  ;D

"Shutdown restart" bei disable = 1 der drei Devices  (VERSION 07.50.10a Beta)

Im FHEM Log eine Warning beim Hochlauf:
2023.03.21 17:44:00.375 1: PERL WARNING: "my" variable @webCmdArray masks earlier declaration in same scope at ./FHEM/72_FRITZBOX.pm line 3430, <$fh> line 59.

Nachdem Masterbox disable = 0 kommt eine weitere Warning
2023.03.21 17:46:21.051 3: FRITZBOX!0000 [fritzbox: API_Check_Run.1579] - INFO: Created m3u file './www/images/fritzbox.m3u'.
2023.03.21 17:46:33.319 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/72_FRITZBOX.pm line 2607.


Anbei eine neue Beta, wo Deine Findings behoben sind. Außerdem habe ich das Attribut fritzBoxIP wieder auf "auslaufend" gesetzt und einen entsprechenden Test beim Define auf gültigen DSN Namen eingebaut. Sofern das Attribut gesetzt ist erfolgt ein Hinweis las Internal INFO3.

Das get <fritzbox> fritzLog table ... ist jetzt auch hinterlegt.

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

RalfRog

Zitat von: JoWiemann am 21 März 2023, 19:43:51Dann musst Du Dich selber um das non Blocking kümmern. Bei non Blocking läuft ja die Abarbeitung asynchron zu den anderen Fhem Prozessen. Das Ergebnis muss ja dann irgendwo hin, wo es weiter verarbeitet werden kann. Die vorgegeben Sub wird im Moment einfach als Abzweig für die eigene Verarbeitung genutzt und zwar noch in der asynchronen Abarbeitung. Erst nach der Rückkehr wird der non Blocking Prozess ordnungsgemäß beendet.

Grüße Jörg

Da überwiegen wohl die Vorteile deutlich. Mir wären diese Feinheiten nicht wirklich klar - und das geht vermitlich vielen so.

Im Text zum GET ist ja deutlich genannt wir die Funktion heisst die aufgerufen wird.

Allerdings denke ich, dass dein Code-Teil auf jeden Fall was für das Wiki wäre.
Als Ungeübter scheitert man vermutlich sonst daran was man denn so in die SUB reinschreiben muss.
Ich hatte da jetzt hier im thread einen unsagbaren Vorteil. ;) Ich würde sonst definitv daran scheitern - einfach weil das Wissen/Erfahrung fehlt.

Schönen Abend
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 21 März 2023, 21:44:24Da überwiegen wohl die Vorteile deutlich. Mir wären diese Feinheiten nicht wirklich klar - und das geht vermitlich vielen so.

Im Text zum GET ist ja deutlich genannt wir die Funktion heisst die aufgerufen wird.

Allerdings denke ich, dass dein Code-Teil auf jeden Fall was für das Wiki wäre.
Als Ungeübter scheitert man vermutlich sonst daran was man denn so in die SUB reinschreiben muss.
Ich hatte da jetzt hier im thread einen unsagbaren Vorteil. ;) Ich würde sonst definitv daran scheitern - einfach weil das Wissen/Erfahrung fehlt.

Schönen Abend

Hallo Ralf,

ja, Wiki ist auch noch so ein offenes ToDo. Würde beim nächsten Einchecken dann das Wiki mal pflegen und auch den Beispiel Code hinterlegen.

Hoffe jetzt erst einmal, dass Du Deine Use Cases damit abbilden kannst.

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

RalfRog

Jo ja echt genial

Die tolle Arbeit der vielen letzten Wochen war für mich fast nur nice to see or have.
Meine bisherige Automation war nächtlich ein Teil der WLANs an-/abzuschalten und in der FTUI Oberfläche einen Button um das Gast-WLAN zu aktivieren.

Ein paar interessante (besser ausgewählte) Daten zeitnah per Push-Meldung aus dem Fritz-Log zu erhalten ist für mich echter Mehrwert!!!

Gruß Ralf
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

RalfRog

#13
Tests mit VERSION  07.50.10c Beta

  • Ausführen shutdown restart mit MasterBox disable = 0 (also aktiv)
2023.03.21 22:22:27.494 0: Server shutdown
2023.03.21 22:22:33 1: PERL WARNING: Useless use of a constant (2) in void context at ./FHEM/99_myUtils.pm line 27.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of concatenation (.) or string in void context at ./FHEM/99_myUtils.pm line 27.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 32.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of concatenation (.) or string in void context at ./FHEM/99_myUtils.pm line 32.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 37.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: all") in void context at ./FHEM/99_myUtils.pm line 37.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 40.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: sys") in void context at ./FHEM/99_myUtils.pm line 40.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 43.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: wlan") in void context at ./FHEM/99_myUtils.pm line 43.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 46.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: usb") in void context at ./FHEM/99_myUtils.pm line 46.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 49.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: net") in void context at ./FHEM/99_myUtils.pm line 49.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 52.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: fon") in void context at ./FHEM/99_myUtils.pm line 52.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant (3) in void context at ./FHEM/99_myUtils.pm line 55.
2023.03.21 22:22:34 1: PERL WARNING: Useless use of a constant ("INFO: fritzLogInfo: wrong filter") in void context at ./FHEM/99_myUtils.pm line 55.
2023.03.21 22:22:34.699 1: Including fhem.cfg
=> es werden praktisch alle Zeilen mit FRITZBOX_Log ausgespuckt
=> keine weiteren Medungen beim restlichen Hochlauf


  • Hinweistext in "get <name> fritzLog" Ü falsch codiert
    => R�ckmeldung in den Readings


  • Ausführen get <name> fritzLog table fon
    => Tabelle ist da (fon schön kurz) mit einer Warning
2023.03.21 22:28:17.158 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/72_FRITZBOX.pm line 5329.=> Nachfolgender Aufruf mit Parameter Sys (oder nochmals Fon) ist ohne weitere Warning


Um die Tabelle durch zu nummerieren nutzt du die Überschrift ID. Das ist gleichzeitig auch der key (Feld-Name) der Fehlernummer.
Wenn man einen bestimmten Fehler sucht nimmt man am besten die {'id'} als Suchkriterium.
Könnte man eventuell in der Tabelle falsch interpretieren.
=> Vorschlag: "blöd jetzt fällt mir nix Gescheites ein"


  • Aufruf get <name> fritzLog hash fon   => Error:
2023.03.21 22:41:54.642 3: FRITZBOX!7590 [fritzbox: Run_fritzloginfo.3481] - DEBUG: fritzlog -> fritzloginfo, hash, fon
2023.03.21 22:41:54.648 3: FRITZBOX!7590 [fritzbox: Run_fritzloginfo.3491] - DEBUG: data.lua:
xhr 1 lang de page log xhrId log filter fon useajax 1 no_sidrenew
2023.03.21 22:41:55.407 2: FRITZBOX!7590 [fritzbox: Run_fritzloginfo.3505] - ERROR: fritzLogExPost: Can't locate object method "FRITZBOX_Log" via package "fritzbox" (perhaps you forgot to load "fritzbox"?) at ./FHEM/99_myUtils.pm line 32.
=> wiederholt sich bei mehrfachem aufruf
=> Aaaaber wenn man die 99_myUtils.pm mit EditFiles aufruft und einfach wieder speichert funktioniert es danach
=> habe mal den Devicenamen geändert auf fritzzbox. (shutdown reboot). Der Fehler bleibt in der Meldung steht dann hier der neue Name via package "fritzzbox" (perhaps you forgot to load "fritzzbox"?)


Das kann ich nicht einordnen.
-> Wenn ich etwas anders mach soll lass es mich wissen.
Zumal ich beim neuerlichen Gegentest durch zurückspielen der 10aBeta im Gegensatz zum esten Versuch um 18.30 Uhr nun ähnliche Fehler wie jetzt bei der 10cBeta habe.

Zur Sicherheit hier mal die komplette 99_myUtils.pm habe aber nicht bewusst etwas geändert
##############################################
# $Id: myUtilsTemplate.pm 21509 2020-03-25 11:20:51Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.

package main;

use strict;
use warnings;
use POSIX;
use Blocking;

sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

# Enter you functions below _this_ line.


sub myUtilsFritzLogExPost($$$) {
  my ($hash, $filter, $result) = @_;

  if(defined $result->{Error}) {
    FRITZBOX_Log $hash, 2, "ERROR: fritzLogInfo: " . $result->{Error};
    return $result->{Error};
  }

  FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: \n" . Dumper $result;



  if ($filter eq "all") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: all";

  } elsif ($filter eq "sys") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: sys";

  } elsif ($filter eq "wlan") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: wlan";

  } elsif ($filter eq "usb") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: usb";

  } elsif ($filter eq "net") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: net";

  } elsif ($filter eq "fon") {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: fon";

  } else {
    FRITZBOX_Log $hash, 3, "INFO: fritzLogInfo: wrong filter";

  }



my $tstvar2 = $result -> {data} -> {log} -> [4] -> {msg};
Debug $tstvar2;


  return "done";

}


##### Zeile 55
#  log noch auf log3 anpassen, Variable $name nötig
#  Log auf Anmeldeversuche prüfen und TelegramNachricht schicken
sub Intruder {
    my $logref; # später die Array-Referenz für das komplette LOG
    my $idx;    # index Zähler um String schneiden
    my $resp;   # für Zwischenwerte und Return
    my $resp1;  # für Zwischenwerte und Return
    my $resp2;  # für Zwischenwerte und Return
    my $loginfo = fhem("get fritzbox luaData xhr 1 lang de page log xhrId log filter sys useajax 1 no_sidrenew nop",1);

# Anfang bis 'log' => [ abschneiden
    $idx = index($loginfo,"'log' => [");
    $loginfo = substr($loginfo,$idx+8);

# keine Ahnung ob es nützt viel Text aus dem String zu löschen, oder kontraproduktiv da zu viel Rechenzeit
    $loginfo =~ s/'helplink' =>.*?html',?//sg;  # Zeilen mit helplink "löschen" durch ersetzen mit nichts

# Vorsicht!! da mir unklar ist ob das "\x{c3}\x{a4}" später Probleme im String verursacht
    $loginfo =~ s/\\x\{c3\}\\x\{a4\}/ae/sg;     # alle Zeilen mit ä => \x{c3}\x{a4} durch ae ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{9f\}/ss/sg;     # alle Zeilen mit ß => \x{c3}\x{9f} durch ss ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{b6\}/oe/sg;     # alle Zeilen mit ö => \x{c3}\x{b6} durch oe ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{bc\}/ue/sg;     # alle Zeilen mit ü => \x{c3}\x{bc} durch ue ersetzen
    $loginfo =~ s/\\x\{c3\}\\x\{84\}/Ae/sg;     # alle Zeilen mit Ä => \x{c3}\x{84} durch Ae ersetzen

# Ende nach Logeinträgen abschneiden
    $idx = index($loginfo,"],");
    $loginfo = substr($loginfo,0,$idx+1);

# Array aus Hashes bilden   # Zeile 84
    $logref = eval ($loginfo); # hier entsteht die Referenz auf das Array
foreach my $i (1..20){my $ii = 2 *$i;}   # etwas Zeit verbrauchen
    $idx = @{$logref};       # Anzahl der Elemente: @-> dereferenziert das Array
    Log 3,"Log:System enthält $idx Eintraege";

############################ Zeile 90
######## Ab hier Auswertung auf bestimmte Einträge
### Variablendef für die Auswerung
my $lst_intrud_tim = ReadingsVal("FritzIntruder","LastIntruderTime","");

    foreach $resp (@{$logref}) {
# Debug $resp -> {id};
            if ($resp -> {id} == 505) {           # 505 User und falsches Kennwort
                $resp1 = ($resp -> {date}."_".$resp -> {time});
# Debug $lst_intrud_tim;
# Debug $resp1;
                if ($lst_intrud_tim ne $resp1) {  # wenn die Zeit ungleich dann Daten schreiben und Schluss
                    $resp2 = ($resp -> {msg});
                    fhem("setreading FritzIntruder LastIntruderTime $resp1",1);
                    fhem("setreading FritzIntruder LastIntruder $resp2",1);
                    fhem("msg push -1 IntruderCheck letzter Eintrag: $resp2",1);
                    Log 3,"Log:System    Zeit: $resp1";
                    Log 3,"Log:System Meldung: $resp2";
                    return;                    } 

                else {                            # dann war die Zeit gleich, nix in Readings schreiben und auch Schluss
                    Log 3,"Log:System identische Zeit/Meldung, kein Update der Readings";                     
                    return;}

                Log 3,"Log:System kein User-Anmeldeversuch mit falschem Passwort";                   }       


            else {}                               # Prüfung auf andere ID weitere Tests dann aber mit elsif

                               }

return;
# return $idx;

   }

#############
1;


FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

#14
Hallo Ralf,

das FRITZBOX_Log ist in der 99_myUtils.pm falsch. Bitte in Log3 abändern. War ein copy/paste Fehler.
FRITZBOX_Log ist ein Sub in 72_FRITZBOX.pm und nicht immer in der 99_myUtils bekannt.

Außerdem hatte ich nicht den $hash übergeben. Ist jetzt geändert.

sub myUtilsFritzLogExPost($$$) {
  my ($hash, $filter, $result) = @_;

  my $name = $hash->{NAME};

  if(defined $result->{Error}) {
    Log3 $name, 2, "ERROR: fritzLogInfo: " . $result->{Error};
    return $result->{Error};
  }

  Log3 $name, 3, "INFO: fritzLogInfo: \n" . Dumper $result;

  if ($filter eq "all") {
    Log3 $name, 3, "INFO: fritzLogInfo: all";

  } elsif ($filter eq "sys") {
    Log3 $name, 3, "INFO: fritzLogInfo: sys";

  } elsif ($filter eq "wlan") {
    Log3 $name, 3, "INFO: fritzLogInfo: wlan";

  } elsif ($filter eq "usb") {
    Log3 $name, 3, "INFO: fritzLogInfo: usb";

  } elsif ($filter eq "net") {
    Log3 $name, 3, "INFO: fritzLogInfo: net";

  } elsif ($filter eq "fon") {
    Log3 $name, 3, "INFO: fritzLogInfo: fon";

  } else {
    Log3 $name, 3, "INFO: fritzLogInfo: wrong filter";

  }

  return "done";
}

ID habe ich umgestellt auf id der Meldung. Der concatenation Fehler war Dummheit.

Grüße und im Anhang eine neue Beta.
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

RalfRog

#15
Hi neuer Test

Dass der Log3 dahin gehört hätte ich vielleicht selber drauf kommen könnnen. Mir fehlt einfach ein Gefühl für Perl und wo man ansetzt. Naja  ???

VERSION  07.50.10d Beta

  • shutdown restart
2023.03.22 12:53:15.193 0: Server shutdown
2023.03.22 12:53:20.861 1: Including fhem.cfg

2023.03.22 12:53:52.580 2: FRITZBOX!0000 [fritzzbox: Define.304] - The support for telnet and operation on a Fritz!Box has been discontinued. The functions are disabled.
2023.03.22 12:53:52.583 2: FRITZBOX!0000 [fritzzbox: Define.310] - The following attributes are not longer supported:
useGuiHack, ringWithIntern, defaultCallerName, allowTR064Command,
forceTelnetConnection, telnetUser, telnetTimeOut
Use deleteattr to delete from Attributes.

2023.03.22 12:53:52.861 2: FRITZBOX!0000 [fritzclient: Define.304] - The support for telnet and operation on a Fritz!Box has been discontinued. The functions are disabled.
2023.03.22 12:53:52.864 2: FRITZBOX!0000 [fritzclient: Define.310] - The following attributes are not longer supported:
useGuiHack, ringWithIntern, defaultCallerName, allowTR064Command,
forceTelnetConnection, telnetUser, telnetTimeOut
Use deleteattr to delete from Attributes.

2023.03.22 12:53:53.737 2: FRITZBOX!0000 [fritzkat: Define.304] - The support for telnet and operation on a Fritz!Box has been discontinued. The functions are disabled.
2023.03.22 12:53:53.740 2: FRITZBOX!0000 [fritzkat: Define.310] - The following attributes are not longer supported:
useGuiHack, ringWithIntern, defaultCallerName, allowTR064Command,
forceTelnetConnection, telnetUser, telnetTimeOut
Use deleteattr to delete from Attributes.

2023.03.22 12:53:59.474 1: Including ./log/fhem.save
2023.03.22 12:54:00.009 1: Messages collected while initializing FHEM:SecurityCheck:
  WEB is not password protected
  telnetPort is not password protected

Protect this FHEM installation by configuring the allowed device allowed
You can disable this message with attr global motd none

2023.03.22 12:55:03.291 0: Featurelevel: 6.2
2023.03.22 12:55:03.295 0: Server started with 23 defined entities (fhem.pl:27110/2023-01-23 perl:5.032001 os:linux user:fhem pid:1096)

2023.03.22 12:55:08.732 3: FRITZBOX!0000 [fritzzbox: API_Check_Run.1607] - INFO: Created m3u file './www/images/fritzzbox.m3u'.
nix wird angemeckert  :)

  • get <name> fritzLog hash fon
2023.03.22 12:56:10.551 3: FRITZBOX!7590 [fritzzbox: Run_fritzloginfo.3481] - DEBUG: fritzlog -> fritzloginfo, hash, fon
2023.03.22 12:56:10.558 3: FRITZBOX!7590 [fritzzbox: Run_fritzloginfo.3491] - DEBUG: data.lua:
xhr 1 lang de page log xhrId log filter fon useajax 1 no_sidrenew
2023.03.22 12:56:11.831 2: FRITZBOX!7590 [fritzzbox: Run_fritzloginfo.3505] - ERROR: fritzLogExPost: Can't call method "Dumper" on unblessed reference at ./FHEM/99_myUtils.pm line 34.
Nach einmal Edit 72_FRITZBOX.pm geht es.

Macht ein use Data::Dumper; Sinn?
Ja geht, habe es versucht - zumindest aus meiner Sicht funktioniertes dann auf Anhieb da Dumper bekannt ist.
Oder gehört das im Sinne eines ordentlichen Aufbaus der 72_FRITZBOX.pm woanders hin. Im Standard feht das use ja.


  • get <name> fritzLog table fon 
    => ID ist jetzt Fehlernummer = {'id'}, ich glaube das macht Sinn, die Tabelle ist ja zeitlich geordnet



FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 22 März 2023, 13:13:16Macht ein use Data::Dumper; Sinn?
Ja geht, habe es versucht - zumindest aus meiner Sicht funktioniertes dann auf Anhieb da Dumper bekannt ist.
Oder gehört das im Sinne eines ordentlichen Aufbaus der 72_FRITZBOX.pm woanders hin. Im Standard feht das use ja.

Ich werde das Beispiel nochmal überarbeiten. Es ist "nur" als Einstieg gedacht. Sozusagen für den, der gar keinen Anfang findet.

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

RalfRog

Nochmal einen dicken Daumen hoch für die Funktion get <name> fritzLog

Auch wenn wenn es hier im Bereich vielleicht leicht OT geraten ist, war es doch ein guter Einstieg.
Ich denke wenn das das Modul offiziell in die neue Version geht und meine Auswertung steht mach ich einen Beitrag in den Codeschnipseln für eine Auswertung auf z.B. 505 "fehlerhaften Anmeldeversuche".

Gruß Ralf

Zitat von: JoWiemann am 22 März 2023, 14:25:23...
Ich werde das Beispiel nochmal überarbeiten. Es ist "nur" als Einstieg gedacht. Sozusagen für den, der gar keinen Anfang findet.
...

Prima
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

#18
Hallo Ralf,

möchte Dich nicht ärgern. Habe in der angehängten Beta das Reading box_sys_LogLast und da ich die Daten sowieso habe auch noch box_wlan_LogLast implementiert. Sie enthalten das letzte SYS/WLAN-Ereignis mit ID Datum Uhrzeit: box_sys_LogLast 500 22.03.23 16:28:14 / box_wlan_LogLast 750 22.03.23 19:15:35

Damit können jetzt alle ohne Programmierung mit einem notify / DOIF darauf reagieren.

Folgende ID und Meldungen habe ich mal aufgelistet:
# 500 Anmeldung an der FRITZ!Box-Benutzeroberfläche von von IP-Adresse ...
# 501 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse ... gescheitert (falsches Kennwort).
# 504 Anmeldung des Benutzers FhemUser an der FRITZ!Box-Benutzeroberfläche von IP-Adresse ...
# 505 fehlerhafter Anmeldeversuch ???
# 506 Anmeldung einer App des Benutzers FhemUser von IP-Adresse
# 510 Anmeldung einer App mit unbekanntem Anmeldenamen von IP-Adresse ... gescheitert.
# 2364 Ein neues Gerät wurde an der FRITZ!Box angemeldet (Schnurlostelefon)
# 2358 Einstellungen wurden gesichert. Diese Änderung erfolgte von Ihrem Heimnetzgerät ... (IP-Adresse: ...)

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

RalfRog

Ne alles gut. Aktuell machst du das Meiste. Bin auch für ne gute und durchdachte Lösung.
Vermutlich habe ich morgen keine Zeit weil ich unterwege bin.
Reaktion daher vermutlich frühestens am Freitag.

Klingt aber gut. Hatte mir grob auch schon ein paar interessante IDs rausgesucht, deine Liste ist gut.
Prio 1
Der Grund für die Logauswertung, kommt bei fehlerhafter Anmeldung wenn externer HTTPS Zugang offen ist.
505 Anmeldung des Benutzers xx an der FRITZ!Box-Benutzeroberfläche von IP-Adresse yy gescheitert (falsches Kennwort)

Prio 2
501 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse yy gescheitert (falsches Kennwort)
503 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse yy gescheitert (ungültige Sitzungskennung). Zur Sicherheit werden
510 Anmeldung einer App mit unbekanntem Anmeldenamen von IP-Adresse yy gescheitert.

Prio3
689 WLAN-Anmeldung ist gescheitert : Die MAC-Adresse des WLAN-Geräts ist gesperrt. MAC-Adresse
692 WLAN-Anmeldung ist gescheitert : Verbindungsaufbau fehlgeschlagen. MAC-Adresse
705 WLAN-Gerät Anmeldung gescheitert (5 GHz): ungültiger WLAN-Schlüssel. MAC-Adresse
782 WLAN-Anmeldung ist gescheitert : Die erneute Anmeldung ist aufgrund aktiver "Unterstützung für geschützte Anmeldungen von WLAN-Geräten (PMF)

Nice to know
504 Anmeldung des Benutzers x an der FRITZ!Box-Benutzeroberfläche von IP-Adresse
506 Anmeldung einer App des Benutzers xx von IP-Adresse yy



ZitatReading box_sys_LogLast und da ich die Daten sowieso habe auch noch box_wlan_LogLast implementiert. Sie enthalten das letzte SYS/WLAN-Ereignis mit ID Datum Uhrzeit:

Mal schauen wie das ist und wie schnell das überschrieben wird. Aber ja man kann per notify natürlich auf spezielle Werte reagieren.
Ich habe aktuell wegen dem Testsystem mit Intervall 900 das Problem, dass ständig Anmeldungen geloggt werden (schicke deswegen dafür auch keine EMails mehr).

22.03.23 23:16:13 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse
22.03.23 23:09:54 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse  [80 Meldungen seit 22.03.23 18:24:47]
22.03.23 18:09:53 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse  [48 Meldungen seit 22.03.23 15:24:47]
22.03.23 15:09:53 Anmeldung an der FRITZ!Box-Benutzeroberfläche von IP-Adresse  [4 Meldungen seit 22.03.23 15:09:47]
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Hallo Ralf,

anbei eine neue Beta 07.50.10g. Sofern Du nichts mehr findest, würde ich diese Version gerne einchecken.

Danke und Grüße

Jörg

Anmerkungen:

Alle Readings, die eine Rückmeldung zu non Blocking Aufrufen geben, beginnen jetzt mit retStat_...

Sofern noch das Attribut fritzBoxIP gesetzt ist, wird das Define geändert und der Inhalt des Attributs als Parameter im Define gesetzt. Hierzu kommt dann eine Info in den Internals. Das Attribut wird dann gelöscht.

Ich habe die DefFn "FRITZBOX_Define" so geändert, dass ein neues Define nur mit IP/DNS Name funktioniert, das Laden einer alten Definition aber nicht abgebrochen wird.

Bei Angabe eine DNS Namen wird dieser auf Auflösbarkeit geprüft.

Die commandRef erweitert und nochmal auf Umlaute geprüft.

Die beiden neuen Readings: box_sysLogLast und box_wlan_LogLast sind jetzt auch dokumentiert.

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

RalfRog

Habe mal schnell ein paar Tests erledigen können und mich auf die neuen Funktionen konzentriet.
=> Thema IP/Host und define nicht angefasst. Auch keine Gegencheck bisheriger Funktioen.

VERSION  07.50.10g

  • shutdown restart: (der Vollständigkeit halber der LOG dazu
2023.03.23 18:46:29.749 0: Server shutdown
2023.03.23 18:46:35.812 1: Including fhem.cfg

2023.03.23 18:47:09.188 2: FRITZBOX!0000 [fritzzbox: Attr.470] - INFO:The attribute fritzBoxIP is not longer supported!
May be you have to use deleteattr to delete fritzBoxIP from Attributes.
The definition of the device has been adjusted. Please use 'Save config'
2023.03.23 18:47:09.217 3: The Attribute 'fritzBoxIP' is depreciated. The definition of the device has been adjusted.

2023.03.23 18:47:09.463 2: FRITZBOX!0000 [fritzclient: Attr.470] - INFO:The attribute fritzBoxIP is not longer supported!
May be you have to use deleteattr to delete fritzBoxIP from Attributes.
The definition of the device has been adjusted. Please use 'Save config'
2023.03.23 18:47:09.495 3: The Attribute 'fritzBoxIP' is depreciated. The definition of the device has been adjusted.

2023.03.23 18:47:15.976 1: Including ./log/fhem.save

2023.03.23 18:47:16.510 1: Messages collected while initializing FHEM:configfile: The Attribute 'fritzBoxIP' is depreciated. The definition of the device has been adjusted.
The Attribute 'fritzBoxIP' is depreciated. The definition of the device has been adjusted.

2023.03.23 18:48:19.425 0: Featurelevel: 6.2

2023.03.23 18:48:25.381 3: FRITZBOX!0000 [fritzzbox: API_Check_Run.1625] - INFO: Created m3u file './www/images/fritzzbox.m3u'

Tatsächlich haben bei mir "fritzzbox" & "fritzclient" das Attribut "fritzBoxIP" in der Config gesetzt und es ist nach dem "Save Config" aus der Config gelöscht.
Vermute allerdings, dass die Wenigsten das mitbekommen. Die INFO3 hilft dann hoffentlich irgendwann :-)

  • Die beiden alten Reading händisch gelöscht "deletereading fritzzbox fritzLog.*" .

  • Neue Reading sind da
    retstat_fritzLogExPost   done   2023-03-23 19:08:56
    retstat_fritzLogInfo      done   2023-03-23 19:08:56

Achtung die Readings und Doku sind nicht durchgängig gleich.
Ganz unten in der Auflistung steht: retStat_* (so soll es sein)


=> Beide Readings "retstat_fritzLogExPost" & "retstat_fritzLogInfo" mit KLEINEM s
=> doku beim GET
    Rückmeldung in den Readings:
    retStat_fritzLogExPost = Status des Funktionsaufrufes myUtilsFritzLogExPost
    retstat_fritzLogInfo = Status der Log Informations Abfrage.

Ich denke der Sinn ist es an allen Stellen gleich zu halten mit "S"

  • Frage
    Wann genau werden box_sys_LogLast & box_wlan_LogLast aktualisiert. Immer dann wenn die Fuktion get <name> fritzLog hash sys|wlan aufgerufen wird?

So weit so gut. So so aus als könnte das Ding nach den Kleinigkeiten in die Welt  8)
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Zitat von: RalfRog am 23 März 2023, 19:39:43Ich denke der Sinn ist es an allen Stellen gleich zu halten mit "S"

  • Frage
    Wann genau werden box_sys_LogLast & box_wlan_LogLast aktualisiert. Immer dann wenn die Fuktion get <name> fritzLog hash sys|wlan aufgerufen wird?

Hallo Ralf,

danke Dir. Das retstat werde ich noch durch retStat ersetzen.

box_sys_LogLast & box_wlan_LogLast werden bei jedem Timerdurchlauf (Intervall) aktualisiert. Sind somit notify tauglich. Zeigen allerdings immer den jüngsten Eintrag. Da innerhalb des definierten Intervall mehrere Ereignisse auftreten können, sind sie aber auch gute Trigger für get <name> fritzLog sys oder wlan und Deine weitere Verarbeitung.

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

RalfRog

Normaler Support Thread oder hier, das ist die Frage.

Folgende Readings erzeugtst du doppelt bzw. hast eine Namensänderung vorgenommen? Absicht?
box_wlanCount   7     2023-03-23 18:39:56
box_wlan_Count  8     2023-03-23 22:21:38

box_wlanLogEx   off   2023-03-23 18:39:56
box_wlan_LogEx  off   2023-03-23 22:21:38
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder

JoWiemann

Hallo Ralf,

ich habe die Namen nochmal angepasst und sie versucht etwas einheitlicher zu gestallten.

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

RalfRog

Ich setze das Ding mal auf gelöst.

Wesentliche Umsetzung ist im Modul erfolgt in Kombination mit der Sub "myUtilsFritzLogExPost($$$)" und das wurde heute bereits eingecheckt und ist daher über das Update verfügbar
=> ModulVersion = 07.50.10

Grundsätzlicher BeispielCode von Jo Wiemann für die 99_myUtils.pm in #14 (use Data::Dumper noch nötig)
https://forum.fhem.de/index.php?msg=1269178

Zugriff auf einzelne Daten aus dem Log $wert = $result->{data}->{log}->[array-index 0 bis n]->{id|date|time|msg}
(0 bis n = Zeilen in der Fritz-Box Logdatei)


Wenn meine Logauswertung fertig ist packe ich sie in die Codeschnipsel.



Edit 26.03.2023: auf Basis dieses Beitrags  ist ein Codeschnipsel https://forum.fhem.de/index.php?topic=132856.0 entstanden.
FHEM auf Raspi 2B mit nanoCUL, HM-MOD-RPI-PCB und über LAN MAX!Cube mit a-culFW (Stack 868 + 433)
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder