use Socket;
use strict;
my $fh;
-#my $fifofile = "/tmp/door_cmd.fifo";
-my $socketfile = "/tmp/door_cmd.socket";
-exit(1) unless (-S $socketfile);
+my $socketfile = $ARGV[0] || "/var/run/tuer/door_cmd.socket";
+my $keysfile = '/flash/keys';
+
+sleep(1) while (! -S $socketfile);
my $socketaddr = sockaddr_un($socketfile);
-my $keys;
my %good;
+my $keys_last_read=0;
-open $keys,'/flash/realraum/keys';
-while (<$keys>)
+sub read_keys
{
- if ($_ =~ /([0-9A-Fa-f]{8})\s(\S+)/)
- {
- $good{$1}=$2;
- }
+ %good=();
+ my $keys;
+ open $keys,$keysfile;
+ while (<$keys>)
+ {
+ chomp;
+ if ($_ =~ /^([0-9A-Fa-f]{8})\s+(.+)$/)
+ {
+ $good{$1}=$2;
+ }
+ }
+ close $keys;
+ $keys_last_read = -M ($keysfile);
}
sub send_to_fifo
close($conn);
}
-while (sleep 1)
+read_keys();
+
+
+while (sleep 2)
{
- open $fh,'/flash/realraum/mifare-read 0 2>&1 |';
- while (<$fh>)
- {
- next unless /UID/;
+ send_to_fifo("log starting mifare-read");
+ open $fh,'/flash/tuer/mifare-read 0 2>&1 |';
+
+ read_keys() unless ($keys_last_read == -M ($keysfile));
+
+ READLOOP: while (<$fh>)
+ {
+ unless (/UID/)
+ {
+ close($fh);
+ system("/usr/bin/killall -9 mifare-read");
+ send_to_fifo("log restarting mifare-read after invalid output");
+ last READLOOP;
+ }
my ($id) = /UID=(\S+)\s+/;
if ($good{$id})
{