SXT 5HnD Alignment Script
From MikroTik Wiki
# # Mikrotik RB411/433 "Lights and Sound" alignment script # written by Mark Shumate Feb 2009 # Edited by enuro12 Mar 2011 # # NOTE: I have replaced user-led with led5. That is the # only modification over the original script. I've tested # this on v5.2 of RouterOS on my SXT 5HnD. # # This script recognizes 9 different "signal levels" # and 3 assoc. statuses (connected, searching, other) # Currently, "signal levels" indicate the SNR/margin # measurement. Higher signal-to-noise measurements # correspond to higher levels. So level 8 would be # the best, below 1 would be the worst. The better # the signal-to-noise, the more LEDs you get, and # the faster the beeps get. Only 4 LEDs are used, # (the 5th being left alone, for NAND access ind.) # with intermediate signal levels resulting in a # combination of solid and flashing LEDs, shown # here: # # >= Level 8 : 4 solid (100ms beeps) # >= Level 7 : 3 solid, 4th flashing (300ms beeps) # >= Level 6 : 3 solid (500ms beep cycle) # >= Level 5 : 2 solid, 3rd flashing (700ms beeps) # >= Level 4 : 2 solid (900ms beeps) # >= Level 3 : 1 solid, 2nd flashing (1100ms beeps) # >= Level 2 : 1 solid (1300ms beeps) # >= Level 1 : 1 flashing (1500ms beeps) # < Level 1 : no LEDs, beeps only (1700ms beeps) # # The led5 (green LED above the blue power LED) # is used to display the association status. If the # wireless interface is associated, the led5 is # solid. If the wireless interface is actively # searching, but not yet associated, the led5 is # blinking twice a second, with a pause while a # rising trill of 3 beeps is played. If the wireless # interface is neither associated, nor searching # (like disabled, or something weird) then the light # will flicker rapidly every 2 seconds, and a # falling trill of 2 beeps is played. # Finally, the script plays startup (rising) and # shutdown (falling) tones. # For reference, the delay times associated with the # different signal levels are shown here: #:local lnsdelaytime 100ms; <---signals at/above lvl 8 #:local lnsdelaytime 300ms; <---signals between 7 and 8 #:local lnsdelaytime 500ms; <---signals between 6 and 7 #:local lnsdelaytime 700ms; <---signals between 5 and 6 #:local lnsdelaytime 900ms: <---signals between 4 and 5 #:local lnsdelaytime 1100ms; <---signals between 3 and 4 #:local lnsdelaytime 1300ms; <---signals between 2 and 3 #:local lnsdelaytime 1500ms; <---signals between 1 and 2 #:local lnsdelaytime 1750ms; <---signals below lvl 1 #:local lnsdelaytime 2000ms; <---signal not available # default delaytime :local lnsdelaytime "2000ms"; # name of wireless interface to monitor (default wlan1) :local lnsintname "wlan1"; # frequency (as in pitch) of beep (recommend 700 - 1000) :local lnsbeepfreq 800; # Here, the different signal levels are assigned to # signal-to-noise measurements. I haven't really tweaked # these yet to be in line with field testing, so they # may need quite a bit of adjusting. :local lnslevel8 70; :local lnslevel7 65; :local lnslevel6 60; :local lnslevel5 55; :local lnslevel4 50; :local lnslevel3 45; :local lnslevel2 40; :local lnslevel1 35; # The (veery approximate, heh) running time of the script # is set here. I am too lazy right now to do this a # better way...besides, who cares if the thing beeps or # flashes a couple extra minutes right?!? :) :local lnsrunningtime 60m; # Here, we set how long the script will beep. NOTE that # startup/shutdown tones will still be played. # I like this feature when using an access point where # the LEDs are clearly visible. If you don't want this # feature, set it to the same as $lnsrunningtime # (above). :local lnsbeeptime 10m; # figure out beep cutoff time :local lnsrunbeepdiff; :set lnsrunbeepdiff ($lnsrunningtime - $lnsbeeptime); # initialize LEDs, play starting tones :delay 50ms; :led led5=no led4=no led3=no led2=no led1=no; :delay 50ms; :beep frequency=($lnsbeepfreq - 300) length=50ms; :delay 50ms; :beep frequency=($lnsbeepfreq - 200) length=50ms; :delay 50ms; # main monitoring cycle :while ($lnsrunningtime > 0s) do={ /interface wireless monitor "$lnsintname" once do={ :if ($"status" = "connected-to-ess") do={ :if ($"signal-to-noise" >= $lnslevel8) do={ :set lnsdelaytime 100ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :led led5=yes led4=yes led3=yes led2=yes led1=yes; :delay $lnsdelaytime; } :if ($"signal-to-noise" >= $lnslevel7 && $"signal-to-noise" < $lnslevel8) do={ :set lnsdelaytime 300ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :for i from=1 to=3 do={ :led led5=yes led4=no led3=yes led2=yes led1=yes; :delay ($lnsdelaytime / 6); :led led5=yes led4=yes led3=yes led2=yes led1=yes; :delay ($lnsdelaytime / 6); } } :if ($"signal-to-noise" >= $lnslevel6 && $"signal-to-noise" < $lnslevel7) do={ :set lnsdelaytime 500ms; :led led5=yes led4=no led3=yes led2=yes led1=yes; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :delay $lnsdelaytime; } :if ($"signal-to-noise" >= $lnslevel5 && $"signal-to-noise" < $lnslevel6) do={ :set lnsdelaytime 700ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :for i from=1 to=3 do={ :led led5=yes led4=no led3=no led2=yes led1=yes; :delay ($lnsdelaytime / 6); :led led5=yes led4=no led3=yes led2=yes led1=yes; :delay ($lnsdelaytime / 6); } } :if ($"signal-to-noise" >= $lnslevel4 && $"signal-to-noise" < $lnslevel5) do={ :set lnsdelaytime 900ms; :led led5=yes led4=no led3=no led2=yes led1=yes; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :delay $lnsdelaytime; } :if ($"signal-to-noise" >= $lnslevel3 && $"signal-to-noise" < $lnslevel4) do={ :set lnsdelaytime 1100ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :for i from=1 to=3 do={ :led led5=yes led4=no led3=no led2=no led1=yes; :delay ($lnsdelaytime / 6); :led led5=yes led4=no led3=no led2=yes led1=yes; :delay ($lnsdelaytime / 6); } } :if ($"signal-to-noise" >= $lnslevel2 && $"signal-to-noise" < $lnslevel3) do={ :set lnsdelaytime 1300ms; :led led5=yes led4=no led3=no led2=no led1=yes; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :delay $lnsdelaytime; } :if ($"signal-to-noise" >= $lnslevel1 && $"signal-to-noise" < $lnslevel2) do={ :set lnsdelaytime 1500ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :for i from=1 to=3 do={ :led led5=yes led4=no led3=no led2=no led1=no; :delay ($lnsdelaytime / 6); :led led5=yes led4=no led3=no led2=no led1=yes; :delay ($lnsdelaytime / 6); } } :if ($"signal-to-noise" < $lnslevel1) do={ :set lnsdelaytime 1700ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=($lnsdelaytime / 2); } :led led5=yes led4=no led3=no led2=no led1=no; :delay $lnsdelaytime; } } else={ :if ($"status" = "searching-for-network") do={ :set lnsdelaytime 2000ms; :led led5=no led4=no led3=no led2=no led1=no; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=$lnsbeepfreq length=100ms; } :delay 100ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=($lnsbeepfreq + 100) length=75ms; } :delay 75ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=($lnsbeepfreq + 200) length=50ms; } :delay 50ms; :for i from=1 to=4 do={ :led led5=no; :delay ($lnsdelaytime / 8) :led led5=yes; :delay ($lnsdelaytime / 8) } :set lnsdelaytime ($lnsdelaytime + (50ms + 75ms + 100ms)); } else={ :set lnsdelaytime 2000ms; :led led5=no led4=no led3=no led2=no led1=no; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=($lnsbeepfreq - 150) length=150ms; } :delay 150ms; :if ($lnsrunningtime > $lnsrunbeepdiff) do={ :beep frequency=($lnsbeepfreq - 350) length=100ms; } :delay 100ms; :for i from=1 to=4 do={ :led led5=yes; :delay 50ms; :led led5=no; :delay 50ms; } :delay 1550ms; } } } :set lnsrunningtime ("$lnsrunningtime" - "$lnsdelaytime"); } # shut off LEDs, play shutdown tones :delay 50ms; :led led5=no led4=no led3=no led2=no led1=no; :delay 50ms; :beep frequency=($lnsbeepfreq - 200) length=50ms; :delay 50ms; :beep frequency=($lnsbeepfreq - 300) length=50ms; :delay 50ms;