update autoreconnect
This commit is contained in:
		@@ -1,9 +1,9 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	"status_led_pin": 22,
 | 
						"status_led_pin": 5,
 | 
				
			||||||
	"battery_coeff": 2.25,
 | 
						"battery_coeff": 2.25,
 | 
				
			||||||
	"sumo_id": "xxxxxxxx",
 | 
						"sumo_id": "xxxxxxxx",
 | 
				
			||||||
	"firmware_timestamp": "2019.05.07 21:23:00",
 | 
						"firmware_timestamp": "2019.05.12 17:04:00",
 | 
				
			||||||
	"firmware_version": "0.5.0",
 | 
						"firmware_version": "0.5.1",
 | 
				
			||||||
	"left_servo_tuning": 33,
 | 
						"left_servo_tuning": 33,
 | 
				
			||||||
	"right_servo_tuning": 33,
 | 
						"right_servo_tuning": 33,
 | 
				
			||||||
	"ultrasonic_distance": 40,
 | 
						"ultrasonic_distance": 40,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										38
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								main.py
									
									
									
									
									
								
							@@ -21,20 +21,26 @@ def step():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# The WebSocket processing thread
 | 
					# The WebSocket processing thread
 | 
				
			||||||
def ws_handler():
 | 
					def ws_handler():
 | 
				
			||||||
    global conn
 | 
					    global conn, watchdog_counter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    while True:
 | 
					    while True:
 | 
				
			||||||
        # When WiFi has just been reconnected
 | 
					        # When WiFi has just been reconnected
 | 
				
			||||||
        if wlan.isconnected() and not sumorobot.is_wifi_connected:
 | 
					        if wlan.isconnected() and not sumorobot.is_wifi_connected:
 | 
				
			||||||
            print("main.py reconnected to Wi-Fi")
 | 
					            print("main.py reconnected to Wi-Fi")
 | 
				
			||||||
 | 
					            # Stop blinking status LED
 | 
				
			||||||
            timer.deinit()
 | 
					            timer.deinit()
 | 
				
			||||||
 | 
					            # Turn status LED to steady ON
 | 
				
			||||||
            sumorobot.set_led(STATUS, True)
 | 
					            sumorobot.set_led(STATUS, True)
 | 
				
			||||||
            sumorobot.is_wifi_connected = True
 | 
					            sumorobot.is_wifi_connected = True
 | 
				
			||||||
        # When WiFi has just been disconnected
 | 
					        # When WiFi has just been disconnected
 | 
				
			||||||
        elif not wlan.isconnected() and sumorobot.is_wifi_connected:
 | 
					        elif not wlan.isconnected() and sumorobot.is_wifi_connected:
 | 
				
			||||||
            print("main.py lost Wi-Fi connection, reconnecting...")
 | 
					            print("main.py lost Wi-Fi, reconnecting to Wi-Fi")
 | 
				
			||||||
 | 
					            # Reinitiate the Wi-Fi connection
 | 
				
			||||||
 | 
					            wlan.connect(ssid, config["wifis"][ssid])
 | 
				
			||||||
 | 
					            # Turn OFF status LED
 | 
				
			||||||
            sumorobot.set_led(STATUS, False)
 | 
					            sumorobot.set_led(STATUS, False)
 | 
				
			||||||
            sumorobot.is_wifi_connected = False
 | 
					            sumorobot.is_wifi_connected = False
 | 
				
			||||||
 | 
					            # Start bliking status LED
 | 
				
			||||||
            timer.init(period=2000, mode=Timer.PERIODIC, callback=sumorobot.toggle_led)
 | 
					            timer.init(period=2000, mode=Timer.PERIODIC, callback=sumorobot.toggle_led)
 | 
				
			||||||
        elif not wlan.isconnected():
 | 
					        elif not wlan.isconnected():
 | 
				
			||||||
            # Continue to wait for a WiFi connection
 | 
					            # Continue to wait for a WiFi connection
 | 
				
			||||||
@@ -44,11 +50,14 @@ def ws_handler():
 | 
				
			|||||||
        try: # Try to read from the WebSocket
 | 
					        try: # Try to read from the WebSocket
 | 
				
			||||||
            data = conn.recv()
 | 
					            data = conn.recv()
 | 
				
			||||||
        except: # Socket timeout, no data received
 | 
					        except: # Socket timeout, no data received
 | 
				
			||||||
            # TODO: implement watchdog
 | 
					            # Increment watchdog counter
 | 
				
			||||||
            # Try reconnecting to the websocket if Wi-Fi is connected
 | 
					            watchdog_counter += 1
 | 
				
			||||||
            if wlan.isconnected():
 | 
					            # When Wi-Fi is connected and X-th exception happened
 | 
				
			||||||
                print("main.py WebSocket error, reconnecting")
 | 
					            # Try reconnecting to the WebSocket server
 | 
				
			||||||
 | 
					            if wlan.isconnected() and watchdog_counter == 3:
 | 
				
			||||||
 | 
					                print("main.py WebSocket timeout, reconnecting")
 | 
				
			||||||
                conn = uwebsockets.connect(uri)
 | 
					                conn = uwebsockets.connect(uri)
 | 
				
			||||||
 | 
					                watchdog_counter = 0
 | 
				
			||||||
            # Continue to try to read data
 | 
					            # Continue to try to read data
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -124,26 +133,25 @@ if 'code.py' in os.listdir():
 | 
				
			|||||||
# Start the code processing thread
 | 
					# Start the code processing thread
 | 
				
			||||||
_thread.start_new_thread(step, ())
 | 
					_thread.start_new_thread(step, ())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Wifi connection counter
 | 
					# Wifi watchdog counter
 | 
				
			||||||
wifi_connection_counter = 0
 | 
					watchdog_counter = 0
 | 
				
			||||||
# Wait for WiFi to get connected
 | 
					# Wait for WiFi to get connected
 | 
				
			||||||
while not wlan.isconnected():
 | 
					while not wlan.isconnected():
 | 
				
			||||||
    sleep_ms(100)
 | 
					    sleep_ms(100)
 | 
				
			||||||
    wifi_connection_counter += 1
 | 
					    watchdog_counter += 1
 | 
				
			||||||
    # When Wi-Fi didn't connect in X seconds
 | 
					    # When Wi-Fi didn't connect in X seconds
 | 
				
			||||||
    if wifi_connection_counter == 30:
 | 
					    if watchdog_counter == 30:
 | 
				
			||||||
        print("main.py reinitiating Wi-Fi connection")
 | 
					        print("main.py reconnecting to Wi-Fi")
 | 
				
			||||||
        # Reinitiate the Wi-Fi connection
 | 
					        # Reinitiate the Wi-Fi connection
 | 
				
			||||||
        wlan.connect(ssid, config["wifis"][ssid])
 | 
					        wlan.connect(ssid, config["wifis"][ssid])
 | 
				
			||||||
        wifi_connection_counter = 0
 | 
					
 | 
				
			||||||
 | 
					# Restart watchdog counter
 | 
				
			||||||
 | 
					watchdog_counter = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Connect to the websocket
 | 
					# Connect to the websocket
 | 
				
			||||||
uri = "ws://%s/p2p/sumo-%s/browser/" % (config['sumo_server'], config['sumo_id'])
 | 
					uri = "ws://%s/p2p/sumo-%s/browser/" % (config['sumo_server'], config['sumo_id'])
 | 
				
			||||||
conn = uwebsockets.connect(uri)
 | 
					conn = uwebsockets.connect(uri)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set X seconds timeout for socket reads
 | 
					 | 
				
			||||||
conn.settimeout(1)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Stop bootup blinking
 | 
					# Stop bootup blinking
 | 
				
			||||||
timer.deinit()
 | 
					timer.deinit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -204,6 +204,7 @@ def connect(uri):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Connect the socket
 | 
					    # Connect the socket
 | 
				
			||||||
    sock = socket.socket()
 | 
					    sock = socket.socket()
 | 
				
			||||||
 | 
					    sock.settimeout(1)
 | 
				
			||||||
    addr = socket.getaddrinfo(uri.hostname, uri.port)
 | 
					    addr = socket.getaddrinfo(uri.hostname, uri.port)
 | 
				
			||||||
    sock.connect(addr[0][4])
 | 
					    sock.connect(addr[0][4])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user