| ... | ... |
@@ -1,12 +1,13 @@ |
| 1 | 1 |
#!/usr/bin/perl |
| 2 | 2 |
# parser pentru mesajele MQTT |
| 3 |
-# Version: 1.0.2 |
|
| 3 |
+# Version: 1.0.3 |
|
| 4 | 4 |
|
| 5 | 5 |
use strict; |
| 6 | 6 |
use warnings; |
| 7 | 7 |
use JSON qw( decode_json ); |
| 8 | 8 |
use DBI; |
| 9 | 9 |
use Proc::Daemon; |
| 10 |
+use POSIX qw(strftime); |
|
| 10 | 11 |
|
| 11 | 12 |
# pentru debug pun daemon=0 ca sa nu mai ruleze ca daemon |
| 12 | 13 |
my $daemon=1; |
| ... | ... |
@@ -52,10 +53,14 @@ while (my $mqttMessage = <$SUB> ) {
|
| 52 | 52 |
if (index($mqttMessage, "{") == -1) {
|
| 53 | 53 |
#print "Mesajul nu contine json, il sparg dupa spatiu\n" |
| 54 | 54 |
(my $channel, my $nonjson) = split /\ /, $mqttMessage, 2; |
| 55 |
+ chomp($nonjson); |
|
| 55 | 56 |
(my $root, my $topic, my $queue) = split /\//, $channel; |
| 56 | 57 |
# aleg canalele de unde salvez date in DB: |
| 57 | 58 |
if ($queue eq "LWT"){
|
| 58 |
- getdevinfoFILE ($topic, "LWT", $nonjson); |
|
| 59 |
+ #stergem consumul pentru azi si ieri cand este offline priza |
|
| 60 |
+ if ($nonjson eq 'Offline') {
|
|
| 61 |
+ # mysql_query("delete from getdevinfo where user='$mqtt_user' and devid='$mqtt_dev' and (camp='Yesterday' || camp='Today');");
|
|
| 62 |
+ } |
|
| 59 | 63 |
getdevinfoDB ($topic, "LWT", $nonjson); |
| 60 | 64 |
} |
| 61 | 65 |
else {
|
| ... | ... |
@@ -73,14 +78,21 @@ while (my $mqttMessage = <$SUB> ) {
|
| 73 | 73 |
if ($queue eq "ENERGY"){
|
| 74 | 74 |
# tele/mng9184-1657/ENERGY {"Time":"2018-03-04T13:18:39","Total":1376.995,"Yesterday":23.704,"Today":16.450,"Period":102,"Power":1255,"Factor":0.99,"Voltage":237,"Current":5.298}
|
| 75 | 75 |
my $decoded = decode_json($json); |
| 76 |
- my $yesterday = $decoded->{'Yesterday'};
|
|
| 77 |
- my $today = $decoded->{'Today'};
|
|
| 78 |
- getdevinfoFILE ($topic, "Yesterday", $yesterday); |
|
| 79 |
- getdevinfoDB ($topic, "Yesterday", $yesterday); |
|
| 80 |
- getdevinfoFILE ($topic, "Today", $today); |
|
| 81 |
- getdevinfoDB ($topic, "Today", $today); |
|
| 76 |
+ if (exists $decoded->{'Yesterday'}){
|
|
| 77 |
+ getdevinfoDB ($topic, "Yesterday", $decoded->{'Yesterday'});
|
|
| 78 |
+ } |
|
| 79 |
+ if (exists $decoded->{'Today'}){
|
|
| 80 |
+ getdevinfoDB ($topic, "Today", $decoded->{'Today'});
|
|
| 81 |
+ } |
|
| 82 | 82 |
} |
| 83 | 83 |
if ($queue eq "ESP"){
|
| 84 |
+ my $decoded = decode_json($json); |
|
| 85 |
+ if (exists $decoded->{'Temp'}){
|
|
| 86 |
+ getdevinfoFILE ($topic, "Temp", $decoded->{'Temp'});
|
|
| 87 |
+ } |
|
| 88 |
+ if (exists $decoded->{'Humi'}){
|
|
| 89 |
+ getdevinfoFILE ($topic, "Humi", $decoded->{'Humi'});
|
|
| 90 |
+ } |
|
| 84 | 91 |
} |
| 85 | 92 |
} |
| 86 | 93 |
} |
| ... | ... |
@@ -88,7 +100,6 @@ while (my $mqttMessage = <$SUB> ) {
|
| 88 | 88 |
#print 'Nu ma intereseaza mesajele astea!\n$mqttMessage'; |
| 89 | 89 |
} |
| 90 | 90 |
} |
| 91 |
-$dbh->disconnect; |
|
| 92 | 91 |
|
| 93 | 92 |
if ($daemon==1){
|
| 94 | 93 |
while ($continue) {
|
| ... | ... |
@@ -97,21 +108,41 @@ if ($daemon==1){
|
| 97 | 97 |
|
| 98 | 98 |
sub getdevinfoFILE {
|
| 99 | 99 |
(my $topic, my $camp, my $valoare) = @_; |
| 100 |
- my $cale='/admin/scripts/mqtt-perl/mqttparser.devel.txt'; |
|
| 101 |
- my $tm=localtime; |
|
| 102 |
- open (my $fh, '>>', $cale) or die "Cannot open"; |
|
| 103 |
- (my $user, my $devid) = split /\-/, $topic; |
|
| 104 |
- print $fh "$tm: Update FILE getdevinfo: $user - $devid - $camp - $valoare\n"; |
|
| 100 |
+ my $cale='/var/www/html/www.clickhome.ro/colect/'; |
|
| 101 |
+ my $filename; |
|
| 102 |
+ if ($camp eq "Temp"){
|
|
| 103 |
+ $filename="temperatura.txt"; |
|
| 104 |
+ } |
|
| 105 |
+ if ($camp eq "Humi"){
|
|
| 106 |
+ $filename="umiditate.txt"; |
|
| 107 |
+ } |
|
| 108 |
+ my $folder = $cale.$topic; |
|
| 109 |
+ unless(-e $folder or mkdir $folder) {
|
|
| 110 |
+ } |
|
| 111 |
+ my $cale_fisier=$folder."/".$filename; |
|
| 112 |
+ my $newline=""; |
|
| 113 |
+ if (-e $cale_fisier) {
|
|
| 114 |
+ $newline=",\n"; |
|
| 115 |
+ } |
|
| 116 |
+ my $month=strftime("%m", localtime(time));
|
|
| 117 |
+ $month--; |
|
| 118 |
+ my $date = strftime("[Date.UTC(%Y,$month,%d,%H,%M,%S)", localtime(time));
|
|
| 119 |
+ my $graph = $newline.$date.", ".$valoare."]"; |
|
| 120 |
+ open (my $fh, '>>', $cale_fisier) or die "Cannot open $cale_fisier"; |
|
| 121 |
+ print $fh "$graph"; |
|
| 105 | 122 |
close $fh; |
| 106 | 123 |
return; |
| 107 | 124 |
} |
| 108 | 125 |
|
| 109 | 126 |
sub getdevinfoDB {
|
| 110 | 127 |
(my $topic, my $camp, my $valoare) = @_; |
| 111 |
- my $query = "insert into mqttparser values (?, ?, ?)"; |
|
| 112 |
- my $sqlQuery = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n"; |
|
| 113 |
- my $tm=localtime; |
|
| 114 |
- (my $user, my $devid) = split /\-/, $topic; |
|
| 115 |
- $sqlQuery->execute('0', "$tm", "$user - $devid - $camp - $valoare");
|
|
| 128 |
+# mysql_query("insert into getdevinfo values('$MQTTuser','$MQTTdevice','$MQTTcamp','$MQTTvaloare') on duplicate key update camp='$MQTTcamp',valoare='$MQTTvaloare';");
|
|
| 129 |
+# my $query = "insert into getdevinfo values (?, ?, ?, ?) on duplicate key update camp=$camp,valoare='$valoare"; |
|
| 130 |
+ (my $user, my $devid) = split /\-/, $topic; |
|
| 131 |
+ my $query = "UPDATE getdevinfo SET valoare=? WHERE user=? and devid=? and camp=?"; |
|
| 132 |
+ my $sth = $dbh->prepare($query) or die "Can't prepare $query: $dbh->errstr\n"; |
|
| 133 |
+ $sth->execute("$valoare", "$user", "$devid", "$camp");
|
|
| 134 |
+ $sth->finish(); |
|
| 116 | 135 |
return; |
| 117 | 136 |
} |
| 137 |
+$dbh->disconnect; |