aboutsummaryrefslogtreecommitdiff
path: root/src/inverter_wrapper.py
diff options
context:
space:
mode:
authorEvgeny Zinoviev <me@ch1p.io>2021-11-02 21:29:25 +0300
committerEvgeny Zinoviev <me@ch1p.io>2021-11-02 21:59:29 +0300
commiteb970844576f0f9d84b5a385f615582b50e0afa9 (patch)
tree184992ca7371a48e96afdc88dbe57ab998df59e7 /src/inverter_wrapper.py
parent3346b29044740090d4ecee0056e456e90888c218 (diff)
implement AC charging program
Diffstat (limited to 'src/inverter_wrapper.py')
-rw-r--r--src/inverter_wrapper.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/inverter_wrapper.py b/src/inverter_wrapper.py
new file mode 100644
index 0000000..b6494e4
--- /dev/null
+++ b/src/inverter_wrapper.py
@@ -0,0 +1,47 @@
+import json
+
+from threading import Lock
+from inverterd import (
+ Format,
+ Client as InverterClient,
+ InverterError
+)
+
+_lock = Lock()
+
+
+class InverterClientWrapper:
+ def __init__(self):
+ self._inverter = None
+ self._host = None
+ self._port = None
+
+ def init(self, host: str, port: int):
+ self._host = host
+ self._port = port
+ self.create()
+
+ def create(self):
+ self._inverter = InverterClient(host=self._host, port=self._port)
+ self._inverter.connect()
+
+ def exec(self, command: str, arguments: tuple = (), format=Format.JSON):
+ with _lock:
+ try:
+ self._inverter.format(format)
+ response = self._inverter.exec(command, arguments)
+ if format == Format.JSON:
+ response = json.loads(response)
+ return response
+ except InverterError as e:
+ raise e
+ except Exception as e:
+ # silently try to reconnect
+ try:
+ self.create()
+ except Exception:
+ pass
+ raise e
+
+
+wrapper_instance = InverterClientWrapper()