Мигание винтажными светодиодами или как мы предупреждаем о «пожарах» на проекте

29kynpsxkjuzjwdby5s9o7czujw.png

Рутина — огромное поле для автоматизации. Если задача отнимает много сил, требует усидчивости и из раза в раз повторяется — это верный знак, что стоит сделать парочку шагов к уменьшению этой повторяющейся боли. А ещё реализацию можно превратить в неплохой технофанчик.

Сегодня я расскажу про автоматизацию системы оповещений, мониторинга и алертов. Под катом польская мигалка 1984 года и ни одного пропущенного возгорания. Код и инструкции по сборке прилагаются.

Недавно мне стукнуло 8 лет. 8 лет, как я работаю в 2ГИС. По этому поводу один товарищ поинтересовался: «А как ты так долго держишься? Не возникало желания попробовать что-то новое?»

Возникало. И до сих пор возникает. И до сих пор пробую. Пробую себя в новых ролях, командах, технологиях. Почему нет? Ведь работа это не только и не столько про «приходить в 9:00, открывать таск-менеджер и брать в работу очередную задачу, в 18:00 идти домой», и даже не «А!!! Нас опять DDoS«ят, давай request_limit впилим вот сюда, а вот тут грепнем IPшники, а вот сюда… Ой, как уже 3 часа ночи?». Это всё не то. Работа — это про коллектив, взаимоотношения, вечерние посиделки на кухне. Про интересные задачи и комфортную среду обитания, в конце концов. Всё убивает пофигизм и рутина. Как работать с первым — не знаю, не замечал за собой, а вот про второе — расскажу.

Сегодня мы пойдём проторенной дорожкой: билд-светофор в офисе, и ещё один; и поавтоматизируем оповещения, мониторинг и алерты. Но делать очередной светофор для билд-сервера — это пошло. Билдов, веток и тестов у нас много, а грабить склад ГАИ ради десятка светофоров желания нет. Будем визуализировать «пожары»!

hpq0ctxkqoknb410zxwps-ceyhs.jpeg

Вот типичный экран который висит у нас в кабинете. 95% времени он показывает, насколько жив наш проект и что с ним происходит. Параллельно есть канал в Slack с уведомлениями о релизах и об ошибках.

Чтобы не отвлекать всю команду, на неделю назначается дежурный, который выполняет роль релиз-мастера и принимает огонь на себя, если произошло что-то страшное. Его задача выяснить, что случилось, и либо починить самому, либо найти того, кто всё исправит.

Также мы используем этот монитор для daily-митингов — открываем Kanban Board в Jira и понеслось.

Статус дежурного не отменяет рабочие задачи. Если ответственный за пожары забрёл слишком далеко в чертоги своего разума, результат может быть менее оперативным, чем требуется. Это натолкнуло на мысль, что для полного счастья нам нужна более весомая оповещалка, чем бесконечные уведомления от Slack.

Идея окрепла, когда на просторах Avito обнаружилась отличная винтажная польская мигалка 1984 года выпуска. Если где-то пожар, то пусть эта штука включается! Штуку обещали даже в почти рабочем состоянии. 500 рублей и она у меня в рюкзаке. Так давайте добавим ей немного хайпа IoT и набросов на Arduino.

6uhgtyey8v4painxacw_ufdqog4.png

План был прост и гениален! Берем блок питания на 12 вольт, добавляем Sonoff SV — esp8266 с реле и всей необходимой обвязкой и питанием от 12 вольт. Перепрошиваем чем-нибудь типа http://wifi-iot.ru/, цепляем мигалку — profit! Имеем подключенное по Wi-Fi устройство с REST API и ещё 1000 фич.

xfsw4jknxqlkun2ol0dvj_q4baa.png

Шнур питания с плоской вилкой от бабушкиного радиоприемника или из ближайшего рынка радиотоваров — 60 рублей
Блок питания 12v 10w с Aliexpress или всё тех же радиотоваров — 260 рублей
Sonoff SV — $4.85 + доставка
Мигалка винтажная — бесценно (500 рублей)

На столь смелые действия корпоративный Wi-Fi с сертификатами EAP-PEAP и прочими страшными словами сказал «Ты не пройдёшь!».

oyn-nth-sypocgf1vdx0hxz8fuq.jpeg

Можно было б засучить рукава, погуглить https://github.com/esp8266/Arduino/issues/1032, взять свежий SDK и «быстренько» написать всё самому. Но тогда технофанчик превращается в длительное копание и дебаг. Отложу-ка этот вариант до выпуска версии 2.0, улучшенной и исправленной.

Возьмём так не любимый olartamonov Arduino, россыпь того, что вот уже N лет пылилось в ящиках, и соберем монстра Франкенштейна. Склада домашних деталей будет достаточно, чтобы проверить жизнеспособность MVP и выкинуть после отладки красивой и блестящей версии 2.0.

acom-9r68ntrxwj6ag8ii0ysvhe.jpeg

Решение топорно: Arduino подключается к сети по Ethernet, получает IP по DHCP, слушает запросы по HTTP и мигает «светодиодиком». Любой за вечер может скомпоновать такое решение из Examples Arduino IDE (но никогда, слышите, никогда ей не пользуйтесь! Это ад).


А чем пользоваться?

Тем, кто до сих пор плачет, колется, но продолжает есть кактус, предлагаю пересесть хотя бы на PlatformIO (ставится на Atom или VSCode), но лучше вообще этим не пользоваться, а почитать курс лекций по STM32 или ещё чего более полезного. А я, как покусанный в детстве ардуинщиками, таки доделаю своё черное дело :)

Код выложен на github, тут нет авторизации, развесистого API и красивых html страничек. Только MVP, только хардкор! Используйте на свой страх и риск, я предупреждал.

Когда софт написан, приходит время заводить мигалку. Ниже схема, что должна помочь разобраться в устройстве.


Ожидание:

x6oos9z3gfgyp2gk9k8hwjaann4.png


Реальность:

fo7at166uyswi0-uhsyqianycfg.jpeg

Итак заменяем Sonoff SV на:
Arduino UNO + wiznet w5100 + Реле

Подключение по пинам:
DIGITAL 10 — SS
DIGITAL 11 — MOSI
DIGITAL 12 — MISO
DIGITAL 13 — SCK
GND — GND
5V — 5V

Реле подключаем ещё проще: сигнальный пин на DIGITAL 4, силовой провод на мигалку цепляем в разрыв на C (common) и NC (normally closed).

Achtung!
Смотрите документацию к своим устройствам. Не факт, что, подключив плату Ethernet к 5 вольтам, вы не получите веселый дымок при тестировании! В моем случае всё штатно, и модуль рассчитан на питание от 5 вольт.

Объявление на Avito гласило, что мигалка в почти рабочем состоянии. За давностью лет в ней умерла только одна деталь — шестерня, вращающая отражатель.

sx6jviptedu-vrq_aj7ez2jryt0.jpeg

Выдыхаем, берем в руки Fusion360, моделируем новую и печатаем на офисном 3D-принтере.


Процесс моделинга шестерни

Проверяем радиусы и прочие характеристики шестерни, боремся с недоэкструзией и параметрами слайсера
vmsrfwhkdv3815zocydv9fntdyu.jpeg

Продолжаем моделить
hpmvz5doqty3zajkkxakgnajk_s.png

Печатаем, примеряем
ltanj2vww5u6phkeiv6mluezm1w.gif

Ещё чуть-чуть подгоняем и печатаем снова. Оригинальные клёпки были высверлены и заменены на комбинацию обычных винтов M3 и самоконтрящихся гаек. Не забыли добавить под них посадочные места.
zyt-ndarwrrswyepbnyy96ia99o.png

8ejaajyh2kiup7bcse5wjzkzhbg.jpeg

Смазываем шестерни, заменяем провода, собираем обратно — работает!

Хорошо бы напечатать шестерню из нейлона, но первая чистовая печать завершилась неудачей, а на вторую остатков пробника от bestfilament уже не хватило.

zrgwvpeop5ig3rjqjqnkq0f5mnc.gif


Как заставить мигалку включаться, когда произошло что-то из ряда вон выходящее?

Элементарно! Мы на работе используем Grafana, так что просто заводим новый Notification Channel с типом WebHook, который и посылает запрос на включение мигалки по определенным критериям. Выключается она сама через несколько секунд, чтобы не нагнетать атмосферу ещё больше.

Сколько времени ушло на всё это безобразие? Пара вечеров, если не отвлекаться. Плюс полдня рабочего времени, чтобы настроить интеграцию с остальными внутренними системами.

Технофанчик удался, польза в команду принесена, фотографии процесса сборки напоследок приведены.


Вот она перед нами, мигалка с проводами

© Habrahabr.ru