v1.9.12: SARA loop - 2e test de comm avant hardware reboot

Quand AT+CSQ ne repond pas (hoquet serie temporaire), retente le
AT+CSQ jusqu'a 3x (0.5s d'intervalle) avant d'escalader. Si le modem
repond, le flux normal reprend sans reboot -> evite les coupures
d'alim GPIO et l'usure du modem pour une absence de reponse ponctuelle.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
PaulVua
2026-05-28 10:27:35 +02:00
parent 3c8ce03449
commit 4a74f949a0
3 changed files with 29 additions and 2 deletions

View File

@@ -1 +1 @@
1.9.11 1.9.12

View File

@@ -1,5 +1,18 @@
{ {
"versions": [ "versions": [
{
"version": "1.9.12",
"date": "2026-05-28",
"changes": {
"features": [],
"improvements": [
"SARA loop: 2e test de comm avant hardware reboot. Quand AT+CSQ ne répond pas (hoquet série temporaire), le script retente le AT+CSQ jusqu'à 3 fois (0.5s d'intervalle) avant d'escalader. Si le modem répond, le flux normal reprend sans reboot — évite les coupures d'alim GPIO et l'usure du modem pour une simple absence de réponse ponctuelle."
],
"fixes": [],
"compatibility": []
},
"notes": "Ne touche pas aux autres causes de reboot (erreur Treck, etc.) ni au cas signal=99. Cible uniquement le 'No answer from SARA module' qui déclenchait un hardware reboot dès le premier AT+CSQ muet."
},
{ {
"version": "1.9.11", "version": "1.9.11",
"date": "2026-05-28", "date": "2026-05-28",

View File

@@ -1083,7 +1083,21 @@ try:
command = f'AT+CSQ\r' command = f'AT+CSQ\r'
ser_sara.write((command + '\r').encode('utf-8')) ser_sara.write((command + '\r').encode('utf-8'))
response2 = read_complete_response(ser_sara, wait_for_lines=["OK", "ERROR", "+CME ERROR","Socket:bind"]) response2 = read_complete_response(ser_sara, wait_for_lines=["OK", "ERROR", "+CME ERROR","Socket:bind"])
# Re-test comm avant d'escalader : un AT+CSQ sans reponse est le plus souvent
# un hoquet serie temporaire, pas un modem plante. On retente quelques fois ;
# ce n'est que si le modem reste muet qu'on tombe dans le hardware reboot plus
# bas (coupure d'alim GPIO + usure du modem).
if response2 is None or response2 == "":
for attempt in range(3):
print(f"⏳ Pas de reponse au CSQ, 2e test de comm {attempt + 1}/3...")
time.sleep(0.5)
ser_sara.write((command + '\r').encode('utf-8'))
response2 = read_complete_response(ser_sara, wait_for_lines=["OK", "ERROR", "+CME ERROR", "Socket:bind"])
if response2:
print(f"✅ SARA a repondu (essai {attempt + 1}) — hoquet serie temporaire, pas de hardware reboot")
break
print('<p class="text-danger-emphasis">', end="") print('<p class="text-danger-emphasis">', end="")
print(response2) print(response2)
print("</p>", end="") print("</p>", end="")