SXT 5HnD Alignment Script

From MikroTik Wiki
Revision as of 02:26, 11 May 2011 by Enuro12 (talk | contribs) (Created page with '# # 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…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  1. Mikrotik RB411/433 "Lights and Sound" alignment script
  2. written by Mark Shumate Feb 2009
  3. Edited by enuro12 Mar 2011
  4. NOTE: I have replaced user-led with led5. That is the
  5. only modification over the original script. I've tested
  6. this on v5.2 of RouterOS on my SXT 5HnD.
  7. This script recognizes 9 different "signal levels"
  8. and 3 assoc. statuses (connected, searching, other)
  9. Currently, "signal levels" indicate the SNR/margin
  10. measurement. Higher signal-to-noise measurements
  11. correspond to higher levels. So level 8 would be
  12. the best, below 1 would be the worst. The better
  13. the signal-to-noise, the more LEDs you get, and
  14. the faster the beeps get. Only 4 LEDs are used,
  15. (the 5th being left alone, for NAND access ind.)
  16. with intermediate signal levels resulting in a
  17. combination of solid and flashing LEDs, shown
  18. here:
  19. >= Level 8 : 4 solid (100ms beeps)
  20. >= Level 7 : 3 solid, 4th flashing (300ms beeps)
  21. >= Level 6 : 3 solid (500ms beep cycle)
  22. >= Level 5 : 2 solid, 3rd flashing (700ms beeps)
  23. >= Level 4 : 2 solid (900ms beeps)
  24. >= Level 3 : 1 solid, 2nd flashing (1100ms beeps)
  25. >= Level 2 : 1 solid (1300ms beeps)
  26. >= Level 1 : 1 flashing (1500ms beeps)
  27. < Level 1 : no LEDs, beeps only (1700ms beeps)
  28. The led5 (green LED above the blue power LED)
  29. is used to display the association status. If the
  30. wireless interface is associated, the led5 is
  31. solid. If the wireless interface is actively
  32. searching, but not yet associated, the led5 is
  33. blinking twice a second, with a pause while a
  34. rising trill of 3 beeps is played. If the wireless
  35. interface is neither associated, nor searching
  36. (like disabled, or something weird) then the light
  37. will flicker rapidly every 2 seconds, and a
  38. falling trill of 2 beeps is played.
  1. Finally, the script plays startup (rising) and
  2. shutdown (falling) tones.
  1. For reference, the delay times associated with the
  2. 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
  1. default delaytime
local lnsdelaytime "2000ms";
  1. name of wireless interface to monitor (default wlan1)
local lnsintname "wlan1";
  1. frequency (as in pitch) of beep (recommend 700 - 1000)
local lnsbeepfreq 800;
  1. Here, the different signal levels are assigned to
  2. signal-to-noise measurements. I haven't really tweaked
  3. these yet to be in line with field testing, so they
  4. 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;
  1. The (veery approximate, heh) running time of the script
  2. is set here. I am too lazy right now to do this a
  3. better way...besides, who cares if the thing beeps or
  4. flashes a couple extra minutes right?!? :)
local lnsrunningtime 60m;
  1. Here, we set how long the script will beep. NOTE that
  2. startup/shutdown tones will still be played.
  3. I like this feature when using an access point where
  4. the LEDs are clearly visible. If you don't want this
  5. feature, set it to the same as $lnsrunningtime
  6. (above).
local lnsbeeptime 10m;
  1. figure out beep cutoff time
local lnsrunbeepdiff;
set lnsrunbeepdiff ($lnsrunningtime - $lnsbeeptime);


  1. 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;
  1. 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");

}

  1. 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;