diff options
| author | Jon duSaint | 2022-07-17 10:48:29 -0700 |
|---|---|---|
| committer | Jon duSaint | 2022-07-17 10:48:29 -0700 |
| commit | 6ea9831e0d7616640fb6dfd25835959715ebe8d9 (patch) | |
| tree | 2f00ad98b7842547d58088f68517a9eb4b5e459d | |
| parent | d77975cb1c7b9ed5571fc1e700a3a4e281b0a47d (diff) | |
reolink: Add spool retention policy
Default now is to keep images in spool only for 24 hours. This can be changed via a client command or the config file.
| -rwxr-xr-x | reolink/reolink | 34 | ||||
| -rw-r--r-- | reolink/reolink.8 | 2 | ||||
| -rw-r--r-- | reolink/reolink.conf | 3 | ||||
| -rw-r--r-- | reolink/reolink.conf.5 | 2 |
4 files changed, 38 insertions, 3 deletions
diff --git a/reolink/reolink b/reolink/reolink index d950852..8d24810 100755 --- a/reolink/reolink +++ b/reolink/reolink @@ -21,6 +21,8 @@ my $global_config = \%default_config; # 30s is 1920 shots over 16 hours. At 24fps, this makes a 1:20 video. my ($min_interval, $interval, $max_interval) = (10, 30, 600); +# Retain images in the spool 24 hours by default +my $spool_retention_time = 24; my $default_video_range = '0530-2130'; my %commands = ( @@ -35,6 +37,12 @@ my %commands = ( server => \&Server::snapshot, help => 'Take a snapshot now' }, + spooltime => { + args => 1, + server => \&Server::set_spooltime, + validate => sub { $_[0] > 0 && int($_[0]) == $_[0] }, + help => 'Set spool retention time (in hours)' + }, status => { args => 0, server => \&Server::server_status, @@ -80,6 +88,8 @@ sub load_params { $params->{interval} = $value; } elsif ($key =~ m/^spool(?:_dir)?$/) { $params->{spool_dir} = $value; + } elsif ($key =~ m/^spool[-_]time$/ and $commands{spooltime}->{validate} ($value)) { + $params->{spooltime} = $value; } elsif ($key =~ m/^(?:reolink|camera)(?:_ip)?$/) { $params->{reolink_ip} = $value; } elsif ($key =~ m/^video(?:[-_]?times?)?$/ and $commands{video}->{validate} ($value)) { @@ -100,7 +110,7 @@ use Getopt::Long; use IO::Select; use OpenBSD::Pledge; use OpenBSD::Unveil; -use POSIX qw(setsid :sys_wait_h); +use POSIX qw(mktime setsid :sys_wait_h); use Socket; use Sys::Syslog qw/:standard :macros/; @@ -118,6 +128,7 @@ BEGIN { my %server_params = (interval => $interval, reolink_ip => '192.168.127.1', + spooltime => $spool_retention_time, video => $default_video_range); my $camera_host = '192.168.127.10'; my ($debug, $local) = (0, 0); @@ -151,6 +162,7 @@ sub save_params { print $fh "# Autogenerated ".localtime.".\n"; print $fh "interval: $server_params{interval}\n"; print $fh "spool_dir: $server_params{spool_dir}\n"; + print $fh "spool_time: $server_params{spooltime}\n"; print $fh "reolink_ip: $server_params{reolink_ip}\n"; print $fh "video: $server_params{video}\n"; @@ -213,6 +225,12 @@ sub set_interval { "ok"; } +sub set_spooltime { + $server_params{spooltime} = $_[1]; + save_params; + "ok"; +} + sub video { $server_params{video} = $_[1]; save_params; @@ -316,7 +334,7 @@ sub maybe_generate_video { my @t = localtime; my $time = sprintf ('%d%02d', $t[2], $t[1]); if ($time < $end_time) { - debug ("too early ($time < $end_time)"); + debug ("too early to generate video ($time < $end_time)"); return; } @@ -358,7 +376,17 @@ sub maybe_generate_video { sub respool { # Retain only past 24 hours of stills - + my $t = time - $server_params{spooltime} * 60 * 60; + + foreach my $image (<"$server_params{spool_dir}/*.jpg">) { + if ($image =~ m/(\d{4})(\d{2})(\d{2})-(\d{2})(\d{2})(\d{2})\.jpg/) { + my $file_time = mktime ($6, $5, $4, $3, $2 - 1, $1 - 1900); + if ($file_time < $t) { + debug ("delete $image ($file_time $t)"); + unlink $image; + } + } + } } sub upload { diff --git a/reolink/reolink.8 b/reolink/reolink.8 index 1494381..ccd702b 100644 --- a/reolink/reolink.8 +++ b/reolink/reolink.8 @@ -53,6 +53,8 @@ Set snapshot interval Send the pid of the server .It snapshot Ta Take a snapshot now +.It spooltime Ta +Set spool retention time (in hours) .It status Ta Send status of the server .It ping Ta diff --git a/reolink/reolink.conf b/reolink/reolink.conf index b2abe00..cf37f2d 100644 --- a/reolink/reolink.conf +++ b/reolink/reolink.conf @@ -8,6 +8,9 @@ interval: 30 # Where to store snapshots and videos spool_dir: /var/spool/reolink +# Retain images in the spool for 24 hours +spool_time: 24 + # IP address of camera reolink_ip: 192.168.127.10 diff --git a/reolink/reolink.conf.5 b/reolink/reolink.conf.5 index aefcde8..a034b6d 100644 --- a/reolink/reolink.conf.5 +++ b/reolink/reolink.conf.5 @@ -23,6 +23,8 @@ Unknown directives are ignored. Known directives are: How often to take a snapshot .It spool_dir Ta Where to store snapshots and videos +.It spool_time Ta +How long, in hours, to retain images in the spool .It reolink_ip Ta IP address of camera .It video Ta |
