diff --git a/VERSION b/VERSION index 5e9287b..1fe2d37 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.9.11 +1.9.12 diff --git a/changelog.json b/changelog.json index 0b40388..eff8ce2 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,18 @@ { "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", "date": "2026-05-28", diff --git a/loop/SARA_send_data_v2.py b/loop/SARA_send_data_v2.py index 6e80388..2fa562c 100755 --- a/loop/SARA_send_data_v2.py +++ b/loop/SARA_send_data_v2.py @@ -1083,7 +1083,21 @@ try: command = f'AT+CSQ\r' ser_sara.write((command + '\r').encode('utf-8')) 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('
', end="") print(response2) print("
", end="")