-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathupdate_meters.pl
executable file
·170 lines (141 loc) · 3.86 KB
/
update_meters.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use DBI;
use Config;
use Time::HiRes qw( usleep );
use lib qw( /etc/apache2/perl );
use lib qw( /opt/local/apache2/perl );
use lib qw( /Users/loppen/Documents/stoffer/MeterLoggerWeb/perl );
use lib qw( /Users/stoffer/src/esp8266/MeterLoggerWeb/perl );
use Nabovarme::MQTT_RPC;
use constant RPC_TIMEOUT => 300; # 5 minutes
$SIG{HUP} = \&get_version_and_status;
$SIG{USR1} = \&get_wifi_scan_results;
$SIG{INT} = \&sig_int_handler;
warn("starting...\n");
my $dbh;
my $sth;
my $d;
my $nabovarme_mqtt = new Nabovarme::MQTT_RPC;
$nabovarme_mqtt->connect() || die $!;
# connect to db
if ($dbh = Nabovarme::Db->my_connect) {
$dbh->{'mysql_auto_reconnect'} = 1;
warn("connected to db\n");
}
else {
warn("cant't connect to db $!\n");
die $!;
}
get_version_and_status();
while (1) {
sleep 60;
}
# end of main
sub get_version_and_status {
$sth = $dbh->prepare(qq[SELECT `type`, `serial`, `key` FROM meters WHERE `key` is not NULL AND `type` NOT LIKE 'aggregated']);
$sth->execute;
warn("send mqtt retain to all meters for version and status\n");
while ($d = $sth->fetchrow_hashref) {
warn(" send mqtt version, status and uptime commands to " . $d->{serial} . "\n");
# send version
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'version',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
unless ($d->{type} =~ /^electricity$/i) {
# send status
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'status',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
}
# send uptime
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'uptime',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send ssid
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'ssid',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send rssi
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'rssi',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send wifi_status
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'wifi_status',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send ap_status
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'ap_status',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send reset_reason
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'reset_reason',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send network_quality
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'network_quality',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
}
}
sub get_wifi_scan_results {
$sth = $dbh->prepare(qq[SELECT `serial`, `key` FROM meters WHERE `key` is not NULL AND `type` NOT LIKE 'aggregated']);
$sth->execute;
warn("send mqtt scan command to all meters\n");
while ($d = $sth->fetchrow_hashref) {
warn(" send mqtt scan commands to " . $d->{serial} . "\n");
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'scan',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send flash_id
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'flash_id',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
# send flash_size
$nabovarme_mqtt->call({ serial => $d->{serial},
function => 'flash_size',
param => '1',
callback => undef,
timeout => RPC_TIMEOUT
});
}
}
sub sig_int_handler {
die $!;
}
1;
__END__