В преддверии нового года, хочется создать себе и окружающим соответствующее настроение, чувство праздника. Поэтому мы украшаем различной атрибутикой свои дома и места работы. Кто-то покупает всё готовое, кто-то любит мастерить руками. Как говориться «от каждого по его способностям, каждому по его потребностям», товарищи.
Я работаю в дружном и весёлом коллективе айти-шников, которым чужды всякие «свистелки-пукалки», однако мы не стали отставать от других отделом и постарались… нуу, как постарались, тут да там, мишуру приклеили и всё. Но иногда на меня находит волна креатива и я начинаю творить…
Не долго думая, я схватил первый попавшийся (неиспользуемый) коммутатор и назначил его «новогодней ёлкой». Поставив его вертикально и набросив на него зелёную мишуру, немного погодя приукрасив «дождиком».
Получилось оригинально и забавно. Коллеги заприметив моё творение, как обычно отшутились как могли, а в конце добавили «а чего это ёлочка твоя не горит?!». Ахаха, да. Сперва я не воспринял это в серьёз, ведь это коммутатор и индикация на нём только одна — активность ethernet соединения. Соединять все порты петлями не вариант, потому как испортило бы внешний вид изобилием проводов. Однако пару дней спустя, мой коллега подсказал, что через консоль этого коммутатора возможно получиться сотворить магию. В итоге, после двух часов гугления и беглых тестов, у меня получилось нечто бессмысленное, но с эффектом «Вау!». Этим я и спешу поделиться:
Для эффекта гирлянды, нужно было не просто включить все светодиодные индикаторы, а ещё и переключать их. Для этого я написал однострочный скрипт. Он состоит из определения пары необходимых переменных, цикла while для зацикливания, цикла for для очередности включения и выключения индикаторов, задержки для плавной анимации и пары условных операторов для корректной работы.
Публикую на условиях лицензии WTFPL. С наступающим, 2019, Новым Годом!
[admin@MikroTik] >
{:local true 1; :local onff on; :while ($true = 1) do={ :local t0 [:pick [/system clock get time] 7 8]; :if ($t0 = 0) do={:set $t0 10}; for x from=0 to=27 step=$t0 do={ /system leds set $x type=$onff; delay 60ms}; :if ($onff = "on") do={:set $onff off} else={:set $onff on}; :put $t0} }