June 22, 2023

Антон и его умный дом

Расскажи, как ты пришел к pet-проекту?
Зачем стоит, по твоему мнению, тратить время на pet-проекты?

Привет!

Зачем нужны пет-проекты? Да банально — для самообучения. Изучая какие-либо технологии, одной теорией не обойдешься. Всегда проще учиться, когда у тебя есть практика. Только лишь по этой причине стоит тратить время на пет-проекты.

Вторая причина — просто удовольствие. Много кому разработка приносит несравнимое ни с чем удовольствие. А если не приносит, то пет-проект, наверное, будет лишним😊.  В моем случае я получил и опыт, и удовольствие.

Ну и хороший пет-проект можно добавить в свое портфолио.

Где искать pet-проекты? И как ты нашел/начал свой?

Это один из сложных вопросов, что-то вроде «как научиться программировать» — никогда не могу четко сформулировать на него ответ. Для каждого интересующегося всё индивидуально. Я считаю, что пет-проект должен приносить какую-то пользу (а лучше деньги). Потому что иначе вы его просто забросите.  Можно сделать, например, что-то для автоматизации своих рабочих задач. Или даже для автоматизации чужих задач.

Как пример — могу привести свой проект по автоматизации работы диспетчеров нефтебазы — они каждое утро должны определять, какое количество и какого топлива отправить на определенную АЗС (автозаправочную станцию), учитывая при этом, что на каждой АЗС должно остаться то количество топлива, с которым она сможет работать до следующего рейса. А количество АЗС — 48 штук, и бензовозов 12.

Работал я над ним очень долго — полгода разрабатывал по вечерам в свободное от работы время, а затем, когда мне удалось его продать своей же компании, еще полгода дебажил и улучшал. Работает он и по сей день с 2019 года 😊

Но это не тот проект, о котором я бы хотел рассказать.

Самым своим основным и любимым проектом я считаю систему автоматизации своей квартиры.

В 2013 году я должен был начать написание дипломного проекта для выпуска из техникума. И, поскольку я в то время как раз начал увлекаться Arduino (помигал светодиодом) и программированием на PHP, стало понятно, что я хочу делать что-то интересное, что я еще никогда в серьез не делал — написать какую-нибудь реально работающую систему.

Расскажи про него? Какие основные шаги/этапы ты прошел для его создания и жизни?

Своему проекту я дал название sysHome (SmartHome в 2013 году).

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

Поэтому для реализации этого проекта я должен был научиться: программировать на PHP, программировать на Arduino C (это упрощенный C/C++), изготавливать печатные платы, настраивать веб-серверы и базы данных.

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

sysHome на момент защиты диплома умел:

  • управлять вентиляцией и освещением в квартире
  • получать температуру в каждой комнате
  • читать состояние датчика открытия дверей
  • управлять видеонаблюдением
  • получать данные от всех сетевых устройств в моей квартире (мини мониторинг)

Веб интерфейс первой версии sysHome

После защиты диплома в таком виде проект проработал еще около полугода — пока я в конце 2013-начале 2014 не начал изучать Python.

Начал накидывать первые мысли по модернизации системы — управлять не одним Arduino, а несколькими, буквально чуть ли не по одному в каждую розетку/выключатель воткнуть.

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

В 2017 году я обзавелся своей собственной однокомнатной квартирой и в процессе ремонта заранее заложил около 300 м витой пары практически в каждый угол и розетку, для управления будущей системой автоматизации.

Т.к. старая система была полностью неактуальна, а тем более я абсолютно забыл, как писать на PHP, было решено отказаться от Arduino и все делать с нуля на Orange Pi с использованием Python.

Тут и родился sysHome v2, написанный на Python+flask. Но и он прожил не долго, до 2019 года.

В 2019 году Orange Pi вышел из строя полностью парализовав управление устройствами в моей квартире. Да, я заменил его на другой Orange Pi, но все равно начал переписывать проект.

И тут я познакомился с замечательным беспроводным модулем ESP8266. Он был практически полностью совместим с Arduino IDE, а также поддерживал специальную версию Python для микроконтроллеров — MicroPython. Таким образом, я планировал создать децентрализованную систему, с сервером для обработки данных, выход из строя которого позволил бы устройствам выполнять свои основные функции.

Купив себе десяток таких модулей, я разработал для них очередную версию sysHome на python+flask. На этот раз я познакомился с таким понятием как брокеры сообщений и начал использовать MQTT для общения всех плат с сервером.

Таким образом, в каждом уголке моей квартиры было подключено по одному устройству ESP8266. Сейчас их всего 7:

Для них я разработал универсальную плату и прошивку, в которую входили такие функции, как:

  1. Управление высоковольтной нагрузкой через доп. модули (освещение, розетки, вентиляция)
  2. Управление низковольтной нагрузкой, типа светодиодных RGB лент со встроенными модулями
  3. Управление газовым котлом
  4. Управление состоянием компьютеров и сервера
  5. Чтение данных с датчиков температуры и влажности
  6. Чтение данных с датчиков движения
Плата для ESP8266
Модули управления 220В (1-2). Модуль для управления компьютером (3).

При выходе из строя одного из модулей достаточно взять запасной ESP, залить в него прошивку, задать параметры подключения к WiFi в конфиге, а дальше он сам настроится на нужные параметры работы. При выходе из строя сервера ничего страшного не произойдет — не будут работать лишь функции, которые ориентируются на движение, температуру и влажность.

На данный момент проект так и застрял в этом состоянии. Есть начинания по переходу на новую версию питона с использованием асинхронных функций и Flask 2.0, который так же поддерживает асинхронщину, но пока продвинулся не сильно ввиду отсутствия времени, да и мотивации, если честно.

Есть у меня и другие проекты, типа фото галереи на Python, JS + S3, семейная бухгалтерия, автоматизатор для составления сменных заданий для дежурных наладчиков (я ж раньше на заводе работал) и бэкэнд для обувного магазина моего товарища. Но рассказывать о них не имеет смысла, они не такие интересные.

Поэтому, если решили начать своей проект, то задумайтесь для чего он вам — освоить новый инструмент, прокачать навыки или просто развлечься?

← Вернуться к дайджесту