Главная / Проекты и исследования / Система автоматической подачи звонков


Система автоматической подачи звонков

Будучи школьником, я как-то раз задумался: а что, если подачу звонков в школе автоматизировать? Это была бы неплохая идея. И вот, под новый 2019 год я начал разработку системы автоматической подачи звонков — так я её впоследствие назову.

Самая первая версия этой системы была выполнена на основе Arduino Nano в конце декабря-начале января. Она состояла собственно из Arduino Nano, которая содержала расписание, и часов реального времени DS1307. В системе было предусмотрено изменение расписания, настройка осуществлялась по USB при помощи текстовых команд.

У этой системы в таком виде было несколько фатальных недостатков:

Это привело к тому, что была начата разработка сервера на базе ESP8266, который соединялся с исполнительным блоком по UART, и панели управления для компьютера. Посоветовавшись со своим преподавателем информатики из Школы одарённых, Сергеем Викторовичем Савченко, я решил, что графический интерфейс должен быть разработан с использованием Qt. Сейчас мне это решение кажется довольно опрометчивым, но об этом позже.

В процессе разработки сервера возникла огромная проблема: у ESP8266 логический уровень был 3,3 В, а у Arduino Nano — 5 В. Попытка согласовать не увенчалась успехом, однако быстро выяснилось, что можно всё выполнить на одном контроллере. В итоге оба модуля были объединены. Но тут возникла другая проблема: часы реального времени отказались работать в новых условиях. Пришлось от них отказаться, а время отсчитывать при помощи самого ESP8266, при этом была добавлена возможность ручной синхронизации времени.

Панель управления системой автоматической подачи звонков была начата в марте 2019 года. Интерфейс программы был выполнен наподобие Excel, чтобы её потенциальным пользователям, а именно директорам школ, было её удобно использовать. Постепенно программа обрастала возможностями, в частности, был предусмотрен специальный калькулятор расписания, а для редактирования расписания, кроме простого режима, был также предусмотрен режим калькулятора (не является ли это избыточным?). Также существует возможность экстренной подачи звонков.

В системе автоподачи звонков также была предусмотрена парольная защита. Все важные операции: изменение расписания, экстренная подача звонков и даже смена пароля — должны выполняться с использованием этого самого пароля.

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

Помимо этого, в ходе работы над проектом вскрылись следующие недостатки:

Первые два недостатка из вышеприведённого списка можно решить, кардинально переписав программу и добавив часы реального времени. Последний же — введя шифрование канала, но для этого потребовался бы самоподписанный TLS-сертификат, а это, как считают в Microsoft, Google и других крупных компаниях, моветон, поэтому было решено обеспечить безопасность на доверии.

Однако, несмотря на все вышеуказанные недочёты, данный проект был успешно защищён на LII научно-практической конференции НОУ «Поиск», где я стал лауреатом. Об этом моём изобретении даже написала местная газета «Заря». После этого об этой системе я на некоторое время забыл.

В начале 2022 года, а именно в конце февраля я пересматривал свой же код и ужасался, как вообще я мог такое написать и как вообще этот код мог куда-то пролезть. Я стал его исправлять, и начал ужасаться ещё больше. Из выявляенных просчётов я могу вспомнить следующие:

Но самый главный недостаток кода данной программы — вся основная логика до краёв нашпигована в класс главного окна и ему сопутствующие. Всё это должно быть вынесено в отдельные модули, не зависящие от библиотеки, тогда поменять Qt на что-то другое не составило бы никакого труда. Однако основная логика с графическим интерфейсом тесно связаны, поэтому в таком случае придётся переписывать всё.

В марте 2022, а именно, через некоторое время после начала СВО, как раз возникла такая ситуация. Компания, разрабатывавшая Qt, запретила скачивание с российских IP-адресов. Чтобы можно было нормально поддерживать данную программу, необходимо заменить Qt на другие библиотеки, в частности, графическую её часть — на wxWidgets. Однако это будет очень сложно сделать, поскольку для этого, как ранее сказано, придётся переписывать полностью всю панель управления.

Но, несмотря на всё вышесказанное, этот проект для меня, можно сказать, бесценен. В какой-то мере я получил бесценный опыт проектирования таких вот сложных систем, в частности, опыт использования системы контроля версий git. В будущем он мне не раз пригодится (и, надо сказать, пригождается).

Ссылка на git-репозиторий: https://codeberg.org/danila-kondr/autoringsystem