4yGON2 часа назад
Как обычный кухонный таймер на ESP32 превратился в домашний центр уведомлений
Время на прочтение3 минОхват и читатели3.7KУмный домКейсИзначально я просто хотел разобраться: как работать с ESP32, как выводить информацию на OLED-дисплей, как организовать управление через энкодер.Так появилась идея кухонного таймера.
Первая версия — таймер для кухни
Мне хотелось сделать максимально простой и удобный сценарий:
• подошёл к кухне;
• выбрал продукт;
• нажал кнопку;
• ждёшь сигнал окончания.Причём не просто таймер “на 10 минут”, а уже готовые пресеты.
Например:
• Barilla №3; • Barilla №5; • Гречка; • Яйца;То есть:
• закинул макароны;
• выбрал нужный пресет;
• ESP32 сама знает нужное время.Первая версия устройства выглядела примерно так:
Железо:
• ESP32 • OLED SSD1306 • энкодер • пищалка
Очень быстро стало неудобно
Поначалу все таймеры были просто захардкожены в прошивке:
addSlot("Макароны", "Barilla №3", "", 7);
addSlot("Макароны", "Barilla №5", "", 8);Но быстро выяснилось, что:
• добавлять новые продукты неудобно;
• менять время приготовления неудобно;
• каждый раз приходится перепрошивать ESP32.Тогда появилась первая “взрослая” идея:хранить всё в JSON и редактировать через Web UI.
LittleFS и Web UI
ESP32 получила:
• файловую систему LittleFS;
• JSON-базу;
• встроенный Web UI.Теперь таймеры и продукты можно было: добавлять, удалять, редактировать, без перепрошивки.
WEB UI ESP32
Контейнеры для хранения продуктов
Дальше проект неожиданно получил бытовое продолжение. Женщина в доме решила пересыпать крупы, макароны и другие продукты в красивые контейнеры. Выглядеть стало действительно лучше. Но появилась новая проблема: срок годности оставался на заводской упаковке. На контейнерах никакой информации уже не было. Тогда появилась идея: раз уж ESP32 уже умеет хранить JSON и показывать информацию на OLED — почему бы не добавить список продуктов со сроками годности?
Продукты и сроки годности
Так в проекте появился второй раздел:
• название продукта;
• срок годности;
• уведомления о приближении окончания срока хранения.Продукты со сроком годностиКатегория с таймерами для продуктовЗапущенный таймер
Экран простаивал без пользы
Спустя время стало понятно:в режиме ожидания OLED просто ничего полезного не показывает.
Тогда был добавлен скринсейвер с часами.
ESP32 начала синхронизировать время через NTP и отображать, в простое.
Но и этого оказалось мало
Интеграция с посудомойкой
Ранее я уже делал отдельный проект, как превратить обычную посудомойку в “умную”.
Wemos d1 в ПосудомойкуКак я сделал обычную посудомоечную машину умной, с Home Assistant/ESPHome / ХабрОна начала отправлять в MQTT:
• работает ли мойка;
• сколько минут осталось до конца цикла.И тут появилась идея: раз OLED уже висит рядом с посудомойкой, почему бы не показывать остаток мойки прямо на нём?
Так ESP32 начала отображать:
Скрин сейвер с остаточным временем посудомойкиЭто оказалось неожиданно удобно:
• не нужно открывать Home Assistant;
• не нужно смотреть на телефон;
• остаток мойки видно сразу с кухни.Логика работы скрин сейвера:
• Активируется только если не запущен таймер или не крутил энкодер хотя бы 1 минуту
• Если работает посудомойка - показывает остаточное время мытья посуды
• Иначе показывает текущее время
• Если есть уведомления пускаем снизу бегущей строкой
Домашняя аптечка
Позже во время разбора старой аптечки появилась ещё одна идея.
Если система уже умеет:
• хранить продукты;
• отслеживать сроки годности;
• показывать уведомления;то почему бы не добавить лекарства?
Так появился отдельный medicines.json:
{
"medicines": [
{
"name": "Парацетамол",
"expiry": "2028-01-01",
"purpose": ["простуда", "температура"]
}
]
}
Home Assistant как полноценный интерфейс
В какой-то момент стало понятно, что база лекарств начинает разрастаться.
Сам Web UI на ESP32 работал нормально и отлично подходил для:
• первоначальной настройки;
• загрузки JSON;
• резервных копий;
• редактирования базы.Но искать лекарства в большом списке становилось неудобно.
• длинный список;
• много категорий;
• похожие названия;
• отсутствие поиска.Тогда интерфейс для аптечки был перенесён в Home Assistant.
При этом сама архитектура осталась прежней: ESP32 по-прежнему хранит всю базу локально в LittleFS. Home Assistant используется только как красивый frontend.
В новом интерфейсе появились:
• поиск;
• категории;
• фильтры;
• сортировка по сроку годности;
• адаптация под мобильные устройства;
• тёмная и светлая тема.
Домашняя аптечка, главная страницаДомашняя аптечка, результаты поиска лекарства от горлаПричём данные продолжают храниться на ESP32 и синхронизируются через MQTT. Получилась довольно необычная архитектура:Home Assistant UI
↓
MQTT
↓
ESP32 ←→ LittleFSТо есть Home Assistant здесь выступает скорее как UI-приложение, а сама ESP32 — как локальный сервер хранения данных.Теги:• homeassistant
• esp32
• esphomeХабы:• Умный дом
Получайте больше инсайтов о систематизации бизнеса
Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности
💬 Подписаться на канал→ Оригинальная статья