Projet réalisé en binôme entre Alexendros Chrissantakis et Martin Stordeur.
TFE — Inraci

Objectif général

ACC sert de passerelle entre le boîtier médical et l'interface utilisateur / la base de données : recevoir, stocker, analyser et relayer en temps réel les données cardiaques et les événements de chute.

  • Surveillance continue des signes vitaux (rythme cardiaque, etc.).
  • Détection de chute — envoi d'une alerte aux proches en cas d'incident.
  • Archivage sécurisé des données pour consultation ultérieure.

Fonctionnalités clés

  • Réception BLE / Wi‑Fi des données depuis le boîtier médical.
  • Traitement en temps réel et détection d'anomalies (tachycardie, bradycardie, chute).
  • Notifications (SMS / push / e‑mail) vers les proches.
  • Interface web mobile‑first pour consulter l'état et l'historique.
  • Base de données locale (SQLite) + possibilité de serveur distant.
  • Journalisation et gestion des accès (sécurité / chiffrement).

Matériel

Raspberry Pi 4 Module Bluetooth / BLE Wi‑Fi / Ethernet / 4G (selon disponibilité) Alimentation stable + batterie de secours Serveur (achat ou prêt de l'école)

Langages & logiciels

Python 13 HTML5 CSS SQLite
IDE: VS Code openvpn Proxmox bcrypt (gestion des mots de passe) Outils de contrôle / audit des données

Architecture (vue simplifiée)

Boîtier médical (BLE) → Raspberry Pi (passerelle) → DB locale (SQLite) 
          → Serveur distant / Interface web         
Notifications: Serveur → Proches (SMS / e‑mail / push)

Architecture(classique)

Architecture du système ACC

« Next steps » — Étapes suivantes

  1. Prototyper la communication BLE entre le boîtier et le Raspberry Pi.
  2. Développer le module de détection de chute et règles d'alerte.
  3. Construire l'interface utilisateur (mobile‑first) et les API.
  4. Tests terrain et validation avec utilisateurs cibles (personnes âgées / proches).

Équipe

Équipe : Martin Stordeur & Alexendros Chrissantakis.

Timeline du Projet TFE

14/10/2025 — Séance

Tâches réalisées

  • Finalisation des liens principaux sur stordeur-martin.be.
  • Démarrage de la configuration CLI du serveur Windows sous VMWare en vue d’une exportation vers Proxmox (déplacement à chaud).
  • Corrections HTML diverses.

Difficultés rencontrées

  • Accès FileZilla via WLS instable.

Solutions

  • Diagnostic en cours pour stabiliser la connexion SFTP depuis WLS.
Leçon du 14/10/2025

04/11/2025 — Séance

Tâches réalisées

  • Ajout de l’illustration d’architecture réseau sur l’hébergement LWS.
Leçon du 04/11/2025

17-18/11/2025 — Travail à domicile

Tâches réalisées

  • Réinstallation complète de l’environnement : Docker, Docker Compose et openssh-server (corrections des dépôts apt et du fichier docker.list).
  • Diagnostic et réparation de la VM après crash (fsck en mode recovery).
  • Mise en place d’une stack Docker fiable via SFTP : création d’un docker-compose.yml, déploiement d’OpenVPN, MySQL, Netdata et Heimdall.
  • Définition d’une stratégie réseau avancée (Plan B) : abandon d’AdGuard DNS, adoption mDNS (Avahi), ajout d’un reverse proxy (Nginx Proxy Manager) et publication des services .local.
  • Configuration des services : sous-domaine vpn.stordeur-martin.be, initialisation d’OpenVPN (CA), paramétrage de Heimdall et diagnostic de Netdata.

Difficultés rencontrées

  • Serveur arrêté la nuit empêchant une solution DNS H24.
  • Blocages apt dus à des fautes dans docker.list.
  • Erreurs YAML lors des copier-coller du docker-compose.yml depuis le terminal.
  • Permissions SFTP insuffisantes dans /srv/docker-data.

Solutions / Plan d’action

  • Utilisation d’Avahi + Nginx Proxy Manager pour simplifier l’accès aux services sans ports.
  • Transfert SFTP en deux temps pour contourner les droits d’écriture.
  • Prochaines étapes : configurer les Proxy Hosts (heimdall.local, netdata.local, proxmox.local), tester l’accès sans port, attendre le technicien VOO pour la redirection UDP 1194, puis valider la connexion OpenVPN externe.
Travail maison — 17 & 18/11/2025

18/11/2025 — Séance

Tâches réalisées

  • Correction du fichier d’état d’avancement.
  • Mise en place de la timeline sur stordeur-martin.be.
  • Refonte de la topologie réseau domestique via Lucidchart.
Topologie réseau — séance du 18/11/2025
Leçon du 18/11/2025

25/11/2025 — Séance

Tâches réalisées

  • Déploiement serveur : installation d’une VM Ubuntu sur Proxmox, mise en place de Docker + Docker Compose, déploiement du conteneur OpenVPN AS.
  • Réseau WAN/LAN : migration VOO → Orange, désactivation du CGNAT pour une IP publique dédiée, configuration du routeur Xiaomi en IP statique + DMZ depuis la box Orange, redirections de ports UDP 1194 et TCP 943.
  • DNS : mise à jour de la zone LWS pour pointer vpn.stordeur-martin.be vers la nouvelle IP publique Orange.
  • VPN & sécurité : paramétrage d’OpenVPN AS (hostname + comptes), ouverture UFW des ports 1194/943/443, activation du routage NAT pour l’accès aux périphériques LAN.
  • Changement d’IPv4 interne : 192.168.31.247/24 → 192.168.31.18/24.

Difficultés rencontrées

  • Blocage CGNAT Orange empêchant l’accès externe — résolu en activant l’IP publique dans l’interface du modem.
  • Restrictions UFW après réinstallation — résolues par l’ajout de règles d’autorisation explicites.
  • Accès LAN via VPN impossible — résolu en activant le mode NAT dans les contrôles d’accès OpenVPN AS.

Plan d’action (prochaine leçon)

  • Finaliser le tableau de bord Heimdall.
  • Mettre en place la supervision Netdata accessible via le VPN.
Leçon du 25/11/2025

03/12/2025 — Séance

Tâches réalisées

  • Résolution de l’accès SSH : diagnostic du “Connection refused” (service SSH, règles UFW) et validation de l’adresse locale 192.168.31.18.
  • Déploiement OpenVPN AS : correction de la commande docker run (volume local ~/openvpn-data) et lancement avec CAP_NET_ADMIN.
  • Configuration de l’interface OpenVPN : accès à :943/admin, création d’un utilisateur et définition du mot de passe client.
  • DNS LWS : ajout d’un enregistrement A pointant vpn.stordeur-martin.be vers l’IP publique, mise à jour du hostname dans OpenVPN AS.

Difficultés rencontrées

  • SSH bloqué (service ou pare-feu) — solution : redémarrage du service et ajustement UFW.
  • Erreur de volume Docker (-v <path to data>) — solution : création d’un dossier persistant dans le home.
  • Confusion IP locale vs publique — nécessité de distinguer 192.168.31.18 (LAN) et l’IP WAN pour la configuration DNS.
Leçon du 03/12/2025

04/12/2025 — Séance

Tâches réalisées

  • Mise à jour de l’infrastructure réseau côté FAI (mode bridge).
  • Mise en place d’un pare-feu sur le routeur XIAOMI-1.
  • Redirection de ports pour les API.
Topologie réseau — séance du 04/12/2025
Leçon du 04/12/2025

10/12/2025 — Travail à domicile

Tâches réalisées

  • Refonte de l’architecture Docker : suppression du conteneur Nginx Proxy Manager (simplification de la stack).
  • Exposition directe des services dans docker-compose.yml (Heimdall :8080, PhpMyAdmin :8081, Netdata :19999).
  • Fiabilisation : ajout de restart: always sur tous les services pour assurer le redémarrage après coupure de courant.
  • Configuration du système en mode « headless » : correction du problème SSH au démarrage via nmcli et passage de la connexion réseau en mode « système » (démarrage avant login utilisateur).
  • Sécurité & accès : mise à jour des règles UFW pour ouvrir les ports 8080, 8081 et 19999, validation de l’accès à la base de données via PhpMyAdmin.
  • Matériel : étude des besoins pour l’armoire serveur et sélection d’un rack mural 12U 600mm avec étagères (adapté au serveur HP actuel).

Difficultés rencontrées

  • Accès SSH au boot : le serveur était inaccessible après redémarrage tant qu’aucune session locale n’était ouverte (Wi‑Fi/Ethernet dépendant du login utilisateur). Solution : utilisation de nmcli connection modify pour activer autoconnect et les permissions « » (tous utilisateurs).
  • Services web inaccessibles après suppression du proxy : les sites ne répondaient plus. Solution : diagnostic du pare‑feu UFW et ouverture manuelle des ports non standards via ufw allow.
Travail à domicile — 10/12/2025

15/12/2025 — Travail à domicile

Tâches réalisées

  • Intégration du Wake‑on‑LAN (WoL) dans Homepage : ajout d’un bouton pour démarrer le serveur HP ProLiant à distance.
  • Adaptation de la configuration Homepage : remplacement du widget « HP iLO » (non supporté) par le widget standard wol ciblant l’adresse MAC de l’interface Proxmox et le widget Proxmox pour le monitoring.
  • Réparation critique du conteneur VPN (WireGuard / wg‑easy) : diagnostic du bootloop et remplacement du mot de passe en clair par un hash bcrypt.
  • Correction de la syntaxe YAML dans docker-compose.yml : échappement des caractères spéciaux du hash de mot de passe ($$ au lieu de $).
  • Stabilisation du service DNS (AdGuard Home) : identification d’un conflit de port avec systemd-resolved sur le port 53 et désactivation de ce service pour réserver le port à AdGuard.

Difficultés rencontrées

  • Widget Homepage incompatible : le widget spécifique « HP iLO » n’existe pas encore, provoquant des erreurs au chargement. Solution : combinaison de widgets « Ping » (état iLO), « Proxmox Stats » (performances) et « WoL » (allumage).
  • Syntaxe Docker Compose : le hash de mot de passe WireGuard contenant des $ était interprété comme des variables vides par Docker, corrompant l’authentification. Solution : doubler les dollars ($$) dans le fichier.
  • Conflit DNS / port 53 : le Raspberry Pi perdait la connexion et les tunnels VPN car AdGuard redémarrait en boucle. Solution : sudo systemctl stop systemd-resolved et nettoyage de /etc/resolv.conf.

Plan d’action (prochaine leçon)

  • Valider définitivement la connexion WireGuard en 4G (vérifier si le CGNAT de l’opérateur pose encore problème après la réparation DNS).
  • Si le blocage opérateur persiste (CGNAT) : basculer vers Tailscale (solution sans redirection de ports).
  • Finaliser l’organisation du dashboard Homepage maintenant que les services sont stabilisés.
Travail à domicile — 15/12/2025