feat: Fehlerbehandlung für WiFi-Verbindungen verbessert und Fallback-AP-Start optimiert; Versionsnummer auf 1.0.77 erhöht
This commit is contained in:
@@ -95,12 +95,18 @@ def connect_client_wifi(ssid, password):
|
||||
log.info(f'Verbinde mit WiFi: {ssid}')
|
||||
nm('con', 'delete', NM_CLIENT_CON)
|
||||
time.sleep(1)
|
||||
|
||||
# Scan erzwingen – sonst findet nmcli das Netz nach dem Boot nicht im Cache
|
||||
log.info('WiFi-Scan läuft...')
|
||||
nm('dev', 'wifi', 'rescan')
|
||||
time.sleep(4)
|
||||
|
||||
try:
|
||||
# --wait 15: nmcli gibt nach 15 s auf; subprocess-Timeout als Sicherheitsnetz
|
||||
# --wait 45: genug Zeit für Scan + WPA-Handshake + DHCP
|
||||
r = subprocess.run(
|
||||
['nmcli', '--wait', '15', 'dev', 'wifi', 'connect', ssid,
|
||||
['nmcli', '--wait', '45', 'dev', 'wifi', 'connect', ssid,
|
||||
'password', password, 'name', NM_CLIENT_CON, 'ifname', 'wlan0'],
|
||||
capture_output=True, text=True, timeout=25,
|
||||
capture_output=True, text=True, timeout=55,
|
||||
)
|
||||
except subprocess.TimeoutExpired:
|
||||
log.warning(f'WiFi-Verbindung Timeout (SSID: {ssid})')
|
||||
@@ -166,29 +172,40 @@ def wifi_monitor():
|
||||
_wait_for_nm()
|
||||
_purge_foreign_wifi_profiles()
|
||||
|
||||
connect_failures = 0
|
||||
|
||||
while True:
|
||||
try:
|
||||
update_wifi_state()
|
||||
with wifi_lock:
|
||||
mode = wifi_state['mode']
|
||||
|
||||
cfg = load_cfg()
|
||||
cfg = load_cfg()
|
||||
ssid = cfg.get('wifi_ssid', '')
|
||||
pw = cfg.get('wifi_password', '')
|
||||
|
||||
if mode == 'disconnected':
|
||||
ssid = cfg.get('wifi_ssid', '')
|
||||
pw = cfg.get('wifi_password', '')
|
||||
if mode == 'client':
|
||||
connect_failures = 0 # Verbindung OK – Zähler zurücksetzen
|
||||
|
||||
elif mode == 'disconnected':
|
||||
connected = False
|
||||
if ssid:
|
||||
log.info(f'Verbindungsversuch {connect_failures + 1}: {ssid}')
|
||||
connected = connect_client_wifi(ssid, pw)
|
||||
if connected:
|
||||
connect_failures = 0
|
||||
time.sleep(5)
|
||||
update_wifi_state()
|
||||
else:
|
||||
connect_failures += 1
|
||||
|
||||
if not connected:
|
||||
# AP erst starten wenn kein SSID konfiguriert ODER nach 2 Fehlversuchen
|
||||
if not connected and (not ssid or connect_failures >= 2):
|
||||
ap_ssid = cfg.get('ap_ssid', 'PiCopy')
|
||||
ap_pw = cfg.get('ap_password', 'PiCopy123')
|
||||
log.info(f'Starte Fallback-AP nach {connect_failures} Fehlversuchen')
|
||||
if start_ap(ap_ssid, ap_pw):
|
||||
connect_failures = 0
|
||||
time.sleep(3)
|
||||
with wifi_lock:
|
||||
wifi_state.update(mode='ap', ssid=ap_ssid, ip='10.42.0.1')
|
||||
|
||||
Reference in New Issue
Block a user