docat 是一个用于设备编排与自动化的开源工具集,采用 Client–Server 架构,目标是为 Dobot 机器人及类似设备提供统一的驱动、传输与脚本执行能力。
核心目标:可扩展的设备驱动层、轻量的远程脚本执行、以及用于集成与自动化的 SDK/CLI 与 Web 界面。
- 设备抽象层与驱动:统一
DeviceDriver接口,支持多种传输(HTTP、SFTP、TCP 等)。 - 会话与共享资源管理:
SharedSession和设备池(DevicePool)用于并发与资源隔离。 - 事件总线:内部事件分发,便于扩展插件与异步任务。
- REST & WebSocket API:用于控制台与外部系统集成。
- 前端应用:用 Vite + Vue 构建的管理界面。
packages/docat-server— 后端服务:设备驱动、调度、API、认证与持久化。packages/docat-web— 前端管理 UI(Vite + Vue)。packages/docat-cli— 命令行工具,用于脚本化操作与自动化任务。packages/docat-sdk— 客户端 SDK,用于集成到第三方服务或脚本。packages/docat-shared— 共享类型、错误类型与协议定义。
先决条件:
- Node.js:>= 22.7.0(
package.json声明engines.node),检查:node -v。 - pnpm:>= 9.0.0(根目录
package.json声明packageManager: "pnpm@11.17.0"),检查:pnpm -v。 - Turbo(用于 monorepo 任务运行):项目依赖
turbo,推荐使用与package.json中匹配的版本,检查:pnpx turbo -v或pnpm dlx turbo -v。
安装/启用 pnpm(示例):
# 使用 corepack(Node 16+ 自带)启用并激活 pnpm
corepack enable
corepack prepare pnpm@11.17.0 --activate
# 或使用 npm 全局安装(替代)
npm i -g pnpm@11- 在仓库根目录安装依赖:
pnpm install- 启动开发模式(monorepo 使用
turbo管理包内任务):
pnpm devturbo 的作用是统一调度 monorepo 里的脚本:它会按依赖关系并行启动能并行的任务、跳过缓存的重复工作,并保证 dev / build / test 在各包里用同一套入口跑起来。
pnpm dev 会启动 docat-server 和 docat-web 的开发服务。若只想启动某个包,使用 workspace 过滤器:
pnpm --filter ./packages/docat-server dev
pnpm --filter ./packages/docat-web dev- 构建(生产)
pnpm build- 测试 / Lint / 类型检查
pnpm test
pnpm lint
pnpm typecheck- 后端默认监听
0.0.0.0:9100,可通过环境变量配置:DOCAT_PORTDOCAT_HOSTDOCAT_DB_PATHDOCAT_SCAN_IPSDOCAT_POLL_INTERVALDOCAT_LOG_LEVELDOCAT_AUTO_CONNECTDOCAT_SESSION_EXPIRE_DAYS
- 前端默认在
http://localhost:5173提供界面,并通过 Vite dev proxy 把同源的/api和/ws转发到后端。默认代理目标是http://127.0.0.1:9100;如果后端端口或地址变了,可以给前端 dev server 设置DOCAT_SERVER_URL,例如DOCAT_SERVER_URL=http://127.0.0.1:9200 pnpm --filter ./packages/docat-web dev。 pnpm dev默认会把前端监听到0.0.0.0:5173,局域网里其他设备访问http://你的电脑IP:5173即可;浏览器仍请求前端同源的/api和/ws,不要在这种场景设置VITE_DOCAT_SERVER_URL=http://localhost:9100。- 只有在前端静态文件被单独托管、且没有反向代理
/api和/ws时,才设置浏览器侧的VITE_DOCAT_SERVER_URL,值必须是访问者浏览器可达的后端地址,例如http://192.168.1.20:9100。 .env.example只是变量示例。根目录pnpm dev不会自动读取根.env;需要覆盖配置时,把变量导出到 shell,或把前端专用变量放到packages/docat-web/.env.local。- CLI 适合脚本化调用;构建后可作为单独命令使用。
示例:在本地启动后端并访问前端
pnpm --filter ./packages/docat-server dev
pnpm --filter ./packages/docat-web dev
# 在浏览器打开 http://localhost:5173pnpm build
# 后端:构建后直接运行 dist/server.js
pnpm --filter ./packages/docat-server start
# CLI:构建后运行 dist/index.js
node packages/docat-cli/dist/index.js --help
# 前端:构建后生成 packages/docat-web/dist/,可交给静态文件服务器托管- 设备驱动:查看
packages/docat-server/src/device/DeviceDriver.ts与packages/docat-server/src/device/drivers,新驱动可实现DeviceDriver接口并注册到DeviceFactory。 - 传输层:实现或复用
transport/*(如HttpTransport.ts、SftpTransport.ts、TcpTransport.ts)以封装底层连接细节。 - 脚本系统:脚本相关代码位于
packages/docat-server/src/script,可扩展脚本语言与运行沙箱。 - 访问调度:
AccessScheduler用于实现对设备访问的排队与租用逻辑。
- 常见环境变量示例:
DOCAT_HOST=0.0.0.0
DOCAT_PORT=9100
DOCAT_DB_PATH=./data/docat.db
DOCAT_SERVER_URL=http://127.0.0.1:9100
# VITE_DOCAT_SERVER_URL=http://192.168.1.20:9100
后端变量由 packages/docat-server 的配置加载逻辑读取;DOCAT_SERVER_URL 只用于前端 dev server 代理;VITE_DOCAT_SERVER_URL 会暴露给浏览器,通常只用于没有反向代理的静态前端部署。
- 后端日志通常写入控制台;生产部署建议配置日志收集与持久化目录(
packages/docat-server/data/)。 - 前端使用浏览器开发工具与 Vite 的热重载。
- 删除多余锁文件:若你使用
pnpm,请移除package-lock.json与yarn.lock(仅保留pnpm-lock.yaml)。 - 清理构建产物:
pnpm run clean或手动删除dist/、.turbo/、.cache/等目录。
- 保持单一包管理器(本仓库推荐
pnpm)。 - 在提交前运行
pnpm lint与pnpm test。 - 新增驱动或 transport 时,添加单元测试并更新文档。
