Files

191 lines
5.9 KiB
Markdown

![OpenParcelBox Logo](images/openparcelbox-logo-256.png)
# OpenParcelBox
OpenParcelBox is an open-source project that replaces the proprietary electronics of the Boks One connected parcel box with a documented, local-first, and sustainable solution.
The goal is to preserve as much of the original hardware as possible while removing dependencies on proprietary cloud services and mobile applications.
## Goals
- Local-first operation
- No subscription
- No vendor lock-in
- Open firmware
- Open hardware documentation
- Home Assistant integration
- Battery-powered design
- Reproducible hardware and software
## Current Status
The project is under active development.
Completed or validated:
- Zephyr RTOS application skeleton
- Seeed Studio XIAO nRF52840 development target
- RGB LED driver
- PCF8574 GPIO expander driver
- Development keypad scanning
- Active buzzer feedback
- Persistent six-digit access codes
- Keypad unlock flow with default development code `784512`
- Persistent NFC tag UID table and scan-mode firmware API
- Flutter mobile application with branded Android icon/splash, bilingual dark
interface, secure registration, encrypted backups, and role-aware modals
- Mobile BLE automatic reconnection and command UI for clock sync, lock
opening, history, access codes, NFC tags, and guest invitations
- Firmware BLE service for those mobile commands plus stored-state readback
- One-time access codes with automatic removal after first successful keypad use
- Phone-synchronized runtime timestamps for lock-opening logs
- Persistent seven-day opening history with power-loss time continuity
- Eight permanent and twenty temporary access-code slots, with unique random
generation and administrator-confirmed temporary-to-permanent conversion
- BLE LE Secure Connections, encrypted GATT access, and 128-bit phone identities
- First-phone administrator provisioning and named guest identities
- App-triggered NFC enrollment with stored tag names
- PN532 passive-badge reader over I2C at `0x24`, with a fixed non-renewable
15-second keypad-triggered scan window and power-down between windows
- 150 ms lock command pulse on XIAO `D9`, inactive throughout startup
- KR-S79 `COM/NC` lock state feedback on XIAO `D7` / `D8`
- Internal identity-reset button on XIAO `P1.11`
- Green-open, off-closed, red-invalid LED feedback
- Short key beeps, long valid-code beep, invalid-code beep sequence, and 2-second
open reminder beep
- Door opened / closed serial debug messages
- Firmware debug output over serial console
- One-second white RGB confirmation when the local keypad path is ready
In progress:
- Original hardware reverse engineering
- Production keypad mapping
- PN532 reader hardware validation and production integration
- Hardware validation
- BLE security and hardware interoperability validation
Planned:
- Firmware update from the mobile application
- Battery management
- Zigbee
- OTA updates
- Home Assistant integration
- Custom PCB
## Repository Structure
```text
OpenParcelBox/
+-- docs/ Project documentation
| +-- firmware/ Firmware notes and module documentation
| +-- hardware/ Hardware documentation assets
| +-- architecture.md System architecture
+-- firmware/ Zephyr firmware
| +-- app/ Main firmware application
+-- hardware/ Hardware documentation and reverse engineering
+-- homeassistant/ Home Assistant integration notes
+-- mobile-app/ Flutter mobile application and notes
+-- images/ Project logo and application background assets
+-- CHANGELOG.md
+-- LICENSE
+-- README.md
+-- ROADMAP.md
+-- TODO.md
```
Local workspace support directories such as `.vscode/`, `.venv/`, `.west/`, `tools/`, `external/`, and build directories are not part of the OpenParcelBox project source.
## Firmware
The firmware is written in C17 and uses Zephyr RTOS.
Current firmware modules:
- RGB LED
- PCF8574 GPIO expander
- Matrix keypad
- Active buzzer
- Lock control
- Lock state feedback
- Persistent access codes
- Persistent NFC tag UID storage
- BLE administration service
## Mobile App
The mobile application is developed with Flutter in:
```text
mobile-app/app/
```
The application provides local-first administrator and guest surfaces for
secure Bluetooth registration, automatic reconnection, XIAO date/time
synchronization, access-code management, NFC enrollment, guest invitation QR
codes, opening history, encrypted backup/restore, direct opening, and
authoritative firmware state readback.
Firmware documentation is available in:
```text
docs/firmware/
firmware/README.md
```
## Hardware
Current development platform:
- Seeed Studio XIAO BLE nRF52840
- PCF8574 GPIO expander
- Freenove 4x4 matrix keypad for development validation
- KR-S79 lock command on XIAO `D9`
- KR-S79 `NC` feedback on XIAO `D7`
- KR-S79 `COM` feedback reference on XIAO `D8`
- Internal identity-reset button between `GND` and XIAO `P1.11`
The XIAO nRF52840 exposes tag-side Nordic NFCT pins, which are not used as a
passive-badge reader. Badge UID reading uses a PN532 module on the shared I2C
bus at address `0x24` during development.
The production hardware is planned around a custom PCB and the original parcel box mechanical parts.
## Documentation
General project tracking:
- `ROADMAP.md`
- `TODO.md`
- `CHANGELOG.md`
Hardware and reverse-engineering notes:
- `hardware/`
- `docs/hardware/`
Firmware notes:
- `firmware/`
- `docs/firmware/`
## License
OpenParcelBox is an open-source project.
Different project components may use different licenses depending on their nature.
| Component | License |
| ------------- | ------------------ |
| Project | `LICENSE` |
| Firmware | `firmware/LICENSE` |
| Hardware | `hardware/LICENSE` |
| Documentation | `docs/LICENSE` |
## Disclaimer
OpenParcelBox is an independent open-source project.
It is not affiliated with, endorsed by, or supported by the manufacturer of the Boks One parcel box.