Freifunk Nachtschalter-Skript - Client aus, Mesh an

Fortsetzung der Diskussion von Freifunk abschalten, Belästigung etc:

Ich suche nach einem Ansatz für ein Skript, welches eine Nachtschalter-Funktion einnimmt. Client-Netzwerk ausschalten, aber Mesh-Netzwerk eingeschaltet lassen, damit die Wolke nicht zusammenbricht.

Diskussionen über die Sinnhaftigkeit eine Nachtschalters bitte nicht in diesem Thread, dazu gibt es schon einige Meinungen im Ursprungsthread und dieser Aspekt kann dort auch weiterdiskutiert werden.

Der Befehl wifi kann ja nur ganze Devices disablen. Ein Ansatz wäre die Einträge für das Client-Netzwerk per UCI rauszuschmeissen, aber nicht zu committen. Kennt UCI ein Rollback?

Ich habe 2 Scripte:

/root/wifioff.sh

uci set wireless.client_radio0.disabled=1
uci commit wireless
wifi

und

/root/wifion.sh

uci set wireless.client_radio0.disabled=0
uci commit wireless
wifi

Beide mit chmod 755 /root/wifi* ausführbar machen.

Dann:
crontab -e

0 22 * * *  /root/wifioff.sh
0  5 * * *   /root/wifion.sh

Und cron neu starten:

/etc/init.d/cron enable
/etc/init.d/cron restart

Wenn die Systemzeit stimmt, sollte um 22 Uhr das Clientnetz aus gehen und um 5 Uhr wieder an. Das Mesh läuft die ganze zeit weiter.

Ich empfehle auf das commit zu verzichten.

Auch ohne das commit ist die Konfiguration im RAM overlay, so schonst du den Flash Speicher.

4 Likes

Ich würde noch empfehlen beim Booten zu überprüfen welcher Zustand aktiv sein sollte. Nicht das der nächtliche autoupdater alles durcheinander bringt. Vielleicht reicht es ja das Interface temporär mittels ip link set down client0 zu deaktivieren.

Updatefest ist das ganze leider sowieso nicht. Bei mir war nach einem Upgrade /root/ stets leer. Vielleicht kennt jemand einen besseren Ordner für Userscripte.

Ja, das stimmt - es klappt auch ohne das commit, weil die Einstellung nicht festgeschrieben werden muss.

Habe es gerade getestet - das Mesh geht auch runter, schade.

Richtig updatefest würde es erst werden, wenn man so eine Funktion als Modul in Gluon integriert in die Advanced Options. Das gäbe aber eine größere Diskussion. :smiley:

0 22 * * *  uci set wireless.client_radio0.disabled=1;uci set wireless.client_radio1.disabled=1;wifi
0  6 * * *   uci set wireless.client_radio0.disabled=0;uci set wireless.client_radio1.disabled=0;wifi

Unterbricht der Aufruf von wifi kurzzeitig die Mesh-Verbindung? Dann könnte man statt wifi auch gleich reboot machen.

Das sollte nicht passieren. Wie sieht die Ausgabe von iw dev danach aus?

Teste ich durch, habe nur im WiFi-Analyzer gesehen, dass das Mesh auf einmal mit weg ist und im Meshviewer waren die Meshknoten auch ohne Verbindung.

Die Verbindung ist vielleicht für eine 1/10 Sekunde weg.
Reboot ist nicht gut, da er ohne uci commit wieder mit den Defaultparametern hoch kommt.

Wenn die Defaults sicher sind, ist das ja okay - dachte nur, wir könnten gleich mal den Müll aussortieren wenn die Verbindung eh unterbrochen wird. Aber dieses kurze Flackern durch wifi sollte laufende Übertragungen ja nicht stören.

nach mir vorliegenden Gerüchten birgt jeder Schaltvorgang am Ath9k das Risiko eines Absturzes. Klein zwar, aber vorhanden.
Effekt ist, dass Radio dann ganz „aus“ ist.
Zu erkennen an „iw dev mesh0“ (oder wie immer es bei Euch heisst) kommt nicht mehr zurück.
Das kann man abtesten mittels eines
iw dev mesh0 >/tmp/wifialive.tmp&
Und wenn die Datei leer bleibt, dann ist das wifi wohl tot und die Kiste kommt kaum um einen Reboot herum.

3 Likes

Gibt es eine Möglichkeit dass das Private WLAN weiterhin aktiv bleibt?

OK, du hast also den Router so eingerichtet, dass dein privates Netz am WAN auch per WLAN freigegeben ist, nehmen wir an mit der SSID=„Bratzbach“ und dem Kennwort „katja8nasenbaer“, und du möchtest zu bestimmten Anlässen die SSID „Freifunk“ abschalten:

uci show wireless

ergibt in dieser Situation dann folgendes:

wireless.radio0=wifi-device
wireless.radio0.type=mac80211
wireless.radio0.channel=11
wireless.radio0.hwmode=11g
wireless.radio0.path=platform/qca953x_wmac
wireless.radio0.country=DE
wireless.radio0.htmode=HT20
wireless.radio0.disabled=0
wireless.client_radio0=wifi-iface
wireless.client_radio0.ifname=client0
wireless.client_radio0.network=client
wireless.client_radio0.disabled=0
wireless.client_radio0.device=radio0
wireless.client_radio0.mode=ap
wireless.client_radio0.macaddr=32:b7:c3:b1:27:a6
wireless.client_radio0.ssid=Freifunk
wireless.mesh_radio0=wifi-iface
wireless.mesh_radio0.ifname=mesh0
wireless.mesh_radio0.network=mesh_radio0
wireless.mesh_radio0.device=radio0
wireless.mesh_radio0.bssid=CA:FF:24:FF:AC:24
wireless.mesh_radio0.disabled=0
wireless.mesh_radio0.mcast_rate=12000
wireless.mesh_radio0.mode=adhoc
wireless.mesh_radio0.macaddr=32:b8:c3:b1:27:a6
wireless.mesh_radio0.ssid=wifimesh-g-ac
wireless.wan_radio0=wifi-iface
wireless.wan_radio0.disabled=0
wireless.wan_radio0.network=wan
wireless.wan_radio0.encryption=psk2
wireless.wan_radio0.device=radio0
wireless.wan_radio0.mode=ap
wireless.wan_radio0.key=katja8nasenbaer
wireless.wan_radio0.ssid=Bratzbach

Wenn man nun die folgenden 4 Befehle ausführt…

uci set wireless.client_radio0.encryption=psk2
uci set wireless.client_radio0.key=hierkommtkeinerrein
uci set wireless.client_radio0.ssid=FreifunkNotAvailableAtNight
wifi

…gibt es die SSID Freifunk mit passwordlosem Zugang nicht mehr, die heißt nun anders und hat auch ein Password. Dein privater Hotspot „Bratzbach“ sollte aber wie gehabt erreichbar sein.

Rückgängig kann man das dann mit den Befehlen…

uci set wireless.client_radio0.encryption=
uci set wireless.client_radio0.key=
uci set wireless.client_radio0.ssid=Freifunk
wifi

…machen.

3 Likes