Перейти до змісту

Моніторинг у реальному часі

BamDude забезпечує живий моніторинг усіх підключених принтерів Bambu Lab через оновлення в реальному часі на базі WebSocket.

Окремий екран оператора

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


Масштабовані картки принтерів

Налаштуйте розмір карток принтерів під ваш екран:

Розмір Опис
S Компактний вигляд, більше карток у рядку
M Збалансований вигляд за замовчуванням
L Більше деталей, менше карток у рядку
XL Максимум деталей, один стовпець

Використовуйте кнопки + і - на панелі інструментів для зміни розміру. Вибір зберігається автоматично.

Картка S теж відповідає на питання «хто завершить першим». Під смугою прогресу вона несе один рядок метрик, поки триває друк — час до кінця, ETA й шари — у тому самому форматуванні, що й картка M, тож обидві читаються однаково. Кожне значення окремо опускається, якщо принтер його не повідомляє, а рядок тримає свою висоту, коли друку немає, — щоб картки не стрибали на старті й завершенні друків.


Панель статусу

Панель статусу вгорі дає швидкий огляд вашого парку:

  • X доступно -- Вільні принтери, готові до роботи
  • X друкують -- Принтери, що зараз працюють (пульсуюча точка)
  • X офлайн -- Відключені принтери
  • X проблема -- Принтери з активними помилками HMS

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


Статус принтера

Кожна картка принтера відображає інформацію в реальному часі:

Показники температури

Сенсор Опис
Сопло Поточна температура хотенда
Стіл Температура нагрівального столу
Камера Температура корпусу (якщо доступно)

Історія нагрівачів (Heater History)

Кожен рядок температури має маленьку іконку графіка — клік відкриває вікно Heater History. Воно малює трейси сопла, столу і камери (плюс трейс другого сопла на dual-nozzle H2D) поверх target-оверлеїв, з показниками current / average / min / max і діапазонами 6h / 24h / 48h / 7d. Заміри записуються раз на хвилину і зберігаються 30 днів (налаштовується через printer_sensor_history_retention_days), далі авто-пруняться. Доступно Operators і Viewers.

Прогрес друку

Під час активного друку:

  • Індикатор прогресу -- Візуальний відсоток завершення
  • Поточний шар -- Шар X з Y
  • Час, що залишився -- Розрахунковий час до завершення
  • Використано філаменту -- Витрачено грамів

Статус підключення

Індикатор Значення
Зʼєднано і живе
Підключається / переконнект
Disconnect або помилка

Деталі сопла (H2 series)

H2-принтери відкривають розширені дані сопла на ховері:

Принтер Картка Що бачимо
H2D / H2D Pro Hover L/R Поряд деталі обох сопел — діаметр, тип, flow, знос, max-temp, серійник. Активне сопло підсвічується Active vs Idle.
H2S Single-nozzle hover Знос, серійник, max-temp на ховері над температурною плиткою сопла.
H2C Nozzle rack 6-позиційний док tool-changer-а — кожен слот з діаметром і кольором філаменту. Порожні — placeholder; на ховері — повна інформація.

L/R семантика — Active vs mounted

L/R-картка показує сопло, яким принтер зараз працює, а не яке змонтоване. У dual-extruder-друках, де swap відбувається посеред друку, підсвітка йде за live-станом.

Статус вентиляторів

Live-швидкість вентиляторів у секції Controls:

Вентилятор Іконка Колір Опис
Part Cooling Cyan Охолоджує надруковані шари
Auxiliary Blue Циркуляція в камері
Chamber Green Відводить гаряче повітря з корпусу

Активні вентилятори показують поточну швидкість %; неактивні сіріють на 0%. У тому ж рядку є бейдж швидкості друку () з поточним speed-пресетом.

Другий допоміжний вентилятор (P2S / X2D)

P2S (комплект-доповнення) і X2D (стоїть із заводу) мають другий допоміжний вентилятор, який ніколи не приходить як звичайне поле швидкості — він існує лише всередині даних повітроводу принтера. Він з'являється власним бейджем зі своєю швидкістю, і цю швидкість можна задати просто з бейджа.

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

Вентилятори називаються так, як їх називає твій принтер

Та сама позиція вентилятора — це не той самий вентилятор на різних моделях: на P2S другий допоміжний — лівий, на X2D — правий, а на X2D він ще й називається по-різному в режимах охолодження та нагріву. BamDude бере ці назви з визначень принтерів Bambu Studio, які й так поставляє, — тож P2S каже Right Auxiliary Fan, а не просто «Auxiliary».

Вентилятор, який поточний режим повітроводу тримає вимкненим — наприклад, лівий на P2S у режимі нагріву, — показується, але не пропонується як контрол, бо принтер приймає команду й ігнорує її.

Сенсор дверцят / кришки (тільки X1 Series)

X1 / X1 Carbon / X1E експортують MQTT-сигнал відкритих дверцят (біт 23 у статусі принтера). Коли під час друку принтер репортить, що дверцята відкриті — картка це підсвічує. На інших моделях BamDude не вдає, що сенсор є — у A1, P1, P2 та H2 його просто немає.

Бейдж AI-детекції збоїв

Коли увімкнена AI-детекція збоїв Obico, кожна картка принтера несе бейдж AI поряд з іншими бейджами здоров'я — щоб бачити, як детекція веде поточний друк, не покидаючи сторінку Printers.

Бейдж Що означає
Сірий Детекція налаштована, але зараз нічого не спостерігається
Зелений Друк, що спостерігається, класифіковано як safe
Бурштиновий Warning — оцінка зростає
Червоний Failure — налаштована дія спрацювала

Тултип несе поточну оцінку; клік веде до повного статусу й історії. Принтер, який детекція не спостерігає, не показує бейджа взагалі, а не такий, що натякає на покриття.

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

Status pip у компактному режимі

У Small розмірі картки замість повного бару — один кольоровий pip:

Колір Значення
Зелений Підключено, без проблем
Червоний Offline, або HMS fatal / serious (severity ≤ 2)
Бурштин HMS warning (info / common severity) АБО друк зараз на паузі

На ховері — кількість активних HMS-помилок, або resolved причина паузи коли друк на паузі.

Чіп паузи + live-лічильник тривалості

Коли принтер у стані PAUSE, поряд з ім'ям у заголовку картки з'являється inline-pill:

Bambu X1C  [⏸ Філамент скінчився · 14m]
  • Текст причини (pause_reason_label) — резолвиться сервер-сайд з HMS-стеку принтера через hms_errors.classify_pause_reason(). Мапить door-open / filament-runout / AI-detection / presence-check / file-pause-command коди в одну нормалізовану категорію. Внутрішні pause-тригери (наприклад plate-detect auto-pause) плантують hint що бьє HMS, бо Bambu firmware завжди репортить HMS 0300_8001 ("paused by user") на будь-яку pause-команду від BamDude.
  • Live-лічильник тривалості — тікає щосекунди клієнтсайд проти pause_started_at (epoch float у snapshot'і, штампується сервер-сайд на RUNNING→PAUSE edge). Формат: Ns до 1 хв → Nm до 1 год → Nh Mm далі.
  • F5-resilient — timestamp живе у snapshot'і, не в in-memory state, тож лічильник продовжується з правильної точки після refresh сторінки.

Chip рендериться і в compact (xs), і в expanded (sm) режимах.

Toast-сповіщення pause / resume

Коли принтер переходить RUNNING→PAUSE або PAUSE→RUNNING, WebSocket доставляє миттєвий browser-toast незалежно від regular polling:

Edge Тип toast Body
RUNNING→PAUSE warning (жовтий) {printer} на паузі: {reason} — наприклад Bambu X1C на паузі: Філамент скінчився. Завантаж новий.
PAUSE→RUNNING success (зелений) {printer} відновлено (стояв на паузі Nm Ms)

Це локальні UI-сповіщення — окремі від налаштованих notification-провайдерів (Telegram / email / Discord / etc.) що шлють відповідні print_paused / print_resumed події. Дивись Сповіщення для конфігурації провайдер-сайду.

Сортування по статусу + згортувані групи

Якщо сортуєш по Status, Model, Location або Tag, картки рендеряться всередині згортуваних секцій — клік на хедер згортає / розгортає групу. Сортування по Name залишається плоскою сіткою.

  • Стан згорнутості зберігається per-browser у localStorage.
  • У режимі вибору на хедері кожної секції є Select All — виділяє всі картки в групі.
  • Status-групи йдуть за пріоритетом: Error → Printing → Paused → Finished → Idle → Offline. Перемикач напрямку сортування інвертує порядок.
  • Групування за Tag показує принтер під кожним його тегом; принтери без тегу збираються в «Без тегу». Крапка секції бере колір тегу.
  • Кнопка Теги в тулбарі звужує сітку до принтерів, що мають усі вибрані теги (зберігається, як фільтри статусу й розташування), а пошук матчить і назви тегів.

Сортування по статусу в плоскому режимі йде з тим же пріоритетом — все, що потребує уваги, спливає вгору:

  1. HMS errors
  2. Printing
  3. Idle
  4. Offline

Сортування по ETA

П'ятий варіант сортування — ETA — впорядковує принтери за тим, як скоро вони завершать: спершу ті, що друкують із відомим залишком часу (найближчі згори — щоб підготувати філамент наступного джоба), далі ті, що щойно стартували ще без ETA, потім idle, потім offline. Читає той самий кешований remaining_time, що вже показує per-card ETA-лейбл — без додаткового звернення до бекенда.

Групування принтерів за локацією

Над сіткою — групування за локацією, яку обрано на картці принтера. Зручно, коли ферма розкидана по кімнатах / поверхах — згорни ту, на яку зараз не дивишся.

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

Сам список живе в Settings → Printing → Locations — власною карткою, під тим правом, яке керує локаціями, а не тим, що дозволяє остаточно видаляти принтер. (Раніше він був вкладений у картку архівованих принтерів, через що той, хто міг керувати місцями, але не видаляти принтери, не бачив його взагалі.)

Списки локацій — за абеткою

Скрізь: фільтри на сторінках принтерів, черг і обслуговування, вибір у діалогах принтера й авто-черги, список у Settings.

Раніше вони впорядковувалися за кодом символу, а це не абетка: Ґ, Є, І та Ї йдуть перед А, а все набране в нижньому регістрі падало в самий кінець — тож ферма з місцями «Ірпінь» і «Ангар» бачила щось схоже на відсутність порядку взагалі. Нумеровані цехи теж рахуються правильно: Цех 2 тепер перед Цех 10, а не після.

Пошук + фільтри

У тулбарі сторінки Printers:

  • Пошук — substring-match по імені, моделі, локації, серійнику. Live (Enter не треба).
  • Фільтр статусу — All, Online, Printing, Idle, Offline, Error.
  • Фільтр локації — випадайка з локацій, що зараз використовуються.

Фільтри AND-яться; порожній результат показує "Принтерів не знайдено" замість пустої сітки.

Live-стан з фільтрацією за дозволами

WebSocket-підписки фільтруються на бекенді за дозволами підключеного користувача. Viewer-сесія бачить ті самі live-температури + стан, що й Operator, але не отримує ack-ів виконання макросів, прогресу диспатчу для чужих завдань, чи будь-яких сигналів, прикритих printers:control.


Моніторинг помилок HMS

Система управління здоров'ям (HMS) стежить за станом принтера в реальному часі.

Статус Значення
OK Проблем не виявлено
Попередження Незначні проблеми
Помилка Серйозні помилки
Критично Потрібна негайна увага

Натисніть на індикатор HMS, щоб побачити описи помилок, коди та рекомендовані дії.

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

Звідки беруться описи

Описи — власні Bambu, і це весь каталог, близько 5 000 кодів, а не вибірка. Пошук іде по моделі принтера: той самий код може називати різний механізм на різних машинах — на X2D 0300_401F каже, що бракує правого хотенда, а їх там два.

Помилку без опису все одно показано — з кодом і посиланням на HMS-довідник Bambu. Раніше BamDude такі ховав, тож несправність, про яку кричав власний екран принтера, тут була невидимою.

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

Дії з усунення (remediation)

Діалог HMS-помилки показує ті самі кнопки усунення, що й екран самого принтера — Resume, Stop, Ignore & Resume, "Filament extruded, continue", Stop Drying, Turn off Fire Alarm тощо. Які кнопки з'являться, визначається per model і per error code з каталогу Bambu, тож fault з filament-runout пропонує інші варіанти, ніж fault з температурою камери.

Клік по кнопці — і BamDude надсилає відповідну MQTT-команду, потім чекає, поки принтер реально відреагує, перш ніж підтвердити. QoS-1 publish підтверджується брокером навіть коли firmware мовчки відкидає малформовану HMS-команду, тож BamDude семплить стан принтера через ~2.5 с і репортить помилку, якщо нічого не змінилося. Потрібен printers:control; Viewer бачить помилки, але не кнопки.

Оновлення описів

Каталог описів постачається як JSON у backend/app/data/hms/, по файлу на модель принтера. Перезбери його зі свіжого чекауту BambuStudio командою python scripts/import_hms_catalogue.py, потім python scripts/translate_hms_catalogue.py --export збере нові рядки на переклад.

Оновлення каталогу

Каталог дій постачається бандлом як JSON (data/hms_actions.json). Коли Bambu додає коди у firmware-апдейті, перегенеруй його: python scripts/update_hms_actions.py.


Архітектура WebSocket

graph LR
    A[Принтер] -->|MQTT| B[BamDude Backend]
    B -->|WebSocket| C[Браузер]
    B -->|WebSocket| D[Браузер 2]
    B -->|WebSocket| E[Мобільний]
  • Автоперепідключення при розриві з'єднання (back-off 3 с)
  • Дельта-оновлення — надсилаються лише змінені дані
  • Мульти-вкладки — підтримка кількох вкладок
  • < 1 секунди — типова затримка
  • Visibility-sync recovery — коли вкладка повертається з фону, BamDude пінгує WS + інвалідує React-Query, тож stale-дані одразу оновлюються. Тост "Reconnecting…" з'являється тільки після >2 с offline — це гасить мерехтіння на коротких блипах.

Токени для камери

Live MJPEG, знімки, мініатюри архіву та cover-картинки приходять у вигляді <img>/<video> GET-ів, які не можуть нести Authorization-хедер. BamDude видає короткоживучий (60 хв) query-param токен з POST /printers/camera/stream-token; фронтенд автоматично прошиває його в кожен camera-URL. Токени scoped на залогіненого юзера — login / logout інвалідує кеш, а хук useStreamTokenSync обходить DOM і ретрофітить будь-які <img> source, рендеренi до того, як токен прийшов. Деталі — на Сторінці камери.


Сила сигналу WiFi

На картці є гліф WiFi-сили з MQTT-репорта принтера:

Гліф Сигнал
Excellent
Good
Fair
Weak

Слабкий сигнал — найчастіша причина "принтер відвалюється посеред друку" + інтермітентних FTP-помилок. Спочатку чини WiFi, потім полюй на баги диспатчу.


Загальні години друку

На картці — кумулятивний лічильник годин друку (рахується з рядків print_archives для цього принтера). Корисно:

  • планування обслуговування — у парі з Maintenance ставити роботи (стрижні / сопло / ремінь) на правильні години
  • ловити перегружені машини при балансуванні ферми
  • post-mortem рано-полеглих принтерів — багато годин зазвичай корелюють з зносом столу / провисом ременя

Файловий браузер принтера

Переглядай і керуй файлами на сховищі принтера прямо з картки — на SD-картці й на вбудованому сховищі тих принтерів, які його мають.

Як відкрити

Іконка папки () на картці → модалка проти live-FTPS-сесії.

Яке сховище ти дивишся

X2D, P2S і сімейство H2 (H2C, H2D, H2D Pro, H2S) тримають файли і на картці, і у вбудованому сховищі. На таких принтерах у модалці зʼявляється перемикач SD-картка / Внутрішнє сховище, і все нижче працює на обох: перелік, завантаження, прев'ю пластин, Save to Library і видалення.

  • Принтер без вставленої картки відкривається на внутрішньому сховищі, а не на порожньому списку.
  • Принтери, у яких є лише картка — всі A1 і P1 — перемикача не показують і поводяться точно як раніше.

Чому перемикач не на кожному принтері

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

Навігація

  • Quick-access кнопки для Root, Cache, Models, Timelapse — стрибок на типові шляхи Bambu.
  • Хлібні крихти з back-step.
  • Клік по папці — заглиблення.

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

SD-картка Внутрішнє сховище
Структура дерево папок плаский список
Шлях / хлібні крихти так не показується — заглиблюватись нікуди
Quick-access ярлики папок Моделі і Таймлапси — два окремі каталоги, а не дві директорії
Очистити SD так не пропонується
Вільне місце коли принтер повідомляє не показується — цим каналом принтер його не віддає

Кнопка Таймлапси зʼявляється лише на принтерах, які справді тримають записи всередині. Це окрема здатність від зберігання моделей: машина може вміти одне й не вміти інше.

Виділення + bulk-операції

Дія Один файл Кілька
Завантажити Прямо ZIP-архів виділення
Save to Library Кладе 3MF як Library-файл (тільки BamDude) — picker папки призначення Те саме, batch
Видалити Confirm + delete Bulk-delete з confirm

Шлях Save to Library автоматично промоутить голий .3mf у .gcode.3mf, якщо байти зрізані (probe zip на Metadata/plate_*.gcode), щоб теги/парсер Library класифікували коректно.

Сортування + фільтр

Контрол Опції
Sort Name (A–Z / Z–A), Size, Date
Filter Live substring-match по імені

Storage info

Якщо принтер репортить — у хедері модалки видно used / free. Тільки для SD-картки — див. таблицю вище.

Що BamDude лишає на принтері після друку

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

SD-картка Вбудоване сховище
Прибирання увімкнено Файл, який надіслав BamDude, видаляється, і копія принтера в cache теж Копія, яку тримає принтер, видаляється
Прибирання вимкнено Файл переноситься з кореня картки в cache, а збережений файл параметрів друку переписується відповідно Файл лишається рівно там, куди його поклав принтер

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

Один аплоад — це кілька файлів на машині

BamDude надсилає Cube.3mf; принтер пише власний Cube.gcode.3mf у cache на картці і, якщо ввімкнено зберігати надіслані файли у сховище, ще й у вбудоване. Прибирання чистить їх усі — і перед видаленням звіряє вміст кожного, бо таку саму назву лишає по собі друк, надісланий напряму з Bambu Studio. Файл, що не збігся, лишається недоторканим.


Зображення принтерів

Кастомізуй картку завантаженням свого фото:

  1. Cog на картці.
  2. Залий зображення (~300×200 — оптимум).
  3. Воно замінить дефолтний hero.

Per-printer; зберігається у бекапах.


Сповіщення про зміну статусу

Підключай будь-яку зі змін стану до notification-каналів:

Подія Спрацьовує коли
Printer offline MQTT-зʼєднання відвалилось довше за поріг offline
Printer error Новий HMS-запис, severity ≥ Error
Print complete Прінт завершився (printed-percentage = 100)
Print failed Прінт скінчився non-success-статусом
First layer complete Перший шар закінчений (early-fail catch)

Налаштовується у Settings → Notifications — див. Notifications.


Налагоджувальне логування MQTT

Вбудоване налагодження для комунікації з принтером:

  1. Натисніть іконку налаштувань на картці принтера
  2. Натисніть Запустити налагодження MQTT
  3. Перегляньте вхідні/вихідні MQTT-повідомлення з JSON-даними
  4. Фільтруйте за типом, шукайте в змісті та автооновлюйте

Поради

Вигляд для ферми

Використовуйте маленький розмір карток для моніторингу багатьох принтерів одночасно на великому екрані або планшеті.

Раннє виявлення помилок

Увімкніть сповіщення про помилки HMS, щоб виявляти проблеми до того, як вони зіпсують друк.

Базується на документації Bambuddy.