Implementing OTA client update

This commit is contained in:
2026-09-12 18:32:50 +02:00
parent 171b9d587a
commit eb9fcea704
+22 -1
View File
@@ -361,6 +361,28 @@ def on_message(client, userdata, msg):
client.publish(TOPIC_STAT, current_status, retain=True) client.publish(TOPIC_STAT, current_status, retain=True)
boot_recovered = True boot_recovered = True
publish_all(client) publish_all(client)
elif cmd == "UPDATE_AGENT":
client.publish(f"devices/{CLIENT_ID}/logs", "🔄 Avvio aggiornamento OTA (git pull)...")
logger.info("Ricevuto comando di UPDATE_AGENT. Esecuzione git pull...")
try:
# Esegue il comando git pull nella directory dell'agente
result = subprocess.run(
["git", "pull"],
cwd=AGENT_DIR,
capture_output=True, text=True, check=True
)
client.publish(f"devices/{CLIENT_ID}/logs", f"✅ Git pull completato. Riavvio in corso...")
logger.info(f"Aggiornamento completato:\n{result.stdout}")
time.sleep(1)
# Uccide il processo. Systemd lo farà ripartire istantaneamente con il nuovo codice!
os._exit(1)
except subprocess.CalledProcessError as e:
client.publish(f"devices/{CLIENT_ID}/logs", f"❌ Errore aggiornamento:\n{e.stderr}")
logger.error(f"Errore git pull:\n{e.stderr}")
elif cmd == "REBOOT": elif cmd == "REBOOT":
client.publish(TOPIC_STAT, f"OFFLINE - Rebooting {CLIENT_ID.upper()}...", retain=False) client.publish(TOPIC_STAT, f"OFFLINE - Rebooting {CLIENT_ID.upper()}...", retain=False)
logger.info("REBOOT command received. Rebooting system...") logger.info("REBOOT command received. Rebooting system...")
@@ -421,7 +443,6 @@ def on_message(client, userdata, msg):
logger.info("📥 Received global update command (REQ CONFIG)") logger.info("📥 Received global update command (REQ CONFIG)")
publish_all(client) publish_all(client)
publish_all_ini_files(client) publish_all_ini_files(client)
# Force the visual update of the card on the dashboard!
client.publish(TOPIC_STAT, current_status, retain=True) client.publish(TOPIC_STAT, current_status, retain=True)
elif topic == f"devices/{CLIENT_ID}/control": elif topic == f"devices/{CLIENT_ID}/control":