Browse code

Scriu in DB: LWT si partea de Power (Today / Yesterday) Scriu in FILE: valorile de temperatura si umiditate pentru grafice

Liviu Pislaru authored on 04/03/2018 22:30:00
Showing 1 changed files
... ...
@@ -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;