Skip to content

Commit b6c4eb6

Browse files
committed
wip
1 parent 54f700e commit b6c4eb6

File tree

1 file changed

+23
-28
lines changed

1 file changed

+23
-28
lines changed

luxtronik/__init__.py

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -63,18 +63,13 @@ def __init__(self, host, port=LUXTRONIK_DEFAULT_PORT, safe=True):
6363
self._port = port
6464
self._safe = safe
6565
self._socket = None
66-
self.read()
66+
self._connect()
6767

6868
def __del__(self):
69-
if self._socket is not None:
70-
if not is_socket_closed(self._socket):
71-
self._socket.close()
72-
self._socket = None
73-
LOGGER.info(
74-
"Disconnected from Luxtronik heatpump %s:%s", self._host, self._port
75-
)
69+
self._disconnect()
7670

7771
def _connect(self):
72+
"""Connect the socket if not already done."""
7873
is_none = self._socket is None
7974
if is_none:
8075
self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -84,8 +79,16 @@ def _connect(self):
8479
"Connected to Luxtronik heat pump %s:%s", self._host, self._port
8580
)
8681

87-
@staticmethod
88-
def _lock_and_connect(func):
82+
def _disconnect(self):
83+
if self._socket is not None:
84+
if not is_socket_closed(self._socket):
85+
self._socket.close()
86+
self._socket = None
87+
LOGGER.info(
88+
"Disconnected from Luxtronik heatpump %s:%s", self._host, self._port
89+
)
90+
91+
def _with_lock_and_connect(self, func, *args, **kwargs):
8992
"""
9093
Decorator around various read/write functions to connect first.
9194
@@ -94,39 +97,31 @@ def _lock_and_connect(func):
9497
performed at any point in time. This helps to avoid issues with the
9598
Luxtronik controller, which seems unstable otherwise.
9699
"""
97-
98-
def inner(self, *args, **kwargs):
99-
with self._lock:
100-
self._connect()
101-
return func(self, *args, **kwargs)
102-
103-
return inner
100+
with self._lock:
101+
self._connect()
102+
ret_val = func(self, *args, **kwargs)
103+
# self._disconnect()
104+
return ret_val
104105

105106
def read(self):
106107
"""
107108
Read data from heat pump.
108109
All available data will be read from the heat pump.
109110
"""
110-
with self.lock:
111-
self._connect()
112-
return self._read()
111+
return self._with_lock_and_connect(self._read)
113112

114-
@_lock_and_connect
115113
def read_parameters(self):
116114
"""Read parameters from heat pump."""
117-
return self._read_parameters()
115+
return self._with_lock_and_connect(self._read_parameters)
118116

119-
@_lock_and_connect
120117
def read_calculations(self):
121118
"""Read calculations from heat pump."""
122-
return self._read_calculations()
119+
return self._with_lock_and_connect(self._read_calculations)
123120

124-
@_lock_and_connect
125121
def read_visibilities(self):
126122
"""Read visibilities from heat pump."""
127-
return self._read_visibilities()
123+
return self._with_lock_and_connect(self._read_visibilities)
128124

129-
@_lock_and_connect
130125
def write(self, parameters):
131126
"""
132127
Write parameter to heat pump.
@@ -136,7 +131,7 @@ def write(self, parameters):
136131
to the heatpump before reading all available data
137132
from the heat pump.
138133
"""
139-
return self._write(parameters)
134+
return self._with_lock_and_connect(self._write, parameters)
140135

141136
def _read(self):
142137
parameters = self._read_parameters()

0 commit comments

Comments
 (0)