📦 DeliveryBox ↔ Switch
Disconnected
Front · Delivery
Rear · Collection
Courier Access PIN · auto-rotates after each use
----
🔐 Confirmation Codes / OTPs
Spoken at door-close when delivery weight doesn't match any configured slot.
Configure Delivery Confirmation Codes · 5 slots
Set OTP + courier + expected weight per delivery. Box auto-announces the matching code when that weight is placed inside.
Delivery 1
Delivery 2
Delivery 3
Delivery 4
Delivery 5
Spoken at door-close when pickup weight doesn't match any configured slot.
Configure Pickup Confirmation Codes · 2 slots
Place the return/exchange item in the box. When the courier removes it, the box auto-announces the matching OTP to confirm successful pickup.
Pickup 1
Pickup 2
● Idle
Arms a collection cycle. The box welcomes, waits for the chosen door to open, then announces parcels collected after close.
Gate —
Live Box Status
Keypad Entry
- - - -
Enter PIN on box
● Connecting…
Live Weight
-- g -- kg
⏳ measuring…
Front · Delivery
Rear · Collection
0 5 kg --
Last Delivery
-- g -- kg
Detected
Box Contents
Box is empty.
Offline OTP single-use · offline · tap to copy
Loading…
📸 Delivery Photos · recent shots
No delivery photos yet — first one will appear here when a delivery is detected.
📋 Activity Log · since last collection
📥 Deliveries · max 6
No deliveries recorded this session.
📤 Pickups · max 3
No pickups this session.
📦 Collections · max 3
No collections this session.
⚙ Settings & Advanced (saved in this browser)
Broker:
📶 WiFi Networks
Connected to:

Up to 5 networks saved. Device tries them in order on boot/reconnect.

⚖ Weight Sensor Calibration

Two-step calibration: first tare with nothing on the scale, then place a known weight and calibrate. Works over MQTT from anywhere.

Current Reading
-- g
Scale: --
Offset: --
g. Bigger values above this show exactly. Readings over 50 kg are ignored as bad reads.

Remove all weight from the scale, then click Tare.

Place a known weight on the scale, enter its value in grams, then click Calibrate.

MQTT Connection

Tip: MQTT works cross-origin. HTTP fallback requires device CORS headers.

🎨 Theme
Light, Dark, or Auto (follows your device). Saved in this browser.
📡 Device Access — AP Mode

Start AP mode to add a new network from another device. The box stays connected to its current network while AP is active.

📷 ESP32-CAM
Status of the camera peer device + sensor tweaks. Status auto-updates every ~30 s.
SSID: IP: mDNS: RSSI: Sensor:
Preferred — delivery photos load from <worker>/photo/<file> via Cloudflare's HTTPS edge. The cam uploads each new snap to this URL automatically.
Optional fallback. Used for /stream (live MJPEG) and as the photo source if the Worker URL above isn't set. Only needed if you want internet-reachable live preview.
🔬 Camera diagnostics
MQTT broker: Cam online (last state): Worker URL configured: Cam knows Worker URL: Upload queue depth: Last upload:
☁ Photos on Worker ()
(not loaded — tap 🖼 Refresh gallery)
📋 Live camera event log
WiFi for the camera
The ESP32-CAM has its WiFi credentials baked into the firmware (currently Grace_5G). To switch networks, edit WIFI_SSID/WIFI_PASS in esp32-cam-firmware/src/main.cpp and re-flash. Full MQTT-driven WiFi management (like the main box has) is on the roadmap.
Controls — LED & Relays
State:
-- g
Raw: -- · Age: --
🔒 Lock Settings

How long the door-lock solenoid stays energised per unlock. Trim it to the shortest time that still reliably throws the bolt — shorter pulses run cooler and extend the solenoid's life. Accepts decimals for fine tuning.

Current lock pulse
-- s

Range 0.1010.0 s. Applies to the front-door lock (the main gate keeps its own timing). Saved on the device; the built-in default is used until you change it.

Keypad Log
Input: (empty) age: -- ms

Requires Device HTTP Base + CORS on device.

Session
🔍 Diagnostic — Last door-close judgment
Shows what the device decided at the last door close. Useful only for debugging when OTPs don't speak as expected.
Last delta:
Decision:
OTP spoken:
Delivery manual in memory:
Pickup manual in memory:
🚪 Main Gate ↔ Switch
Disconnected
🚪
Main Gate
🔓 HOLD TO UNLOCK press & hold ½ s
No unlocks yet
Recent activity
No activity yet — unlocks (PWA or wireless remote) will show up here.