feat: add EventSensor class for temporary binary sensor activation
This commit is contained in:
@@ -60,8 +60,10 @@ import json
|
||||
# =============================================================================
|
||||
|
||||
class EventDispatcher:
|
||||
def __init__(self,ad_api,event_name,callback,event_data,reset_data,event_context,debounce_seconds=None):
|
||||
self.ad_api = ad_api
|
||||
def __init__(self,ad_api,logger_interface,event_name,callback,event_data,reset_data,event_context,debounce_seconds=None):
|
||||
self.ad_api = ad_api
|
||||
self.logger_interface = logger_interface
|
||||
|
||||
event_data = self._resolve_zha_device_name(event_data)
|
||||
reset_data = self._resolve_zha_device_name(reset_data)
|
||||
self.event_name = event_name
|
||||
@@ -126,7 +128,7 @@ class EventDispatcher:
|
||||
result = resp.read().decode('utf-8').strip()
|
||||
return result if result else None
|
||||
except Exception as e:
|
||||
self.ad_api.log_error(f"[EventDispatcher] Failed to resolve ZHA device name '{device_name}': {e}")
|
||||
self.logger_interface.log_error(f"[EventDispatcher] Failed to resolve ZHA device name '{device_name}': {e}")
|
||||
return None
|
||||
|
||||
def _resolve_zha_device_name(self, data):
|
||||
@@ -139,10 +141,10 @@ class EventDispatcher:
|
||||
ieee = self._lookup_zha_ieee(name)
|
||||
resolved = {k: v for k, v in data.items() if k != 'device_name'}
|
||||
if ieee is not None:
|
||||
self.ad_api.log_info(f"[EventDispatcher] Resolved ZHA device name '{name}' to IEEE '{ieee}'")
|
||||
self.logger_interface.log_info(f"[EventDispatcher] Resolved ZHA device name '{name}' to IEEE '{ieee}'")
|
||||
resolved['device_ieee'] = ieee
|
||||
else:
|
||||
self.ad_api.log_error(f"[EventDispatcher] ZHA device '{name}' not found — 'device_name' filter ignored")
|
||||
self.logger_interface.log_error(f"[EventDispatcher] ZHA device '{name}' not found — 'device_name' filter ignored")
|
||||
return resolved
|
||||
|
||||
def process_event(self,data):
|
||||
@@ -183,11 +185,15 @@ class EventDispatcher:
|
||||
return False
|
||||
|
||||
class EventHandler:
|
||||
def __init__(self, ad_api,events_block,callback,event_context = None): #event_context is passed back to the CB has a context
|
||||
def __init__(self, ad_api,events_block,callback,event_context = None, logger_interface = None): #event_context is passed back to the CB has a context
|
||||
def register_event_with_params(event_block,callback,event_context):
|
||||
self.add_dispatcher(event_block['event_name'],callback,event_block['event_data'] if 'event_data' in event_block else None, event_block['reset_data'] if 'reset_data' in event_block else None,event_context, event_block.get('debounce_seconds'))
|
||||
|
||||
self.__ad_api = ad_api
|
||||
if logger_interface:
|
||||
self.__logger_interface = logger_interface
|
||||
else:
|
||||
self.__logger_interface = ad_api
|
||||
self.event_dispatchers = []
|
||||
|
||||
if isinstance(events_block, list):
|
||||
@@ -198,6 +204,7 @@ class EventHandler:
|
||||
register_event_with_params(event_block,callback,event_context)
|
||||
|
||||
def add_dispatcher(self,event_name,callback,event_data = None,reset_data = None ,event_context = None, debounce_seconds = None):
|
||||
self.__ad_api.log_info(f'Registering dispatcher {callback.__name__} for event "{event_name}" ({event_data})')
|
||||
dispatcher = EventDispatcher(self.__ad_api,event_name,callback,event_data,reset_data,event_context,debounce_seconds)
|
||||
if self.__logger_interface:
|
||||
self.__logger_interface.log_info(f'Registering dispatcher {callback.__name__} for event "{event_name}" ({event_data})')
|
||||
dispatcher = EventDispatcher(self.__ad_api,self.__logger_interface,event_name,callback,event_data,reset_data,event_context,debounce_seconds)
|
||||
self.event_dispatchers.append(dispatcher)
|
||||
Reference in New Issue
Block a user