Modul: inotify - Überwachung von Dateiänderungen nach Pfad

Begonnen von marvin78, 29 Januar 2018, 15:24:32

Vorheriges Thema - Nächstes Thema

marvin78

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.

marvin78

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.

rabehd

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.

Auch funktionierende Lösungen kann man hinterfragen.

marvin78

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.

LT@Home

#4
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

marvin78

#5
Du kannst ja mit einem notify auf das Event reagieren und dort dann (ggf. über eine sub in der myUtils) dann alles weitere machen.

LT@Home

ja - notify schon - aber wie lautet das event? Ich hab grad nen Balken vorm Kopf - sorry

marvin78

#7
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}


LT@Home

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

marvin78

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.

LT@Home

Jetzt passt's - danke für die Unterstützung - coole Sache das....

marvin78

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.  ;)

LT@Home

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.

esk

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

rudolfkoenig

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.

marvin78

Danke für's Einspringen @Rudi.

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

marvin78

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.

marvin78

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.

JoWiemann

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

marvin78


JoWiemann

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

marvin78

#22
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.

JoWiemann

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
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

Wolfgang Hochweller

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.

Wolfgang Hochweller


Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

marvin78

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.

Gisbert

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
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

marvin78

Jap. Das wird gehen. Probiere ggf. auch IN_CREATE. Und dein notify erstellst du dann einfach über den Event-Monitor.

Pleitegeier


marvin78


marvin78

Das Tutorial ist nicht von mir. Ich supporte nur mein Modul.

Pleitegeier

Ist denn eine Lösung meines Problem mit deinem Modul möglich?

Pleitegeier

Erkennt dein Modul ein Änderungsdatum eines Verzeichnis oder nur ein schreiben einer Datei innerhalb eines Verzeichnis?

marvin78

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.

Pleitegeier

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.

marvin78

#37
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

Pleitegeier


marvin78

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.

marvin78

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.

JoWiemann

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

marvin78

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?

JoWiemann

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
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

marvin78

Ich habe einen Verdacht. Kannst du mal bitte die Version hier aus dem git testen?

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

Danke.

JoWiemann

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

marvin78

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.

JoWiemann

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
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

marvin78

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.

JoWiemann

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

marvin78

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.

JoWiemann

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

CQuadrat

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

marvin78

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.

CQuadrat

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

TomLee

#55
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

marvin78

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.

TomLee

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 ?

marvin78

Schon. Es steht aber auch klar in den Meldungen, dass Events erfasst wurden, diese aber nicht zur eingestellten Maske passen. Deshalb werden sie ignoriert.

TomLee

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.

marvin78


Wernieman

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 ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

marvin78

Alles in allem ist es nichts, was auf ein Problem im Modul hindeutet.

Frank_Huber

#63
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.

Frank_Huber

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?

TomLee

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.

Gruß

Thomas

Frank_Huber

Ja, das wurde automatisch gesetzt.
Das in all kann ich auch mal testen. Aber erst morgen wieder.
Danke.

marvin78

#67
Bitte schauen, was inotify leisten kann. Gemountete (remote) Ordner können nicht überwacht werden.

Frank_Huber

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?

marvin78

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.

Frank_Huber

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.

Stelaku

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





marvin78

Ich schaue mir das an. Die Funktion wird es nicht beeinträchtigen.

RomanticBoy83

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 Du darfst diesen Dateianhang nicht ansehen.  dafür bereitstellen. Eventuell wird es ja noch erweitert/korrigiert. Für mich wichtig wäre der Punkt6 und Punkt7.

marvin78

Ich habe den Patch leicht verändert übernommen. Bitte checken, ob es so funktioniert.