Sending updates to external screen + RGB LCD
This commit is contained in:
@@ -14,6 +14,7 @@ class DisplayManager:
|
||||
self.screens: Dict[str, str] = {} # Map: service_name -> URL
|
||||
self.aiozc: AsyncZeroconf | None = None
|
||||
self.browser: AsyncServiceBrowser | None = None
|
||||
self._on_screens_change_callback = None # Callback for screen changes
|
||||
|
||||
async def start(self):
|
||||
"""Starts dynamic mDNS discovery for e-Paper screens."""
|
||||
@@ -48,12 +49,20 @@ class DisplayManager:
|
||||
url = f"http://{ip_str}:{port}{self.endpoint_path}"
|
||||
|
||||
self.screens[name] = url
|
||||
if self._on_screens_change_callback:
|
||||
self._on_screens_change_callback(self.screens)
|
||||
print(f"[DisplayManager] 📺 Screen registered: {name} -> {url}")
|
||||
|
||||
elif state_change == ServiceStateChange.Removed:
|
||||
if name in self.screens:
|
||||
print(f"[DisplayManager] ❌ Screen disconnected: {name}")
|
||||
self.screens.pop(name, None)
|
||||
if self._on_screens_change_callback:
|
||||
self._on_screens_change_callback(self.screens)
|
||||
|
||||
def set_on_screens_change_callback(self, callback):
|
||||
"""Set a callback function to be called when screens are added or removed."""
|
||||
self._on_screens_change_callback = callback
|
||||
|
||||
async def broadcast_state(self, microwave_states: dict, cloud_alert: bool):
|
||||
"""Broadcasts the system state JSON to all discovered screens concurrently."""
|
||||
@@ -113,9 +122,9 @@ class DisplayManager:
|
||||
timeout=3.0
|
||||
)
|
||||
response.raise_for_status()
|
||||
print(f"[DisplayManager] ✅ Updated {name}")
|
||||
print(f"[DisplayManager] Updated {name}")
|
||||
except Exception as e:
|
||||
print(f"[DisplayManager] ⚠️ Error pushing state to {name}: {e}")
|
||||
print(f"[DisplayManager] Error pushing state to {name}: {e}")
|
||||
|
||||
async def stop(self):
|
||||
"""Clean up mDNS browser and Zeroconf instance."""
|
||||
|
||||
Reference in New Issue
Block a user