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
| db_user = "dbuser"
db_pass = "dbpassword"
db_name = "solaredge"
db_host = "localhost"
db_port = 3306
db_host1 = "192.168.1.78"
db_port1 = 3307
.....................
class DBManager:
def __init__(self, user, passwd, db, host ,port, retries=5):
self.retries = retries
while retries:
try:
self.conn = MySQLdb.connect(user=user, passwd=passwd, db=db, host=host, port=port)
self.cursor = self.conn.cursor()
retries = 0
except MySQLdb.Error as e:
retries -= 1
if not retries:
raise
eprint("Warning: Could not connect to database: %s; retrying..." % e)
time.sleep(1)
......................
# Connect to database and get last 0503 message.
db = DBManager(db_user, db_pass, db_name, db_host, db_port)
if db_host1 > "":
db1 = DBManager(db_user, db_pass, db_name, db_host1, db_port1)
........................
for hdr, msg in parser.get_messages(byteiterator):
if hdr[6] == 0x0503:
eprint("Setting new 0503 key")
db.execute("UPDATE live_update SET last_0503 = %s", (msg,))
db.commit()
if db_host1 > "":
db1.execute("UPDATE live_update SET last_0503 = %s", (msg,))
db1.commit()
if hdr[6] != 0x0500:
continue
updated = False
for telem in parse0500(msg):
if "op_id" in telem:
db.execute(
"INSERT IGNORE INTO telemetry_optimizers "
"(op_id, timestamp, uptime, v_in, v_out, i_in, e_day, temperature) VALUES "
"(%(op_id)s, %(timestamp)s, %(uptime)s, %(v_in)s, %(v_out)s, %(i_in)s, %(e_day)s, %(temperature)s)",
telem)
if db_host1 > "":
db1.execute(
"INSERT IGNORE INTO telemetry_optimizers "
"(op_id, timestamp, uptime, v_in, v_out, i_in, e_day, temperature) VALUES "
"(%(op_id)s, %(timestamp)s, %(uptime)s, %(v_in)s, %(v_out)s, %(i_in)s, %(e_day)s, %(temperature)s)",
telem)
updated = True
elif "v_ac" in telem:
db.execute(
"INSERT IGNORE INTO telemetry_inverter "
"(inv_id, timestamp, temperature, e_day, de_day, v_ac, i_ac, frequency, v_dc, e_total, i_rcd, mode, p_active, p_apparent, p_reactive) VALUES "
"(%(inv_id)s, %(timestamp)s, %(temperature)s, %(e_day)s, %(de_day)s, %(v_ac)s, %(i_ac)s, %(frequency)s, %(v_dc)s, %(e_total)s, %(i_rcd)s, %(mode)s, %(p_active)s, %(p_apparent)s, %(p_reactive)s)",
telem)
if db_host1 > "":
db1.execute(
"INSERT IGNORE INTO telemetry_inverter "
"(inv_id, timestamp, temperature, e_day, de_day, v_ac, i_ac, frequency, v_dc, e_total, i_rcd, mode, p_active, p_apparent, p_reactive) VALUES "
"(%(inv_id)s, %(timestamp)s, %(temperature)s, %(e_day)s, %(de_day)s, %(v_ac)s, %(i_ac)s, %(frequency)s, %(v_dc)s, %(e_total)s, %(i_rcd)s, %(mode)s, %(p_active)s, %(p_apparent)s, %(p_reactive)s)",
telem)
updated = True
elif "v_ac1" in telem:
db.execute(
"INSERT IGNORE INTO telemetry_inverter_3phase "
"(inv_id, timestamp, temperature, e_day, de_day, v_ac1, v_ac2, v_ac3, i_ac1, i_ac2, i_ac3, frequency1, frequency2, frequency3, v_dc, e_total, i_rcd, mode, v_1to2, v_2to3, v_3to1, p_active1, p_active2, p_active3, p_apparent1, p_apparent2, p_apparent3, p_reactive1, p_reactive2, p_reactive3) VALUES "
"(%(inv_id)s, %(timestamp)s, %(temperature)s, %(e_day)s, %(de_day)s, %(v_ac1)s, %(v_ac2)s, %(v_ac3)s, %(i_ac1)s, %(i_ac2)s, %(i_ac3)s, %(frequency1)s, %(frequency2)s, %(frequency3)s, %(v_dc)s, %(e_total)s, %(i_rcd)s, %(mode)s, %(v_1to2)s, %(v_2to3)s, %(v_3to1)s, %(p_active1)s, %(p_active2)s, %(p_active3)s, %(p_apparent1)s, %(p_apparent2)s, %(p_apparent3)s, %(p_reactive1)s, %(p_reactive2)s, %(p_reactive3)s)",
telem)
if db_host1 > "":
db1.execute(
"INSERT IGNORE INTO telemetry_inverter_3phase "
"(inv_id, timestamp, temperature, e_day, de_day, v_ac1, v_ac2, v_ac3, i_ac1, i_ac2, i_ac3, frequency1, frequency2, frequency3, v_dc, e_total, i_rcd, mode, v_1to2, v_2to3, v_3to1, p_active1, p_active2, p_active3, p_apparent1, p_apparent2, p_apparent3, p_reactive1, p_reactive2, p_reactive3) VALUES "
"(%(inv_id)s, %(timestamp)s, %(temperature)s, %(e_day)s, %(de_day)s, %(v_ac1)s, %(v_ac2)s, %(v_ac3)s, %(i_ac1)s, %(i_ac2)s, %(i_ac3)s, %(frequency1)s, %(frequency2)s, %(frequency3)s, %(v_dc)s, %(e_total)s, %(i_rcd)s, %(mode)s, %(v_1to2)s, %(v_2to3)s, %(v_3to1)s, %(p_active1)s, %(p_active2)s, %(p_active3)s, %(p_apparent1)s, %(p_apparent2)s, %(p_apparent3)s, %(p_reactive1)s, %(p_reactive2)s, %(p_reactive3)s)",
telem)
updated = True
if updated:
db.execute("UPDATE live_update SET last_telemetry = %s", (int(time.time()),))
db.commit()
if db_host1 > "":
db1.execute("UPDATE live_update SET last_telemetry = %s", (int(time.time()),))
db1.commit()
f.close() |