oCBot. v 2.0 · 2026
oCBot · випуск 2.0

Тисяча кроків —
і план виконано

Усе, що ми задумували вкласти в контролер, у ньому працює. Знаємо, куди рухатись далі, і це вже інша робота.

Номер збірки0.1.001рахуємо…
Так це працює

Периферія стає плитками, плитки — пультом. Пульт живе в контролері.

Читати далі ↓
гортайте
oCBot · випуск 2.0

Тисяча кроків —
і план виконано

Усе, що ми задумували вкласти в контролер, у ньому працює. Знаємо, куди рухатись далі, і це вже інша робота.

Номер збірки0.1.001
01Чому змінився номер

Ми дійшли туди, куди йшли

Номер фіксує не нову можливість, а досягнуту ціль.

Версія 2.0 — це не гучна функція в релізі. Це підсумок. Перелік, який ми склали для себе на початку, виконано повністю: усе, чого контролер потребує для керування дистиляцією, бродінням і супутніми процесами, у ньому стоїть і працює на реальному залізі.

Позаду тисяча збірок. Саме число нічого не варте: скрипт складання піднімає патч на кожен запуск, і добра чверть із них це «поправив відступ, перезібрав». Варта уваги інша річ — за цією тисячею стоїть закінчена робота, а не нескінченний список «колись доробимо».

Далі напрямок відомий, і він інший за жанром. Не нарощувати перелік, а поглиблювати: надійність, точність, поведінка на живих апаратах у справжніх цехах. Для промислового обладнання саме це й є дорослішання.

02Повний перелік

Ось повний перелік. Двадцять пунктів

Слово «виконано» нічого не варте без переліку того, що саме зроблено. Тому список нижче не для того, щоб похвалитися. Він для того, щоб на нього можна було подивитись, перевірити нас і сказати, що додати наступним.

Архітектура

01 / 07
01

Інтерфейс живе у флеші контролера

Розмітка, логіка, стилі, обидві мови вшиті в образ прошивки. Немає інтернету — апарат продовжує гріти, мішати й вести сценарій, а оператор бачить те саме, що бачив хвилину тому.

02

Портал відповідає, а не наказує

Уся ініціатива на пристрої: він питає, він шле, він забирає. Портал не має способу самостійно достукатись до контролера в цеху й щось йому звеліти.

03

Зв'язка контролерів

Майстер бачить периферію дочірнього вузла з живим значенням, вмикає його реле, запускає скрипти й крутить уставки. Вузол лишається автономним, а сценарій може вести його по шині, а не лише по мережі.

0.1.742 – 0.1.795
04

Скрипт тримає логіку, сценарій лише крокує

Термостат, перемішування, рівень води, тиск парогенератора знають свої межі й аварії. Сценарій веде їх кроками, не переписуючи, як саме тримати температуру.

05

Схема апарата — параметрична збірка

Царга малюється тієї довжини й діаметра, що й справжня; переходи стикують труби різних типорозмірів рівно. Власну схему збирають у конструкторі на порталі й вставляють у контролер.

0.1.857
06

Довідники ростуть на порталі

Сировина, ферменти, дріжджі, солоди, хміль, спеції та їхні іконки живуть на сервері й підхоплюються без перепрошивки контролера.

0.1.968 – 0.1.981
07

Дві полиці прошивок

Перевірені збірки й ті, що в розробці, лежать окремо. Тестова прошивка фізично не може доїхати до робочого апарата, і канал — рішення виробника, а не галочка в налаштуваннях.

Техніка

08 / 16
08

Оновлення з перевіркою хешу на льоту

Образ читається порціями, sha256 рахується під час запису й звіряється з тим, що портал назвав заздалегідь. Розбіжність — образ відкинуто, завантажувач не чіпали.

0.2.0
09

Оновлення не почнеться під час роботи

Поки виконується бодай один скрипт чи сценарій, кнопка неактивна, і поруч написано, що саме заважає. Пауза й аварія рахуються нарівні з роботою.

10

Номер збірки береться з самого образу

Скрипт викладання читає версію з бінарника, портал звіряє те саме значення. Назвати збірку чужим номером неможливо.

11

Телеметрія по TLS, аварія окремим каналом

Кадр несе якір прогону, тож усе лягає до конкретного перегону. Аварія не чекає черги: вона йде одразу, разом із рядками логу навколо події.

0.1.903
12

Економія каналу як умова, а не оптимізація

Параметри скриптів ідуть лише тоді, коли справді змінились. На ESP32 обсяг трафіку вирішує не вартість, а чи встане з'єднання взагалі.

0.1.935
13

Кабель і Wi-Fi одночасно

Обидва інтерфейси підняті: пристрій доступний і по кабелю, і по повітрю, а дротова мережа лишається головною з автоматичним резервом.

0.1.748
14

Промислова периферія без «майже працює»

Modbus із витримкою міжкадрової тиші й діагностикою, хто саме мовчить. Датчики в усіх роз'ємах плати, всі 16 реле, плата розширення на ще 16 виходів із регулюванням 0–100%.

15

Кіловати рахують чесно

Контролер вмикає рівно стільки, скільки дозволено, і показує фактично ввімкнену потужність, а не уставку. Поруч зі значенням завжди стоїть ціль.

0.1.722
16

Ресурс заліза й місце у флеші рахують теж

Прибрані тисячі непотрібних записів у флеш щодоби, закритий витік пам'яті, зрізано 158 КБ без втрати функцій. Час роботи й вільна пам'ять видно у верхній панелі.

0.1.931 · 0.1.969

Робота оператора

17 / 20
17

Сценарії-рецепти з живою діаграмою

Шкала кроків із ціллю й часом або власна схема апарата з телеметрією на точках монтажу. Перелік читається як послідовність процесу: брага, сирець, спирт, напій.

18

Журнал прогону

Скільки залив води, скільки засипав зерна, яка сировина — те, чого автоматика не міряє. Одиницю обирає оператор при введенні, записів може бути кілька.

0.1.968
19

Пульти живуть у пам'яті контролера

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

0.1.977
20

Інтерфейс під цех і рукавиці

Ціль у 44 пікселі, ввід числа повзунком або цифрами, вибір зі словника без клавіатури. Аварія помітна кольором, текстом і звуком одразу. Дві мови.

Наступний крок обираємо разом

Свій план ми виконали. Наступні можливості мають прийти не з наших здогадів, а від людей, які щодня стоять біля апарата. Напишіть, чого вам не вистачає на власному обладнанні, і це потрапить у роботу.

Або напишіть у спільноту: t.me/ua_distillery

03Інтерфейс

Так це виглядає

Пульт оператора oCBot
ПультСітка віджетів, зібрана під конкретний апарат. Живе в пам'яті контролера.
Виконання сценарію
СценарійШкала кроків: зроблені, поточний, майбутні, з ціллю й часом.
Скрипти
СкриптиКожен зі своїми датчиками, межами й показниками напрацювання.
Периферія
ПериферіяРеле, входи, датчики й привід, згруповані за вузлом.
Плати
ПлатиКарта роз'ємів конкретної моделі, а не абстрактні номери пінів.
Журнал
ЖурналТе саме, що їде на портал разом з аварією для розбору.
Вкладка оновлення
ОновленняКонтролер сам стежить за версією й показує, що змінилось.
Хід оновлення
ХідПрогрес приходить із порталу, поки пристрій недоступний.
Відмова оновлення під час роботи
ВідмоваПоки щось виконується, оновлення не почнеться. За конструкцією.
04Що це значить для вас

Закритий список вигідний тому, хто працює, а не тому, хто продає

Обладнання можна вивчити один раз

Оператор, якого ви навчили сьогодні, не відкриє через півроку інтерфейс, у якому все переїхало заради шести нових кнопок. Перелік можливостей закритий; міняється якість їхнього виконання, а не розташування.

Зусилля йдуть у надійність

Кожна година тепер витрачається на те, щоб уже наявне не підводило. Це нудна робота з поганим маркетингом і найкращим впливом на прогін.

Ви купуєте те, що є

Усе перелічене вище працює сьогодні. Нічого з цього не «буде в наступному релізі» й не стоїть у дорожній карті.

05Як виглядає «вглиб»

Як виглядає «вглиб»

Це не обіцянка на майбутнє. Останні місяці робота вже йшла саме так: жодного нового пункту в переліку, і кожна з цих збірок цінніша за будь-яку нову функцію.

0.1.900

Самовільні перезавантаження. Знайдено причину, через яку контролер перезапускався під навантаженням. Обрив зв'язку з інтерфейсом тепер лікується сам за секунди.

0.1.930

Гонка за шину Modbus. Дві задачі зверталися до спільної шини одночасно, і кожна кількасекундна команда на привід могла тихо пропасти. Мовчазна втрата команди гірша за помилку.

0.1.931

Знос флешу. Контролер тисячі разів на добу писав у власну пам'ять стан виходів, якого ніхто не читав. Прибрано.

0.1.952

Обриви зв'язку з порталом. З'єднання рвалося по кілька разів на годину. Заразом зникла головна причина рідких самовільних перезавантажень.

0.2.0

Оновлення після перезавантаження. У робочому стані суцільного блока пам'яті не вистачало на TLS-рукостискання. Тепер кнопка лише пише намір, а завантаження йде одразу після старту, доки купа ще ціла.

06Куди рухаємось далі