Einige OpenWrt-Router haben das Problem, dass WLAN scheinbar nicht mehr sauber funktioniert.
Das merkt man schnell daran, dass sich ein Endgerät gar nicht mit dem WLAN verbinden möchte und wenn, dann nur mit einer bestimmten Frequenz.
So ist es z.B. bei mir der Fall, dass das 5GHz Band nicht mehr nutzbar ist, weil Endgeräte es nicht schaffen, eine Verbindung herzustellen.
Nur einige wenige Geräte scheinen dieses Problem umschiffen zu können.
Startet man den Router neu, tritt das Problem fast direkt wieder auf.
Auch ein Neustart des WLAN-Adapters (z.B. per Luci) reicht auch nicht.
Schaut man in das Systemprotokoll des Routers, findet man dort ganz oft folgenden Eintrag:
daemon.err hostapd: Failed to set beacon parameters
Das Problem existiert wenn man im Internet danach sucht schon länger.
Eine wirkliche Lösung, gibt es leider nicht.
Doch der kleine Fix für das Problem ist ganz simpel.
Wir müssen nur alle WLAN-SSIDs der betroffenen Frequenz deaktivieren und reaktivieren.
Weil mir das von Hand zu erledigen ziemlich zu dumm ist, habe ich mir hier ein Script erstellt.
Was tut es?
Es prüft, ob im Systemprotokoll gerade die betroffene Zeile mit dem Fehler auftritt.
Dann prüft es, welche WLAN-SSIDs von Radio1 (5GHz-Band bei mir) gerade aktiv sind und merkt sich diese.
Anschließend werden alle SSIDs deaktiviert, kurz 10 Sekunden gewartet und dann alle wieder reaktiviert, die bisher auch online waren.
Problem gelöst.
Lässt man das Script automatisch alle 30 Minuten mal drüber laufen, sollte das WLAN immer wenn du es brauchst funktionieren.
#!/bin/sh # Funktion zum Loggen log_message() { logger -t wlan_reset "$1" } log_message "WLAN Reset-Script gestartet, prüfe auf hostapd-Fehler" # Prüfe auf den Fehler im Log if logread -l 20 | grep -q "daemon.err hostapd: Failed to set beacon parameters"; then log_message "Hostapd-Fehler erkannt, starte WLAN-Reset Prozedur" # Schritt 2: Prüfe aktive WLANs auf Radio1 und speichere sie log_message "Prüfe aktive WLANs auf Radio1" # Temporäre Datei zur Speicherung der aktiven SSIDs ACTIVE_SSIDS_FILE="/tmp/active_ssids.tmp" > "$ACTIVE_SSIDS_FILE" # Datei leeren # Finde alle Wireless-Interfaces für radio1 for SECTION in $(uci show wireless | grep "device='radio1'" | sed -e "s/wireless\.\(.*\)\.device=.*/\1/"); do # Vollständiger Section-Name IFACE="wireless.$SECTION" # Prüfe, ob das Interface aktiviert ist IS_DISABLED=$(uci -q get $IFACE.disabled || echo "0") IFNAME=$(uci -q get $IFACE.ifname || echo "unbekannt") if [ "$IS_DISABLED" != "1" ]; then # Interface ist aktiv, speichere es echo "$IFACE" >> "$ACTIVE_SSIDS_FILE" log_message "Aktives WLAN gefunden: $IFACE ($IFNAME)" fi done # Prüfe, ob aktive SSIDs gefunden wurden if [ ! -s "$ACTIVE_SSIDS_FILE" ]; then log_message "Keine aktiven WLANs auf Radio1 gefunden. Beende Reset-Prozedur." rm -f "$ACTIVE_SSIDS_FILE" exit 0 fi # Schritt 3: Deaktiviere alle aktiven WLANs auf Radio1 log_message "Deaktiviere aktive WLANs auf Radio1" while read -r IFACE; do uci set $IFACE.disabled=1 log_message "Deaktiviere WLAN: $IFACE" done < "$ACTIVE_SSIDS_FILE" # Kommitiere Änderungen uci commit wireless wifi reload radio1 # Schritt 4: Warte 10 Sekunden log_message "Warte 10 Sekunden" sleep 10 # Schritt 5: Aktiviere die zuvor aktiven WLANs log_message "Reaktiviere zuvor aktive WLANs" while read -r IFACE; do uci set $IFACE.disabled=0 log_message "Reaktiviere WLAN: $IFACE" done < "$ACTIVE_SSIDS_FILE" # Kommitiere Änderungen uci commit wireless wifi reload radio1 log_message "WLAN-Reset abgeschlossen" # Lösche temporäre Datei rm -f "$ACTIVE_SSIDS_FILE" log_message "Script beendet" exit 0 else log_message "Kein Hostapd-Fehler gefunden. Script beendet." exit 0 fi
Um es laufen lassen zu können, musst du es ausführbar machen:
# chmod +x /root/wlan_reset.sh
Auch muss es dann automatisch ausgeführt werden.
Per Luci: System -> Geplante Aufgaben
*/30 * * * * /root/wlan_reset.sh > /dev/null 2>&1
Sehr coole Ideen.
Mein OpenWRT Netzwerk ist erst im „entstehen „, aber falls das Problem entsteht, hast du eine super Lösung erstellt!
Danke.
Hi!
Dann viel Spaß beim Aufbauen!
Das Problem habe ich nur bei ein paar Modellen nun gefunden und mit dem Script gefixt.
Ein Muster konnte ich noch nicht feststellen.
Ich hoffe, dass es bei dir nicht auftritt.