Antennen Autosensing: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(→Aber?: nen geht mit beiden plugins) |
(→Skript: neues skript) |
||
Zeile 30: | Zeile 30: | ||
===Skript=== | ===Skript=== | ||
− | *dieses Skript am besten nach <tt>/etc/init.d/S54antennen_autosensing</tt> kopieren | + | *[http://www.stud.tu-ilmenau.de/~babi-mtr/wirelessweimar/S54antennen_autosensing dieses Skript runterladen] und am besten nach <tt>/etc/init.d/S54antennen_autosensing</tt> kopieren |
<pre> | <pre> | ||
#!/bin/sh | #!/bin/sh | ||
− | + | # | |
+ | # Automatische Wahl der richtigen Antenne - Bastian Bittorf /weimarnetz - $VER 2006aug31,12uhr07 | ||
+ | # | ||
RX=$(nvram get wl0_antdiv) | RX=$(nvram get wl0_antdiv) | ||
TX=$(nvram get ff_txant) | TX=$(nvram get ff_txant) | ||
+ | PRE="AUTOANT-WAHL: " | ||
+ | ENDE=0 | ||
+ | CONF="/etc/olsrd.conf" | ||
+ | PAUSE=$(awk '{if($1=="LinkQualityWinSize")s=$2;if($1=="HelloInterval"){print s*$2;exit}}' $CONF) | ||
+ | eval $(netparam) | ||
+ | |||
+ | logger $PRE"Start..." | ||
+ | |||
+ | if [ "$RX" = "-1" ] && [ "$TX" = "-1" ] && [ "$(nvram get ff_httpinfo)" = 1 ] | ||
+ | then | ||
+ | |||
+ | # | ||
+ | # Antenne A einstellen, starten einer neuen Messreihe, warten | ||
+ | # | ||
+ | |||
+ | logger $PRE"Antenne A einstellen und $PAUSE sek. warten..." | ||
+ | wl -i $WIFIDEV antdiv 0 | ||
+ | wl -i $WIFIDEV txant 0 | ||
+ | sleep $PAUSE | ||
+ | |||
+ | # | ||
+ | # Erfassen der Messwerte je nach Plugin unterschiedlich | ||
+ | # | ||
+ | |||
+ | if [ -n "$(grep httpinfo $CONF)" ] | ||
+ | then | ||
+ | logger $PRE"httpinfo-Plugin (Port 8080) erkannt..." | ||
+ | eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{ | ||
+ | if(s==1&&$0=="</table>")exit | ||
+ | if(s==1){z++;p=p+$21;etx=etx+$33} | ||
+ | if($3=="width")s=1} | ||
+ | END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') | ||
+ | fi | ||
+ | |||
+ | if [ -n "$(grep txtinfo $CONF)" ] | ||
+ | then | ||
+ | logger $PRE"txtinfo-Plugin (Port 2006) erkannt..." | ||
+ | eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{ | ||
+ | z++;p=p+$6;etx=etx+$8} | ||
+ | END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') | ||
+ | fi | ||
+ | |||
+ | logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR1, $PAKETE1, $ETXSUM" | ||
+ | |||
+ | # | ||
+ | # Antenne B einstellen, starten einer neuen Messreihe, warten | ||
+ | # | ||
+ | |||
+ | logger "AUTOANT-WAHL: Antenne B einstellen, OLSR-Neustart erzwingen und $PAUSE sek. warten..." | ||
+ | wl -i $WIFIDEV antdiv 1 | ||
+ | wl -i $WIFIDEV txant 1 | ||
+ | /etc/init.d/S53olsrd restart | ||
+ | sleep $PAUSE | ||
− | + | # | |
+ | # Erfassen der Messwerte je nach Plugin unterschiedlich | ||
+ | # | ||
− | + | if [ -n "$(grep httpinfo $CONF)" ] | |
− | + | then | |
− | + | eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{ | |
+ | if(s==1&&$0=="</table>")exit | ||
+ | if(s==1){z++;p=p+$21;etx=etx+$33} | ||
+ | if($3=="width")s=1} | ||
+ | END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') | ||
+ | fi | ||
− | + | if [ -n "$(grep txtinfo $CONF)" ] | |
− | + | then | |
− | + | eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{ | |
− | + | z++;p=p+$6;etx=etx+$8} | |
+ | END{print "NACHBAR2="z";PAKETE2="p";ETXSUM2="etx*100";ETXSUM="etx}') | ||
+ | fi | ||
− | + | # | |
− | + | # Vergleiche & Auswertungen | |
− | + | # | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR2, $PAKETE2, $ETXSUM" | |
− | logger "AUTOANT-WAHL: | + | if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Nachbaranzahl vergleichen...";fi |
− | + | if [ "$NACHBAR1" -gt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi | |
− | + | if [ "$NACHBAR1" -lt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi | |
− | |||
− | + | if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Paketanzahl vergleichen...";fi | |
− | if | + | if [ "$PAKETE1" -gt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi |
− | + | if [ "$PAKETE1" -lt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi | |
− | |||
− | |||
− | |||
− | |||
− | if | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | if [ "$ENDE" | + | if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: ETX-Summen vergleichen...";fi |
− | if [ "$ | + | if [ "$ETXSUM1" -lt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi |
− | if [ "$ | + | if [ "$ETXSUM1" -gt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi |
− | + | # | |
− | + | # Umsetzungen der Schlussfolgerung | |
− | + | # | |
− | if [ "$ | + | if [ "$ANT" = "A" ] |
− | + | then | |
− | + | wl -i $WIFIDEV antdiv 0 | |
+ | wl -i $WIFIDEV txant 0 | ||
+ | logger $PRE"Antenne A wird genommen..." | ||
+ | else | ||
+ | logger $PRE"Antenne B wird genommen (bzw. gelassen)..." | ||
+ | fi | ||
− | |||
− | |||
− | |||
− | |||
− | |||
else | else | ||
− | logger " | + | logger $PRE"keine Skriptausfuehrung, Antennenwahl nicht auf Auto oder OLSR-Info-Plugin nicht aktiviert." |
− | |||
− | |||
fi | fi | ||
− | logger " | + | logger $PRE"Ende..." |
+ | # | ||
+ | # Ende... | ||
+ | # | ||
</pre> | </pre> |
Version vom 31. August 2006, 12:00 Uhr
Warum
- hat man _eine_ bessere Antenne an sein Geraet geschraubt, hat man folgendes Problem:
- Es ist immer wieder problematisch herauszufinden, welcher Antennenanschluss nun tatsaechlich auf welche Antenne zeigt. Antenne A ist manchmal links und manchmal rechts, je nach dem welche Wurst die Frau am Linksys-Fliessband zum Fruehstueck auf dem Broetchen hatte
Wie
- einmal beim start des routes wird folgendes erledigt:
- Antenne A einstellen.
- eine komplette Windowsize warten
- messen:
- wieviel nachbarn
- wieviel olsr-pakete
- summe aller etx-werte
- Antenne B einstellen.
- eine komplette Windowsize warten
- messen:
- wieviel nachbarn
- wieviel olsr-pakete
- summe aller etx-werte
- Vergleich von
- Nachbaranzahl -> bessere Antenne hat mehr Nachbarn -> fertig
- wenn Nachbarzahl gleich:
- OLSR-Pakete -> bessere Antenne hat mehr Pakete empfangen -> fertig
- wenn OLSR-Pakete gleich:
- Summe ETX-Werte -> bessere Antenne hat geringere Summe -> fertig
Aber?
- das Skript wird nur durchlaufen, wenn die Antenneneinstellung auf "Auto" steht
- das Skript baut Mist, wenn man eine Richtantenne montiert hat. Es wirkt also nur bei 2 verschieden guten Rundstrahlern, aber das wird noch behoben.
- es wird AWK benoetigt - das wird aber noch wegrationalisiert
Skript
- dieses Skript runterladen und am besten nach /etc/init.d/S54antennen_autosensing kopieren
#!/bin/sh # # Automatische Wahl der richtigen Antenne - Bastian Bittorf /weimarnetz - $VER 2006aug31,12uhr07 # RX=$(nvram get wl0_antdiv) TX=$(nvram get ff_txant) PRE="AUTOANT-WAHL: " ENDE=0 CONF="/etc/olsrd.conf" PAUSE=$(awk '{if($1=="LinkQualityWinSize")s=$2;if($1=="HelloInterval"){print s*$2;exit}}' $CONF) eval $(netparam) logger $PRE"Start..." if [ "$RX" = "-1" ] && [ "$TX" = "-1" ] && [ "$(nvram get ff_httpinfo)" = 1 ] then # # Antenne A einstellen, starten einer neuen Messreihe, warten # logger $PRE"Antenne A einstellen und $PAUSE sek. warten..." wl -i $WIFIDEV antdiv 0 wl -i $WIFIDEV txant 0 sleep $PAUSE # # Erfassen der Messwerte je nach Plugin unterschiedlich # if [ -n "$(grep httpinfo $CONF)" ] then logger $PRE"httpinfo-Plugin (Port 8080) erkannt..." eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{ if(s==1&&$0=="</table>")exit if(s==1){z++;p=p+$21;etx=etx+$33} if($3=="width")s=1} END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') fi if [ -n "$(grep txtinfo $CONF)" ] then logger $PRE"txtinfo-Plugin (Port 2006) erkannt..." eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{ z++;p=p+$6;etx=etx+$8} END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') fi logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR1, $PAKETE1, $ETXSUM" # # Antenne B einstellen, starten einer neuen Messreihe, warten # logger "AUTOANT-WAHL: Antenne B einstellen, OLSR-Neustart erzwingen und $PAUSE sek. warten..." wl -i $WIFIDEV antdiv 1 wl -i $WIFIDEV txant 1 /etc/init.d/S53olsrd restart sleep $PAUSE # # Erfassen der Messwerte je nach Plugin unterschiedlich # if [ -n "$(grep httpinfo $CONF)" ] then eval $(wget -O - http://127.0.0.1:8080/nodes|awk -F"[< =>]" '{ if(s==1&&$0=="</table>")exit if(s==1){z++;p=p+$21;etx=etx+$33} if($3=="width")s=1} END{print "NACHBAR1="z";PAKETE1="p";ETXSUM1="etx*100";ETXSUM="etx}') fi if [ -n "$(grep txtinfo $CONF)" ] then eval $(wget -O - http://127.0.0.1:2006/neighbours|grep $WIFIADR|awk '{ z++;p=p+$6;etx=etx+$8} END{print "NACHBAR2="z";PAKETE2="p";ETXSUM2="etx*100";ETXSUM="etx}') fi # # Vergleiche & Auswertungen # logger $PRE"Nachbarn,Pakete,ETXsum = $NACHBAR2, $PAKETE2, $ETXSUM" if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Nachbaranzahl vergleichen...";fi if [ "$NACHBAR1" -gt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi if [ "$NACHBAR1" -lt "$NACHBAR2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: Paketanzahl vergleichen...";fi if [ "$PAKETE1" -gt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi if [ "$PAKETE1" -lt "$PAKETE2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi if [ "$ENDE" = 0 ];then logger "AUTOANT-WAHL: ETX-Summen vergleichen...";fi if [ "$ETXSUM1" -lt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;ANT=A;fi if [ "$ETXSUM1" -gt "$ETXSUM2" ] && [ "$ENDE" = 0 ];then ENDE=1;fi # # Umsetzungen der Schlussfolgerung # if [ "$ANT" = "A" ] then wl -i $WIFIDEV antdiv 0 wl -i $WIFIDEV txant 0 logger $PRE"Antenne A wird genommen..." else logger $PRE"Antenne B wird genommen (bzw. gelassen)..." fi else logger $PRE"keine Skriptausfuehrung, Antennenwahl nicht auf Auto oder OLSR-Info-Plugin nicht aktiviert." fi logger $PRE"Ende..." # # Ende... #