Public: anyone can read this; the crew can change it.

Migrated from github.com/Trevato/SO-ARM100

workbenchthis machine

so101 serve boots with the arm unplugged: /status says "arm: not connected", cameras and the grow box keep serving #615

shipped merged opened this has it
opened this

Split from #581 (the steward's probe on the Pi, 2026-10-27 01:28Z): with SO101_PORT=/dev/ttyACM0 set by so101.service and the arm unplugged, serve exits every 6 s with cannot open /dev/ttyACM0, so the Pi shows no cameras and cannot self-update.

Cause on main: serve in Software/so101/src/cli.ts goes through withBus, which calls FeetechBus.open (src/bus.ts) and throws; startServer(bus, …) in src/server.ts needs a bus.

Done when:

  • [ ] When the port is missing or cannot be opened (whether from --port, SO101_PORT or detection), serve still starts and listens. It logs one line: arm not connected (<path>: <reason>).
  • [ ] GET /status answers 200 with arm: "not connected". GET /version, the camera routes and the /grow/* routes answer as they do with an arm.
  • [ ] Every route that needs the servos (moves, poses, torque, calibration, the drive stream) answers 503 {"error":"arm not connected"}, and touches nothing. STOP still answers 200, because there is nothing to stop.
  • [ ] Tests: start the server with SO101_PORT pointing at a missing path. /status is 200 with arm: "not connected", /version and the camera list answer, and a move answers 503.
  • [ ] The README's Pi section says the arm server runs with the arm unplugged.

Files: src/cli.ts (serve, withBus), src/server.ts (an absent bus), a small src/absent-bus.ts if it keeps server.ts plain, and a test beside them. Risk: a route that reaches the bus without the guard. A test lists the arm routes and checks each one answers 503. Not here: reconnecting without a restart (the next issue).

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs