-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
68 lines (58 loc) · 2.26 KB
/
main.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
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
import logging
import time
from typing import TypedDict
from time import sleep
from pysolarmanv5 import pysolarmanv5
from common.json import JsonHelper
from inverterreader.bucketer import Bucket, bucketIdentifiers
from inverterreader.inverter_reader import ReadItem, requestForBuckets
from pvmonitor_sender.main import send
from mqtt_sender.main import send as send_mqtt
from xlsxparser.sofar_modbus_protocol import (
jsonHelper,
dumpToCache,
)
import os
if __name__ == "__main__":
logging.basicConfig(
filename="logger.log",
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s %(message)s",
)
loggerIp = os.environ["logger__ip"]
loggerPort = int(os.environ["logger__port"])
loggerSerial = int(os.environ["logger__serial"])
inverterSlaveId = int(os.environ["inverter__slaveid"])
pvMonitorLogin = os.environ.get("pvmonitor__login", None)
pvMonitorPassword = os.environ.get("pvmonitor__password", None)
pvMonitorNumber = os.environ.get("pvmonitor__lp", None)
mqttAddress = os.environ.get("mqtt__address", "mosquitto")
mqttPort = int(os.environ.get("mqtt__port", 1883))
mqttPrefix = os.environ.get("mqtt__prefix", "homeassistant")
verbose = int(os.environ["verbose"])
def execute():
client = pysolarmanv5.PySolarmanV5(
address=loggerIp,
serial=loggerSerial,
port=loggerPort,
slave_id=inverterSlaveId,
verbose=verbose,
)
entries = (
dumpToCache() if not jsonHelper.cacheExists() else jsonHelper.readFromFile()
)
buckets = bucketIdentifiers(entries)
result = requestForBuckets(buckets, client, verbose)
responseJsonHelper = JsonHelper[ReadItem](
f'results/resp-{time.strftime("%Y%m%d-%H%M%S")}.json'
)
responseJsonHelper.dumpJson(result)
return result
lastPvMonitorTime = time.time()
while True:
result = execute()
if time.time() - lastPvMonitorTime > 300:
lastPvMonitorTime = time.time()
if pvMonitorLogin and pvMonitorPassword and pvMonitorNumber:
send(pvMonitorLogin, pvMonitorPassword, int(pvMonitorNumber), result)
send_mqtt(mqttAddress, mqttPort, mqttPrefix, result)