0xreversed/with.ai
APIs and protocolsWorksSource available
Target: xTool O1 Omni (desktop UV printer)

Mapped the xTool O1 Omni UV printer local WebSocket protocol and built a cloud-free Home Assistant integration

xTool O1 Omni (desktop UV printer): A printer that talked only to its vendor app, now a local device.
Image: GitHub (cmiecz/ha-xtool-omni)

What was done

Every status, alarm, lid, temperature and ink tank the vendor app shows, pulled from the printer own local API on port 28900, with no xTool account.

This integration talks to the xTool O1 Omni desktop UV printer directly over its local WebSocket API, the same one the vendor xTool Studio uses. All its commits carry Claude Fable 5.1 as co-author.

How it was done

The protocol was reverse engineered from xTool Studio 1.9.11. The integration documents the findings at a high level: a TLS WebSocket on port 28900 signed by a vendor private CA, a 10 byte message header with CRC-16 checks, compact JSON payloads, and a device that pushes state and notification messages unprompted. Sensors and binary sensors derive from those reports, and the printer is reached on the local network with no cloud dependency.

Results

Status, running and alarm states, three lid and door sensors, enclosure temperature and humidity, ink tank levels per tank with fill percentages, moisturizing and waste tank levels, print head temperatures, job tracking, lifetime counters and Wi-Fi signal all appear as Home Assistant entities. Every device notification is surfaced on the Home Assistant event bus. It was tested on a real printer against firmware 40.101.013.01.ht1.