| ... | ... |
@@ -1,18 +1,23 @@ |
| 1 | 1 |
#!/usr/bin/perl |
| 2 | 2 |
# parser pentru mesajele MQTT |
| 3 |
-# Version: 1.0.0 |
|
| 3 |
+# Version: 1.0.1 |
|
| 4 | 4 |
use strict; |
| 5 | 5 |
use warnings; |
| 6 | 6 |
use JSON qw( decode_json ); |
| 7 | 7 |
use DBI; |
| 8 | 8 |
use Proc::Daemon; |
| 9 | 9 |
|
| 10 |
-# partea de daemon |
|
| 11 |
-################################### |
|
| 12 |
-Proc::Daemon::Init; |
|
| 13 |
-my $continue = 1; |
|
| 14 |
-$SIG{TERM} = sub { $continue = 0 };
|
|
| 15 |
-################################### |
|
| 10 |
+# pentru debug pun daemon=0 ca sa nu mai ruleze ca daemon |
|
| 11 |
+my $daemon=1; |
|
| 12 |
+my $continue; |
|
| 13 |
+if ($daemon==1){
|
|
| 14 |
+ Proc::Daemon::Init; |
|
| 15 |
+ $continue = 1; |
|
| 16 |
+ $SIG{TERM} = sub { $continue = 0 };
|
|
| 17 |
+ open PID, ">>/var/run/mqttparser.pid" or die "Couldn't open file: $!"; |
|
| 18 |
+ print PID "$$\n"; |
|
| 19 |
+ close PID; |
|
| 20 |
+} |
|
| 16 | 21 |
|
| 17 | 22 |
# citesc fisierul de config |
| 18 | 23 |
my $config = '/etc/mqttparser.conf'; |
| ... | ... |
@@ -37,26 +42,46 @@ while( my $line = <$CFG>){
|
| 37 | 37 |
} |
| 38 | 38 |
close $CFG; |
| 39 | 39 |
|
| 40 |
-# scriu pid-ul |
|
| 41 |
-open PID, ">>/var/run/mqttparser.pid" or die "Couldn't open file: $!"; |
|
| 42 |
-print PID "$$\n"; |
|
| 43 |
-close PID; |
|
| 44 |
- |
|
| 45 | 40 |
my $dbh = DBI->connect("DBI:mysql:$db:$dbhost", $dbuser, $dbpass);
|
| 46 |
-open(my $SUB, "/usr/bin/mosquitto_sub -u $mqttuser -P $mqttpass -v -t \"stat/rqx958t-1459/#\" |"); |
|
| 41 |
+open(my $SUB, "/usr/bin/mosquitto_sub -u $mqttuser -P $mqttpass -v -t \"stat/#\" |"); |
|
| 47 | 42 |
while (my $mqttMessage = <$SUB> ) {
|
| 48 |
- # spargem mqttMessage in doua, dupa primul spatiu si obtinem topicul si json-ul: |
|
| 49 |
- (my $topic, my $json) = split /\ /, $mqttMessage, 2; |
|
| 43 |
+ # spargem mqttMessage in doua, dupa prima { si obtinem canalul si json-ul:
|
|
| 44 |
+ my $channel = substr($mqttMessage, 0, index("$mqttMessage", '{'));
|
|
| 45 |
+ my $json = substr($mqttMessage, index("$mqttMessage", '{'), -1);
|
|
| 46 |
+ # spargem canalul: stat/esrqtsa-3434/ESP |
|
| 47 |
+ (my $root, my $topic, my $queue) = split /\//, $channel; |
|
| 48 |
+ # de obicei, exista un spatiu dupa afisarea canalului si-i fac remove |
|
| 49 |
+ $queue=~ s/\ //g; |
|
| 50 |
+ # cu mesajele care vin pe stat/+/ESP si contin in json Temp fac grafice |
|
| 51 |
+ if ($queue eq "ESP"){
|
|
| 50 | 52 |
my $decoded = decode_json($json); |
| 53 |
+ my $temp=$decoded->{'Temp'};
|
|
| 54 |
+ colect ($topic, 'Temp', $temp); |
|
| 51 | 55 |
my $query = "insert into mqttparser values (?, ?, ?)"; |
| 52 | 56 |
my $sqlQuery = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n"; |
| 53 |
- $sqlQuery->execute('0', $decoded->{'Temp'}, '2');
|
|
| 57 |
+ $sqlQuery->execute('0', $decoded->{'Temp'}, '101');
|
|
| 54 | 58 |
$sqlQuery->finish(); |
| 59 |
+ } |
|
| 55 | 60 |
} |
| 56 | 61 |
$dbh->disconnect; |
| 57 | 62 |
|
| 58 |
-# partea de daemon |
|
| 59 |
-################################### |
|
| 60 |
-while ($continue) {
|
|
| 63 |
+if ($daemon==1){
|
|
| 64 |
+ while ($continue) {
|
|
| 65 |
+ } |
|
| 66 |
+} |
|
| 67 |
+sub colect {
|
|
| 68 |
+ (my $device, my $camp, my $val) = @_; |
|
| 69 |
+ my $cale='/admin/scripts/mqtt-perl/test.txt'; |
|
| 70 |
+# my $filename="test.txt"; |
|
| 71 |
+# if ($camp eq "Temp"){
|
|
| 72 |
+# $filename="temperatura.txt"; |
|
| 73 |
+# } |
|
| 74 |
+# if ($camp eq "Humi"){
|
|
| 75 |
+# $filename="umiditate.txt"; |
|
| 76 |
+# } |
|
| 77 |
+ my $cale_fisier=$cale; |
|
| 78 |
+ open (my $fh, '>>', $cale_fisier) or die "Cannot open"; |
|
| 79 |
+ print $fh "valoare - topic: $val - $device\n"; |
|
| 80 |
+ close $fh; |
|
| 81 |
+ return; |
|
| 61 | 82 |
} |
| 62 |
-################################### |