Autor Thema: Modul: inotify - Überwachung von Dateiänderungen nach Pfad  (Gelesen 3302 mal)

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
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.
« Letzte Änderung: 11 Juli 2018, 08:33:39 von marvin78 »
Gefällt mir Gefällt mir x 2 Liste anzeigen

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #1 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.

Offline rabehd

  • Sr. Member
  • ****
  • Beiträge: 647
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #2 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.


Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #3 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.

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #4 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
« Letzte Änderung: 03 Februar 2018, 16:41:57 von LT@Home »

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #5 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.
« Letzte Änderung: 03 Februar 2018, 11:08:57 von marvin78 »

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #6 am: 03 Februar 2018, 11:02:19 »
ja - notify schon - aber wie lautet das event? Ich hab grad nen Balken vorm Kopf - sorry

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #7 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}
« Letzte Änderung: 03 Februar 2018, 11:09:10 von marvin78 »

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #8 am: 03 Februar 2018, 11:27:39 »
Danke - habs jetzt

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #9 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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #10 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.

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #11 am: 03 Februar 2018, 14:14:00 »
Jetzt passt's - danke für die Unterstützung - coole Sache das....

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #12 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.  ;)

Offline LT@Home

  • New Member
  • *
  • Beiträge: 36
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #13 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/ 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.

Offline esk

  • New Member
  • *
  • Beiträge: 22
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #14 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

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 20024
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #15 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.

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #16 am: 15 Mai 2018, 10:08:47 »
Danke für's Einspringen @Rudi.

Ich schaue mal, dass ich das an geeigneter Stelle abfange.

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #17 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.

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #18 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #19 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
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
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #20 am: 11 Juli 2018, 08:33:56 »
Die habe ich mal in den ersten Post übernommen.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #21 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
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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #22 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.
« Letzte Änderung: 11 Juli 2018, 21:19:18 von marvin78 »

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #23 am: 12 Juli 2018, 19:06:21 »
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
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

Offline howi42

  • Full Member
  • ***
  • Beiträge: 240
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #24 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.

Offline howi42

  • Full Member
  • ***
  • Beiträge: 240
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #25 am: 21 August 2018, 20:27:33 »
Erledigt. Ohne 'mask' zu setzen, keine gute Idee !
Gefällt mir Gefällt mir x 1 Zustimmung Zustimmung x 1 Liste anzeigen

Offline Gisbert

  • Sr. Member
  • ****
  • Beiträge: 846
  • Das Ziel ist das Ziel !
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #26 am: 20 Dezember 2018, 13:05:24 »
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
Fhem 5.9 auf RPi3 B, Homematic, HMUART, ESP8266, Sonoff Basic und Dual, Rollladenaktoren von Papa Romeo, 1-Wire-Temperatursensoren, Wlan-Kamera, SIGNALduino, WH3080-Wettereinheit, Flamingo Rauchmelder FA21RF

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #27 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.

Offline Gisbert

  • Sr. Member
  • ****
  • Beiträge: 846
  • Das Ziel ist das Ziel !
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #28 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
Fhem 5.9 auf RPi3 B, Homematic, HMUART, ESP8266, Sonoff Basic und Dual, Rollladenaktoren von Papa Romeo, 1-Wire-Temperatursensoren, Wlan-Kamera, SIGNALduino, WH3080-Wettereinheit, Flamingo Rauchmelder FA21RF

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #29 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.

Offline Pleitegeier

  • New Member
  • *
  • Beiträge: 13
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #30 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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #31 am: 27 Januar 2019, 17:29:45 »
nutzt du das Modul, um das es hier geht?

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #32 am: 27 Januar 2019, 18:37:10 »
Das Tutorial ist nicht von mir. Ich supporte nur mein Modul.

Offline Pleitegeier

  • New Member
  • *
  • Beiträge: 13
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #33 am: 27 Januar 2019, 19:18:56 »
Ist denn eine Lösung meines Problem mit deinem Modul möglich?

Offline Pleitegeier

  • New Member
  • *
  • Beiträge: 13
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #34 am: 27 Januar 2019, 19:32:46 »
Erkennt dein Modul ein Änderungsdatum eines Verzeichnis oder nur ein schreiben einer Datei innerhalb eines Verzeichnis?

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #35 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.

Offline Pleitegeier

  • New Member
  • *
  • Beiträge: 13
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #36 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.

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #37 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
« Letzte Änderung: 27 Januar 2019, 20:21:50 von marvin78 »

Offline Pleitegeier

  • New Member
  • *
  • Beiträge: 13
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #38 am: 27 Januar 2019, 20:01:49 »
Super. Vielen Dank und schönen Sonntag noch

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #39 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.
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #40 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #41 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
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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #42 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?

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #43 am: 31 Januar 2019, 19:07:05 »
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
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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #44 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #45 am: 31 Januar 2019, 19:49:07 »
Schnurrrt, wie ein Kätzchen.

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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #46 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #47 am: 31 Januar 2019, 20:06:23 »
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
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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #48 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #49 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
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

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #50 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.

Offline JoWiemann

  • Tester
  • Hero Member
  • ****
  • Beiträge: 2567
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #51 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
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

Offline CQuadrat

  • Sr. Member
  • ****
  • Beiträge: 596
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #52 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
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5451
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #53 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.

Offline CQuadrat

  • Sr. Member
  • ****
  • Beiträge: 596
Antw:Modul: inotify - Überwachung von Dateiänderungen nach Pfad
« Antwort #54 am: 04 Februar 2019, 08:34:29 »
Danke.

Das war auch meine Vermutung und Idee, das "Problem" zu lösen.
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), KM271 (per ser2net), SONOS (div. Gimmicks), OneWire, Hue

 

decade-submarginal