Bill of materials
| Component | Status | Notes | Price (est.) |
| Raspberry Pi 5 16GB | In hand | Main compute hub. Runs Home Assistant + MQTT broker. | R2,800 |
| Official Pi 5 case (red/white) | In hand | | R350 |
| Official Pi 5 PSU 5A 27W + EU/SA adapter | In hand | Enough power for Pi 5 + HATs | R450 |
| Pi 5 active cooler | In hand | Required for sustained workloads | R280 |
| ML-2020 RTC battery | In hand | Keeps time during load shedding | R60 |
| 64GB A2 microSD (Pi OS pre-loaded) | In hand | Boot media — temporary until NVMe arrives | R280 |
| M.2 NVMe Base (PCIe HAT for Pi 5) | In hand | PCIe storage HAT | R420 |
| NVMe SSD 256GB M.2 2230 | Outstanding | Required for production storage | ~R800 |
| Official Pi keyboard + hub | In hand | Setup / admin only | R650 |
| Micro-HDMI to HDMI cable | In hand | Setup / admin only | R120 |
Status: Hub functional on microSD. Not production-ready until NVMe SSD arrives. Once NVMe is installed, remove the microSD for reliability.
| Component | Qty | Status | Notes | Price (est.) |
| HX711 ADC 24-bit board | 3 | In hand | Reads load cell data via SPI — 1 per sensor node | R85 each |
| Load cell GML611 5kg | 1 | In hand | Light items: canisters, jars, dry goods (flour, rice, sugar) | R190 |
| Load cell 50kg | 2 | Outstanding | Heavy items: water drums, bulk bags. Blocks 2 additional nodes. | ~R350 each |
| Wemos D1 Mini V4 4MB | 1 | In hand | WiFi microcontroller — 1 per sensing node. Reports to Pi over MQTT. | R95 |
| Dupont F-F jumper wires 20cm | Set | In hand | HX711 to D1 Mini wiring | R45 |
| Male + female pin headers | Set | In hand | Soldered connections | R30 |
Architecture: D1 Mini reads HX711, reports weight over WiFi to Pi hub via MQTT. Pi compares reading to threshold defined in HA or Pantry config. Threshold crossed → webhook fires to Pantry Edge Function → pending shopping list item created.
| Component | Qty | Status | Notes | Price (est.) |
| VL53L0X Laser Ranging Module (ToF) | 1 | In hand | Time-of-flight distance sensor. Detects shelf presence. Runs on I2C — pairs with D1 Mini or directly with Pi. | R120 |
Use case: Proximity trigger rather than weight. "Is the item on the shelf or not?" Useful for items where exact weight isn't needed — e.g. detecting if a large container is present vs absent.
| Component | Status | Notes | Price (est.) |
| SONOFF Dongle Lite MG21 | In hand | USB Zigbee coordinator. Plug into Pi, flash Zigbee2MQTT or ZHA in Home Assistant. | R380 |
Enables: Zigbee smart buttons (manual triggers for Grace/kids), Zigbee smart plugs, and future Zigbee-native sensors (Aqara, etc.) as the sensor network grows.
| Component | Qty | Status | Notes | Price (est.) |
| Enlec ENL120806C IP65 ABS enclosure 120×80×55mm | 2 | In hand | IP65 waterproof. Houses 2 sensor nodes. Kitchen-safe. | R180 each |
| Hummel PG11 cable glands | 4 | In hand | 2 per enclosure — power in + data/sensor out | R25 each |
| Magnum MAG1220 soldering iron 60W | 1 | In hand | Assembly | R280 |
| Solder wire 0.71mm 60/40 | 1 | In hand | Assembly | R65 |
Status: Can assemble 2 fully enclosed, IP65-rated sensor nodes now.
Cost summary
| Layer | Components | In-hand cost (est.) | Outstanding (est.) |
| Layer 1 — Hub | Pi 5 + case + PSU + cooler + RTC + storage + peripherals | ~R5,410 | ~R800 (NVMe) |
| Layer 2 — Weight sensing | HX711 ×3 + load cells + D1 Mini + wiring | ~R640 (1 node) | ~R700 (2× 50kg cells) |
| Layer 3 — Presence | VL53L0X ToF module | ~R120 | — |
| Layer 4 — Zigbee | SONOFF Dongle Lite MG21 | ~R380 | — |
| Layer 5 — Enclosures | 2× IP65 enclosures + glands + tools | ~R825 | — |
Prices are estimates from SA component suppliers (Communica, DIY Electronics, Micro Robotics). Actual prices may vary.
What can be built now vs. what's blocked
✅ Pi 5 Hub (dev/staging)
Pi 5 + case + PSU + cooler + RTC + microSD
Ready — functional on microSD
✅ 1× Weight node (5kg, enclosed)
D1 Mini + HX711 + 5kg load cell + IP65 enclosure + glands
Ready to assemble and deploy
✅ 1× Presence node (ToF)
VL53L0X + D1 Mini (or direct Pi I2C)
Ready to wire
✅ Zigbee coordinator
SONOFF Dongle Lite + Pi USB
Plug in + flash Zigbee2MQTT
🔴 2× Weight nodes (50kg)
Need: 2× 50kg load cells
Blocked — order outstanding
🔴 Pi 5 production hub
Need: NVMe SSD 256GB M.2 2230
Blocked — order outstanding
Data flow — sensor to Pantry app
Sensor
Weight / Presence
D1 Mini + HX711 / VL53L0X
→
Protocol
MQTT
WiFi to Pi hub
→
Orchestrator
Home Assistant
Threshold evaluation
→
Backend
Edge Function
Supabase webhook receiver
→
App
Pending item
Lerato approves / dismisses
Sensor node reports reading → Pi/HA evaluates against configured threshold → if threshold crossed, fires webhook to Pantry Supabase Edge Function → Edge Function creates "pending" shopping list item → Lerato sees it in app and approves or dismisses. Human always in the loop before anything is ordered.
Connected backlog stories