Антон и его умный дом
Расскажи, как ты пришел к 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:
Для них я разработал универсальную плату и прошивку, в которую входили такие функции, как:
- Управление высоковольтной нагрузкой через доп. модули (освещение, розетки, вентиляция)
- Управление низковольтной нагрузкой, типа светодиодных RGB лент со встроенными модулями
- Управление газовым котлом
- Управление состоянием компьютеров и сервера
- Чтение данных с датчиков температуры и влажности
- Чтение данных с датчиков движения
При выходе из строя одного из модулей достаточно взять запасной ESP, залить в него прошивку, задать параметры подключения к WiFi в конфиге, а дальше он сам настроится на нужные параметры работы. При выходе из строя сервера ничего страшного не произойдет — не будут работать лишь функции, которые ориентируются на движение, температуру и влажность.
На данный момент проект так и застрял в этом состоянии. Есть начинания по переходу на новую версию питона с использованием асинхронных функций и Flask 2.0, который так же поддерживает асинхронщину, но пока продвинулся не сильно ввиду отсутствия времени, да и мотивации, если честно.
Есть у меня и другие проекты, типа фото галереи на Python, JS + S3, семейная бухгалтерия, автоматизатор для составления сменных заданий для дежурных наладчиков (я ж раньше на заводе работал) и бэкэнд для обувного магазина моего товарища. Но рассказывать о них не имеет смысла, они не такие интересные.
Поэтому, если решили начать своей проект, то задумайтесь для чего он вам — освоить новый инструмент, прокачать навыки или просто развлечься?