-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathpzem-rest-to-influx.rb
88 lines (70 loc) · 1.46 KB
/
pzem-rest-to-influx.rb
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
#!/usr/bin/ruby
require 'pp'
require 'influxdb' # gem install influxdb
require 'net/http'
$stdout.sync = true
class PZEM
def initialize server
@server=server
end
# power in Watt as a float
def power
get('power').chomp('W').to_f
end
# power in Watt/h as a float
def energy
get('energy').chomp('Wh').to_f
end
# voltage in Volt as a float
def voltage
get('voltage').chomp('V').to_f
end
# current in Ampere as a float
def current
get('current').chomp('A').to_f
end
# get all in one as 225.20V;1.170A;227.0W;377.0Wh
def all
get('power/all')
end
def get method
Net::HTTP.get(URI.parse('http://'+@server+'/'+method))
end
end
begin
begin
server='192.168.0.XXX' # your PZEM/ESp32 serveur IP
pzem=PZEM.new server
values={
:voltage => pzem.voltage,
:power => pzem.power,
:energy => pzem.energy,
# :current => pzem.current # not mandatory : need only power and energy
}
# influxdb server / no password herer
host = 'influx-db-server-name-or-ip'
port = 8086
database = 'energy'
influx = InfluxDB::Client.new database,
host: host,
port: port,
# user: user,
# password: password,
time_precision: 's'
data = {
values: values,
tags: {
"device" => "pzem-004t",
"location" => "home"
}
}
influx.write_point(database, data)
pp data
sleep 20
end while true
rescue StandardError => e
puts "exception ; retrying ..."
pp e
sleep 30
retry
end