#!/usr/bin/perl
# parser pentru mesajele MQTT
# Version: 1.0.0 
use strict;
use warnings;
use JSON qw( decode_json );
use DBI;
use Proc::Daemon;

# partea de daemon
###################################
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
###################################

# citesc fisierul de config
my $config = '/etc/mqttparser.conf';
open my $CFG, $config or die "Could not open my $config: my $!";

my $db;
my $dbuser;
my $dbpass;
my $dbhost;
my $mqttuser;
my $mqttpass;
my $row=1;
while( my $line = <$CFG>){
  my @credentials = split /=/, $line;
  if ($row==1) {$db = $credentials[1]; chomp($db);}
  if ($row==2) {$dbuser = $credentials[1]; chomp($dbuser);}
  if ($row==3) {$dbpass = $credentials[1]; chomp($dbpass);}
  if ($row==4) {$dbhost = $credentials[1]; chomp($dbhost);}
  if ($row==5) {$mqttuser = $credentials[1]; chomp($mqttuser);}
  if ($row==6) {$mqttpass = $credentials[1]; chomp($mqttpass);}
  $row++;
}
close $CFG;

# scriu pid-ul
open PID, ">>/var/run/mqttparser.pid" or die "Couldn't open file: $!";
print PID "$$\n";
close PID;

my $dbh = DBI->connect("DBI:mysql:$db:$dbhost", $dbuser, $dbpass);
open(my $SUB, "/usr/bin/mosquitto_sub -u $mqttuser -P $mqttpass -v -t \"stat/rqx958t-1459/#\" |");
while (my $mqttMessage = <$SUB> ) {
    # spargem mqttMessage in doua, dupa primul spatiu si obtinem topicul si json-ul:
    (my $topic, my $json) = split /\ /, $mqttMessage, 2;
    my $decoded = decode_json($json);
    my $query = "insert into mqttparser values (?, ?, ?)";
    my $sqlQuery  = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n";
    $sqlQuery->execute('0', $decoded->{'Temp'}, '2');
    $sqlQuery->finish();
}
$dbh->disconnect;

# partea de daemon
###################################
while ($continue) {
}
###################################