@@ -198,28 +198,10 @@ async def _collect_smile_data(
198198 self , dsmrmain : etree .Element , result : etree .Element
199199 ) -> str :
200200 """Collect smile/gateway data."""
201- model : str = "Unknown"
202201 if (gateway := result .find ("./gateway" )) is not None :
203- self .smile .version = parse (gateway .find ("firmware_version" ).text )
204- self .smile .hw_version = gateway .find ("hardware_version" ).text
205- self .smile .hostname = gateway .find ("hostname" ).text
206- self .smile .mac_address = gateway .find ("mac_address" ).text
207- if (wifi_mac := gateway .find ("wifi_mac_address" )) is not None :
208- self .smile .wifi_mac_address = wifi_mac .text
209- if (vendor_model := gateway .find ("vendor_model" )) is not None :
210- model = vendor_model .text
211-
212- # Check for Anna P1 function
213- elec_point_meters = result .findall (
214- "./location/logs/point_log/electricity_point_meter"
215- )
216- if model == "smile_thermo" :
217- for meter in elec_point_meters :
218- if meter .get ("id" ):
219- self .smile .anna_p1 = True
220- break
202+ model = self ._collect_gateway_data (gateway , result )
221203 else :
222- model = await self ._smile_detect_legacy (result , dsmrmain , model )
204+ model = await self ._smile_detect_legacy (result , dsmrmain , "Unknown" )
223205
224206 if model == "Unknown" or self .smile .version == Version (
225207 "0.0.0"
@@ -233,6 +215,29 @@ async def _collect_smile_data(
233215
234216 return model
235217
218+ def _collect_gateway_data (
219+ self , gateway : etree .Element , result : etree .Element
220+ ) -> str :
221+ """Collect data from a current-generation gateway."""
222+ self .smile .version = parse (gateway .find ("firmware_version" ).text )
223+ self .smile .hw_version = gateway .find ("hardware_version" ).text
224+ self .smile .hostname = gateway .find ("hostname" ).text
225+ self .smile .mac_address = gateway .find ("mac_address" ).text
226+ if (wifi_mac := gateway .find ("wifi_mac_address" )) is not None :
227+ self .smile .wifi_mac_address = wifi_mac .text
228+
229+ model = gateway .findtext ("vendor_model" , "Unknown" )
230+ if model == "smile_thermo" :
231+ has_anna_p1 = any (
232+ meter .get ("id" )
233+ for meter in result .findall (
234+ "./location/logs/point_log/electricity_point_meter"
235+ )
236+ )
237+ if has_anna_p1 :
238+ self .smile .anna_p1 = True
239+ return model
240+
236241 def _process_for_thermostat (self , result : etree .Element ) -> None :
237242 """Extra processing for thermostats."""
238243 if self .smile .type != "thermostat" :
0 commit comments