-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsdm630.py
38 lines (29 loc) · 1.35 KB
/
sdm630.py
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
#usage: python3 sdm630.py host port database measurement counter usb id
import minimalmodbus
from influxdb import InfluxDBClient
import sys
from datetime import datetime, timezone
client = InfluxDBClient(host=str(sys.argv[1]), port=int(sys.argv[2]), username=str(sys.argv[4]), password=str(sys.argv[5]))
client.switch_database(str(sys.argv[3]))
instrument = minimalmodbus.Instrument(str(sys.argv[8]), int(sys.argv[9])) # port name, slave address (in decimal)
timestamp = str(datetime.now(timezone.utc).strftime("%Y-%m-%d")) + "T" + str(datetime.utcnow().strftime("%H:%M")) + ":00"
print(timestamp)
json_body = [
{
"measurement": sys.argv[6],
"fields": {
"add": "sdm630",
},
"time": timestamp
},
]
if sys.argv[7] == "l1":
json_body[0]["fields"]["value"] = round(instrument.read_float(functioncode=4, registeraddress=358, number_of_registers=2), 2)
elif sys.argv[7] == "l2":
json_body[0]["fields"]["value"] = round(instrument.read_float(functioncode=4, registeraddress=360, number_of_registers=2), 2)
elif sys.argv[7] == "l3":
json_body[0]["fields"]["value"] = round(instrument.read_float(functioncode=4, registeraddress=362, number_of_registers=2), 2)
elif sys.argv[7] == "all":
json_body[0]["fields"]["value"] = round(instrument.read_float(functioncode=4, registeraddress=342, number_of_registers=2), 2)
client.write_points(json_body)
print(json_body)