6666
6767from powersensor_local .devices import _PowersensorDevicesBase
6868
69- _LOGGER = logging .getLogger (__name__ )
70-
7169_SERVICE_TYPE_UDP = '_powersensor._udp.local.'
7270_SERVICE_TYPE_TCP = '_powersensor._tcp.local.'
7371
@@ -114,6 +112,7 @@ def __init__(
114112 service_type : str = _SERVICE_TYPE_UDP ,
115113 debounce_timeout : float = _DEBOUNCE_DEFAULT_S ,
116114 relay_now_relaying_for : bool = False ,
115+ logger : 'logging.Logger | None' = None ,
117116 ) -> None :
118117 """Initialise.
119118
@@ -131,8 +130,10 @@ def __init__(
131130 the plug as truly gone. Defaults to 60 s.
132131 relay_now_relaying_for:
133132 See _PowersensorDevicesBase for documentation.
133+ logger:
134+ See _PowersensorDevicesBase for documentation.
134135 """
135- super ().__init__ (relay_now_relaying_for = relay_now_relaying_for )
136+ super ().__init__ (relay_now_relaying_for = relay_now_relaying_for , logger = logger )
136137 self ._zc_instance = zeroconf_instance
137138 self ._zc_owned = zeroconf_instance is None # True → we close it in stop()
138139 self ._service_type = service_type
@@ -152,6 +153,11 @@ async def start(self, async_event_cb) -> None:
152153 Plugs already present on the network will trigger add_service
153154 callbacks shortly after the browser starts.
154155 """
156+ if self ._browser is not None :
157+ if self ._logger :
158+ self ._logger .warning ("start() called while already running — ignoring" )
159+ return
160+
155161 self ._event_cb = async_event_cb
156162 self ._start_expiry_timer ()
157163
@@ -224,19 +230,22 @@ def _schedule_removal(self, mac: str) -> None:
224230 mac ,
225231 )
226232 self ._pending_removals [mac ] = handle
227- _LOGGER .debug ("Scheduled removal for %s in %.0f s" , mac , self ._debounce_seconds )
233+ if self ._logger :
234+ self ._logger .debug ("Scheduled removal for %s in %.0f s" , mac , self ._debounce_seconds )
228235
229236 def _on_debounce_expired (self , mac : str ) -> None :
230237 """Called by the event loop when the debounce timer fires."""
231238 self ._pending_removals .pop (mac , None )
232- _LOGGER .info ("Plug %s still absent after debounce — removing" , mac )
239+ if self ._logger :
240+ self ._logger .info ("Plug %s still absent after debounce — removing" , mac )
233241 asyncio .get_running_loop ().create_task (self ._plug_lost (mac ))
234242
235243 def _cancel_pending_removal (self , mac : str , source : str ) -> None :
236244 handle = self ._pending_removals .pop (mac , None )
237245 if handle :
238246 handle .cancel ()
239- _LOGGER .debug ("Cancelled pending removal for %s (%s)" , mac , source )
247+ if self ._logger :
248+ self ._logger .debug ("Cancelled pending removal for %s (%s)" , mac , source )
240249
241250 # ------------------------------------------------------------------
242251 # Called from _Listener (zeroconf thread → event loop via stored loop ref)
@@ -300,40 +309,46 @@ def _extract(self, zc: Any, type_: str, name: str) -> tuple[str, str, int] | Non
300309 """
301310 info = _zc .ServiceInfo (type_ , name )
302311 if not info .load_from_cache (zc ):
303- _LOGGER .warning (
304- "No cache entry for %s — device will appear on next mDNS announcement" ,
305- name ,
306- )
312+ if self ._owner ._logger :
313+ self ._owner ._logger .warning (
314+ "No cache entry for %s — device will appear on next mDNS announcement" ,
315+ name ,
316+ )
307317 return None
308318
309319 addresses = info .parsed_addresses ()
310320 if not addresses :
311- _LOGGER .warning ("No addresses in zeroconf cache record for %s" , name )
321+ if self ._owner ._logger :
322+ self ._owner ._logger .warning ("No addresses in zeroconf cache record for %s" , name )
312323 return None
313324
314325 try :
315326 raw_id = info .properties [b'id' ]
316327 except KeyError :
317- _LOGGER .error ("Missing 'id' property in zeroconf record for %s" , name )
328+ if self ._owner ._logger :
329+ self ._owner ._logger .error ("Missing 'id' property in zeroconf record for %s" , name )
318330 return None
319331
320332 if raw_id is None :
321- _LOGGER .error ("'id' property in zeroconf record for %s has no value" , name )
333+ if self ._owner ._logger :
334+ self ._owner ._logger .error ("'id' property in zeroconf record for %s has no value" , name )
322335 return None
323336
324337 if info .port is None :
325- _LOGGER .error ("No port in zeroconf record for %s" , name )
338+ if self ._owner ._logger :
339+ self ._owner ._logger .error ("No port in zeroconf record for %s" , name )
326340 return None
327341
328342 return raw_id .decode ('utf-8' ), addresses [0 ], info .port
329343
330344 def add_service (self , zc : Any , type_ : str , name : str ) -> None :
331345 result = self ._extract (zc , type_ , name )
332346 if result is None :
333- _LOGGER .warning (
334- "add_service: no info available for %s — will retry on next announcement" ,
335- name ,
336- )
347+ if self ._owner ._logger :
348+ self ._owner ._logger .warning (
349+ "add_service: no info available for %s — will retry on next announcement" ,
350+ name ,
351+ )
337352 return
338353 mac , ip , port = result
339354 self ._name_to_mac [name ] = mac
@@ -342,10 +357,11 @@ def add_service(self, zc: Any, type_: str, name: str) -> None:
342357 def update_service (self , zc : Any , type_ : str , name : str ) -> None :
343358 result = self ._extract (zc , type_ , name )
344359 if result is None :
345- _LOGGER .warning (
346- "update_service: no info available for %s — will retry on next announcement" ,
347- name ,
348- )
360+ if self ._owner ._logger :
361+ self ._owner ._logger .warning (
362+ "update_service: no info available for %s — will retry on next announcement" ,
363+ name ,
364+ )
349365 return
350366 mac , ip , port = result
351367 self ._name_to_mac [name ] = mac
@@ -354,9 +370,10 @@ def update_service(self, zc: Any, type_: str, name: str) -> None:
354370 def remove_service (self , zc : Any , type_ : str , name : str ) -> None :
355371 mac = self ._name_to_mac .pop (name , None )
356372 if mac is None :
357- _LOGGER .warning (
358- "remove_service for %s: MAC not in cache — removal ignored" , name
359- )
373+ if self ._owner ._logger :
374+ self ._owner ._logger .warning (
375+ "remove_service for %s: MAC not in cache — removal ignored" , name
376+ )
360377 return
361378 self ._owner ._on_zc_remove (mac , self ._loop )
362379
0 commit comments