#!/opt/bin/perl -w

use lib '/pub/rrd/lib';
use OwfsSensors;

my $now  = time;
my $tmp  = "/pub/rrd/.smoking";
my $stat = "/pub/rrd/smoke_stat.txt";

my $treshold = 150;
my $sensor   = OwfsSensors::file("rokgas");
my $temp     = `cat $sensor`;

if (!(-e $stat))
{
  system("touch $stat");
}

#print "DEBUG: $temp $treshold\n";

if (-e "$tmp")
{
  if ($temp < $treshold)
  {
    my $fh;
    open($fh, "<", $tmp);
    my $avg       = int(average($fh));
    my $min       = minimum($fh);
    my $max       = maximum($fh);
    my $starttime = start($fh);
    close($fh);

    my $runtime   = $now - $starttime;
    my $date      = `date`;
    system("echo -n \"$date\"                                        >> $stat");
    system("echo    \"Brännare startade $starttime\"                 >> $stat");
    system("echo    \"Brännare stannade $now\"                       >> $stat");
    system("echo    \"Gångtid $runtime sekunder\"                    >> $stat");
    system("echo    \"Maxtemperatur   i Celsius: $max grader\"       >> $stat");
    system("echo    \"Medeltemperatur i Celsius: $avg grader\"       >> $stat");
    system("echo                                                     >> $stat");
    system("mv -f $tmp $tmp.last");
  }
  else
  {
    system("echo t $temp >> $tmp");
  }
}
else
{
  if ($temp > $treshold)
  {
#    print "DEBUG: Creating $tmp\n";
    system("echo start $now > $tmp");
    system("echo t $temp >> $tmp");
  }
}


#####################
### Local Methods ###
#####################

sub start {
  my $fh = shift @_;
  my $s  = 0;

  seek($fh, 0, 0);
  while(<$fh>) {
    if (/^start\s(\d*)/) {
      $s = $1;
    }
  }
  return $s;
}

sub minimum {
  my $fh = shift @_;
  my $m  = 1000;

  seek($fh, 0, 0);
  while(<$fh>) {
    if (/^t\s(\d*)/) {
      if($1 < $m) {
        $m = $1;
      }
    }
  }
  return $m;
}

sub maximum {
  my $fh = shift @_;
  my $m  = 0;

  seek($fh, 0, 0);
  while(<$fh>) {
    if (/^t\s(\d*)/) {
      if($1 > $m) {
        $m = $1;
      }
    }
  }
  return $m;
}


sub average {
  my $fh = shift @_;
  my $n  = 0;
  my $z  = 0;

  seek($fh, 0, 0);
  while(<$fh>) {
    if (/^t\s(\d*)/) {
      $z += $1;
      $n++;
    }
  }
  return $z/$n;
}