aboutsummaryrefslogtreecommitdiff
path: root/src/inverter_wrapper.py
diff options
context:
space:
mode:
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()