diff --git a/SARA/reboot/hardware_reboot.py b/SARA/reboot/hardware_reboot.py new file mode 100644 index 0000000..40886a8 --- /dev/null +++ b/SARA/reboot/hardware_reboot.py @@ -0,0 +1,72 @@ +''' + ____ _ ____ _ + / ___| / \ | _ \ / \ + \___ \ / _ \ | |_) | / _ \ + ___) / ___ \| _ < / ___ \ + |____/_/ \_\_| \_\/_/ \_\ + +sudo /usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/reboot/hardware_reboot.py + +Hardware reboot of the SARA R5 modem using GPIO 16 (GND control via transistor). +Cuts power for 3 seconds, then verifies modem is responsive with ATI command. +Returns JSON result for web interface. +''' + +import RPi.GPIO as GPIO +import serial +import time +import json +import sqlite3 + +SARA_GND_GPIO = 16 + +# Load baudrate from config +conn = sqlite3.connect("/var/www/nebuleair_pro_4g/sqlite/sensors.db") +cursor = conn.cursor() +cursor.execute("SELECT value FROM config_table WHERE key='SaraR4_baudrate'") +row = cursor.fetchone() +baudrate = int(row[0]) if row else 115200 +conn.close() + +result = { + "reboot": False, + "modem_response": None, + "error": None +} + +try: + # Step 1: Cut GND (modem off) + GPIO.setmode(GPIO.BCM) + GPIO.setup(SARA_GND_GPIO, GPIO.OUT) + GPIO.output(SARA_GND_GPIO, GPIO.LOW) + time.sleep(3) + + # Step 2: Restore GND (modem on) + GPIO.output(SARA_GND_GPIO, GPIO.HIGH) + time.sleep(5) # wait for modem boot + + # Step 3: Check modem with ATI + ser = serial.Serial('/dev/ttyAMA2', baudrate=baudrate, timeout=3) + ser.reset_input_buffer() + + for attempt in range(5): + ser.write(b'ATI\r') + time.sleep(1) + response = ser.read(ser.in_waiting or 1).decode('utf-8', errors='replace') + if "OK" in response: + result["reboot"] = True + result["modem_response"] = response.strip() + break + time.sleep(2) + else: + result["error"] = "Modem ne repond pas apres le redemarrage" + + ser.close() + +except Exception as e: + result["error"] = str(e) + +finally: + GPIO.cleanup(SARA_GND_GPIO) + +print(json.dumps(result)) diff --git a/SARA/reboot/start.py b/SARA/reboot/start.py index 3ecf0e9..bca10f6 100644 --- a/SARA/reboot/start.py +++ b/SARA/reboot/start.py @@ -175,6 +175,11 @@ def read_complete_response(serial_connection, timeout=2, end_of_response_timeout try: print('