@@ -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