Создание аквариумного контроллера (попытка номер 3) Часть 1: Предистория
После двух "неудачных" попыток создать акваконтроллер, я решил приступить к этому делу в третий раз, учитывая наработки и косяки из первых двух версий. Я буду описывать все шаги разработки контроллера, мало того, я буду выкладывать коды в открытый доступ и любой сможет воссоздать этот контроллер самостоятельно.
Почему две первые попытки были неудачными?
На самом деле первая попытка была довольно удачной и решала те задачи для которых изначально была создана: управление вентиляторами охлаждения (включение выключение, в зависимости от температуры), управление светом (включение/отключение по расписанию). Вот скриншоты первой версии.
Но в скоре этих возможностей стало мало и захотелось чего-то большего и более универсального, такпоявилась вторая версия контроллера.
Его отличия от первой версии были просто огромными:
Полностью переработанный дизайн (красивый и адаптивный)
Если первая версия была создана исключительно для себя, то из второй версии я планировал сделать готовый коммерческий продукт, по этому внешний видвсе же должен быть красивым и функциональным, что б не стыдно было показать.
Добавлена работа с пользователями, страница авторизации
Работа с множеством датчиков температуры
В то время как в первой версии поддерживался всего один датчик тмпературы, во второй версии можно подключать их неограниченное (в рамках стандарта) количество, присваивать какждому свое название и ограничения. Датчики автоматически проверяются и новые датчики добавляются в базу. Мало того, система не просто считыввет показания датчиков, а следит за исправностью, отсеивает случайные значения и может деактивировать сенсоры в случае частых сбоев.
Настройка каналов
Во второй версии я решил, что каналы (выходы для подключения нагрузки) надо добавлять прямо из интерфейса, а не завязывать програмно. Можно прямо из админки создать новый канал, присвоить ему выход на плате, а так же выбрать схему работы (нормальная или в реверсе).
Каждому каналу присваиватся название и иконка, так же его можно активировать или деактивировать.
При активации его текущий статус выносится на главную страницу, а так же в меню слева появляется страница для настройки условий работы.
Гибкие установки каналов
Любой канал может управляться по расписанию, по условию или при соблюдении и условия и расписания.
При чем расписаний можно задавать множество и в разные дни недели, условия выставлялись в зависимости от показаний датчиков температуры.
Уведомления email
Можно настроить отправку уведомлений по почте.
Telgram
Реализована работа с мессенджером Telegram, можно узнавать статусыканалов, показания датчиков температуры, включать и отключать каналы принудительно, а так же отсылать уведомления о внештатных событиях.
События
Отображение событий за последнее время в удобном формате.
Работа с кнопками
Можно задать выполнение каких-либо действия по нажатию кнопок.
Круто, зачем начинать с начала?
Так как я хотел сделать вторую версию контроллера максимально универсальной - я не учел все те необходимые мелочи, которые нужны конкретно для аквариума.
Например, у многих аквариумистов установлен светильник с множеством каналов и цветов, которые управляются с помощью шим(pwm), я хоть и предусматривал работу шим, но все же система оказалась не продумана до конца. Мало того, работа с каждым каналом происходит в отдельном окне, что не удобно при настраивании того же светильника.
Не работает с остальными датчиками, кроме датчика температуры.
Главная проблема - не правильно спроектированная база данных при которой очень сложно обрабатывать все события контроллера и очень много различных мелочей которые делают разработку сложной и не рациональной. По этому я принял решение разработать с 0.