External Screen working
Build, push image, and notify Watchtower / build-image (push) Successful in 3m48s
Build, push image, and notify Watchtower / notify (push) Successful in 21s

This commit is contained in:
2026-08-15 13:50:15 +02:00
parent 08f6991ef5
commit fde1ad6ca0
8 changed files with 330 additions and 54 deletions
+25 -1
View File
@@ -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"):