Browse code

Adaugat daemonul scris in PERL care parseaza mesajele MQTT

Liviu Pislaru authored on 03/03/2018 21:24:57
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,62 @@
0
+#!/usr/bin/perl
1
+# parser pentru mesajele MQTT
2
+# Version: 1.0.0 
3
+use strict;
4
+use warnings;
5
+use JSON qw( decode_json );
6
+use DBI;
7
+use Proc::Daemon;
8
+
9
+# partea de daemon
10
+###################################
11
+Proc::Daemon::Init;
12
+my $continue = 1;
13
+$SIG{TERM} = sub { $continue = 0 };
14
+###################################
15
+
16
+# citesc fisierul de config
17
+my $config = '/etc/mqttparser.conf';
18
+open my $CFG, $config or die "Could not open my $config: my $!";
19
+
20
+my $db;
21
+my $dbuser;
22
+my $dbpass;
23
+my $dbhost;
24
+my $mqttuser;
25
+my $mqttpass;
26
+my $row=1;
27
+while( my $line = <$CFG>){
28
+  my @credentials = split /=/, $line;
29
+  if ($row==1) {$db = $credentials[1]; chomp($db);}
30
+  if ($row==2) {$dbuser = $credentials[1]; chomp($dbuser);}
31
+  if ($row==3) {$dbpass = $credentials[1]; chomp($dbpass);}
32
+  if ($row==4) {$dbhost = $credentials[1]; chomp($dbhost);}
33
+  if ($row==5) {$mqttuser = $credentials[1]; chomp($mqttuser);}
34
+  if ($row==6) {$mqttpass = $credentials[1]; chomp($mqttpass);}
35
+  $row++;
36
+}
37
+close $CFG;
38
+
39
+# scriu pid-ul
40
+open PID, ">>/var/run/mqttparser.pid" or die "Couldn't open file: $!";
41
+print PID "$$\n";
42
+close PID;
43
+
44
+my $dbh = DBI->connect("DBI:mysql:$db:$dbhost", $dbuser, $dbpass);
45
+open(my $SUB, "/usr/bin/mosquitto_sub -u $mqttuser -P $mqttpass -v -t \"stat/rqx958t-1459/#\" |");
46
+while (my $mqttMessage = <$SUB> ) {
47
+    # spargem mqttMessage in doua, dupa primul spatiu si obtinem topicul si json-ul:
48
+    (my $topic, my $json) = split /\ /, $mqttMessage, 2;
49
+    my $decoded = decode_json($json);
50
+    my $query = "insert into mqttparser values (?, ?, ?)";
51
+    my $sqlQuery  = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n";
52
+    $sqlQuery->execute('0', $decoded->{'Temp'}, '2');
53
+    $sqlQuery->finish();
54
+}
55
+$dbh->disconnect;
56
+
57
+# partea de daemon
58
+###################################
59
+while ($continue) {
60
+}
61
+###################################