Усе, що ми задумували вкласти в контролер, у ньому працює. Знаємо, куди рухатись далі, і це вже інша робота.
Номер фіксує не нову можливість, а досягнуту ціль.
Версія 2.0 — це не гучна функція в релізі. Це підсумок. Перелік, який ми склали для себе на початку, виконано повністю: усе, чого контролер потребує для керування дистиляцією, бродінням і супутніми процесами, у ньому стоїть і працює на реальному залізі.
Позаду тисяча збірок. Саме число нічого не варте: скрипт складання піднімає патч на кожен запуск, і добра чверть із них це «поправив відступ, перезібрав». Варта уваги інша річ — за цією тисячею стоїть закінчена робота, а не нескінченний список «колись доробимо».
Далі напрямок відомий, і він інший за жанром. Не нарощувати перелік, а поглиблювати: надійність, точність, поведінка на живих апаратах у справжніх цехах. Для промислового обладнання саме це й є дорослішання.
Слово «виконано» нічого не варте без переліку того, що саме зроблено. Тому список нижче не для того, щоб похвалитися. Він для того, щоб на нього можна було подивитись, перевірити нас і сказати, що додати наступним.
Розмітка, логіка, стилі, обидві мови вшиті в образ прошивки. Немає інтернету — апарат продовжує гріти, мішати й вести сценарій, а оператор бачить те саме, що бачив хвилину тому.
Уся ініціатива на пристрої: він питає, він шле, він забирає. Портал не має способу самостійно достукатись до контролера в цеху й щось йому звеліти.
Майстер бачить периферію дочірнього вузла з живим значенням, вмикає його реле, запускає скрипти й крутить уставки. Вузол лишається автономним, а сценарій може вести його по шині, а не лише по мережі.
0.1.742 – 0.1.795Термостат, перемішування, рівень води, тиск парогенератора знають свої межі й аварії. Сценарій веде їх кроками, не переписуючи, як саме тримати температуру.
Царга малюється тієї довжини й діаметра, що й справжня; переходи стикують труби різних типорозмірів рівно. Власну схему збирають у конструкторі на порталі й вставляють у контролер.
0.1.857Сировина, ферменти, дріжджі, солоди, хміль, спеції та їхні іконки живуть на сервері й підхоплюються без перепрошивки контролера.
0.1.968 – 0.1.981Перевірені збірки й ті, що в розробці, лежать окремо. Тестова прошивка фізично не може доїхати до робочого апарата, і канал — рішення виробника, а не галочка в налаштуваннях.
Образ читається порціями, sha256 рахується під час запису й звіряється з тим, що портал назвав заздалегідь. Розбіжність — образ відкинуто, завантажувач не чіпали.
0.2.0Поки виконується бодай один скрипт чи сценарій, кнопка неактивна, і поруч написано, що саме заважає. Пауза й аварія рахуються нарівні з роботою.
Скрипт викладання читає версію з бінарника, портал звіряє те саме значення. Назвати збірку чужим номером неможливо.
Кадр несе якір прогону, тож усе лягає до конкретного перегону. Аварія не чекає черги: вона йде одразу, разом із рядками логу навколо події.
0.1.903Параметри скриптів ідуть лише тоді, коли справді змінились. На ESP32 обсяг трафіку вирішує не вартість, а чи встане з'єднання взагалі.
0.1.935Обидва інтерфейси підняті: пристрій доступний і по кабелю, і по повітрю, а дротова мережа лишається головною з автоматичним резервом.
0.1.748Modbus із витримкою міжкадрової тиші й діагностикою, хто саме мовчить. Датчики в усіх роз'ємах плати, всі 16 реле, плата розширення на ще 16 виходів із регулюванням 0–100%.
Контролер вмикає рівно стільки, скільки дозволено, і показує фактично ввімкнену потужність, а не уставку. Поруч зі значенням завжди стоїть ціль.
0.1.722Прибрані тисячі непотрібних записів у флеш щодоби, закритий витік пам'яті, зрізано 158 КБ без втрати функцій. Час роботи й вільна пам'ять видно у верхній панелі.
0.1.931 · 0.1.969Шкала кроків із ціллю й часом або власна схема апарата з телеметрією на точках монтажу. Перелік читається як послідовність процесу: брага, сирець, спирт, напій.
Скільки залив води, скільки засипав зерна, яка сировина — те, чого автоматика не міряє. Одиницю обирає оператор при введенні, записів може бути кілька.
0.1.968Бак-гейдж рівня, режими наливу й зливу, степери уставок. Пульт відкривається з будь-якого планшета й переживає чистку кешу браузера.
0.1.977Ціль у 44 пікселі, ввід числа повзунком або цифрами, вибір зі словника без клавіатури. Аварія помітна кольором, текстом і звуком одразу. Дві мови.
Свій план ми виконали. Наступні можливості мають прийти не з наших здогадів, а від людей, які щодня стоять біля апарата. Напишіть, чого вам не вистачає на власному обладнанні, і це потрапить у роботу.
Або напишіть у спільноту: t.me/ua_distillery









Оператор, якого ви навчили сьогодні, не відкриє через півроку інтерфейс, у якому все переїхало заради шести нових кнопок. Перелік можливостей закритий; міняється якість їхнього виконання, а не розташування.
Кожна година тепер витрачається на те, щоб уже наявне не підводило. Це нудна робота з поганим маркетингом і найкращим впливом на прогін.
Усе перелічене вище працює сьогодні. Нічого з цього не «буде в наступному релізі» й не стоїть у дорожній карті.
Це не обіцянка на майбутнє. Останні місяці робота вже йшла саме так: жодного нового пункту в переліку, і кожна з цих збірок цінніша за будь-яку нову функцію.
Самовільні перезавантаження. Знайдено причину, через яку контролер перезапускався під навантаженням. Обрив зв'язку з інтерфейсом тепер лікується сам за секунди.
Гонка за шину Modbus. Дві задачі зверталися до спільної шини одночасно, і кожна кількасекундна команда на привід могла тихо пропасти. Мовчазна втрата команди гірша за помилку.
Знос флешу. Контролер тисячі разів на добу писав у власну пам'ять стан виходів, якого ніхто не читав. Прибрано.
Обриви зв'язку з порталом. З'єднання рвалося по кілька разів на годину. Заразом зникла головна причина рідких самовільних перезавантажень.
Оновлення після перезавантаження. У робочому стані суцільного блока пам'яті не вистачало на TLS-рукостискання. Тепер кнопка лише пише намір, а завантаження йде одразу після старту, доки купа ще ціла.
Три напрямки, які вже в роботі. Пишемо їх тут, а не дрібним шрифтом у підвалі: без відкритих пунктів усе попереднє було б рекламою.