Hi zusammen - ich möchte mit Inotify2 ein Verzeichnis überwachen - als "standalone-Code" klappt das - in fhem ausgeführt geht das nicht - woran kann das liegen? Rechte sind vorhanden:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
use Linux::Inotify2;
sub myUtils_Initialize($$) {
my ($hash) = @_;
my $SMSInbox = "/var/spool/gammu/inbox";
# create a new object
our $inotify = new Linux::Inotify2;
# create watch
if ($inotify->watch ($SMSInbox, IN_CLOSE_WRITE | IN_CLOSE_NOWRITE | IN_CREATE | IN_DELETE | IN_MOVED_TO | IN_MOVED_FROM, sub {
my $event = shift;
Log 1, "Notify-Event on $event->fullname, $event->name, $event->mask";
})) {
Log 1, "Notifier installed for $SMSInbox";
} else {
Log 1, "Notifier not installed for $SMSInbox : $!";
}
}
Schau dir bitte die myUtilsTemplate.pm Datei an. Dort steht wie und wo Du Deinen eigenen Code einfügen kannst in eine myUtils. So ist es falsch wie Du es gemacht hast.
Weiterhin muss man regelmaesig (per InternalTimer?) $inotify->poll aufrufen, was FHEM sinnlos belastet.
Wenn man es richtig machen will:
- Ein FHEM-Modul bauen mit DefFn und ReadFn
- im DefFn $inotify anlegen, "$hash->{FD} = $inotify->fileno" und "$selectlist{$hash->{NAME}} = $hash" setzen.
- im ReadFn $inotify->poll aufrufen
Das ist natuerlich skizzenhaft und nicht getestet.
Ich habe für meinen Gebrauch zufällig vor ein paar Wochen ein Modul dafür gebastelt. Das habe ich nun etwas verfeinert und im git eingecheckt. Ggf. ist es hilfreich:
https://forum.fhem.de/index.php/topic,83538.new.html
@marvin: sieht gut aus (das Modul) - ich habs installiert - jetzt würd ich erwarten, dass im log von fhem events geloggt werden - werden sie aber nicht...
Bitte im Modulthread (https://forum.fhem.de/index.php/topic,83538.new.html) weiter machen. Und dort dann bitte genaue Infos über deine Umgebung geben (list vom inotify-Device, Filesystem, mask etc.). So kann ich nur raten. Auch muss ich nun raten, welches Log du meinst. Es gibt Readings und es gibt Events bei richtiger Konfiguration.
Wichtig: inotify - das Linuxy-Kernelmodul kann nur Änderungen im lokalen Filesystem erkennen.