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

Offline marvin78

  • Hero Member
  • *****
  • Beiträge: 5232
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

  • Hero Member
  • *****
  • Beiträge: 5232
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: 578
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

  • Hero Member
  • *****
  • Beiträge: 5232
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

  • Hero Member
  • *****
  • Beiträge: 5232
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

  • Hero Member
  • *****
  • Beiträge: 5232
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

  • Hero Member
  • *****
  • Beiträge: 5232
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

  • Hero Member
  • *****
  • Beiträge: 5232
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: 19
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

 

decade-submarginal