FHEM Forum

FHEM => Automatisierung => Thema gestartet von: marvin78 am 29 Januar 2018, 15:24:32

Titel: Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 29 Januar 2018, 15:24:32
Mit dem Linux Kernel-Subsystem inotify werden Veränderungen an Dateien oder Verzeichnissen überwacht und an Applikationen weiter gegeben. Das Modul, um das es hier geht, kann dazu verwendet werden, auf solche Änderungen zu reagieren. Die entsprechenden Readings und Events werden im Modul bereit gestellt. Folgende Perl Module werden benötigt:

Linux::Inotify2,Data::Dumper und File::Find

Debian Pakete:

sudo apt-get install liblinux-inotify2-perl
sudo apt-get install libdata-dump-perl
sudo apt-get install libfile-find-rule-perl


Definition:

defmod <name> inotify <Pfad> [<datei-RegEx>]

Pfad muss dabei ein absoluter Pfad sein.

Beispiel:

defmod inotify inotify /tmp test.*

erzeugt Events bei allen Änderungen an Dateien, die mit "test" beginnen und sich im Pfad /tmp befinden.

Das Modul kann durch folgendem Befehl installiert werden:

update all https://raw.githubusercontent.com/marvin78/FHEM-inotify/master/controls_inotify.txt

oder Download hier

https://github.com/marvin78/FHEM-inotify

Die Attribute "subfolders" und "mask" können verwendet werden, um das Verhalten zu steuern. Eine kleine Doku (commandref) befindet sich im Modul.

Support zu inotify gibt es woanders, zum FHEM-Modul (nicht in Echtzeit) hier im Forum. Informationen zum verwendeten Perl Modul gibt es hier (http://search.cpan.org/~mlehmann/Linux-Inotify2-1.22/Inotify2.pm).
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 30 Januar 2018, 13:04:59
In Version 0.4.0 kann das mask Attribut per multiselect widget befüllt werden (in FHEMWEB). Den Trenner habe ich dafür auf Komma umgestellt. Die Pipe (|) wird in vorhandenen Installationen nach einem update und restart von FHEM automatisch umgewandelt.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: rabehd am 30 Januar 2018, 13:37:54
Ich hatte das Modul gestern abend mal installiert. Habe es heute vormittag disabled.
Zwischen Einrichtung und disable hatte ich fast jede Minute einen automatischen Neustart. Jetzt nicht mehr.

Events habe ich leider auch keine gefunden.
Vielleicht weil ich ein gemountetes Verzeichnis überwacht habe.

Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 30 Januar 2018, 13:50:43
Bitte die Doku zu inotify lesen. Es handelt sich um ein Kernel Modul welches natürlich nicht auf remote Dateisystemen funktionieren kann.

Zu dem Problem mit dem Neustart kann ich nur raten (ein Neustart wird definitiv nicht durch das Modul ausgelöst und es hat vermutlich nichts mit dem remote Filesystem zu tun). Falls FHEM beendet wird und dein Neustart automatisch durch einen watchdog o.ä. erfolgt, kann ein Logauszug helfen, dem Problem auf die Spur zu kommen. Bitte die angepinnten Beiträge aus dem Anfängerfragen-Forum lesen. Dort steht, was benötigt wird, damit man bei Problemen nicht raten muss.

Was für ein System verwendest du?

Vorher empfehle ich aber, die aktuelle Version aus dem git zu installieren.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 10:56:35
events sind also da - ich muss jetzt den Inhalt des Files noch parsen - und dann in Abhängigkeit davon etwas tun - (es kommen Kommandos per SMS)

list:


Internals:
   CFGFN     
   DEF        /var/spool/gammu/inbox IN*
   FD         32
   FILES      IN*
   NAME       SMSReceive
   NOTIFYDEV  global
   NR         94
   NTFY_ORDER 50-SMSReceive
   PATH       /var/spool/gammu/inbox
   STATE      ???
   TYPE       inotify
   VERSION    0.4.6
   Helper:
     DBLOG:
       lastEventFile:
         logdb:
           TIME       1517647835.57428
           VALUE      /var/spool/gammu/inbox/IN20180123_121141_00_+xxxxxxxxxxxxxx_00.txt
       lastEventMask:
         logdb:
           TIME       1517647835.57428
           VALUE      IN_CLOSE_WRITE
   READINGS:
     2018-02-03 09:50:35   lastEventFile   /var/spool/gammu/inbox/IN20180123_121141_00_+xxxxxxxxxxx_00.txt
     2018-02-03 09:50:35   lastEventMask   IN_CLOSE_WRITE
   helper:
     dirs:
       /var/spool/gammu/inbox
     events:
       0:
         file       /var/spool/gammu/inbox/IN20180123_121141_00_+xxxxxxxxxxxxxx_00.txt
         mask       IN_CLOSE_WRITE
         time       2018-02-03 09:50:35
       1:
         file       /var/spool/gammu/inbox/IN20180123_121141_00_+xxxxxxxxxxxxxx_00.txt
         mask       IN_CLOSE_WRITE
         time       2018-02-03 09:44:11
       2:
       3:
       4:
       5:
       6:
       7:
       8:
     masks:
       IN_CLOSE_WRITE
Attributes:
   mask       IN_CLOSE_WRITE
   room       System
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 03 Februar 2018, 10:58:04
Du kannst ja mit einem notify auf das Event reagieren und dort dann (ggf. über eine sub in der myUtils) dann alles weitere machen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 11:02:19
ja - notify schon - aber wie lautet das event? Ich hab grad nen Balken vorm Kopf - sorry
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 03 Februar 2018, 11:05:41
Das reading auf das du reagieren musst,ist lastEventFile. Wie das Event genau  aussieht, siehst du, wie immer, im Eventmonitor. Das sind aber FHEM Grundlagen.

Edit: Beispiel:


define inotify_notify_1 notify SMSReceive:lastEventFile:.* {MACHEWAS}
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 11:27:39
Danke - habs jetzt
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 11:48:43
nen reload der 99_myUtils führt zu:


2018.02.03 11:47:08 1: ERROR: Select error -1 (9), error count= 0
2018.02.03 11:47:08 1: Found and deleted bad fileno for SMSReceive


danach bekommt fhem keine Events mehr bus zum n. Neustart
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 03 Februar 2018, 12:23:24
Ich brauche immer alle Infos. Ich weiß nicht was in deiner myUtils steht oder wie dein notify aussieht. Ich vermute, dass hier eine Endlosschleife wegen der Zugriffe entsteht.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 14:14:00
Jetzt passt's - danke für die Unterstützung - coole Sache das....
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 03 Februar 2018, 14:22:37
Freut mich. Vielleicht schilderst du für andere trotzdem noch kurz Ursache und Lösung. Ich fürchte nämlich, dass man dieses Problem häufig haben könnte, wenn man nicht genug aufpasst. Man sollte z.B. auch nicht das FHEM log Verzeichnis auf bestimmte Art überwachen und dann das log von inotify hoch drehen.  ;)
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: LT@Home am 03 Februar 2018, 15:16:06
Würde ich gerne - "irgendwann" ging dann auch der reload der 99_myUtils.pm....

Ich hab mir mit dem Modul Input per SMS realisiert - vllt. als Anregung ganz interessant:

Per gammu-smsd https://www.datenreise.de/raspberry-pi-sms-per-kommandozeile-versenden/ (https://www.datenreise.de/raspberry-pi-sms-per-kommandozeile-versenden/) laufen SMS ein.

Die SMS landen im Ordner /var/spool/gammu/inbox und haben im Dateinamen die Absendernummer drin - damit lässt sich dann was anfangen:

Mit deinem Notify-Modul überwache ich das Spoolverzeichnis auf eingehende IN*.txt - Files:


define SMSReceive inotify /var/spool/gammu/inbox IN*
attr SMSReceive group SMS
attr SMSReceive mask IN_CLOSE_WRITE
attr SMSReceive room System


Per Notify-Event wird dann bei eingehenden SMS geschaut was denn so anliegt...

define SMSReceive_notify_1 notify SMSReceive:lastEventFile:./var/spool/gammu/inbox/IN.*\.txt {\
    SMSReceived("$EVENT")\
}
attr SMSReceive_notify_1 group SMS
attr SMSReceive_notify_1 room System


Die Funktion SMSReceive (in 99_myUtils) sieht dann so aus:


sub SMSReceived($) {
    my @ev = split(' ', shift);
    my $fname = $ev[1];
    Log 1, "SMS received >$fname<";
    my @fn = split /_/, $fname;
    my $cmd = "";
    if ($#fn > 3) {
        my $phonenumber = $fn[3];
        foreach my $pn (@main::smsrcpts) {
            if ($phonenumber eq $pn) {
                #The SMS was received from one of our numbers
                $cmd = ReadSMS($fname);
                Log 1, "SMSReceived: $cmd";
                fhem($cmd);
            }
        }
    }
}


In $smsrcpts stehen die gültigen Absendernummern drin - ReadSMS holt das Kommando aus der SMS raus wobei ich in ReadSMS noch eine im Moment noch recht plumpe "Übersetzung" drin habe

Für meinen Zweck tut es was es soll.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: esk am 15 Mai 2018, 07:52:53
Hi marvin78,
Danke für das modul... kann ich gut für meine Webcam/Ftp verwenden.


defmod inotify inotify /var/www/upload/camera *.jpg

führt zum fhem absturz.

2018.05.15 07:45:07 3: inotify (inotify): startet watching /var/www/upload/camera with the file pattern *.jpg
Quantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE .jpg/ at ./FHEM/98_inotify.pm line 341.

Mein Workaround für meine Webcam ...:

defmod inotify inotify /var/www/upload/camera ARC*


Gruß esk
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: rudolfkoenig am 15 Mai 2018, 09:58:34
Viele FHEM Anfaenger verwechseln globbing (das was man im Shell verwendet) mit regexp. Letzteres ist deutlich maechtiger, ist aber nicht kompatibel. * bedeutet im regexp "das letzte Zeichen beliebig oft" und nicht "irgendetwas beliebig oft". Deswegen fuehrt ein * am Anfang bei Regexp zu Fehlermeldung.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 15 Mai 2018, 10:08:47
Danke für's Einspringen @Rudi.

Ich schaue mal, dass ich das an geeigneter Stelle abfange.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 15 Mai 2018, 16:29:44
Die neue Version 0.4.7 kontrolliert auf einigermaßen korrekte Regex bei define und modify (kein * am Anfang). Außerdem werden im watch schon vorhandene fehlerhafte File-Regex nicht mehr verwendet. Es wird das komplette Verzeichnis überwacht. So kommt es an der Stelle nicht mehr zu FHEM Abstürzen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 10 Juli 2018, 13:32:10
Die neue Version 0.4.8 startet watch neu, wenn ein Unterordner hinzu kommt oder gelöscht wird und das Attribut subfolders auf 1 steht.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 10 Juli 2018, 19:26:47
Falls jemand die Debian Pakete wissen möchte:


sudo apt-get install liblinux-inotify2-perl
sudo apt-get install libdata-dump-perl
sudo apt-get install libfile-find-rule-perl


Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 11 Juli 2018, 08:33:56
Die habe ich mal in den ersten Post übernommen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 11 Juli 2018, 20:25:51
Hallo,

ich habe das Modul jetzt auf meinem Testsystem (RPi, Stretch) laufen.


Internals:
   DEF        /tmp test.*
   FD         20
   FILES      test.*
   NAME       inotify
   NOTIFYDEV  global
   NR         65
   NTFY_ORDER 50-inotify
   PATH       /tmp
   STATE      active
   TYPE       inotify
   VERSION    0.4.8
   READINGS:
     2018-07-11 20:15:04   state           active
   helper:
     dirs:
       /tmp
     masks:
       IN_ALL_EVENTS
Attributes:
   mask       IN_ALL_EVENTS
   room       System
   verbose    5


Wenn ich nun eine Datei test.txt nach /tmp kopieren erhalte ich folgende Log Infos:

2018.07.11 20:15:04 3: inotify (inotify): set Device active
2018.07.11 20:15:05 3: inotify (inotify): startet watching /tmp with the file pattern test.*
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'mask' => 256,
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'wd' => 1,
                 'cookie' => 0,
                 'name' => 'test.txt'
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_CREATE
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'wd' => 1,
                 'cookie' => 0,
                 'name' => 'test.txt',
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 32
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_OPEN
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 2,
                 'wd' => 1,
                 'name' => 'test.txt',
                 'cookie' => 0
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_MODIFY
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 8,
                 'cookie' => 0,
                 'name' => 'test.txt',
                 'wd' => 1
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_CLOSE_WRITE
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp/test.txt
2018.07.11 20:15:33 5: inotify (inotify): got $VAR1 = bless( {
                 'mask' => 4,
                 'w' => bless( {
                                 'wd' => 1,
                                 'cb' => sub { "DUMMY" },
                                 'name' => '/tmp',
                                 'inotify' => bless( {
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 20,
                                                       'ignore' => {}
                                                     }, 'Linux::Inotify2' ),
                                 'mask' => 4095
                               }, 'Linux::Inotify2::Watch' ),
                 'wd' => 1,
                 'name' => 'test.txt',
                 'cookie' => 0
               }, 'Linux::Inotify2::Event' );

2018.07.11 20:15:33 4: inotify (inotify): event is not matching any configured mask: IN_ATTRIB
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp
2018.07.11 20:15:33 5: inotify (inotify): Fullname /tmp
2018.07.11 20:15:33 4: inotify (inotify): path to watch /tmp


Und es wird weder ein Reading gesetzt noch ein Event ausgelöst.

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 11 Juli 2018, 21:13:27
Funktioniert es, wenn du andere Masks verwendest (bspw. IN_CREATE)?

Probier mal die neue Version 0.4.9. IN_ALL_EVENTS wurde bisher nicht berücksichtigt, das es das entsprechende Event nicht wirklich gibt.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 12 Juli 2018, 19:06:21
Zitat von: marvin78 am 11 Juli 2018, 21:13:27
Funktioniert es, wenn du andere Masks verwendest (bspw. IN_CREATE)?

Probier mal die neue Version 0.4.9. IN_ALL_EVENTS wurde bisher nicht berücksichtigt, das es das entsprechende Event nicht wirklich gibt.

Danke, funktioniert.

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Wolfgang Hochweller am 21 August 2018, 15:47:01
Ich habe das inotify probiert :


Internals:
   DEF        /opt/fhem/www/snapshots/AussenCAM EingangsCAM_snapshot.jpg
   FD         122
   FILES      EingangsCAM_snapshot.jpg
   NAME       inotify
   NOTIFYDEV  global
   NR         328
   NTFY_ORDER 50-inotify
   PATH       /opt/fhem/www/snapshots/AussenCAM
   STATE      active
   TYPE       inotify
   VERSION    0.4.9
   READINGS:
     2018-08-21 15:41:39   lastEventFile   /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
     2018-08-21 15:41:39   lastEventMask   IN_CLOSE_NOWRITE
     2018-08-21 15:36:51   state           active
   helper:
     dirs:
       /opt/fhem/www/snapshots/AussenCAM
     events:
       0:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_CLOSE_NOWRITE
         time       2018-08-21 15:41:39
       1:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_ACCESS
         time       2018-08-21 15:41:38
       2:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_ACCESS
         time       2018-08-21 15:41:38
       3:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_DELETE
         time       2018-08-21 15:41:38
       4:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_ACCESS
         time       2018-08-21 15:41:37
       5:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_OPEN
         time       2018-08-21 15:41:37
       6:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_CLOSE_NOWRITE
         time       2018-08-21 15:41:37
       7:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_ACCESS
         time       2018-08-21 15:41:36
       8:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_OPEN
         time       2018-08-21 15:41:36
       9:
         file       /opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg
         mask       IN_CLOSE_NOWRITE
         time       2018-08-21 15:41:36



Notify :


Internals:
   DEF        inotify:lastEventFile:.* {
HowiMail ( "howi42\@lyse.net", "Snapshot", "Nichts", "'/opt/fhem/www/snapshots/AussenCAM/EingangsCAM_snapshot.jpg'");;

}
   NAME       AussenCAM_notify
   NOTIFYDEV  inotify
   NR         329
   NTFY_ORDER 50-AussenCAM_notify
   REGEXP     inotify:lastEventFile:.*
   STATE      2018-08-21 15:41:39
   TYPE       notify
   READINGS:
     2018-08-21 15:21:43   state           active
Attributes:



Was muss ich tun, damit das notify nur einmal getriggert wird, wenn die Datei neu geschrieben wird ?
So wie oben hoert das nie auf ...., erst, wenn ich die Datei manuell loesche.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Wolfgang Hochweller am 21 August 2018, 20:27:33
Erledigt. Ohne 'mask' zu setzen, keine gute Idee !
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Gisbert am 20 Dezember 2018, 13:05:24
Zitat von: howi42 am 21 August 2018, 20:27:33
Erledigt. Ohne 'mask' zu setzen, keine gute Idee !

Hallo howi42,
hallo marvin78,

zuerstmal vielen Dank an marvin78 für dieses Modul.

Was muss ich beim Attribut mask eintragen?
Mein Ziel ist es ein Reading (anscheinend gibt es gleich mehrere, wenn eine neue Datei geschrieben wird, ist aber im Moment nebensächlich) zu bekommen, wenn die Kamera eine neue Aufnahme macht.
Prinzipiell funktioniert da Modul.

Ich lösche einmal wöchentlich alle Aufnahmen, die älter als 1 Monat sind.
Dann gibt es auch auch Readings:
lastEventFile <Pfad/Filename> 2018-12-20 12:51:58
astEventMask IN_DELETE 2018-12-20 12:51:58


Wie muss ich ein DOIF oder notifiy gestalten, damit diese auf neue Files reagieren, nicht aber auf das Löschen von Files?

Viele Grüße Gisbert
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 20 Dezember 2018, 13:09:02
Wenn du das Mask Attribut über das Frontend setzt, wird dir eine Auswahl angeboten. Eigentlich alles selbsterklärend. Bitte auch die Doku zu inotify lesen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Gisbert am 20 Dezember 2018, 13:16:35
Hallo marvin78,

ahh, ich hab nur das leere Feld gesehen, und da wusste ich nicht weiter. Die commandref war an der Stelle nicht sonderlich auskunftsfreudig.
Durch Anklicken des leeren Feldes bekommt man die Auswahlliste.

Ich nehme an, dass die Auswahl "IN_CLOSE_WRITE" die richtige ist, wenn ich ein Event haben möchte, wenn ein neuer File geschrieben wurde.

Vielen Dank Gisbert
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 20 Dezember 2018, 13:18:47
Jap. Das wird gehen. Probiere ggf. auch IN_CREATE. Und dein notify erstellst du dann einfach über den Event-Monitor.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Pleitegeier am 27 Januar 2019, 16:37:32
Hallo marvin,

kannst du mir bitte bei folgendem Problem behilflich sein?

https://forum.fhem.de/index.php/topic,96551.0.html
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 27 Januar 2019, 17:29:45
nutzt du das Modul, um das es hier geht?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 27 Januar 2019, 18:37:10
Das Tutorial ist nicht von mir. Ich supporte nur mein Modul.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Pleitegeier am 27 Januar 2019, 19:18:56
Ist denn eine Lösung meines Problem mit deinem Modul möglich?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Pleitegeier am 27 Januar 2019, 19:32:46
Erkennt dein Modul ein Änderungsdatum eines Verzeichnis oder nur ein schreiben einer Datei innerhalb eines Verzeichnis?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 27 Januar 2019, 19:35:43
Das eine lässt sich aus dem anderen erschließen. Das Modul liefert entsprechende Events und Readings. Wenn du mit einem konkreten Beispielversuch kommst, kann ich ggf. auch konkreter helfen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Pleitegeier am 27 Januar 2019, 19:48:54
Bin auf eine Dahua Kamera umgestiegen welche für neue Dateien auf dem FTP Server ständig neue Verzeichnisse schreibt. Datum, Uhrzeit usw.
Ich muss von "Überwachen eines Verzeichnis" auf "Überwachen eines übergeordneten Stammverzeichnis" umstellen.
Das notify weckt mit hilfe dem Modul AMAD ein Tablet auf und zeigt ein Live Bild der Kamera bei Bewegung.

Die Kamera schreibt z.B. einen Screenshot in \HaustuerDahua\2019-01-27\001\jpg\11 wobei sie am nächsten Tag natürlich das Verzeichnis 2019-01-28 erstellt. Hier liegt mein Problem.
Das Modul soll ein Verzeichnis auf schreiben seiner Unterordner hin überwachen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 27 Januar 2019, 19:58:50
Das geht mit dem Modul. Mit der Mask "IN_CREATE" sollte das gehen.

defmod inotify inotify /PATH/TO/FOLDER
attr inotify mask IN_CREATE
attr inotify subfolders 1
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Pleitegeier am 27 Januar 2019, 20:01:49
Super. Vielen Dank und schönen Sonntag noch
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 27 Januar 2019, 20:02:59
Wenn es noch Fragen gibt, her damit.

Im Übrigen wird das Modul irgendwann in der kommenden Woche auch ins offizielle FHEM-SVN eingecheckt und kommt dann per FHEM update.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 30 Januar 2019, 11:13:10
Mittlerweile ist das Modul per FHEM-update verfügbar und es gibt morgen per update dann auch eine neue Version, die beim define einen check auf die fehlenden Perl-Module macht und diese ausgibt.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 31 Januar 2019, 18:02:23
Hallo,

ich habe gerade ein update gemacht. Folgendes erhalten ich beim Restart von Fhem:


./log/fhem.save: Please define inotify first
Please define inotify 5c436ff8-f33f-4b0e-c2dd-acab367cff057017 first
2019.01.31 17:52:22 1: configfile: Cannot load module inotify


Beim einem reload in der Commandozeile erhalte ich:

Bareword "IN_ALL_EVENTS" not allowed while "strict subs" in use at ./FHEM/98_inotify.pm line 307.
Bareword "IN_ALL_EVENTS" not allowed while "strict subs" in use at ./FHEM/98_inotify.pm line 318.


Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 31 Januar 2019, 18:57:02
Das ist seltsam. inotify war vorher schon bei dir im Einsatz? An der Stelle wurde nämlich nichts geändert. Seit der 1. Version nicht mehr. Hat sich sonst etwas bei dir verändert?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 31 Januar 2019, 19:07:05
Zitat von: marvin78 am 31 Januar 2019, 18:57:02
Das ist seltsam. inotify war vorher schon bei dir im Einsatz? An der Stelle wurde nämlich nichts geändert. Seit der 1. Version nicht mehr. Hat sich sonst etwas bei dir verändert?

inotify war vorher schon bei dir im Einsatz? Ja, Dateidatum 12.07.2018

Hat sich sonst etwas bei dir verändert? Nein

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 31 Januar 2019, 19:42:28
Ich habe einen Verdacht. Kannst du mal bitte die Version hier aus dem git testen?

https://github.com/marvin78/FHEM-inotify

Danke.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 31 Januar 2019, 19:49:07
Schnurrrt, wie ein Kätzchen.

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 31 Januar 2019, 19:52:03
Gut, dann geht die Version morgen ins update. Danke für den Hinweis.

Das mit dem check auf das Perl Modul "Linux::inotify2" beim define hat sich damit vorerst erledigt. Aber es sollte ja jedem klar sein, dass das hier benötigt wird.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 31 Januar 2019, 20:06:23
Zitat von: marvin78 am 31 Januar 2019, 19:52:03
Das mit dem check auf das Perl Modul "Linux::inotify2" beim define hat sich damit vorerst erledigt. Aber es sollte ja jedem klar sein, dass das hier benötigt wird.

Hm. ich habe jetzt nicht mehr nachgesehen, aber in vielen Modulen wird folgendes erfolgreich genutzt

        eval { require Linux::inotify2; };

        unless($@)
        {
            Log3 $name, 5, "inotify ($name) - found Linux::inotify2";
        }
        else
        {
            Log3 $name, 5, "inotify ($name) - unable to load Linux::inotify2 module: $@. Please install with sudo apt-get install liblinux-inotify2-perl";
        }


Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 31 Januar 2019, 20:18:58
Ja. So ähnlich mache ich das auch. Das Einbinden über eval scheint aber zu dem bareword Fehler zu führen.

Ich werde die Tage mal ein paar andere Varianten testen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 31 Januar 2019, 20:28:55
Hm, Du könntest das eval() vor Zeile 296 $inotify = new Linux::Inotify2; setzen und dann entsprechend reagieren. Im Def Bereich habe ich bisher noch nie genutzt. Beim googeln habe ich Deine Variante auf die Schnelle auch nicht gefunden.

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 31 Januar 2019, 20:38:19
Ich habe gerade eine Version eingecheckt, die es richtig machen solte. Sie orientiert sich mehr an deinem Beispiel, als an meiner ersten Variante.

Manchmal macht mich Perl noch immer wahnsinnig ;)

Danke.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: JoWiemann am 01 Februar 2019, 20:51:25
Ok, läuft jetzt auf dem Testsystem. Wenn ich am Wochenende Zeit habe, werde ich noch mal die intotify2 Lib löschen und testen, ob die Warnmeldung kommt.

Grüße Jörg
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: CQuadrat am 04 Februar 2019, 08:20:51
Hallo Marvin,

geht mit diesem Modul nur eine Instanz?

Ich habe für die Überwachung einer Datei ein entsprechendes Device angelegt. Das lief hervorragend:

DEF        /opt/fhem/B29/Oelverbrauch parameter.dat
   FD         28
   FILES      parameter.dat
   MID        inotify_optfhemB29Oelverbrauchparameterdat
   NAME       intfy_Oelverbrauch
   NOTIFYDEV  global
   NR         1956
   NTFY_ORDER 81-intfy_Oelverbrauch
   PATH       /opt/fhem/B29/Oelverbrauch
   STATE      active
   TYPE       inotify
   VERSION    0.6.1
   READINGS:
     2019-02-04 00:03:50   lastEventFile   /opt/fhem/B29/Oelverbrauch/parameter.dat
     2019-02-04 00:03:50   lastEventMask   IN_CLOSE_WRITE
     2019-02-04 00:02:35   state           active
   helper:
     dirs:
       /opt/fhem/B29/Oelverbrauch
     events:
       0:
         file       /opt/fhem/B29/Oelverbrauch/parameter.dat
         mask       IN_CLOSE_WRITE
         time       2019-02-04 00:03:50
       1:
       2:
       3:
       4:
       5:
       6:
       7:
       8:
     masks:
       IN_MODIFY
       IN_CLOSE_WRITE
       IN_CREATE
Attributes:
   mask       IN_MODIFY,IN_CLOSE_WRITE,IN_CREATE
   room       Heizung
   verbose    2


Dann wollte ich eine zweite Datei überwachen und habe dafür ebenfalls ein Device angelegt:

Internals:
   CFGFN     
   DEF        /opt/fhem/B29 wlan.cfg
   FD         26
   FILES      wlan.cfg
   MID        inotify_optfhemB29wlancfg
   NAME       intfy_GaesteWLAN
   NOTIFYDEV  global
   NR         32690
   NTFY_ORDER 81-intfy_GaesteWLAN
   PATH       /opt/fhem/B29
   STATE      active
   TYPE       inotify
   VERSION    0.6.1
   READINGS:
     2019-02-03 23:28:21   lastEventFile   /opt/fhem/B29/wlan.cfg
     2019-02-03 23:28:21   lastEventMask   IN_CLOSE_WRITE
     2019-02-04 00:02:14   state           active
   helper:
     dirs:
       /opt/fhem/B29
     masks:
       IN_MODIFY
       IN_CLOSE_WRITE
       IN_CREATE
Attributes:
   mask       IN_MODIFY,IN_CLOSE_WRITE,IN_CREATE
   room       Maschinenraum
   verbose    2

Das lief dann auch super. Bis ich dann aber merkte, dass das erste inotify-Device nicht mehr lief. Ein defmod auf das erste Device führte wieder dazu, dass es lief; dafür war dann das zweite ohne Reaktion.

Kann es vielleicht daran liegen, dass beide zu überwachenden Dateien im gleichen Verzeichnis /opt/fhem/B29 liegen?


Danke und Gruß

Christoph
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 04 Februar 2019, 08:31:01
Das inotify Modul ist ursprünglich als Ordnerüberwachung konzipiert worden (und das ist auch das Grundkonzept von Linux::Inotify2). Fileüberwachung über Regex kam später auf Wunsch dazu. Meine Empfehlung ist, vorerst den gesamten Ordner zu überwachen und das entsprechende Event für die Dateien auszuwerten.

Ich schaue mir das aber an, sobald ich Zeit habe.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: CQuadrat am 04 Februar 2019, 08:34:29
Danke.

Das war auch meine Vermutung und Idee, das "Problem" zu lösen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: TomLee am 17 November 2020, 18:36:20
Hallo,

kann mir wer bitte einen Tipp geben, was mir diese Meldungen mit verbose 5 sagen wollen.

Hatte bisher keine Probleme mit inotify.

Es ist ein neu aufgesetztes RasPiOS System, die Bibliotheken sind vorhanden:

pi@FHEMPIOS:/opt/fhem $ sudo apt-get install liblinux-inotify2-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
liblinux-inotify2-perl ist schon die neueste Version (1:2.1-1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
pi@FHEMPIOS:/opt/fhem $ sudo apt-get install libdata-dump-perl
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
libdata-dump-perl ist schon die neueste Version (1.23-1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.


defmod inot_Umsatz inotify /opt/fhem UMFHEM.csv
attr inot_Umsatz fhem_widget_channels [{"controlled_attribute":"STATE","order":2,"alias":"Umsatz","allowed_values":[]}]
attr inot_Umsatz mask IN_ATTRIB
attr inot_Umsatz room Büro,Fhem_Widget
attr inot_Umsatz stateFormat umsatzmtl €
attr inot_Umsatz verbose 5

setstate inot_Umsatz umsatzmtl €
setstate inot_Umsatz 2020-11-17 17:55:29 state active



2020.11.17 18:22:51 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:51 5: inotify (inot_Umsatz): Fullname /opt/fhem
2020.11.17 18:22:53 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:53 5: inotify (inot_Umsatz): Fullname /opt/fhem/UMFHEM.csv
2020.11.17 18:22:53 5: inotify (inot_Umsatz): got $VAR1 = bless( {
                 'cookie' => 0,
                 'w' => bless( {
                                 'wd' => 1,
                                 'name' => '/opt/fhem',
                                 'mask' => 4095,
                                 'cb' => sub { "DUMMY" },
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 70
                                                     }, 'Linux::Inotify2' )
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 2,
                 'name' => 'UMFHEM.csv',
                 'wd' => 1
               }, 'Linux::Inotify2::Event' );

2020.11.17 18:22:53 4: inotify (inot_Umsatz): event is not matching any configured mask: IN_MODIFY
2020.11.17 18:22:53 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:53 5: inotify (inot_Umsatz): Fullname /opt/fhem/UMFHEM.csv
2020.11.17 18:22:53 5: inotify (inot_Umsatz): got $VAR1 = bless( {
                 'name' => 'UMFHEM.csv',
                 'wd' => 1,
                 'w' => bless( {
                                 'wd' => 1,
                                 'name' => '/opt/fhem',
                                 'mask' => 4095,
                                 'cb' => sub { "DUMMY" },
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 70
                                                     }, 'Linux::Inotify2' )
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 32,
                 'cookie' => 0
               }, 'Linux::Inotify2::Event' );

2020.11.17 18:22:53 4: inotify (inot_Umsatz): event is not matching any configured mask: IN_OPEN
2020.11.17 18:22:53 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:53 5: inotify (inot_Umsatz): Fullname /opt/fhem/UMFHEM.csv
2020.11.17 18:22:53 5: inotify (inot_Umsatz): got $VAR1 = bless( {
                 'cookie' => 0,
                 'w' => bless( {
                                 'wd' => 1,
                                 'name' => '/opt/fhem',
                                 'mask' => 4095,
                                 'cb' => sub { "DUMMY" },
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 70
                                                     }, 'Linux::Inotify2' )
                               }, 'Linux::Inotify2::Watch' ),
                 'mask' => 2,
                 'name' => 'UMFHEM.csv',
                 'wd' => 1
               }, 'Linux::Inotify2::Event' );

2020.11.17 18:22:53 4: inotify (inot_Umsatz): event is not matching any configured mask: IN_MODIFY
2020.11.17 18:22:53 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:53 5: inotify (inot_Umsatz): Fullname /opt/fhem/UMFHEM.csv
2020.11.17 18:22:53 5: inotify (inot_Umsatz): got $VAR1 = bless( {
                 'cookie' => 0,
                 'wd' => 1,
                 'name' => 'UMFHEM.csv',
                 'mask' => 8,
                 'w' => bless( {
                                 'wd' => 1,
                                 'name' => '/opt/fhem',
                                 'mask' => 4095,
                                 'cb' => sub { "DUMMY" },
                                 'inotify' => bless( {
                                                       'ignore' => {},
                                                       'w' => {
                                                                '1' => $VAR1->{'w'}
                                                              },
                                                       'fd' => 70
                                                     }, 'Linux::Inotify2' )
                               }, 'Linux::Inotify2::Watch' )
               }, 'Linux::Inotify2::Event' );

2020.11.17 18:22:53 4: inotify (inot_Umsatz): event is not matching any configured mask: IN_CLOSE_WRITE
2020.11.17 18:22:53 4: inotify (inot_Umsatz): path to watch /opt/fhem
2020.11.17 18:22:53 5: inotify (inot_Umsatz): Fullname /opt/fhem


-rw-r--r--  1 fhem dialout      5 Nov 17 18:22 UMFHEM.csv

Gruß

Thomas
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 17 November 2020, 19:00:16
Ich sehe auf die Schnelle keine Fehler. Es gibt bloß kein Event, das der eingestellten Maske entspricht. Die Events können sich tatsächlich in ihrer Ausprägung von System zu System unterscheiden. Da muss man etwas probieren.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: TomLee am 17 November 2020, 19:08:41
ZitatEs gibt bloß kein Event, das der eingestellten Maske entspricht.

Das verstehe ich erstmal nicht, die gezeigten Meldungen gibts doch nur im Log wenn ich eine Änderung an der Datei vornehme ?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 17 November 2020, 20:18:02
Schon. Es steht aber auch klar in den Meldungen, dass Events erfasst wurden, diese aber nicht zur eingestellten Maske passen. Deshalb werden sie ignoriert.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: TomLee am 18 November 2020, 13:32:51
ZitatDa muss man etwas probieren.

Hatte ich noch gestern Abend und jetzt etwas mehr verstanden.
In der Regel wird die Datei UMFHEM.csv regelmäßig aus einer Access-Datenbank nach /opt/fhem exportiert, Dank der derzeitigen Situation weniger oft. Darum hab ich manuell getestet (hätt ichs nur sein lassen).
In Erinnerung war mir das ich damals wenn ich am Tablet mit der App QuickEdit an der Datei Änderungen vornahm und dann per FTP (ja ich weiß) hochlud, es mit der Maske IN_ATTRIB zu einem passenden Event kam.
Mittlerweile mach ich aber mehr mit dem PC/Ubuntu, hier hatte ich die Datei mit LibreOffice Calc editiert und dann hoch geladen aber auch mit nano editiert, gespeichert, mit dem Ergebnis das es wie oben beschrieben zu keinem Event mehr kam.
Wenn ich IN_MODIFY mit dazu nehme gibts auch dann ein Event.
Habs immer noch nicht mit der Datei aus Access probiert (mach ich heute Abend), gehe aber davon das es auch hier weiterhin klappt, da es mit Quickedit mit nur der Maske IN_ATTRIB weiterhin wie immer klappt.
Hab mir das nicht genauer angeschaut, aber kann ja dann nur daran gelegen haben das Access und QuickEdit Änderungen an den Meta-Daten vornehmen, LibreOffice und nano nicht.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 18 November 2020, 14:15:33
Das wird so sein.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Wernieman am 18 November 2020, 14:52:40
Naja .. es gibt ein Unterschied zwischen "neu" und "geändert". Ich weiß es bei calc nicht, aber die meisten "kleinen" Editoren ändern die Datei (z.B. vi, nano etc). Ein Export in Access macht die Datei aber neu (Überschreiben im Sinne von löschen und neu anlegen). Das ist fürs Betriebsystem (Unix) ein größer Unterschied ...
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 18 November 2020, 14:54:07
Alles in allem ist es nichts, was auf ein Problem im Modul hindeutet.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Frank_Huber am 23 März 2021, 16:18:14
Mahlzeit,

versuche einen FTP Ordner auf Änderungen zu überwachen.
Dieser ist in lokal gemountet.
Beim define von inotify schmiert FHEM mit dieser Meldung ab:

2021.03.23 16:04:47 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/98_inotify.pm line 440.
2021.03.23 16:04:47 3: inotify (FTP): startet watching /Q/ftp/files with the file pattern .*
Can't call method "cancel" on an undefined value at ./FHEM/98_inotify.pm line 367.
2021.03.23 16:05:49 1: Including fhem.cfg


define: defmod FTP inotify /Q/ftp/files .*

was mache ich falsch?

EDIT:
Layer 8 Problem. FHEM hatte keine Rechte. :-)
ist erledigt.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Frank_Huber am 23 März 2021, 17:09:47
neues Problem:
setze ich das Attribut "subfolders" blockiert fhem. :-(

mein Ziel:
Einen FTP Ordner überwachen auf neue Dateien bzw Ordner.
Unterordner interessieren eigentlich nicht. Das Attribut wollte ich zum testen setzen.

erstellte Test-Dateien und Ordner haben allerdings nicht angeschlagen. Der Eventmonitor und das Device blieben stumm.
verbose 5 zeigt auch nichts.

mach ich wieder einen Layer-8 Fehler? aber welchen?
liegt es evtl daran dass der überwachte Ordner so ca 850 Elemente enthält?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: TomLee am 23 März 2021, 17:26:56
Weiß nicht was/ob überhaupt das Modul per default überwacht.

Hast du eine Angabe im Attribut mask gemacht ?
Zitat
mask
set your own mask for watching. Komma seperated list. See the Linux::Inotify2 Doku for possible masks.

Wenn nicht, versuchs einfach mal mit IN_ALL_EVENTS aus der Liste (https://metacpan.org/pod/release/MLEHMANN/Linux-Inotify2-1.22/Inotify2.pm#The-Linux::Inotify2-Class).

Gruß

Thomas
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Frank_Huber am 23 März 2021, 17:31:08
Ja, das wurde automatisch gesetzt.
Das in all kann ich auch mal testen. Aber erst morgen wieder.
Danke.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 23 März 2021, 19:01:55
Bitte schauen, was inotify leisten kann. Gemountete (remote) Ordner können nicht überwacht werden.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Frank_Huber am 24 März 2021, 08:06:21
Zitat von: marvin78 am 23 März 2021, 19:01:55
Bitte schauen, was inotify leisten kann. Gemountete (remote) Ordner können nicht überwacht werden.
Das erklärt natürlich meine Fehlversuche.

konnte diese Info aber nirgends finden. wo steht das?
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 24 März 2021, 08:54:12
Das Modul setzt nur auf inotify auf. Es kann nur das leisten, was inotify (ein Linux Kernel Modul) bietet und das kann eben (logischerweise) nur das interene Dateisystem überwachen. Bitte die Doku zu inotify (nicht das FHEM Modul) konsultieren, wie im Eingangspost dieses Threads empfohlen.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Frank_Huber am 24 März 2021, 09:11:09
Zitat von: marvin78 am 24 März 2021, 08:54:12
Das Modul setzt nur auf inotify auf. Es kann nur das leisten, was inotify (ein Linux Kernel Modul) bietet und das kann eben (logischerweise) nur das interene Dateisystem überwachen. Bitte die Doku zu inotify (nicht das FHEM Modul) konsultieren, wie im Eingangspost dieses Threads empfohlen.
Hi Marvin,

das soll keine Kritik an deiner Modul Doku sein. nicht dass das falsch rüber kam.
Habe auch zu inotify im Web und Wiki gelesen.
gesehen habe ich den Hinweis dass ein Kernel Modul keine Remote Ordner überwachen kann.
Für mich als Laie war damit kein lokaler mount gemeint. weil der mount ja lokal addressiert wird.

Aber ja, mittlerweile habe ich noch einige Foren Threads gelesen, mit unter Widersprüchlich bezüblich ftp ordnern, aber am Ende ists klar.
Muss mir einen anderen Lösungsweg suchen.

Danke für die Erklärung.
Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: Stelaku am 29 März 2021, 17:26:54
Hallo Marvin

Vielen dank für das Modul. Es funktioniert sehr gut.
Es hat für mich eine schöne und schnelle Lösung zum überwachen eines Dateipfad ermöglicht.

Nur habe ich immer nach einen neustart von Fhem eine perl Warnung im log.


2021.03.29 16:53:09 1: Including fhem.cfg
2021.03.29 16:53:11 3: WEB: port 8083 opened
2021.03.29 16:53:11 2: eventTypes: loaded 25 lines from ./log/eventTypes.txt
2021.03.29 16:53:12 3: telnetForBlockingFn_1617029592: port 43509 opened
2021.03.29 16:53:12 3: telnet: port 7072 opened
2021.03.29 16:53:12 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/98_inotify.pm line 440, <$fh> line 55.
2021.03.29 16:53:12 1: Including ./log/fhem.save
2021.03.29 16:53:12 1: Messages collected while initializing FHEM:SecurityCheck:
  WEB is not password protected
  telnet is not password protected

Protect this FHEM installation by defining an allowed device with define allowed allowed
You can disable this message with attr global motd none

2021.03.29 16:53:12 3: inotify (inotify): startet watching /home/Stephan/camera with the file pattern jpg.*
2021.03.29 16:53:12 0: Featurelevel: 6
2021.03.29 16:53:12 0: Server started with 14 defined entities (fhem.pl:23904/2021-03-07 perl:5.028001 os:linux user:fhem pid:9795)
2021.03.29 16:53:13 3: inotify (inotify): startet watching /home/Stephan/camera with the file pattern jpg.*
2021.03.29 16:53:13 3: inotify (inotify): startet watching /home/Stephan/camera with the file pattern jpg.*


Ich habe die Meldung auf mehreren Testsystemen. Die o.g. Meldung kommt aktuell von einem kpl. neu aufgesetzten und fast leeren Fhem.

anbei auch noch mal die Meldung mit gesetzten Stacktrace


2021.03.29 17:13:46 1: PERL WARNING: Use of uninitialized value in substitution (s///) at ./FHEM/98_inotify.pm line 440, <$fh> line 56.
2021.03.29 17:13:46 1: stacktrace:
2021.03.29 17:13:46 1:     main::__ANON__                      called by ./FHEM/98_inotify.pm (440)
2021.03.29 17:13:46 1:     main::inotify_setMasks              called by ./FHEM/98_inotify.pm (247)
2021.03.29 17:13:46 1:     main::inotify_Attr                  called by fhem.pl (3847)
2021.03.29 17:13:46 1:     main::CallFn                        called by fhem.pl (3078)
2021.03.29 17:13:46 1:     main::CommandAttr                   called by ./FHEM/98_inotify.pm (134)
2021.03.29 17:13:46 1:     main::inotify_Define                called by fhem.pl (3847)
2021.03.29 17:13:46 1:     main::CallFn                        called by fhem.pl (2118)
2021.03.29 17:13:46 1:     main::CommandDefine                 called by fhem.pl (1265)
2021.03.29 17:13:46 1:     main::AnalyzeCommand                called by fhem.pl (1116)
2021.03.29 17:13:46 1:     main::AnalyzeCommandChain           called by fhem.pl (1403)
2021.03.29 17:13:46 1:     main::CommandInclude                called by fhem.pl (619)


Ich habe erst gedacht es liegt vieleicht an meinem [<datei-RegEx>] aber es ist egal was ich dort reinschreibe die Meldung kommt trotzdem.

hier ein list von meinem inotify

Internals:
   DEF        /home/Stephan/camera jpg.*
   FD         4
   FILES      jpg.*
   FUUID      6061ee4d-f33f-d873-6079-493fa1bb4182a53b
   MID        inotify_homeStephancamerajpg
   NAME       inotify
   NOTIFYDEV  global
   NR         21
   NTFY_ORDER 81-inotify
   PATH       /home/Stephan/camera
   STATE      active
   TYPE       inotify
   VERSION    0.6.1
   READINGS:
     2021-03-29 17:26:20   lastEventFile   /home/Stephan/camera/09.jpg
     2021-03-29 17:26:20   lastEventMask   IN_CREATE
     2021-03-29 17:24:29   state           active
   helper:
     dirs:
       /home/Stephan/camera
     events:
       0:
         file       /home/Stephan/camera/09.jpg
         mask       IN_CREATE
         time       2021-03-29 17:26:20
       1:
         file       /home/Stephan/camera/08.jpg
         mask       IN_CREATE
         time       2021-03-29 17:26:02
       2:
       3:
       4:
       5:
       6:
       7:
       8:
     masks:
       IN_CREATE
Attributes:
   mask       IN_CREATE


Vieleicht kannst Du mir da weiterhelfen.

Viele Grüsse

Stephan




Titel: Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 30 März 2021, 05:57:47
Ich schaue mir das an. Die Funktion wird es nicht beeinträchtigen.
Titel: Aw: Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: RomanticBoy83 am 16 Juni 2023, 20:10:15
Hallo marvin78
... ich habe mir für die Bewegungserkennung von Webcams via FTPUpload dein Modul herausgepickt.
Leider habe ich ein par Fehlerchen gefunden -> glücklicherweise aber auch behoben.

Kleinigkeiten:
1) eine Warnung wenn keine Datei im define angegeben wurde.
2) Die Aktualisierung läuft zum Startzeitpunkt mehrmals durch den Timer (für jedes Attribut)
3) sollte jemand mask während der Laufzeit löschen, dann geschieht Unheil
4) ungenutzer helper mit dem namen dirs
5) state steht nach define auf unbekannt

Problem
6) bei einem Fehler, zum Beispiel falsche Rechte auf einen Ordner ist der watcher "undef" und darf nicht in die Liste aufgenommen werden.

Neues Event
7) es kommt kein einzelnes Event, welches das inotify und den Dateinamen zur Verfügung stellt. Das wäre für die weitere Abarbeitung - z.B. weitere notifys - sehr Hilfreich.

All das habe ich für mich angepasst und möchte hier den 98_inotify_patch  dafür bereitstellen. Eventuell wird es ja noch erweitert/korrigiert. Für mich wichtig wäre der Punkt6 und Punkt7.
Titel: Aw: Modul: inotify - Überwachung von Dateiänderungen nach Pfad
Beitrag von: marvin78 am 19 Juni 2023, 10:30:25
Ich habe den Patch leicht verändert übernommen. Bitte checken, ob es so funktioniert.