- PVSM.RU - https://www.pvsm.ru -
Работал я как-то на одном заводе, где лепили всякую электронику, не шибко сложную, и иногда подпадавшую под определение «Интернет вещей». По большей части, всякие датчики для охранных систем: датчики дыма, шума, проникновения, огня и всякое другое. Ассортимент изделий был широчайший, партии иногда были меньше 500 штук, и едва ли не под каждое изделие приходилось делать отдельный Test Fixture — по сути, просто жестяная коробка, в которую изделие на тестах ставилось, прижималось крышкой, и снизу контактные иглы прижимались к контактным точкам на печатной плате, как-то так:
Таким образом можно было физически общаться с устройством. Протокол связи у нас был довольно обычный в индустрии — RS232 (COM-port, разновидность UART). В коробку ставились так же всякие несложные контролируемые устройства для тестирования конечного продукта. Все эти вспомогательные контрольно-измерительные устр-ва управлялись тем же способом. Вся конструкция была весьма хлипкая, и разного рода неполадки были частью каждодневной рутины.
Спектр неполадок был весьма широк — плохие контакты, перепутали полярность при монтаже, проблемы с тестируемым изделием, с контрольно-измерительными устройствами, с контактными иглами, с кодом теста… да мало ли с чем! Но тестировать надо было постоянно, и если где-то начинали «сыпаться» тесты — одному из инженеров приходилось топать на линию, и начинать проверять всё вручную.
Первым делом, запускался Docklight — неплохая утилита для «общения» через COM-порты, но имевшая море ограничений. И вот тут-то мы и приближаемся к сути дела.
Что ж, поехали.
Далее. Никакой интеграции ни с каким другим продуктом не предусматривалось. Вроде бы, мелочь, а вот вам ситуация, когда это доводило до белого каления: тест упал, и надо разобраться, из-за чего. Первым делом, надо подключиться к устройствам, и посмотреть, не сдохли ли они вообще. Идём в device manager, смотрим, на каком порте сидит наше устройство, открываем Docklight, инициируем связь с нашим портом… Ошибка. Проклятье! Забыл остановить сервис, который установлен на NUC, и держит все порты. Эксклюзив, понимаешь. Ладно, тормозим сервис, открываем порт, грузим файл с командами девайса, шлём команды, получаем (или не получаем) ответы, решаем проблему. Снова запускаем тест, снова падает… Ах, ты ж, блин, забыл закрыть Docklight и перезапустить сервис. Всё, вроде, ошибок нет. Но это на ближайших пару часов, пока снова что-то не заглючит. И поверьте, решать подобные проблемы приходилось чаще, чем того хотелось бы.
Ну, и естественно, ни о каких расширениях, доп. фичах или тому подобном речи и быть не могло — продукт закрытый, писаный давно (его, похоже, уже не особо разрабатывают), кастомизации нет.
Что ж, решился я сделать нечто своё, но исправив (или улучшив) ситуацию с описанными проблемами.
Получилось нечто вроде Zabbix, но с заточкой под конкретную ситуацию.
Пожалуй, имеет смысл начать с общего описания архитектуры, а потом вдаваться в детали.
Схема выглядит так:
Имеем Agent, который бежит на станции, к которой физически подключены наши устройства. Agent писался на Python, поэтому работает без проблем на Windows, Linux, и спокойно можно допилить для использования и на RaspberryPi и подобных ему устройствах. Программка в высшей степени нетребовательна к ресурсам, и очень стабильна. Agent постоянно связан через Websocket с сервером (back end), и все настройки портов и их параметры получает оттуда, как при инициализации, так и при обновлениях. У Agent'а есть свой GUI для настроек и мониторинга в случае чего (может, связь оборвалась, может, лицензия просроченная).
Далее. Server (он же back end) поднимается из докера (а потому элементарно запускается не только в amazon или Google Cloud, но и на любой не особо мощной машинке в локальной сети с Linux на борту). Написан на Django в связке с Redis (для поддержки websocket'ов). Он хранит все настройки, и обеспечивает связь между пользовательским GUI (просто страница, написанная на ReactJS) и через Agent — с нашими девайсами. Связь двусторонняя, полностью асинхронная. Все настройки хранятся в Postgres и Mongo.
Ну, и, пожалуй, самая главная часть системы — сам клиент (попросту, страничка в браузере, для пущей динамичности писаная на ReactJS).
Да, визуальный дизайн далёк от совершенства, но это дело поправимое.
Что ж, на этом можно закруглиться, добавлю лишь пару слов о состоянии проекта и о демо.
В принципе, если будет интерес, добавлю поддержку https, и сделаю сборки Agent`а под разные платформы, а так же допилю все остальные фичи.
Буду рад любым отзывам и пожеланиям. Критика приветствуется!
Автор: efi
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/django-2/308938
Ссылки в тексте:
[1] сюда: http://18.224.10.61/
[2] Источник: https://habr.com/ru/post/440466/?utm_campaign=440466
Нажмите здесь для печати.