Изначально я просто хотел разобраться: как работать с 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
WEB UI ESP32

Контейнеры для хранения продуктов

Дальше проект неожиданно получил бытовое продолжение. Женщина в доме решила пересыпать крупы, макароны и другие продукты в красивые контейнеры. Выглядеть стало действительно лучше. Но появилась новая проблема: срок годности оставался на заводской упаковке. На контейнерах никакой информации уже не было. Тогда появилась идея: раз уж ESP32 уже умеет хранить JSON и показывать информацию на OLED — почему бы не добавить список продуктов со сроками годности?

Продукты и сроки годности

Так в проекте появился второй раздел:

  • название продукта;

  • срок годности;

  • уведомления о приближении окончания срока хранения.

Продукты со сроком годности
Продукты со сроком годности
Категория с таймерами для продуктов
Категория с таймерами для продуктов
Запущенный таймер
Запущенный таймер

Экран простаивал без пользы

Спустя время стало понятно:
в режиме ожидания OLED просто ничего полезного не показывает.

Тогда был добавлен скринсейвер с часами.

ESP32 начала синхронизировать время через NTP и отображать, в простое.

Но и этого оказалось мало

Интеграция с посудомойкой

Ранее я уже делал отдельный проект, как превратить обычную посудомойку в “умную”.

Wemos d1 в Посудомойку

Она начала отправлять в 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 — как локальный сервер хранения данных.

Комментарии (17)


  1. gerbert_MX
    28.05.2026 11:04

    единый плюс как по мне это аналитика и возможность привязать "кухонные оповещения" на мультимедиа или вообще в телегу/пуш.

    с медикаментами и тд такое себе - проще на телефоне быстро поставить единоразово, к тому же (из личного опыта) таймер не гарантирует прием, но сложный таймер отвлекает

    для подобного (особо кухни) рекомендую юзать готовое. Вот например такое https://aliexpress.com/item/1005008352585162.html причем энкодер удобен для взаимодействия грязными руками например (можно предплечьем "прокрутить)


    1. 4yGON Автор
      28.05.2026 11:04

      с медикаменты не для приема, а для хранения сроков годности лекарств и в случае болезни быстрого понимания какие лекарства есть, какие нужно купить. Конечно можно и без этого обойтись, это так побаловаться. Из личного опыта могу сказать что таймер отдельный удобнее чем ставить его на телефоне, особенно во время готовки когда руки мокрые. Можно конечно Алису попросить или Сири, но суть то тут не в этом)


      1. gerbert_MX
        28.05.2026 11:04

        медикаментами в таком разрезе скорее в тему была бы апка или умная камера

        сам думал на эту тему, аптечка в целый шкаф и отслеживать все надо 100%. Но это все руками забивать((( Можно попробовать нейронку по фото заряжать но это или дорого или чертовски долго для распознания (разве что какая-то интеграция с агентами по подписке, но это только десктоп тогда)

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


        1. 4yGON Автор
          28.05.2026 11:04

          с умной камерой была задумка сканить QR-Коды Честного знака, продуктов. Но там и камера должна быть не абы какой и API у честного знака тока для Юрлиц, короче гемор не стоящий того. а так сам думал на счет енкодера во вращающемся корпусе, заводское устройство все же красивее, а мое прост побаловаца


          1. gerbert_MX
            28.05.2026 11:04

            заводские штрихкоды то мертвая затея, анализировал, у меня реально большая аптечка это проблема которую я давно хочу решить

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

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


            1. Rayven2024
              28.05.2026 11:04

              хм..... я вот вёл войну с домашними около 3х лет пока договорились что все лекарства-бинты и тп складываются ровно в один шкаф и туда кроме них НИЧЕГО не кладём. Если бы не цены - помогло бы "выкидывется всё что не на месте", но и цены и требование что какие-то лекарства пить надо вовремя... так что это не правильный подход.

              Но в целом победил и теперь хоть не всю квартиру переворачивать при поиске.

              Кстати нашёл интересный подход с очками. Просят купить красивый футляр. Тёмный/не сильно яркий/...

              в итоге на него пару раз садятся (зрение то уже не то!, да и покрывала в частном доме тёмные - иначе стирать каждый день придётся)

              и после очередного ремонта-покупки новых очков наконец принимается яркий "вырви-глазный" футляр.

              То же с лекарствами "на каждый день" - для них купил пенал из неоново-жёлто-зелёного материала достаточного размера

              И теперь не тратится час-другой на поиски "где-то тут моя косметичка с таблетками".


              1. gerbert_MX
                28.05.2026 11:04

                Войну с "складывать в одном месте" я выиграл. Проблема в том "как" складывать. И вторая проблема что не всегда относится на место, особенно если по сумкам кидают "срочно срочно на работе выпью" и забывают.

                Я сразу вижу две проблемы - отсутствие актуализации (потратили и не отметили что потратили) и порядок хранения (кинули как попало или греблись в поисках без заморочек)

                Думал за RFID что могут работать с метками-соседями (и заодно можно будет найти заныканое по сумкам) но проблема опять в маркировке - по одной пластинке маркировать дичь, а коробками и пакетами не всегда обратно складывают и опять неопределенность

                С одной стороны строить гулаг дома, а с другой стороны если хочется тотального контроля над живым существом то лучше купить хомяка и его мучить.

                Была мысль вообще радикально поступить - система хранения что выдает и контролирует что выдает, не пластинками, а таблетками и тд. А для баночек и мазей уже можно RFID с оповещениями "вы не вернули на место" но это тоже как то антиутопией отдает)


                1. Rayven2024
                  28.05.2026 11:04

                  Всё вышеописанное достаточно сложно и утопично - вы правы.

                  Тут вот почитал эту статью и несколько соседних в тч на пикабу, полистал списки ПО "топ 3/5/10 приложений для учёта лекарств/продуктов/...."

                  В общем как бы сделал сейчас я и как я собираюсь сделать.

                  найти ПО хотя бы для нормального локального хранения с бэкапом данных хотя бы ручным без гугл плеев и тп.

                  поставить на планшет,

                  завести правило - продукты вносим в систему, сканим туда же штрихкод, при повторной покупке этого же продукта данных вносить уже меньше, хватит скана штрихкода.

                  берём со склада и заодно "из системы" продукт - пусть это будут хотя бы не вскрытые пачки. крупа/макароны/упаковка яиц/бутылка масла

                  отмечаем дату когда взяли в базе (есть продукты, которые исп-я долгое время, например пака соды или соли - её хватит надолго)

                  ПО должно предупреждать об окончании срока годности, должна быть сортировка по сроку годности

                  должна быть возможность напоминать что какого-то товара меньше нормы, указанной в базе (те же крупы я обычно беру сразу по 5-10 пачек, а консервы со сроком годности в 4+ года минимум сразу по 20-30), причём хотя бы 2х уровней - т.е. алерт 1 "хозяин, консерв "тушёнка" менее 30 шт", такое напоминание после ответа "ага" должно пропадать, а вот то же самое, но "менее 10 шт" должно выводиться например еженедельно хотя бы. И не пропадать до пополнения или особой отметки "нет в продаже" или удаления из базы в архив. Причём допустимо ставить 0 в любой графе

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

                  по каждой позиции должны быть "места хранения" и примечание

                  примечание пусть хоть 100-250 символов, хватит

                  название обязательно из 4х частей - общее (макароны) далее частность типа "рожки/вермишель/мелк. вермишель/макароны/перья/спагетти/...", далее производителя и марку (те же барилла спагетти - несколько видов есть)

                  С лекарствами аналогично - есть те, которые покупаются иногда, запасов держать не надо, есть те, которые назначены "пожизненный приём", нужен какой-то запас, надо заранее сигнализировать что мало осталось, но сначала сказать "заканчивается, но еще есть", а потом "заканчивается!" - например кэшбэк в 5% на лекарства бывает не каждый месяц, но при высокой цене и частых покупках он даёт очень приятную скидку. Поэтому стоит знать что что-то подходит к концу, но можно не спеша купить, а что-то купить надо уже срочно.

                  вытаскивать из шкафа надо упаковками, обратно вскрытые стараться не класть или помечать, понятно что что-то будет вытащено "на бегу" и не отмечено - тут придётся делать изредка ревизии....

                  можно отдельную полку завести - утащили срочно, в базу не внесли, вот лежит остаток, на ней же можно и лист с карандашом положить - вдруг на бегу, но успеют пометить

                  объяснить всем что хотя бы раз в неделю, но возвращать остатки или вносить в базу потраченное....

                  С продуктами конечно приятная интеграция с рецептами...

                  но там возможно будут нюансы

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

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

                  Ненавижу ПО, которое требует доступа в И-нет, а еще больше то, которое хранит данные не локально.

                  Не очень люблю ПО, которое использует нестандартные форматы БД, или нет хотя бы экспорта в стандартные.

                  вывод продукта из хранения должен быть простой - вплоть до "поднести штрихкод" - должна вычитаться пачка.

                  но обязательно должно быть уточнение - то ли делаем?

                  это пока мысли за пару часов кручения в голове что хочу....

                  что-то похожее нашёл как минимум для лекарств, насколько рабочее - буду смотреть


                  1. gerbert_MX
                    28.05.2026 11:04

                    рекомендую написать самому. Точнее навайбить как сейчас говорят. Нормальные готовые только по подписке за 20-40$ в месяц

                    Вам хватит веб-сайта под PWA. Если захочется централизации то простенький хостинг что бы он был мастером для синхронизации. Но хотинг не обязателен все может работать локально.

                    Кодовый агент по подписке вам сделает четко то что нужно. Причем сейчас html5 и PWA поддерживают и работу с камерой, и виброотклик, и пуш-оповешения. А котовые агенты отлично умеют сами запускать браузер и смотреть что получилось.

                    То есть вы можете подробно расписать план что нужно, как делать и как проверять и на выходе получите примерно что нужно. Отладка и подгонка будет, но для личного приложения вам это вообще не проблема.

                    Единое что - сразу заложить железобетонную структуру хранения поддержкой импорта/экспорта. Рекомендую прописывать структуры в protobuf и экспорт делать сжимая тело в gzip программно (не в архив паковать, а именно байты тела жать). Получится и строгость и гарантированная целостность (не забываем добавлять хеш проверки целостности) и удобный формат который ни с чем не перепутается (нет проблем с импортом "похожего" и база поползла)


                  1. 4yGON Автор
                    28.05.2026 11:04

                    У меня все локально, так же есть возможность выгрузить/загрузить базу в JSON. Уведомляет так же за неделю и показывает каждый день на экране, осталось 7 дней, 6, 5 и т.д.

                    Впрочем вносить продукты которые съедаются за 2-4 дня не вижу смысла. Только для долго хранящихся


            1. Rayven2024
              28.05.2026 11:04

              >заводские штрихкоды

              ну их можно использовать как уже существующие на продукте метки

              т.е. 1й раз вносим запись в БД, со 2го используем уже штрих код из локальной базы

              Опираться на сторонние сервисы - так себе идея. Однажды они могут поменять API, закрыться, стать платными, ....

              на тему RFID меток уже давно думал - туда можно загнать название, дату годности, схему приёма лекарств, ....

              но пока останавливает цена каждой метки и не во всех устройствах есть считыватель - у меня вот пока только в одном телефоне, а в планшете нет, да и на компе нет....

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

              На коробках и контейнерах нанёс крупные номера с основных сторон, завёл блокнот с описаниями, но тут выяснилось что часто или забываю внести данные при спешке или теряю блокнот ;-)

              В общем та же проблема будет и с электронным хранением, но она всё же более решаема через штрихкоды.

              На работе пытался одно время внедрить систему - папка с номером лаборатории, внутри папки с инв. номерами компов, при перестановках папка должна перекладываться, как и при уносе в ремонт.

              Всё заглохло на моменте что гарантийки печатали на все компы сразу, а не на каждый, уже сложности с хранением "всей инфы по каждому компу в одном месте", дальше пошло что без меня и не учитывая что-то перенесли, я кидаюсь, а не на месте, новое перестали давно покупать, старое сыпаться стало, актуальность точных данных стала пропадать - те же диски с дровами из папок залил на сервак(раньше не влезало) и бросил в угол шкафа как бэкап...., что-то сам забыл внести из данных по ТО или ремонту, .... когда всё это осознал, что уже система каталогизации и хранения данных по каждому компьютеру не особо мне помогает, тут я психанул и забил. Но у меня сейчас тут менее 50 машин, многое просто помню. И один остался (раньше несколько сотрудников этим занималось), вот с парком в более чем 200-300 машин без чего-то подобного работать будет сложнее.

              Как и раньше перед инвентаризацией теперь бегаем - сверку делаем.... Хорошо не чаще раза в 2 года.


              1. gerbert_MX
                28.05.2026 11:04

                я за RFID думал сразу уже промышленное решение со складским стационарным ридером за 600$ который спокойно комнату покроет по площади считывания, что бы уже не переделывать по 10 раз

                остановило именно "закручивание гаек в семье" что бы это заработало нормально, ведь человеческий факто никуда не девается.
                на работе можно и простыми 2Д кодами решить с UID и ячеечным хранением потому как можно прописать четкий регламент и требовать что бы его придерживались, а вот дома так нельзя иначе какой это дом


          1. Heggi
            28.05.2026 11:04

            По штрих кодам можно покопаться в апи приложения аптеки Вита. У них приложение умеет сканировать штрихкод и искать препарат по каталогу.
            Понятно, что для массового использования это отвратительный подход, но для себя (и кешировать всё найденное) думаю Вита не обидится.


            1. Rayven2024
              28.05.2026 11:04

              На самом деле это не так страшно.

              1й раз можно создать запись в БД вручную. вплоть до сохранения штрих-кода. Но во 2й или 50й раз очень уж не хочется вбивать всё руками....


        1. Rayven2024
          28.05.2026 11:04

          По лекарствам не так много времени для вбивания надо, опять же названий не так много, что исп-я часто.

          Просто как я выше написал - для некоторых еще можно добавить расчётное время на какое их хватит, хотя бы примерно - что бы вовремя пополнять.


      1. Rayven2024
        28.05.2026 11:04

        По продуктам и медикаментам еще можно добавить "место хранения" не всегда даже одинаковые продукты лежат в одном месте, те же крупы - могут быть в кладовке, а могут быть на кухне. Ну и иногда удобнее "контейнер №..." что бы не лепить каждый раз на него новую наклейку, опять же в нём может быть более 1 наименования...

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

        т.к. что-то в холодильнике, что-то на балконе, что-то в погребе (при наличии),

        у людей иногда и по 2 квартиры бывает....

        По лекарствам - когда их много, да еще на несколько человек - очень удобно если где-то можно посмотреть остаток и сроки годности.... Возможно еще добавить, хотя бы ручной пункт (без автом. расчёта) на сколько дней еще хватит (для лекарств с ежедневным приёмом долгий период - тот же кардиомагнил или его аналог)


  1. ZX-ruban
    28.05.2026 11:04

    У меня с таймингами при готовке, успешно справляется алиса (чтоб ей пусто было)....