package POEDaemon::Cron; use strict; use warnings FATAL => 'all'; no warnings 'redefine'; use Data::Dumper; use POSIX qw(strftime); use POE; use POEDaemon; sub states { return $_[0], [qw( cron_start cron )]; } sub cron_start { my $kernel = $_[KERNEL]; $kernel->yield('cron'); } sub cron { my ($kernel, $heap, $state) = @_[KERNEL, HEAP, STATE]; my $date = strftime "%Y-%m-%d %H:%M:%S", localtime; #log_enabled && logline "date = '%s'", $date; if ($date =~ /^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:00$/) { unless ($heap->{cron}->{seconds_zero}) { $heap->{cron}->{seconds_zero} = 1; #log_enabled && logline 'seconds are zero'; $kernel->yield(eventsystem_input => { type => 'time', datetime => $date, time => time_hires, }); } } else { delete $heap->{cron}->{seconds_zero}; } if ($date =~ /^\d{4}-\d{2}-01\s+00:00:00$/) { unless ($heap->{cron}->{first_day_of_month}) { $heap->{cron}->{first_day_of_month} = 1; #log_enabled && logline 'first day of month'; } } else { delete $heap->{cron}->{first_day_of_month}; } #log_enabled && logline "heap->{gpio}\n%s", Dumper $heap->{gpio}; #if ($heap->{gpio}) #{ # $heap->{gpio}->toggle_pin_value(54); #} unless ($heap->{shutdown}) { $kernel->delay($state => 0.1); } } 1;