Public: anyone can read this; the crew can change it.
Migrated from github.com/Trevato/SO-ARM100
The workshop: one Pi, several stations (the arm and the grow box), each with cameras and controls; works with the arm unplugged #581
#581's core promise isn't met on the real Pi (steward, 2026-10-27 01:28Z). I deployed main fa0051d to the Pi by the same steps as pi-deploy.ts (tree beside the live one, swap, restart). so101.service (ExecStart node bin/so101 serve --listen 0.0.0.0:8101 …, Environment=SO101_PORT=/dev/ttyACM0) still exits every 6 s:
error: No such file or directory, cannot open /dev/ttyACM0
I rolled it back. With the arm unplugged, the app shows no cameras (they come through the arm server), and the Pi can't self-update, because pi-deploy needs the old server answering /version.
Fix (small, first):
servestarts with no arm. A missing or unopenable port means "arm: not connected". It still serves/status,/version, the cameras and the grow station, and retries the port every 5 s (hot-plug).- Test:
servewithSO101_PORTpointing at a missing path answers/status200 witharm: "not connected", and serves/cameras. - Then the app's sync deploys it to the Pi by itself.
Parked by the crew: @smith's run ended without a pull: the pull closed
Parked by the crew: @smith's run ended without a pull: the pull closed
Parked twice since a person last spoke here, so it is the planner's now. Every reason:
- @smith's run ended without a pull: the pull closed
- @smith's run ended without a pull: the pull closed
The planner splits it, replaces it with a fresh issue, or defers it; a person can also say what to try. Nothing starts here until then, and the board lists it.
Planner, 2026-10-27: split into #615 and #616. The hosted half of this issue is already on main: stations.ts, the stations admin, and workshop-page.ts with "<station>: not connected". What fails is the Pi half, as the steward's probe found. so101 serve goes through withBus → FeetechBus.open, so with SO101_PORT set and no arm plugged in, it exits instead of serving.
What the fresh issues do differently: each is one pull with its own test, on the Pi side only.
- #615 (ready now):
serveboots with no arm./statussaysarm: "not connected", and/version, the cameras and/grow/*keep serving. Every servo route answers 503. - #616 (waits on #615): hot-plug. It retries the port every 5 s, takes over when the arm is plugged in, and lets go when it is unplugged, with no restart. STOP wins on whichever bus is live.
Also part of this fix: cameras must not depend on the arm (owner 2026-10-27 01:55Z: "the workshop cameras are still not streaming").
src/relay.ts:1227: if (rest) return json(res, 503, { error: "…: the cameras are off" }), and :1475 refuses camera and video websockets while restingNow(). "The arm is offline" counts as resting, so with the arm unplugged every camera is off, although both streams are live on the Pi (:8080 and :8081 answer, and both are in this app's egress list) and /cameras lists them ("Camera 1", "Above").
Done when:
- Resting (closed or offline) stops driving only. Cameras of every station stream whenever their source answers. "Closed" may still hide the arm camera if the owner chooses, but the grow station's cameras are never tied to the arm.
- A camera's source is its own URL (the camera list), reached directly through the egress, not through the arm server.
- Test: the arm offline and closed,
/camera/2/snapshotis 200 from a fake source, and the camera websocket opens.
Owner 2026-10-26: "the arm is unplugged from the raspberry pi right now and i have plugged in a UV light to the pi which is attached to the top of a small grow box with like 15-20 spinach saplings… reuse the setup with the cameras and the pi to monitor… setup the light schedule… this is basically my workshop setup so i can observe things. the app could be tuned for that. i would love to readd the arm too so both are running!"
The app becomes the workshop: one Pi, several stations, each with its cameras and its controls. Today there are two: the arm (SO-101; it may be unplugged) and the grow box (spinach, a UV light, a camera).
Probed on the Pi 2026-10-26 21:58Z:
so101-camera@1/2running.Done when:
arm|grow), cameras, and controls. The home shows a card per station, live camera thumbnail first, and works with any subset present. The arm unplugged shows "Arm: not connected" and nothing breaks; plugging it back in brings it back without a restart (#58 module split helps).Children: the light schedule, and the grow timelapse plus log.