MachineState
Clip-on machine-uptime monitor that reads the stack light, with no wiring into the machine
Reads a machine's existing stack light (or Haas pendant beacon), texts a named person when the machine has been idle for 20 minutes or in alarm for 5, and sends a run-time report at 6 pm, without any electrical or network connection to the machine.
- Who buys it
- Owner of a small CNC or job shop.
- Why it pays
- Not yet quantified in the design docs: the value is idle stops noticed in minutes instead of hours, and real run hours and utilisation per machine. The 30-day demand test checks whether shops will pay $19 per machine per month.
- Target price
- $19/machine/month (demand-test price)
- First-minute wow
- Strap a clip on the stack light, plug in USB, and about 10 minutes later the shop owner gets a text when that machine stops.

What the research found
And how this design answers it
- Wiring into a machine control is risky and slow → optical sensing of the stack light only; the hardware has no outputs
- Small shops have many tower sizes → strap-on clips for 40/50/60/70 mm towers, plus caps for the Haas pendant beacon
- Flashing and steady lamps mean different things → 50 Hz sampling decided over a 2 s window; configurable colour map per machine
- Shop lighting and neighbouring tiers leak light → black hood on the lens, baffle lips, per-lamp learned on/off levels, room-light reference sensor
- A device on a flat shop network is a foothold → outbound TLS only, unique per-device credentials, optional own 4G router
- Haas machines have a single colour-changing beacon → VEML6040 RGBW colour sensor and a Haas colour preset
Use case
A machine sits idle mid-shift
Shop ownerMachine operatorMachineState nodeAlert server
- 01Trigger: a CNC finishes a cycle and its stack light goes amber, or a Haas beacon flashes green waiting for the operator
- 02Detection: the node classifies each lamp as on, off or flashing and publishes every change; the server counts idle time in shift hours
- 03Alert: after 20 minutes idle (5 minutes in red alarm) the named person gets an SMS or WhatsApp; a "running again" note follows
- 04Action: the operator restarts the machine; the 6 pm report shows run hours, idle hours, utilisation and the longest stop per machine
Outcome: Stops are seen within minutes instead of at the end of the shift, with true run-time figures per machine (payback not yet measured)
How it works
Architecture
- 01
Sense: one ALS-PT19 phototransistor per tower tier in a black clip hood, or a VEML6040 colour sensor on a Haas beacon
- 02
Decide: firmware samples at 50 Hz, learns per-lamp levels and decides on/off/flash each second
- 03
Send: MQTT over TLS to a Mosquitto broker with per-device ACLs (Wi-Fi or optional 4G router)
- 04
Tell: Node.js rules server sends idle, fault and offline alerts by Twilio SMS/WhatsApp and a 6 pm run-time report
Hardware
Real parts, buyable today
Bill of materials: about $47 per machine at 100 units and $36 at 1,000 (production v1, est.).
| Block | Part | Why this part |
|---|---|---|
| Controller (pilot) | M5Stack AtomS3 Lite (ESP32-S3) | Ready-made module for 6 pilot units; rated only to 40 °C |
| Controller (production) | ESP32-C3-MINI-1-N4 on a custom 2-layer board | Industrial temperature (−40 to 85 °C), pre-certified module |
| Lamp sensor | Everlight ALS-PT19 phototransistor | Simple on/off reading of each tier through a hood |
| Haas colour sensor | Vishay VEML6040 RGBW (I2C) | One beacon changes colour, so colour is needed |
| Power | UL-listed 5 V USB adapter | No wiring into the machine; plugs into an outlet |
Mechanical
Printable CAD
9 parts, generated from code and checked as closed solids. Pick a part to inspect it, or download the STL files to print.
See the CAD parts render

Loading the CAD…
Real CAD · drag to rotate · scroll to zoomReal CAD · swipe sideways
Bought hardware fitted inside this part (checked in the CAD: nothing collides with the plastic)
- Lamp clip, 40 mm towerlamp-clip-d40.stl · ASA, black (production PA12)
- Lamp clip, 50 mm towerlamp-clip-d50.stl · ASA, black (production PA12)
- Lamp clip, 60 mm towerlamp-clip-d60.stl · ASA, black (production PA12)
- Lamp clip, 70 mm towerlamp-clip-d70.stl · ASA, black (production PA12)
- Haas beacon cap, 36 mmbeacon-cap-d36.stl · ASA, black (production PA12)
- Haas beacon cap, 42 mmbeacon-cap-d42.stl · ASA, black (production PA12)
- Haas beacon cap, 48 mmbeacon-cap-d48.stl · ASA, black (production PA12)
- Controller shellnode-shell.stl · ASA, black (production PA12)
- Controller magnet back covernode-back.stl · ASA, black (production PA12)
Open risks we are working on
- Light leaking from a neighbouring lit tier must be checked on a real tower (pass: lit and unlit at least 3× apart)
- Haas beacon diameter and colour ratios are not published and must be measured on the first Haas
- The pilot controller is rated only to 40 °C; the top of an enclosure may run hotter
- Pilot firmware has not been compiled yet, and pilot units lack secure boot, certificates and OTA (fixed before sale)
- Demand is unproven: production starts only if the 30-day demand test passes
- Weak Wi-Fi at some machines may need the 4G router option
Design stage only: nothing on this page is for sale. Specifications and prices are targets.