External Screen working
This commit is contained in:
+25
-1
@@ -12,6 +12,7 @@ from shared.lora_device import LoraCommands
|
||||
from shared.alerts import AlertManager, Alert, AlertType
|
||||
from sensors import ultrasonicRanger, temp_hum, button, camera, buzzer
|
||||
from lib.systemd_logs import get_systemd_logs
|
||||
from external_display_manager import DisplayManager # <-- Import display manager
|
||||
|
||||
# --- DB SETUP ---
|
||||
DB_PATH = "orchestrateur/db.sqlite"
|
||||
@@ -73,6 +74,9 @@ button_state = False
|
||||
cloud_alert = False # Global status flag for screen / UI display
|
||||
async_event_queue = None
|
||||
|
||||
# Display Manager instance
|
||||
display_manager = DisplayManager(endpoint_path="/api/display")
|
||||
|
||||
# Async synchronization trackers for MQTT IR sensors responses
|
||||
ir_data_cache = {} # mw_id -> dict of IR readings
|
||||
ir_data_events = {} # mw_id -> asyncio.Event()
|
||||
@@ -174,6 +178,21 @@ async def cloud_mqtt_listener_task():
|
||||
})
|
||||
await asyncio.sleep(0.1)
|
||||
|
||||
async def display_broadcast_task():
|
||||
"""Monitors state changes and broadcasts updates to all connected screens."""
|
||||
last_state = None
|
||||
while True:
|
||||
current_state = (dict(microwave_states), button_state, cloud_alert)
|
||||
if current_state != last_state:
|
||||
last_state = current_state
|
||||
await display_manager.broadcast_state(
|
||||
device_id=DEVICE_ID,
|
||||
microwave_states=microwave_states,
|
||||
button_state=button_state,
|
||||
cloud_alert=cloud_alert
|
||||
)
|
||||
await asyncio.sleep(3.0)
|
||||
|
||||
def button_callback():
|
||||
"""Button physical interrupt callback."""
|
||||
global button_state
|
||||
@@ -587,6 +606,9 @@ async def main():
|
||||
# Initialize SQLite database table
|
||||
init_db()
|
||||
|
||||
# Start mDNS Display discovery
|
||||
await display_manager.start()
|
||||
|
||||
async_event_queue = asyncio.Queue()
|
||||
|
||||
await asyncio.gather(
|
||||
@@ -594,7 +616,8 @@ async def main():
|
||||
mqtt_listener_task(),
|
||||
cloud_mqtt_listener_task(),
|
||||
process_messages_task(),
|
||||
monitor_dish_height_task()
|
||||
monitor_dish_height_task(),
|
||||
display_broadcast_task()
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -603,6 +626,7 @@ if __name__ == "__main__":
|
||||
except KeyboardInterrupt:
|
||||
print("\nArrêt manuel.")
|
||||
finally:
|
||||
asyncio.run(display_manager.stop())
|
||||
if hasattr(mqtt_client._client, "loop_stop"):
|
||||
mqtt_client._client.loop_stop()
|
||||
if hasattr(cloud_mqtt_client._client, "loop_stop"):
|
||||
|
||||
Reference in New Issue
Block a user