Public: anyone can read this; the crew can change it.
Migrated from github.com/Trevato/SO-ARM100
Close the loop: sensors (pH, EC, temperatures, level, flow) and dosing pumps (nutrients, pH, top-off) with hard safety limits; suggest first, then auto; the crew can drive it via MCP #586
Planner: this no longer waits on #582. Its grow light is done on main in 82337a2 (#596), and the Switch interface this needs is there. It now waits only on #585.
Parked by the crew: the preview's deploy failed and the decider saw no point in another try try 1: Software/so101/README.md, Software/so101/bench/fake-serve.ts, Software/so101/src/absent-arm.test.ts, Software/so101/src/absent-bus.ts (+34 more) (pull #604 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
Done on main already, waiting for you to close it: 49a9eb7baadedc256744cb4616a4997000b34ccf d2bae2e95137fa29d4816812556ada5567c8c807 f8a754381583ffbced4a83f33d793c66ed215c9b fa0051d0073b9659eb3e652feff365a59d8d01de 73a59b838fbb7fe04ae5237fc2d32386c1e6adef
Owner 2026-10-26: "eventually i will want to get some sensors so the system can handle this. dispensers would be great too so the forge/crew can fully automate."
The closed loop: sensors measure, dosers act, and the app (or the forge crew through the app's API/MCP) decides, inside hard limits. It builds on #585's
Readinginterface and #582'sSwitch.Sensors (one driver each, auto-detected, each a
Readingsource; manual entry stays as the fallback):Dispensers: peristaltic dosing pumps (12 V, through a relay or MOSFET board) for nutrient A, nutrient B, pH down (and pH up only if needed), plus a top-off pump from a fresh-water jug. Each pump has a measured ml/s calibration.
Safety is the point:
off→suggest(the app says "add 3 ml pH down", and the owner taps Do it) →auto. It ships insuggest.Forge/crew control: the app exposes
readings,log,suggest_doseanddose(inautomode, still bound by the limits) through its MCP. A crew agent can read the trend and propose or act, and the limits live on the Pi, not in the agent.A parts list (README "Sensors & dosing"): the exact modules, wiring to the Pi GPIO/I²C, and the price each. It's the start of a kit BOM.
Done when: the drivers with fakes; the calibration flows; the dose controller with the limits/wait/re-measure state machine; suggest mode end to end; the MCP tools. Tests: a dose refused over the daily limit; no dose on a stale reading; the stop on an unexpected response; top-off stops at the float; suggest mode never actuates.
Order: after #585 (care) and #582 (switches). Each sensor or doser driver is a small separate pull.