Projet : airbnb_manda — Module Odoo Gestion Accès UniFi

J’ai automatisé la gestion des accès d’une résidence hôtelière avec Odoo 19 et l’API UniFi Access Hub. Plus besoin de remettre des clés physiques : chaque client reçoit automatiquement son code PIN par email à la confirmation de sa réservation. Voici comment j’ai construit ce système.

Module Odoo Gestion Accès UniFi — Vue réservation

💡 Le problème

MandaBar, une résidence hôtelière à Marche-en-Famenne (Belgique), utilisait un système de clés physiques : remettre les clés, récupérer les clés, gérer les doublons, appeler la ménagère… Un processus manuel, source d’erreurs et peu scalable. L’objectif : tout automatiser via le logiciel de gestion existant.

✨ La solution : Module Odoo 19 + API UniFi Access Hub

J’ai développé un module Python sur Odoo 19 qui automatise entièrement le cycle d’accès des clients :

  • 🔐 Génération automatique d’un code PIN à chaque confirmation de réservation
  • 📧 Email automatique au client avec son PIN, numéro de chambre et dates de séjour
  • 🔓 Création de l’accès UniFi au moment du check-in
  • 🔒 Révocation automatique de l’accès au check-out
  • 🧹 Déclenchement automatique d’une tâche ménage après chaque départ
  • 📊 Historique complet des accès et des tâches dans Odoo

🎥 Démonstration vidéo

Avant de rentrer dans les détails techniques, voici une démonstration du déverrouillage en action :

🏗️ Comment ça fonctionne — Le workflow complet

Le système repose sur 4 étapes automatisées qui suivent le cycle de vie d’une réservation :

1️⃣ Brouillon

Création de la réservation dans Odoo. Saisie du client, de la chambre et des dates. Le système prépare l’accès UniFi.

2️⃣ Confirmation

Un code PIN unique est généré automatiquement et envoyé par email au client avec toutes ses informations de séjour.

3️⃣ Check-in

L’accès UniFi est créé sur le hub. Le client peut désormais utiliser son code PIN pour accéder à sa chambre.

4️⃣ Check-out

L’accès est révoqué automatiquement. Une tâche ménage est créée et assignée. Prêt pour le prochain client.

📊 Architecture du système

┌──────────────┐     SMTP      ┌──────────────┐
│   Client     │ <──────────── │   Odoo 19    │
│   (Email)    │               │   Python     │
└──────────────┘               └──────┬───────┘
                                      │ API REST
                                      ▼
┌──────────────┐   SSH Tunnel  ┌──────────────┐    LAN      ┌─────────────────┐
│   VPS OVH    │ <──────────── │ Raspberry Pi │ ──────────> │ UniFi Access Hub│
│ (Internet)   │               │ Flask Proxy  │             │ 172.18.x.x  │
└──────────────┘               └──────────────┘             └─────────────────┘
                                                                      │
                                                              ┌───────▼───────┐
                                                              │ Serrures IoT  │
                                                              │ (chambres)    │
                                                              └───────────────┘
  

📸 Démonstration pas à pas

Voici le système en action, de la création de la réservation à la réception du code PIN par le client :

Étape 1 Création de la réservation (brouillon)

Vue brouillon d'une réservation dans Odoo

Vue brouillon — saisie du client, de la chambre et des dates. Le champ « Code PIN » est vide à ce stade.

Étape 2 Confirmation — PIN généré et email envoyé automatiquement

Réservation confirmée avec code PIN généré automatiquement

Réservation confirmée — le code PIN est généré et l’email part automatiquement au client.

Étape 3 Check-out — révocation de l’accès

Check-out avec révocation automatique de l'accès UniFi

Au check-out, l’accès UniFi est révoqué et une tâche ménage est créée automatiquement.

Résultat Email reçu par le client

Email reçu par le client avec informations de séjour

Email avec numéro de chambre et informations d’accès

Code PIN unique affiché dans l'email client

Code PIN unique valide uniquement entre les dates de séjour

💻 Stack technique

🐍 Python 3.12 ⚙️ Odoo 19 🥧 Raspberry Pi 🌐 API REST UniFi 🐧 Linux / SSH 🌶️ Flask Proxy ☁️ VPS OVH 📧 SMTP Auto

💭 Retour d’expérience

Ce projet de stage m’a confronté à des défis techniques réels en conditions de production :

✅ Ce que j’ai appris

  • Intégration IT/OT : faire communiquer un logiciel de gestion avec des équipements physiques
  • Résolution de problèmes réseau : segmentation LAN/internet, tunnels SSH sécurisés
  • Développement de modules Odoo : modèles, vues, workflows, actions automatiques
  • Déploiement et maintenance en production sur VPS Linux

⚠️ Défis rencontrés

  • Communication VPS (internet) ↔ hub UniFi (réseau local) → solution : proxy Flask + tunnel SSH inverse
  • Migration compatibilité Odoo 17 → 19 : syntaxe XML dépréciée, vues, champs renommés
  • Fiabilité du tunnel SSH : configuration systemd pour reconnexion automatique

🚀 Évolutions prévues

  • 📱 Application mobile pour les ménagères avec notifications push
  • 🔋 Monitoring en temps réel de l’état des serrures et des connexions
  • 📊 Dashboard analytics : statistiques d’utilisation et rapports
  • 🔔 Alertes automatiques en cas d’anomalie réseau ou d’accès non autorisé

📚 Code source & Documentation

Le code source complet et la documentation technique sont disponibles sur GitHub :

💬 Questions fréquentes

Quel est le matériel nécessaire ?

Un serveur Odoo 19, un hub UniFi Access avec ses serrures connectées, et un Raspberry Pi sur le réseau local pour servir de proxy. Un VPS pour héberger Odoo en production.

Le système fonctionne-t-il si Internet tombe ?

Le hub UniFi Access gère les accès localement. Les PIN déjà créés continuent de fonctionner même sans connexion internet. Seule la génération de nouveaux accès nécessite la connexion au VPS.

Peut-on l’adapter à d’autres systèmes de contrôle d’accès ?

Oui ! L’architecture est modulaire. Il suffit de remplacer le module d’appel API UniFi par un autre connecteur (Kisi, Salto, Dormakaba…). Le cœur Odoo (workflow réservation + email) reste identique.

C’est un projet de stage ou un produit commercial ?

C’est mon projet de stage de fin d’études (Bachelor Informatique Industrielle, Liège), déployé en production réelle chez MandaBar. Le code est open source sur GitHub.

🎯 Intéressé par ce projet ?

Le code source est disponible gratuitement sur GitHub. N’hésitez pas à ouvrir une issue ou à me contacter pour toute question technique !

⭐ Si ce projet vous plaît, mettez une étoile sur GitHub ! ⭐

📢 Partagez cet article si vous l’avez trouvé intéressant !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut