From 6c31d1bef4771a80db38158480d7840a200a2a56 Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 23 Jun 2026 11:57:11 +0200 Subject: [PATCH] Initial OpenParcelBox project structure --- .gitignore | 48 +++ CHANGELOG.md | 7 + LICENSE | 7 + README.md | 149 ++++++++++ ROADMAP.md | 511 ++++++++++++++++++++++++++++++++ TODO.md | 169 +++++++++++ archives/.gitignore | 0 docs/LICENSE | 13 + docs/contraintes.md | 25 ++ docs/fr/architecture.md | 328 ++++++++++++++++++++ firmware/LICENSE | 13 + firmware/README.md | 121 ++++++++ firmware/app/.gitkeep | 0 firmware/app/CMakeLists.txt | 0 firmware/app/contraintes.md | 18 ++ firmware/app/include/.gitkeep | 0 firmware/app/prj.conf | 0 firmware/app/src/.gitkeep | 0 firmware/boards/.gitkeep | 0 firmware/contraintes.md | 23 ++ firmware/modules/.gitkeep | 0 firmware/tests/.gitkeep | 0 hardware/BOM.md | 104 +++++++ hardware/LICENSE | 13 + hardware/README.md | 15 + hardware/contraintes.md | 27 ++ hardware/reverse-engineering.md | 115 +++++++ homeassistant/README.md | 10 + homeassistant/contraintes.md | 21 ++ images/.gitkeep | 0 mobile-app/contraintes.md | 47 +++ 31 files changed, 1784 insertions(+) create mode 100644 .gitignore create mode 100644 CHANGELOG.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 ROADMAP.md create mode 100644 TODO.md create mode 100644 archives/.gitignore create mode 100644 docs/LICENSE create mode 100644 docs/contraintes.md create mode 100644 docs/fr/architecture.md create mode 100644 firmware/LICENSE create mode 100644 firmware/README.md create mode 100644 firmware/app/.gitkeep create mode 100644 firmware/app/CMakeLists.txt create mode 100644 firmware/app/contraintes.md create mode 100644 firmware/app/include/.gitkeep create mode 100644 firmware/app/prj.conf create mode 100644 firmware/app/src/.gitkeep create mode 100644 firmware/boards/.gitkeep create mode 100644 firmware/contraintes.md create mode 100644 firmware/modules/.gitkeep create mode 100644 firmware/tests/.gitkeep create mode 100644 hardware/BOM.md create mode 100644 hardware/LICENSE create mode 100644 hardware/README.md create mode 100644 hardware/contraintes.md create mode 100644 hardware/reverse-engineering.md create mode 100644 homeassistant/README.md create mode 100644 homeassistant/contraintes.md create mode 100644 images/.gitkeep create mode 100644 mobile-app/contraintes.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..013734d --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# ---------------------------- +# VSCodium / VSCode +# ---------------------------- +.vscode/ + +# ---------------------------- +# Zephyr +# ---------------------------- +firmware/build/ + +# ---------------------------- +# Python +# ---------------------------- +__pycache__/ +*.pyc + +# ---------------------------- +# Logs +# ---------------------------- +*.log + +# ---------------------------- +# OS +# ---------------------------- +.DS_Store +Thumbs.db + +# ---------------------------- +# KiCad backup +# ---------------------------- +*.bak +*-bak +*.kicad_pcb-bak +*.kicad_sch-bak +*.kicad_prl +*.autosave +_autosave-* + +# ---------------------------- +# Temporary files +# ---------------------------- +*.tmp +*.temp + +# ---------------------------- +# Archives +# ---------------------------- +archives/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..848f7a4 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog + +Toutes les modifications notables de ce projet seront documentées dans ce fichier. + +Le format s'inspire de Keep a Changelog. + +## [Unreleased] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b08c59b --- /dev/null +++ b/LICENSE @@ -0,0 +1,7 @@ +OpenParcelBox + +Copyright (C) 2026 Tony + +Firmware -> GPL-3.0-or-later +Hardware -> CERN-OHL-S-2.0 +Documentation -> CC-BY-SA-4.0 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..ed6601f --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# OpenParcelBox + +> 🚧 Statut : Reverse Engineering en cours + +OpenParcelBox est un projet open-source visant à remplacer l'électronique propriétaire de la boîte à colis connectée Boks One par une solution libre, documentée, maintenable et reproductible. + +L'objectif est de conserver autant que possible les éléments mécaniques, électromécaniques et esthétiques d'origine tout en supprimant toute dépendance à l'écosystème propriétaire. + +Le projet fournit à la fois : + +* un firmware libre ; +* une électronique de remplacement documentée ; +* une intégration native avec Home Assistant ; +* une documentation complète permettant à chacun de reproduire la solution. + +--- + +# Pourquoi OpenParcelBox ? + +De nombreuses boîtes à colis connectées reposent sur des services cloud et des applications propriétaires. + +Lorsque le fabricant arrête son service, modifie ses conditions d'utilisation ou cesse son activité, le matériel peut devenir inutilisable malgré un état mécanique parfaitement fonctionnel. + +OpenParcelBox est né de la volonté de prolonger la durée de vie d'une Boks One en remplaçant son électronique propriétaire par une solution libre et documentée, sans aucune dépendance à un service cloud. + +Le développement du projet est réalisé sur une Boks One, qui constitue actuellement la seule plateforme officiellement prise en charge. + +Cependant, les méthodes employées, l'architecture matérielle et les principes logiciels documentés dans ce dépôt peuvent servir de base à l'adaptation d'autres boîtes à colis ou boîtes aux lettres connectées par la communauté. + +L'objectif du projet n'est donc pas de prendre en charge tous les produits du marché, mais de fournir une solution ouverte, reproductible et réutilisable que chacun pourra adapter à ses propres besoins. + +--- + +# Fonctionnalités prévues + +## Fonctionnelles + +* Remplacement complet de l'électronique d'origine. +* Conservation du clavier 2 × 6. +* Conservation du mécanisme de verrouillage. +* Fonctionnement sur batterie. +* Intégration native Home Assistant. +* Communication Zigbee. +* Gestion de codes d'accès temporaires et permanents. +* Mises à jour OTA (Over-The-Air). + +## Techniques + +* Fonctionnement entièrement local. +* Aucune dépendance à un service cloud. +* Faible consommation énergétique. +* Matériel reproductible. +* Logiciel libre. +* Documentation complète. + +--- + +# Architecture + +## Matériel + +* Seeed Studio XIAO BLE nRF52840 + +## Logiciel + +* Zephyr RTOS +* C++ +* west +* CMake + +## Communication + +OpenParcelBox communique via Zigbee. + +L'exposition éventuelle vers MQTT est assurée par Home Assistant via : + +* ZHA +* Zigbee2MQTT +* ou toute autre passerelle compatible. + +Le firmware n'utilise donc pas MQTT directement. + +--- + +# État du support Zigbee + +Le support Zigbee fait partie des objectifs de la V1 mais n'est pas encore validé expérimentalement. + +La pile Zigbee retenue ainsi que son intégration dans Home Assistant seront définies au cours du développement. + +--- + +# Documentation + +## Français + +* [Roadmap](ROADMAP.md) +* [Architecture](docs/fr/ARCHITECTURE.md) + +--- + +# Structure du dépôt + +```text +OpenParcelBox +├── docs/ +│ └── fr/ +├── firmware/ +├── hardware/ +├── homeassistant/ +├── images/ +├── mobile-app/ +├── CHANGELOG.md +├── README.md +├── ROADMAP.md +├── TODO.md +└── LICENSE +``` + +--- + +# État du projet + +🚧 Projet en cours de reverse engineering. + +Travaux actuellement en cours : + +* Analyse du matériel d'origine. +* Identification des composants. +* Mesures électriques. +* Validation de l'architecture matérielle. +* Définition des interfaces firmware. + +Pour connaître les étapes prévues du développement : + +➡️ **[Consulter la roadmap](ROADMAP.md)** + +--- + +# Licence + +Les différents composants du projet sont distribués sous des licences adaptées à leur nature. + +| Composant | Licence | +| ------------- | ------------------------------------ | +| Projet | [LICENSE](LICENSE) | +| Firmware | [firmware/LICENSE](firmware/LICENSE) | +| Hardware | [hardware/LICENSE](hardware/LICENSE) | +| Documentation | [docs/LICENSE](docs/LICENSE) | diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..0f4e1b8 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,511 @@ +# OpenParcelBox - Roadmap + +## Présentation + +OpenParcelBox est un projet open source visant à remplacer l'électronique propriétaire des boîtes à colis connectées par une solution autonome, locale et pérenne. + +Le projet est développé et validé sur une Boks One. + +L'architecture est documentée afin de faciliter une éventuelle adaptation à d'autres matériels par la communauté. + +## Objectifs + +* Aucune dépendance au cloud +* Aucun abonnement +* Fonctionnement autonome +* Compatible NFC +* Compatible Zigbee +* Compatible Home Assistant +* Compatible Android et iOS +* Fonctionnement sur piles +* Accessible aux makers débutants +* Réutilisation maximale du matériel existant + +--- + +# Phase 0 - Initialisation du projet + +## Objectifs + +* Création du dépôt Git +* Définition de l'architecture +* Définition des conventions de développement +* Mise en place de la documentation + +## Livrables + +* README.md +* ROADMAP.md +* LICENSE +* TODO.md + +## État + +* [ ] Initialisation du projet + +--- + +# Phase 1 - Analyse matérielle + +## Objectifs + +Documenter le matériel réutilisable de la Boks One. + +## Éléments à analyser + +### Façade + +* Dimensions +* Position des boutons +* Position des LEDs +* Position de la zone NFC +* Position des fixations + +### Boîtier + +* Dimensions internes +* Compartiment électronique +* Compartiment piles + +### Mécanique + +* Serrure +* Capteur de fermeture +* Passage des câbles + +## Livrables + +* Plans cotés +* Documentation photographique +* Relevés mécaniques + +## État + +* [ ] Analyse matérielle + +--- + +# Phase 2 - Analyse électrique + +## Objectifs + +Identifier les caractéristiques électriques des composants conservés. + +## Mesures + +### Alimentation + +* Tension du pack piles +* Consommation en veille +* Consommation moteur + +### Serrure + +* Tension moteur +* Courant nominal +* Courant de démarrage + +### Capteur + +* Type +* Fonctionnement + +### Signalisation + +* LEDs +* Buzzer + +## Livrables + +* Documentation électrique +* Tableau des caractéristiques + +## État + +* [ ] Analyse électrique + +--- + +# Phase 3 - Prototype électronique + +## Objectifs + +Valider la compatibilité du matériel avec un XIAO nRF52840. + +## Matériel + +* Seeed Studio XIAO BLE nRF52840 +* Driver moteur +* Alimentation de laboratoire + +## Fonctionnalités + +* Pilotage moteur +* Lecture capteur +* Pilotage LEDs +* Pilotage buzzer + +## Validation + +Ouverture et fermeture de la serrure sans électronique Boks. + +## État + +* [ ] Prototype électronique + +--- + +# Phase 4 - Firmware Core + +## Objectifs + +Créer le firmware minimal autonome. + +## Fonctionnalités + +* Gestion clavier +* Gestion serrure +* Gestion capteur +* Gestion batterie +* Anti-bruteforce +* Timeout de saisie + +## Validation + +Ouverture avec un code administrateur unique. + +## État + +* [ ] Firmware Core +--- + +# Phase 5 - NFC + +## Objectifs + +Ajouter l'ouverture par badge NFC. + +## Fonctionnalités + +* Lecture des badges +* Badge administrateur unique +* Activation NFC sur appui touche +* Fenêtre de lecture limitée dans le temps + +## Validation + +Ouverture par badge NFC. + +## État + +* [ ] Fonctionnalités de base + +--- + +# Phase 6 - Optimisation énergétique + +## Objectifs + +Maximiser l'autonomie sur piles. + +## Fonctionnalités + +* Deep Sleep +* Réveil sur touche +* Réveil NFC +* Mesure batterie + +## Validation + +Autonomie compatible avec un usage quotidien. + +## État + +* [ ] Optimisation énergétique + +--- + +# MVP - OpenParcelBox autonome + +## Fonctionnalités attendues + +* [ ] XIAO nRF52840 +* [ ] Fonctionnement sur piles +* [ ] Gestion serrure +* [ ] Gestion capteur +* [ ] Gestion batterie +* [ ] Code administrateur +* [ ] Badge NFC administrateur +* [ ] Fonctionnement 100 % local +* [ ] Aucun cloud +* [ ] Aucun abonnement +* [ ] Aucun compte externe + +Une fois cette étape atteinte, une Boks One devient totalement indépendante de son infrastructure d'origine. + +--- + +# Phase 7 - Application Flutter + +## Objectifs + +Créer l'interface utilisateur officielle. + +## Plateformes + +* Android +* iOS + +## Fonctionnalités + +* Connexion Bluetooth +* Configuration initiale +* Changement du code administrateur +* Enregistrement du badge administrateur +* Consultation de l'état de la boîte + +## Validation + +Configuration complète sans Home Assistant. + +## État + +* [ ] App flutter - Bluetooth + +--- + +# Phase 8 - Gestion des utilisateurs + +## Objectifs + +Permettre la gestion de plusieurs utilisateurs. + +## Fonctionnalités + +* Création utilisateur +* Modification utilisateur +* Suppression utilisateur +* Codes permanents +* Badges NFC permanents + +## Validation + +Gestion multi-utilisateurs depuis l'application. + +## État + +* [ ] App flutter - Utilisateurs + +--- + +# Phase 9 - Historique local + +## Objectifs + +Conserver les événements dans la mémoire interne. + +## Événements + +* Ouverture par code +* Ouverture NFC +* Tentative invalide +* Batterie faible + +## Validation + +Consultation de l'historique depuis l'application. + +## État + +* [ ] App flutter - Historique + +--- + +# Produit autonome complet + +## Fonctionnalités attendues + +* [ ] Gestion multi-utilisateurs +* [ ] Gestion NFC +* [ ] Historique local +* [ ] Configuration Bluetooth +* [ ] Fonctionnement sans Home Assistant + +--- + +# Phase 10 - Zigbee + +## Objectifs + +Ajouter la communication Zigbee. + +## Fonctionnalités + +* État serrure +* État porte +* Niveau batterie +* Remontée d'événements + +## Validation + +Appairage Zigbee fonctionnel. + +## État + +* [ ] Zigbee - Remontée d'états + +--- + +# Phase 11 - Home Assistant + +## Objectifs + +Ajouter l'intégration Home Assistant. + +## Compatibilité + +* ZHA +* Zigbee2MQTT + +## Fonctionnalités + +* État serrure +* État porte +* Batterie +* Historique +* Gestion utilisateurs + +## Validation + +Administration complète depuis Home Assistant. + +## État + +* [ ] Intégration Hassio - Remontée + +--- + +```md +# Phase 12 - Gestion des codes permanents + +## Objectifs + +Permettre l'administration complète des utilisateurs depuis Home Assistant. + +## Compatibilité + +* ZHA +* Zigbee2MQTT + +## Fonctionnalités + +* Création d'utilisateurs +* Modification d'utilisateurs +* Suppression d'utilisateurs +* Création de codes permanents +* Suppression de codes permanents +* Association de badges NFC +* Suppression de badges NFC + +## Validation + +Administration complète des accès permanents depuis Home Assistant. + +## État + +* [ ] Intégration Hassio - Codes permanents + +--- + +# Phase 13 - Codes temporaires + +## Objectifs + +Ajouter les accès temporaires. + +## Fonctionnalités + +* Expiration par date +* Expiration par heure +* Nombre maximal d'utilisations +* Codes à usage unique + +## Validation + +Gestion complète depuis Home Assistant et l'application. + +## État + +* [ ] Intégration Hassio - Codes temporaires + +--- + +# Phase 14 - PCB OpenParcelBox + +## Objectifs + +Créer un PCB dédié simple à assembler. + +## Contraintes + +* Basé sur XIAO nRF52840 +* Composants traversants privilégiés +* Accessible aux makers débutants + +## Validation + +Montage reproductible sans équipement professionnel. + +## État + +* [ ] PCB OpenParcelBox + +--- + +# Phase 15 - Documentation finale + +## Documentation utilisateur + +* Installation +* Configuration +* Dépannage + +## Documentation maker + +* Assemblage +* Flash firmware +* Mise à jour + +## Documentation développeur + +* Architecture +* API +* Contributions + +## Validation + +Publication officielle de la version 1.0. + +## État + +* [ ] Documentation + +--- + +# Version 1.0 + +## Fonctionnalités finales + +* Fonctionnement autonome +* NFC +* Bluetooth +* Application Android/iOS +* Zigbee +* Home Assistant +* Historique +* Codes permanents +* Codes temporaires +* Aucun cloud +* Aucun abonnement +* Aucun compte externe +``` \ No newline at end of file diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..6b3b3c4 --- /dev/null +++ b/TODO.md @@ -0,0 +1,169 @@ +# TODO OpenParcelBox + +## Phase 0 — Reverse Engineering + +### Documentation + +* [ ] Photographier tous les composants internes. +* [ ] Documenter les mesures électriques. +* [ ] Identifier tous les connecteurs. +* [ ] Compléter hardware-reverse-engineering.md. + +### Clavier + +* [ ] Identifier le brochage complet. +* [ ] Identifier la matrice. +* [ ] Vérifier la présence éventuelle de diodes. + +### Verrou + +* [ ] Identifier le mécanisme utilisé. +* [ ] Mesurer la tension de fonctionnement. +* [ ] Mesurer le courant d'ouverture. +* [ ] Mesurer le courant de maintien. + +### Capteur + +* [ ] Identifier la technologie utilisée. +* [ ] Identifier le brochage. +* [ ] Vérifier le comportement électrique. + +### Batterie + +* [ ] Identifier la technologie. +* [ ] Identifier la capacité. +* [ ] Mesurer la tension nominale. +* [ ] Identifier le système de recharge. + +--- + +## Phase 1 — Validation matérielle + +### Prototype + +* [ ] Vérifier la compatibilité du XIAO nRF52840. +* [ ] Tester le clavier. +* [ ] Tester le verrou. +* [ ] Tester le capteur. +* [ ] Tester la mesure batterie. + +### Zigbee + +* [ ] Valider la pile Zigbee sous Zephyr. +* [ ] Tester l'intégration Home Assistant. +* [ ] Tester ZHA. +* [ ] Tester Zigbee2MQTT. + +--- + +## Phase 2 — Firmware minimal + +### Infrastructure + +* [ ] Initialiser le projet Zephyr. +* [ ] Configurer west. +* [ ] Configurer CMake. +* [ ] Configurer la chaîne de compilation. + +### Core + +* [ ] Créer la structure des modules. +* [ ] Mettre en place la journalisation. + +### Keypad + +* [ ] Lecture de la matrice. +* [ ] Anti-rebond. +* [ ] Validation des touches. + +### Lock Controller + +* [ ] Pilotage du verrou. +* [ ] Détection des erreurs. +* [ ] Détection du verrouillage. + +### Sensor Manager + +* [ ] Lecture du capteur. +* [ ] Gestion des événements. + +### Power Management + +* [ ] Surveillance batterie. +* [ ] Modes basse consommation. + +--- + +## Phase 3 — Fonctionnalités utilisateur + +### Contrôle d'accès + +* [ ] Codes administrateur. +* [ ] Codes permanents. +* [ ] Codes temporaires. +* [ ] Protection anti-bruteforce. + +### Zigbee + +* [ ] Publication des états. +* [ ] Réception des commandes. +* [ ] Exposition des entités Home Assistant. + +### OTA + +* [ ] Mise à jour sécurisée. +* [ ] Vérification d'intégrité. +* [ ] Gestion des erreurs. + +--- + +## Phase 4 — PCB V1 + +### Conception + +* [ ] Schéma complet. +* [ ] Vérification ERC. +* [ ] Routage PCB. +* [ ] Vérification DRC. + +### Validation + +* [ ] Assemblage prototype. +* [ ] Validation électrique. +* [ ] Validation mécanique. + +--- + +## Phase 4.5 — Validation terrain + +### Fiabilité + +* [ ] Validation autonomie batterie. +* [ ] Validation portée Zigbee. +* [ ] Validation ouverture/fermeture répétée. +* [ ] Validation comportement après redémarrage. +* [ ] Validation après batterie faible. + +### Home Assistant + +* [ ] Validation ZHA. +* [ ] Validation Zigbee2MQTT. +* [ ] Validation découverte automatique. +* [ ] Validation des mises à jour OTA. + +--- + +## Phase 5 — Publication + +### Documentation + +* [ ] Guide d'installation. +* [ ] Guide Home Assistant. +* [ ] Guide développeur. + +### Publication + +* [ ] Publication du firmware. +* [ ] Publication des schémas. +* [ ] Publication des fichiers PCB. +* [ ] Création de la release V1. diff --git a/archives/.gitignore b/archives/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/docs/LICENSE b/docs/LICENSE new file mode 100644 index 0000000..71da340 --- /dev/null +++ b/docs/LICENSE @@ -0,0 +1,13 @@ +OpenParcelBox Documentation + +Copyright (C) 2026 Tony + +Except where otherwise noted, the documentation contained +in this repository is licensed under the Creative Commons +Attribution-ShareAlike 4.0 International License. + +You may obtain a copy of the license at: + +https://creativecommons.org/licenses/by-sa/4.0/ + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/docs/contraintes.md b/docs/contraintes.md new file mode 100644 index 0000000..04b243b --- /dev/null +++ b/docs/contraintes.md @@ -0,0 +1,25 @@ +# Contraintes documentation + +## Langue + +- Documentation principale en français. +- Traductions possibles dans le futur. + +## Pérennité + +- Documentation versionnée dans Git. +- Formats ouverts uniquement. + +## Reproductibilité + +- Chaque étape de fabrication doit être documentée. +- Chaque étape d'installation doit être documentée. + +## Illustrations + +- Privilégier les schémas vectoriels. +- Les photos doivent être archivées dans le dépôt. + +## Open Source + +- Aucun document propriétaire requis pour reproduire le projet. \ No newline at end of file diff --git a/docs/fr/architecture.md b/docs/fr/architecture.md new file mode 100644 index 0000000..9b9b1db --- /dev/null +++ b/docs/fr/architecture.md @@ -0,0 +1,328 @@ +# Architecture OpenParcelBox + +## Objectif du projet + +OpenParcelBox est un projet open-source visant à remplacer l'électronique propriétaire de la Boks One tout en conservant autant que possible les éléments mécaniques, électromécaniques et esthétiques d'origine. + +Les objectifs principaux sont : + +* Fonctionnement local. +* Intégration Home Assistant. +* Communication Zigbee. +* Mises à jour OTA. +* Documentation complète. +* Reproductibilité du matériel et du logiciel. +* Faible consommation énergétique. + +--- + +# Vue d'ensemble + +```text +┌─────────────────────────┐ +│ Home Assistant │ +└────────────┬────────────┘ + │ + │ Zigbee + ▼ +┌─────────────────────────┐ +│ OpenParcelBox │ +│ │ +│ XIAO nRF52840 │ +│ │ +│ ├─ Gestion clavier │ +│ ├─ Gestion accès │ +│ ├─ Gestion verrou │ +│ ├─ Gestion batterie │ +│ ├─ Gestion capteurs │ +│ ├─ Zigbee │ +│ └─ OTA │ +└─────────────────────────┘ +``` + +--- + +# Principes de conception + +## Conservation de la façade + +Le projet ne doit nécessiter aucune modification visible de la façade. + +Le clavier d'origine est conservé : + +* Disposition verticale 2 × 6. +* Aucun perçage supplémentaire. +* Aucun changement esthétique. + +## Réutilisation du matériel existant + +Lorsque cela est possible : + +* Conservation du clavier. +* Conservation du mécanisme de verrouillage. +* Conservation des capteurs. +* Conservation du compartiment batterie. + +## Faible consommation + +Le système doit être optimisé pour un fonctionnement sur batterie : + +* Utilisation des modes basse consommation. +* Réveil uniquement lorsque nécessaire. +* Minimisation du temps d'activité radio. + +--- + +# Architecture matérielle + +## Contrôleur principal + +### Seeed Studio XIAO BLE nRF52840 + +Responsabilités : + +* Lecture du clavier. +* Gestion des accès. +* Pilotage du verrou. +* Surveillance batterie. +* Gestion des capteurs. +* Communication Zigbee. +* Mise à jour OTA. + +--- + +## Clavier + +Le clavier d'origine est conservé. + +Caractéristiques connues : + +* Format vertical 2 × 6. +* Réutilisation du câblage existant si possible. + +Fonctionnalités prévues : + +* Codes administrateur. +* Codes permanents. +* Codes temporaires. +* Protection contre les tentatives répétées. + +--- + +## Verrouillage + +Le mécanisme de verrouillage d'origine est conservé. + +Le firmware devra pouvoir : + +* Commander l'ouverture. +* Commander le verrouillage. +* Vérifier le retour en position verrouillée. + +Une couche d'abstraction permettra de remplacer facilement le matériel si nécessaire. + +--- + +## Batterie + +Le système devra surveiller : + +* La tension batterie. +* Les seuils d'alerte. +* L'état de charge si disponible. + +Les alertes devront être remontées à Home Assistant. + +--- + +## Capteurs + +À ce stade du reverse engineering, un seul capteur est identifié. + +Fonction supposée : + +* Détection du retour du crochet dans le mécanisme de verrouillage. + +Le fonctionnement exact devra être confirmé lors du démontage et de l'analyse électronique. + +--- + +# Architecture logicielle + +## Core + +Responsabilités : + +* Initialisation système. +* Gestion des modules. +* Configuration. + +--- + +## Keypad + +Responsabilités : + +* Lecture du clavier. +* Anti-rebond. +* Gestion de la saisie. + +--- + +## Access Control + +Responsabilités : + +* Validation des codes. +* Gestion des droits. +* Gestion des utilisateurs. +* Protection contre les tentatives répétées. + +--- + +## Lock Controller + +Responsabilités : + +* Pilotage du verrou. +* Vérification des états. +* Gestion des erreurs. + +--- + +## Sensor Manager + +Responsabilités : + +* Lecture des capteurs. +* Filtrage logiciel. +* Détection des changements d'état. + +--- + +## NFC + +Responsabilités : + +* Lecture des badges. +* Gestion des identifiants autorisés. +* Activation à faible consommation. + +--- + +## Power Management + +Responsabilités : + +* Surveillance batterie. +* Gestion de l'énergie. +* Modes basse consommation. + +--- + +## Zigbee + +Responsabilités : + +* Communication avec Home Assistant. +* Publication des états. +* Réception des commandes. +* Gestion du réseau Zigbee. + +### Architecture cible + +OpenParcelBox communique en Zigbee. + +La conversion éventuelle vers MQTT est réalisée côté infrastructure Home Assistant (ZHA, Zigbee2MQTT ou solution équivalente). + +Le firmware ne dépend donc pas directement d'un broker MQTT. + +### Évolutions futures + +D'autres protocoles pourront être supportés ultérieurement via des variantes de firmware. + +Exemples : + +* Zigbee +* Bluetooth Low Energy + +Le choix du protocole sera effectué lors de la compilation du firmware. + +--- + +## OTA + +Responsabilités : + +* Téléchargement des mises à jour. +* Vérification d'intégrité. +* Mise à jour sécurisée. + +--- + +# Intégration Home Assistant + +Entités prévues : + +* État du verrou. +* Niveau de batterie. +* Dernière ouverture. +* État de connexion. +* Informations de diagnostic. + +Services prévus : + +* Ouverture. +* Verrouillage. +* Déverrouillage. +* Gestion des codes. + +--- + +# Sécurité + +## Principes + +* Fonctionnement local. +* Aucun service cloud obligatoire. +* Validation stricte des commandes. +* Journalisation des événements importants. + +## Protection contre les abus + +* Limitation des tentatives. +* Temporisation après échecs répétés. +* Séparation des privilèges administrateur/utilisateur. + +--- + +# Développement + +## Firmware + +Framework : + +* Zephyr RTOS + +Langage : + +* C++ + +Outils : + +* Zephyr SDK +* west +* CMake +* VSCodium +* Git +* Gitea + +--- + +# Évolutions futures + +* Gestion avancée des utilisateurs. +* Historique des événements. +* Diagnostics avancés. +* Support d'autres protocoles radio. +* Gestion de plusieurs boîtes. \ No newline at end of file diff --git a/firmware/LICENSE b/firmware/LICENSE new file mode 100644 index 0000000..a7bbb55 --- /dev/null +++ b/firmware/LICENSE @@ -0,0 +1,13 @@ +# Firmware License + +The firmware contained in this directory is licensed under: + +**GNU General Public License v3.0 or later (GPL-3.0-or-later)** + +You may obtain a copy of the license at: + +https://www.gnu.org/licenses/gpl-3.0.html + +SPDX-License-Identifier: GPL-3.0-or-later + +Copyright (c) OpenParcelBox Contributors diff --git a/firmware/README.md b/firmware/README.md new file mode 100644 index 0000000..4584f8f --- /dev/null +++ b/firmware/README.md @@ -0,0 +1,121 @@ +# Firmware OpenParcelBox + +Ce répertoire contient le firmware de l'OpenParcelBox. + +--- + +# Objectifs + +Le firmware doit permettre : + +* La gestion du clavier. +* La gestion des codes d'accès. +* Le contrôle du mécanisme de verrouillage. +* La surveillance de la batterie. +* La communication Zigbee. +* Les mises à jour OTA. +* L'intégration Home Assistant. + +--- + +# Plateforme matérielle + +## Carte principale + +* Seeed Studio XIAO BLE nRF52840 + +## Microcontrôleur + +* Nordic nRF52840 + +--- + +# Technologies utilisées + +## Framework + +Zephyr RTOS + +## Langage + +C++ + +## Outils + +* Zephyr SDK +* west +* CMake +* Ninja +* VSCodium + +--- + +# Architecture logicielle prévue + +```text +firmware +├── app +├── boards +├── modules +└── tests +``` + +--- + +# Modules + +## Core + +Initialisation et gestion du système. + +## Keypad + +Gestion du clavier 2 × 6. + +## Access Control + +Validation des codes et gestion des droits. + +## Lock Controller + +Pilotage du verrou. + +## Sensor Manager + +Lecture des capteurs. + +## Power Management + +Gestion de l'énergie et des modes basse consommation. + +## Zigbee + +Communication avec Home Assistant. + +## OTA + +Mises à jour à distance. + +--- + +# Philosophie de développement + +Le firmware doit privilégier : + +* La simplicité. +* La robustesse. +* La faible consommation. +* La maintenabilité. +* L'indépendance vis-à-vis des services cloud. + +--- + +# État actuel + +Aucun code de production n'est encore implémenté. + +Les travaux actuels concernent : + +* Le reverse engineering du matériel d'origine. +* La validation de l'architecture logicielle. +* La préparation de l'environnement Zephyr. diff --git a/firmware/app/.gitkeep b/firmware/app/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/firmware/app/CMakeLists.txt b/firmware/app/CMakeLists.txt new file mode 100644 index 0000000..e69de29 diff --git a/firmware/app/contraintes.md b/firmware/app/contraintes.md new file mode 100644 index 0000000..1256a7f --- /dev/null +++ b/firmware/app/contraintes.md @@ -0,0 +1,18 @@ +# Contraintes application + +## Technologies + +- Développement avec Flutter. +- Compatibilité Android prioritaire. +- Compatibilité iOS souhaitée mais non bloquante pour la V1. + +## Fonctionnement + +- Utilisation locale prioritaire. +- Interface simple pour les utilisateurs non techniques. + +## Fonctionnalités + +- Gestion des accès. +- Gestion des codes. +- Consultation de l'état de la boîte. \ No newline at end of file diff --git a/firmware/app/include/.gitkeep b/firmware/app/include/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/firmware/app/prj.conf b/firmware/app/prj.conf new file mode 100644 index 0000000..e69de29 diff --git a/firmware/app/src/.gitkeep b/firmware/app/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/firmware/boards/.gitkeep b/firmware/boards/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/firmware/contraintes.md b/firmware/contraintes.md new file mode 100644 index 0000000..b689cb3 --- /dev/null +++ b/firmware/contraintes.md @@ -0,0 +1,23 @@ +# Contraintes firmware + +## Architecture + +- Développement sous Zephyr. +- Code modulaire. +- Séparation claire entre logique métier, matériel et communications. + +## Consommation + +- Exploitation maximale des modes basse consommation. +- Réveil uniquement lors d'événements nécessaires. + +## Maintenance + +- Journalisation des erreurs. +- Configuration documentée. +- Procédure de mise à jour documentée. + +## Sécurité + +- Authentification des commandes. +- Stockage sécurisé des données sensibles. \ No newline at end of file diff --git a/firmware/modules/.gitkeep b/firmware/modules/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/firmware/tests/.gitkeep b/firmware/tests/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/hardware/BOM.md b/hardware/BOM.md new file mode 100644 index 0000000..1e03944 --- /dev/null +++ b/hardware/BOM.md @@ -0,0 +1,104 @@ +# Bill Of Materials (BOM) + +Cette nomenclature sera complétée progressivement au cours du reverse engineering et du développement matériel. + +--- + +# Contrôleur principal + +| Référence | Désignation | Quantité | Statut | +| ------------- | ------------------------------ | -------- | ------ | +| XIAO-NRF52840 | Seeed Studio XIAO BLE nRF52840 | 1 | Validé | + +--- + +# Éléments conservés de la Boks One + +| Désignation | Quantité | Statut | +| ------------------------- | -------- | -------------- | +| Clavier d'origine 2 × 6 | 1 | Conservé | +| Mécanisme de verrouillage | 1 | Conservé | +| Batterie d'origine | 1 | À étudier | +| Capteur d'origine | 1 | À caractériser | + +--- + +# Alimentation + +| Référence | Désignation | Quantité | Statut | +| --------- | -------------------------- | -------- | --------- | +| TBD | Circuit de mesure batterie | 1 | À définir | +| TBD | Protection alimentation | 1 | À définir | + +--- + +# Interface de programmation + +| Référence | Désignation | Quantité | Statut | +| --------- | -------------- | -------- | --------- | +| TBD | Connecteur SWD | 1 | À définir | + +--- + +# Connectique + +| Référence | Désignation | Quantité | Statut | +| --------- | ------------------- | ------------ | --------- | +| TBD | Connecteur clavier | À identifier | À définir | +| TBD | Connecteur verrou | À identifier | À définir | +| TBD | Connecteur batterie | À identifier | À définir | + +--- + +# PCB + +| Référence | Désignation | Quantité | Statut | +| ---------- | ------------------------------ | -------- | ------------- | +| OPB-PCB-V1 | Carte principale OpenParcelBox | 1 | En conception | + +--- + +# Matériel de développement disponible + +| Désignation | Statut | +| ------------------------------ | ---------- | +| Seeed Studio XIAO BLE nRF52840 | Disponible | +| Pied à coulisse | Disponible | +| Plaques PCB de prototypage | Disponible | + +--- + +# Informations à collecter lors du reverse engineering + +## Priorité haute + +* Tension batterie. +* Type de batterie. +* Brochage du clavier. +* Brochage du capteur. +* Brochage du verrou. +* Courant consommé lors de l'ouverture. + +## Priorité moyenne + +* Consommation en veille. +* Courant maximal. +* Type exact du capteur. + +## Priorité basse + +* Références détaillées des composants passifs. +* Compatibilité avec d'autres batteries. +* Optimisations mécaniques éventuelles. + +--- + +# Historique des validations + +## V0 + +* XIAO BLE nRF52840 retenu. +* Clavier d'origine conservé. +* Mécanisme de verrouillage conservé. +* Façade conservée sans modification. +* Communication Zigbee retenue pour la V1. diff --git a/hardware/LICENSE b/hardware/LICENSE new file mode 100644 index 0000000..9295710 --- /dev/null +++ b/hardware/LICENSE @@ -0,0 +1,13 @@ +OpenParcelBox Hardware + +Copyright (C) 2026 Tony + +The hardware design files contained in this project +(schematics, PCB layouts and related design files) +are licensed under the CERN Open Hardware Licence Version 2 - Strongly Reciprocal (CERN-OHL-S-2.0). + +A copy of the license is available at: + +https://ohwr.org/cern_ohl_s_v2.txt + +SPDX-License-Identifier: CERN-OHL-S-2.0 diff --git a/hardware/README.md b/hardware/README.md new file mode 100644 index 0000000..6676fb1 --- /dev/null +++ b/hardware/README.md @@ -0,0 +1,15 @@ +# Hardware + +Ce dossier contient toute la partie matérielle du projet. + +## Contenu prévu + +* Schémas KiCad +* PCB +* Fichiers Gerber +* BOM (Bill Of Materials) +* Modèles 3D +* Plans mécaniques +* Documentation de câblage + +L'objectif est de permettre la reproduction complète de la carte électronique. diff --git a/hardware/contraintes.md b/hardware/contraintes.md new file mode 100644 index 0000000..1953bbe --- /dev/null +++ b/hardware/contraintes.md @@ -0,0 +1,27 @@ +# Contraintes matérielles + +## Compatibilité Boks One V1 + +- Réutilisation du boîtier électronique d'origine. +- Réutilisation de la façade extérieure d'origine. +- Réutilisation du clavier d'origine au format 2 × 6. +- Réutilisation du logement des piles d'origine. +- Réutilisation du système de verrouillage d'origine lorsque cela est techniquement possible. +- Aucune modification irréversible de la boîte. + +## Intégration mécanique + +- Le nouveau PCB doit tenir dans le volume disponible du boîtier d'origine. +- Les points de fixation existants doivent être réutilisés lorsque cela est possible. +- Les composants doivent rester accessibles pour la maintenance. + +## Fabrication + +- Aucune pièce imprimée en 3D ne doit être obligatoire. +- Les pièces imprimées en 3D sont considérées comme optionnelles. +- Les matériaux sensibles à la chaleur (PLA) ne doivent pas être requis pour une installation extérieure. + +## Alimentation + +- Fonctionnement sur piles. +- Consommation optimisée pour maximiser l'autonomie. \ No newline at end of file diff --git a/hardware/reverse-engineering.md b/hardware/reverse-engineering.md new file mode 100644 index 0000000..e407e32 --- /dev/null +++ b/hardware/reverse-engineering.md @@ -0,0 +1,115 @@ +# Reverse Engineering Boks One + +## Objectif + +Ce document centralise toutes les informations collectées lors de l'analyse du matériel d'origine. + +Aucune hypothèse ne doit être considérée comme validée tant qu'elle n'a pas été vérifiée expérimentalement. + +--- + +# Informations générales + +| Élément | Valeur | Statut | +| -------- | ------------ | ---------- | +| Modèle | Boks One | Confirmé | +| Révision | À déterminer | En attente | + +--- + +# Batterie + +| Information | Valeur | Statut | +| ---------------- | -------- | ------------ | +| Technologie | Inconnue | À vérifier | +| Tension nominale | Inconnue | À mesurer | +| Capacité | Inconnue | À identifier | + +--- + +# Clavier + +## Configuration + +* Format vertical 2 × 6. + +## Brochage + +| Broche | Fonction | Statut | +| ------ | -------- | ------------ | +| TBD | TBD | À identifier | + +--- + +# Capteur + +## Description + +Capteur utilisé pour détecter le retour du crochet dans le mécanisme de verrouillage. + +## Technologie + +À déterminer : + +* ILS +* Hall +* Microswitch +* Autre + +--- + +# Mécanisme de verrouillage + +## Type + +À déterminer. + +## Tension de fonctionnement + +À mesurer. + +## Courant consommé + +À mesurer. + +--- + +# Connecteurs + +| Connecteur | Nombre de broches | Fonction | Statut | +| ---------- | ----------------- | -------- | ------------ | +| TBD | TBD | TBD | À identifier | + +--- + +# Mesures électriques + +| Mesure | Valeur | Date | Commentaire | +| ------ | ------ | ---- | ----------- | +| TBD | TBD | TBD | TBD | + +--- + +# Photos + +## Carte électronique + +À compléter. + +## Clavier + +À compléter. + +## Mécanisme de verrouillage + +À compléter. + +## Capteur + +À compléter. + +--- + +# Notes diverses + +Utiliser cette section pour documenter toute découverte ne trouvant pas sa place dans les sections précédentes. \ No newline at end of file diff --git a/homeassistant/README.md b/homeassistant/README.md new file mode 100644 index 0000000..48d0caa --- /dev/null +++ b/homeassistant/README.md @@ -0,0 +1,10 @@ +# Home Assistant + +Ce dossier contient les éléments permettant l'intégration avec Home Assistant : + +- Configuration ZHA +- Configuration Zigbee2MQTT +- Automatisations +- Scripts +- Tableaux de bord +- Exemples d'intégration \ No newline at end of file diff --git a/homeassistant/contraintes.md b/homeassistant/contraintes.md new file mode 100644 index 0000000..e00c261 --- /dev/null +++ b/homeassistant/contraintes.md @@ -0,0 +1,21 @@ +# Contraintes Home Assistant + +## Intégration + +- Intégration native Home Assistant. +- Installation simple. +- Configuration via l'interface Home Assistant lorsque possible. + +## Fonctionnalités + +- Création de codes temporaires. +- Création de codes permanents. +- Suppression de codes. +- Consultation de l'état de la boîte. +- Historique des événements. + +## Entités + +- Entités clairement nommées. +- Compatibilité avec les tableaux de bord Home Assistant. +- Compatibilité avec les automatisations Home Assistant. \ No newline at end of file diff --git a/images/.gitkeep b/images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/mobile-app/contraintes.md b/mobile-app/contraintes.md new file mode 100644 index 0000000..e16b7b4 --- /dev/null +++ b/mobile-app/contraintes.md @@ -0,0 +1,47 @@ +# Contraintes application + +## Technologies + +- Développement avec Flutter. +- Code compatible Android. +- Compatibilité iOS souhaitée mais non prioritaire pour la V1. +- Aucune dépendance obligatoire à un service cloud. + +## Architecture + +- Séparation claire entre interface utilisateur, logique métier et communications. +- Code modulaire et maintenable. +- Gestion centralisée de la configuration. + +## Fonctionnement + +- Fonctionnement local prioritaire. +- Communication directe avec OpenParcelBox lorsque possible. +- Dégradation propre en cas de perte de connexion. + +## Fonctionnalités V1 + +- Visualisation de l'état de la boîte. +- Gestion des codes d'accès. +- Création de codes temporaires. +- Création de codes permanents. +- Suppression des codes. +- Consultation des événements récents. + +## Expérience utilisateur + +- Interface simple pour les utilisateurs non techniques. +- Temps d'accès rapide aux fonctions courantes. +- Compatibilité smartphone et tablette. + +## Sécurité + +- Authentification obligatoire. +- Stockage sécurisé des données sensibles. +- Aucune donnée utilisateur transmise à un service tiers. + +## Maintenance + +- Journalisation des erreurs. +- Configuration documentée. +- Procédure de compilation documentée. \ No newline at end of file