4141from munch import Munch
4242from packaging .version import Version , parse
4343
44+ from .model import GatewayData , PlugwiseData
45+
4446
4547class Smile (SmileComm ):
4648 """The main Plugwise Smile API class."""
@@ -74,18 +76,8 @@ def __init__(
7476 self ._smile_api : SmileAPI | SmileLegacyAPI
7577 self ._stretch_v2 = False
7678 self ._target_smile : str = NONE
77- self .smile : Munch = Munch ()
78- self .smile .anna_p1 = False
79- self .smile .hostname = NONE
80- self .smile .hw_version = None
81- self .smile .legacy = False
82- self .smile .mac_address = None
83- self .smile .model = NONE
84- self .smile .model_id = None
85- self .smile .name = NONE
86- self .smile .type = NONE
87- self .smile .version = Version ("0.0.0" )
88- self .smile .zigbee_mac_address = None
79+ self .data : PlugwiseData
80+ self .smile : GatewayData
8981
9082 @property
9183 def cooling_present (self ) -> bool :
@@ -161,6 +153,7 @@ async def connect(self) -> Version:
161153 self ._opentherm_device ,
162154 self ._request ,
163155 self ._schedule_old_states ,
156+ self .data ,
164157 self .smile ,
165158 )
166159 if not self .smile .legacy
@@ -172,14 +165,15 @@ async def connect(self) -> Version:
172165 self ._request ,
173166 self ._stretch_v2 ,
174167 self ._target_smile ,
168+ self .data ,
175169 self .smile ,
176170 )
177171 )
178172
179173 # Update all endpoints on first connect
180174 await self ._smile_api .full_xml_update ()
181175
182- return cast ( Version , self .smile .version )
176+ return self .smile .firmware_version
183177
184178 async def _smile_detect (
185179 self , result : etree .Element , dsmrmain : etree .Element
@@ -189,29 +183,32 @@ async def _smile_detect(
189183 Detect which type of Plugwise Gateway is being connected.
190184 """
191185 model : str = "Unknown"
192- if (gateway := result .find ("./gateway" )) is not None :
193- self .smile .version = parse (gateway .find ("firmware_version" ).text )
194- self .smile .hw_version = gateway .find ("hardware_version" ).text
195- self .smile .hostname = gateway .find ("hostname" ).text
196- self .smile .mac_address = gateway .find ("mac_address" ).text
197- if (vendor_model := gateway .find ("vendor_model" )) is None :
186+ if self .data .gateway is not None :
187+ if gateway .vendor_model is None :
198188 return # pragma: no cover
199189
200- model = vendor_model .text
201- elec_measurement = gateway .find (
202- "gateway_environment/electricity_consumption_tariff_structure"
203- )
190+ self .smile .version = self .data .gateway .firmware_version
191+ self .smile .hw_version = self .data .gateway .firmware_version
192+ self .smile .hostname = self .data .gateway .hostname
193+ self .smile .mac_address = self .data .gateway .mac_address
194+
195+ print (f"HOI11 { self .data .gateway .environment } " )
204196 if (
205- elec_measurement is not None
197+ "electricity_consumption_tariff_structure"
198+ in self .data .gateway .environment
206199 and elec_measurement .text
207- and model == "smile_thermo"
200+ and self . smile . vendor_model == "smile_thermo"
208201 ):
209202 self .smile .anna_p1 = True
210203 else :
211- model = await self ._smile_detect_legacy (result , dsmrmain , model )
204+ # TODO
205+ self .smile .vendor_model = await self ._smile_detect_legacy (
206+ result , dsmrmain , model
207+ )
212208
213- if model == "Unknown" or self .smile .version == Version (
214- "0.0.0"
209+ if (
210+ self .smile .vendor_model == "Unknown"
211+ or self .smile .firmware_version == Version ("0.0.0" )
215212 ): # pragma: no cover
216213 # Corner case check
217214 LOGGER .error (
@@ -220,8 +217,8 @@ async def _smile_detect(
220217 )
221218 raise UnsupportedDeviceError
222219
223- version_major = str (self .smile .version .major )
224- self ._target_smile = f"{ model } _v{ version_major } "
220+ version_major = str (self .smile .firmware_version .major )
221+ self ._target_smile = f"{ self . data . gateway . model } _v{ version_major } "
225222 LOGGER .debug ("Plugwise identified as %s" , self ._target_smile )
226223 if self ._target_smile not in SMILES :
227224 LOGGER .error (
@@ -242,7 +239,8 @@ async def _smile_detect(
242239 raise UnsupportedDeviceError # pragma: no cover
243240
244241 self .smile .model = "Gateway"
245- self .smile .model_id = model
242+ self .smile .model_id = self .data .gateway .model
243+ # TODO gateway name+type?
246244 self .smile .name = SMILES [self ._target_smile ].smile_name
247245 self .smile .type = SMILES [self ._target_smile ].smile_type
248246 if self .smile .name == "Smile Anna" and self .smile .anna_p1 :
0 commit comments