Почти "умный дом"
Предыстория.
Прочитал где-то мысль. Что рано или поздно любой программист хочет физически ощутить свою работу. Вот и меня накрыла такая проблема с главным вопросом, куда приложить "кипучую энергию". Как раз был период, когда в новой квартире постоянно отключали свет и после мне надо было бегать по всем комнатам выставлять правильно время на часах. а через 10мин. он мог опять "моргнуть". Прям, бесило это.
Поэтому решил делать единую систему синхронизации времени, а попутно показывать еще и температуру за бортом, чтобы каждый раз в окошко не смотреть, во второй версии графики и прогноз погоды с интернета. Нафига? А потому что появился TFT экран с сенсором не пропадать же такому функционалу. Понятия "Умный дом" тогда еще, по-моему, не существовало.
За более чем, 15-летний срок было сделано около 5 реализаций данного проекта. Часы - ардуино нано, вывод делал с использованием светодиодной матрицы, сегментных индикаторов, на LCD/TFT дисплеях. Сервер - ардуино мега + шильды(SD-card, давление, RTC, ethernet и еще какие-то), но главное условие — это синхронизация времени и отсутствие проводов. Для радиосвязи использовал модули 433 и NRF24L01, для них писал свои протоколы обмена данными. Хотя изначально сам сервер подключался по Ethernet.







Сам пугаюсь, когда смотрю на это
Каждую версию проекта разрабатывал и программировал от начала и до конца сам, языки: web, с++, php — все это приходилось изучать «с нуля». Было интересно, хоть на отладку/доработку уходили месяцы, но важен был процесс и конечно результат. Главная проблема это то, что радиоэлектронщик из меня никакой. Хоть я и пытался сам паять, разрабатывать схемы и печатать платы, но особой радости это не доставляло и поэтому старался, чтоб все подключалось с минимальной электронной оснасткой.
В основном все проекты работали по 2-3 года, далее разработка переходила на "следующую ступень", т.к. к тому времени появлялось что-то новое и мне интересно было работать с этим.
Проект v4.0.
Этот вариант проекта появился из-за потребности перевести все на WiFi, а т.ж. то, что у меня появилось несколько старых планшетов и электронных книг, которые было жалко выкидывать. Использование же WiFi и планшетов, намного упростили компонентную базу. Появилась возможность разделить модули температура/время. И в итоге система получилась следующая:
Модули(климат) получают температуру/влажность, каждый по своей локации и передают данные на сервер. Сервер по запросу выдает данные на другие Модули (они же планшеты, они же часы) и так же дублирует данные в базу на сайте для удаленного мониторинга. Для всего этого был развернут отдельный сервер(ПК с пассивным охлаждением), который хранил данные в базе MySQL.
Система достаточно простая, но были некоторые недочеты, с пропаданием WiFi на старых планшетах, проблемой со стартом после отключения питания, хоть все это было решаемо, но т.к. делал для себя, то нетрудно было подойти и принудительно исправить.
Со временем друзья/знакомые начали просить сделать им такое же, ведь старья у всех много. Но из-за отсутствия универсальности проекта приходилось отказывать. В итоге достали, все-таки решил сделать универсальную автономную платформу и без привязки к ПК. С достаточно простым подключением и обслуживанием, не требующего больших знаний в электронике.
Проект v5.0.
Железо:
Сервер - ESP2866 Lolin v3 - памяти маловато, но я сумел в нее уместиться, был вариант сделать на более современной платформе ESP32-c3, но там какие-то ограничения с WiFi, например в режиме точки доступа, чип грелся как чайник. В итоге намучился с ней и отказался. К нему подключен дисплей, для визуального контроля состояния оборудования.
Модуль(климат) - ESP8266 D1-MINI использовал их для совместимости с сервером + DHT11. Опционально к каждому модулю можно подключить BME280 для улицы. Он имеет и влажность, и давление и температуру. Есть возможность подключить несколько «Улиц» если, например, окна выходят на разные стороны, я отказался до конца это реализовывать, хотя в коде эта опция есть.
Для улицы использовал раньше DHT22, но как-то у него все печально с влажностью, через какое-то время она "отваливается", попробую как будет BME в работе.
Модуль(часы) - старые планшеты/эл.читалки с дохлыми аккумуляторами работают постоянно от сети.
Программная часть:
Функционал достаточно обширный, тут только основное.
Сервер - хранит данные в своей файловой системе(тем самым избавляемся от развертывания базы). Данные хранятся за последние 24часа, мне так захотелось, чтоб видеть графики. Получив данные от локаций сервер отправляет их на сайт. Еще добавил прогноз погоды, запрос 1 раз/час, прогноз за 48 часов. У Яндекса есть такая опция, 30 запросов в день бесплатно т.ч. хватает.
Модуль(климат) -Данные от локаций 1 раз в 15мин передаются на сервер.
Модуль(часы) - 1 раз в 15мин опрашивает сервер для получения температуры по нужной локации, а т.ж. получает уличную температуру. Все это выбирается индивидуально в интерфейсе.
Настройка:
Первое включение, сервер создает точку доступа. Подключившись, надо выбрать свою сеть WiFi и ввести название Места (где будет развернуто). По такому же принципу каждый модуль привязывается к WiFi и обязательно указывается локация, где модуль будет установлен. т.к. в каждой сети IP выдаются рандомно, то сделал общение оборудования не по IP, а по имени http://smart-home.local/.



Итог:
В проекте 3 направления: с++ - это модули/сервер, web – доступ через браузер для управления, и просмотр данных на сайте, android – программная часть для планшетов(часы).
Мякотка данного проекта, которая как бы преуменьшает всю уникальность в том, что все это было написано в общей сложности за 2 недели с помощью ИИ. Даже не так – это просто написал ИИ. т.к. я раньше проходил через все этапы разработки, то в данном случае не чувствую себя каким-то "дилетантом" ну или кем-то еще, мне просто было не интересно и лень заново все это писать, а вот сделать проект как «наставник» который, указывает что и как нужно, это новый для меня опыт. Главное, что я знал, что в итоге должно получиться и какие м.б. "косяки" при эксплуатации, и когда он реально тупил, или мог за раз все сломать, приходилось по сути указывать как правильно делать.
Еще один момент по Android. До этого я писал приложухи на Xamarin, но какая-то одна VisualStudio не работает со всеми SDK сразу, надо ставить несколько и переключаться между средами в зависимости от старости устройства. Пообщавшись, пришли к мнению использовать AndroidStudio. Один проект для любого SDK. Тут даже вникать не стал, подсунул старый проект он все переделал.


Старый и новый варианты.
Так что 99% код написан ИИ. Угроза это для разработчиков - не знаю, но для таких легких проектов он безусловно помощник. В общем, если это возможно, хотел бы выложить исходники проекта, т.к. это все равно не я делал, не жалко. Но не пойму как правильно. Надеюсь так можно, https://yadi.sk/d/Rrz_IcFMOJ-qmQ
P.S. Писатель из меня никакой, т.ч. мучить вас не стал, описал только часть функционала, если будет интересно отвечу подробно.
Замечания, по существу, приветствуются, ну и если посоветуете новые идеи проекта, буду признателен.




Инженериум DIY
652 поста5.6K подписчика
Правила сообщества
Давайте уважать друг друга - любые аморальные посты выпиливаются, даже если они затрагивают основную тематику сообщества.
В сообществе будут попадаться посты для новичков, поэтому не стоит влетать в пост с минусомётом, направленным на задающих вопросы по теме поста.