Initialisation depot
This commit is contained in:
23
Wiki-print/Dockerfile
Normal file
23
Wiki-print/Dockerfile
Normal file
@@ -0,0 +1,23 @@
|
||||
|
||||
FROM python:3.11-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
|
||||
|
||||
# Install pandoc, wget, and Poetry (SVG support is native in pandoc/LibreOffice)
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y pandoc wget \
|
||||
&& pip install poetry \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
COPY pyproject.toml ./
|
||||
RUN poetry install --no-root
|
||||
|
||||
COPY main.py ./
|
||||
|
||||
VOLUME /app/data
|
||||
|
||||
|
||||
CMD ["poetry", "run", "python", "main.py"]
|
||||
16
Wiki-print/Dockerfile.drawio
Normal file
16
Wiki-print/Dockerfile.drawio
Normal file
@@ -0,0 +1,16 @@
|
||||
FROM debian:bullseye-slim
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y wget libgtk-3-0 libxss1 libasound2 libnss3 libx11-xcb1 libgbm1 \
|
||||
&& wget -O /tmp/drawio.deb https://github.com/jgraph/drawio-desktop/releases/download/v28.0.6/drawio-amd64-28.0.6.deb \
|
||||
&& apt-get install -y /tmp/drawio.deb \
|
||||
&& rm /tmp/drawio.deb \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create drawio user
|
||||
RUN useradd -m drawio
|
||||
|
||||
# USER drawio
|
||||
|
||||
ENTRYPOINT ["drawio"]
|
||||
902
Wiki-print/data/article.md
Normal file
902
Wiki-print/data/article.md
Normal file
File diff suppressed because one or more lines are too long
898
Wiki-print/data/article_with_svgs.md
Normal file
898
Wiki-print/data/article_with_svgs.md
Normal file
@@ -0,0 +1,898 @@
|
||||
# 🛰️ MKII / Magnetometer
|
||||
|
||||
MKii est un dispositif de mesure magnétique, il est constitué de 7 capteurs immergés et reliés via un cable de 300m à une application Magnetometer chargée de l'acquisiion des données.
|
||||
|
||||

|
||||
|
||||
C'est une application web moderne et responsive pour la visualisation de données de capteurs en temps réel avec des coordonnées X, Y, Z. Elle comprend :
|
||||
|
||||
- un logiciel d'acquisition
|
||||
- une interface IHM
|
||||
- un service windows pour synchroniser l'heure avec un GPS
|
||||
- un simulateur Python
|
||||
- un utilitaire pour lister les ports COM disponibles
|
||||
|
||||
## 📋 Dépôt Source
|
||||
|
||||
- Capteurs : [Sources]()
|
||||
- Partie IHM : [Sources](https://gitea.aipice.local/HEXA-H/Mkii-IHM)
|
||||
- Acquisition : [Sources](https://gitea.aipice.local/HEXA-H/Hdlc)
|
||||
- Service GPS : [Sources](https://gitea.aipice.local/HEXA-H/GpsTimeSvc)
|
||||
- Simulateur : [Sources]()
|
||||
- Liste COM : [Sources]()
|
||||
|
||||
## ✨ Fonctionnalités
|
||||
|
||||
### Caractéristiques principales
|
||||
- **Graphiques en Temps Réel** : Visualisation des données issue des capteurs en direct.
|
||||
- **Graphiques Intelligent** : graphiques dynamique avec capacités de zoom, survol des valeurs, ...
|
||||
- **Support Multi-capteurs** : affichage de 7 capteurs simultanément
|
||||
- **Vues Individuelles/Combinées** : Affichage de l'ensemble des capteurs ainsi que le détail pour chacun
|
||||
- **Contrôles d'Échelle et Décalage** : Ajustement en temps réel des valeurs d'échelle et de décalage des capteurs
|
||||
- **Synchronisation de l'heure**: synchronisation de l'heure sur une référence fiable (GPS)
|
||||
|
||||
### Simulateur
|
||||
|
||||
Programme créé pour simuler le fonctionnement des la partie acquisition.
|
||||
- **Simulateur Toujours Actif** : Le programme fonctionne en continu en arrière-plan
|
||||
- **Contrôle d'Acquisition Instantané** : Réagit aux ordres de démarrage / arret
|
||||
- **Communication d'État YAML** : Mises à jour d'état en temps réel via fichier `status.yaml`
|
||||
- **Données** : Génère les données pour tous les capteurs configurés indépendamment de l'état activé
|
||||
|
||||
### Interface Utilisateur IHM
|
||||
- **Interface Modale** : Sélection des capteurs, intégration de fichiers et paramètres dans des popups (modal box)
|
||||
- **Suivit d'acquisition** : rafraichissment des graphiques uniquement en mode acquisition
|
||||
- **État en Temps Réel** : Affichage en direct de l'état de l'acquisition et du nombre d'échantillons
|
||||
- **Design Responsive** : Interface basée sur Bootstrap.
|
||||
|
||||
### Magnetometer
|
||||
- **Simulateur Continu** : Génération de données de capteurs basée sur Python avec contrôle instantané
|
||||
- **Lecteur CSV Magnétomètre** : Importer et relire des fichiers de données historiques
|
||||
- **Lancement d'Application Externe** : Démarrer des applications externes et lire leurs fichiers de données
|
||||
- **Entrée Temps Réel** : Prêt pour l'intégration de matériel de capteurs en direct
|
||||
|
||||
### Gestion de Configuration
|
||||
- **Sauvegardes Automatiques** : Sauvegardes de configuration horodatées.
|
||||
- **Mappage Dynamique des Capteurs** : Configurer les capteurs sans modifications de code
|
||||
|
||||
### Gestion des Données
|
||||
- **Fichiers CSV** : Chaque acquisition crée des fichiers de données horodatés
|
||||
- **Navigateur de Fichiers Historiques** : Charge et analyse les sessions de données précédentes
|
||||
|
||||
### Déploiement de Production
|
||||
- **PHP 8.2/Apache** : Serveur web professionnel avec configuration personnalisée
|
||||
- **Python 3.12** : pour la partie acquisition et simulateur
|
||||
- **Cpp** : pour certains outils anexes (synchro GPS, ...)
|
||||
|
||||
## 🚀 Démarrage Rapide
|
||||
|
||||
### Déploiement de Production (Docker)
|
||||
|
||||
1. **Installation**
|
||||
|
||||
2. **Accéder à l'Application :**
|
||||
- Interface Web : `http://localhost`
|
||||
|
||||
### Configuration de Développement
|
||||
|
||||
1. **Installer les Dépendances Python :**
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
2. **Démarrer le Simulateur Continu :**
|
||||
```bash
|
||||
python3 sensor_simulator.py --rate 10
|
||||
```
|
||||
|
||||
3. **Démarrer l'Application :**
|
||||
```bash
|
||||
cd setup && ./startup.sh
|
||||
```
|
||||
|
||||
4. **Démarrer le Simulateur de Capteurs :**
|
||||
```bash
|
||||
# Démarrage de base (contrôle manuel via interface web)
|
||||
./start_simulator.sh
|
||||
|
||||
# Démarrage automatique avec projet et campagne
|
||||
./start_simulator.sh --project test_project --campaign demo_run
|
||||
```
|
||||
|
||||
5. **Contrôler l'Acquisition :**
|
||||
- Interface Web : Utiliser les contrôles modaux ou l'interface principale
|
||||
- CLI : `python3 simulator_control.py start --project monproject --campaign test`
|
||||
|
||||
## 🎮 Contrôle de l'acquisition / du simulateur
|
||||
|
||||
### Communication par Fichier d'État
|
||||
|
||||
L'IHM et Magnetometer.exe lisent régulièrement le fichier `config/status.yaml`, la communication se fait au travers de ce fichier.
|
||||
|
||||
```yaml
|
||||
acquisition:
|
||||
campaign: _
|
||||
commands: []
|
||||
current_file: _
|
||||
project: _
|
||||
sample_count: 0
|
||||
status: Stopped
|
||||
```
|
||||
|
||||
### Démarrage de l'application
|
||||
|
||||
Magnetometer.exe modifie le champs `status:` lors de l'initialisation des capteurs. Quand les capteurs sont correctement initialisés, status prend la valeur `status: Ready`
|
||||
|
||||
### Lancement d'une acquisition
|
||||
|
||||
L'IHM place dans status.yaml, les informations nécessaires :
|
||||
|
||||
```yaml
|
||||
...
|
||||
commands:
|
||||
- type: start
|
||||
project: <nom projet>
|
||||
campaign: <nom mesure>
|
||||
...
|
||||
```
|
||||
|
||||
Le programme Magnetometer.exe 'voit' cette demande et déclanche la lecture des capteurs, il vide le champs 'commands', puis met à jour les informations à transmettre à l'IHM
|
||||
|
||||
```yaml
|
||||
acquisition:
|
||||
campaign: <nom mesure>
|
||||
commands: []
|
||||
current_file: MAGNETOMETER_<timestamp>_<nom projet>_<nom mesure>.csv
|
||||
project: <nom projet>
|
||||
sample_count: <nb mesures effectuées>
|
||||
status: Running
|
||||
```
|
||||
|
||||
### Arret d'une acquisition
|
||||
|
||||
L'IHM place dans status.yaml, les informations nécessaires :
|
||||
|
||||
```yaml
|
||||
...
|
||||
commands:
|
||||
- type: stop
|
||||
...
|
||||
```
|
||||
|
||||
Le programme Magnetometer.exe 'voit' cette demande et arrete la lecture des capteurs, il vide le champs 'commands', puis met à jour les informations.
|
||||
|
||||
```yaml
|
||||
acquisition:
|
||||
campaign: -
|
||||
commands: []
|
||||
current_file: -
|
||||
project: -
|
||||
sample_count: 0
|
||||
status: Idle
|
||||
```
|
||||
|
||||
### Arret de magnetometer.exe
|
||||
|
||||
Le programme Magnetometer.exe met à jour les informations comme suit :
|
||||
|
||||
```yaml
|
||||
acquisition:
|
||||
campaign: -
|
||||
commands: []
|
||||
current_file: -
|
||||
project: -
|
||||
sample_count: 0
|
||||
status: Not Running
|
||||
```
|
||||
|
||||
## 📁 Fichiers de Données
|
||||
|
||||
### Génération CSV Automatique
|
||||
- **Basé sur Session** : Chaque acquisition crée un nouveau fichier horodaté
|
||||
- **Format** : `SENSOR_YYYY-MM-DD_HH-MM-SS_projet_campagne.csv`
|
||||
- **Localisation** : Dossier `c:/Mkii/data/`
|
||||
- **En-têtes** : Timestamp, Time_s, Bx, By, Bz, Temperature, Angle_X, Angle_Y, Angle_Z
|
||||
|
||||
### Accès aux Données Historiques
|
||||
- **Navigateur de Fichiers** : Interface modale pour la sélection de fichiers historiques
|
||||
- **Lecture** : Lecture en temps réel des données historiques
|
||||
- **Importation** : Télécharger des fichiers CSV externes pour analyse
|
||||
|
||||
## 🏗️ Architecture
|
||||
|
||||
### Composants du Système
|
||||
|
||||
Le diagramme suivant représente le principe de fonctionnement de l'application.
|
||||
Nous retrouvons les deux processus IHM et Magnetometer.exe qui sont deux applications autonomes. Elles échangent leurs informations au travers du fichier `c:/Mkii/config/status.yaml`
|
||||
|
||||

|
||||
|
||||
### Prérequis
|
||||
|
||||
- La partie IHM est concue autour d'une page Web, il faut en conséquence que le port 80 soit disponible sur la machine.
|
||||
|
||||
|
||||
### Points d'Accès
|
||||
- 📊 **Ecran Principal** : http://localhost
|
||||
- ⚙️ **Barre des tâches** : 🧲 click droit
|
||||
|
||||
## 📁 Structure des Fichiers
|
||||
|
||||
### Format de Fichier
|
||||
|
||||
Les fichiers CSV de magnétomètre ont la structure suivante :
|
||||
- **Valeurs séparées par point-virgule** (`;`)
|
||||
- **6 capteurs maximum** (Capteur 1-6)
|
||||
- **Colonnes de données par capteur** :
|
||||
- `Horodatage` - Horodatage Unix
|
||||
- `Bx (nT)` - Champ magnétique axe X (nanotesla)
|
||||
- `By (nT)` - Champ magnétique axe Y (nanotesla)
|
||||
- `Bz (nT)` - Champ magnétique axe Z (nanotesla)
|
||||
- `P (Bar)` - Pression (bar)
|
||||
- `Temperature` - Température (°C)
|
||||
- `Angle X/Y/Z` - Angles d'orientation
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
### Configuration des Capteurs
|
||||
|
||||
L'édition des capteurs peut être réalisée directement dans l'interface web :
|
||||
|
||||
```yaml
|
||||
sensors:
|
||||
sensor_1:
|
||||
id: 1
|
||||
name: "Accéléromètre Avant"
|
||||
description: "Capteur accéléromètre panneau avant"
|
||||
serial: "HEXAH-024545-001"
|
||||
enabled: true
|
||||
color:
|
||||
x: "#FF6384" # Couleur axe X
|
||||
y: "#36A2EB" # Couleur axe Y
|
||||
z: "#4BC0C0" # Couleur axe Z
|
||||
default_scale:
|
||||
x: 1.0
|
||||
y: 1.0
|
||||
z: 1.0
|
||||
default_offset:
|
||||
x: 0.0
|
||||
y: 0.0
|
||||
z: 0.0
|
||||
units: "g"
|
||||
location: "Panneau Avant"
|
||||
```
|
||||
|
||||
### Paramètres d'Affichage
|
||||
|
||||
```yaml
|
||||
display:
|
||||
max_sensors_displayed: 12 # Capteurs maximum à afficher (1-12)
|
||||
default_time_window: 30 # secondes
|
||||
default_update_rate: 100 # millisecondes (10 Hz)
|
||||
chart_height: 300 # pixels
|
||||
show_legend: true
|
||||
show_grid: true
|
||||
```
|
||||
|
||||
# 📊 Guide d'Utilisation
|
||||
|
||||
### Tableau de Bord Principal
|
||||
|
||||
#### Sources de Données
|
||||
1. **Simulation de Capteurs** : Générateur de données intégré avec modes multiples
|
||||
- Réaliste : Simule des données réelles d'accéléromètre
|
||||
- Onde Sinusoïdale : Motifs d'ondes sinusoïdales mathématiques
|
||||
- Aléatoire : Données aléatoires dans des plages spécifiées
|
||||
- Zéro : Données plates pour tests
|
||||
|
||||
## 🎛️ Interface Utilisateur
|
||||
|
||||
### Tableau de Bord Principal
|
||||
- **Graphiques Temps Réel** : Visualisation de données de capteurs en direct avec contrôle de streaming automatique
|
||||
- **Panneau de Contrôle** : Démarrer/arrêter l'acquisition de données avec réponse instantanée
|
||||
- **Affichage d'État** : État du simulateur en temps réel, nombre d'échantillons et état d'acquisition
|
||||
- **Contrôles Modaux** : Interface propre avec dialogues modaux pour fonctionnalités avancées
|
||||
|
||||
### Composants Interface Modale
|
||||
|
||||
#### 📡 Modale de Sélection de Capteurs
|
||||
- **Liste Dynamique de Capteurs** : Choisir quels capteurs afficher
|
||||
- **Configuration Temps Réel** : Les changements s'appliquent immédiatement aux graphiques
|
||||
- **Gestion des Capteurs** : Activer/désactiver les capteurs sans rechargement de page
|
||||
|
||||
#### 📂 Modale d'Intégration de Fichiers
|
||||
- **Lancement d'Application Externe** : Démarrer des applications externes avec paramètres projet/campagne
|
||||
- **Navigateur de Fichiers Historiques** : Parcourir et charger les sessions de données précédentes
|
||||
- **Téléchargement de Fichier** : Importation manuelle de fichiers CSV pour analyse
|
||||
- **Contrôles de Lecture** : Lecture temps réel avec contrôle de vitesse (0.5x à 5x)
|
||||
|
||||
#### ⚙️ Modale de Paramètres de Capteurs
|
||||
- **Contrôles Échelle/Décalage** : Ajustement de données temps réel par axe
|
||||
- **Configuration de Graphique** : Options d'affichage et fenêtres temporelles
|
||||
- **Exportation de Données** : Exportation CSV avec gestion de session
|
||||
|
||||
### Contrôle d'Acquisition
|
||||
- **Streaming de Graphiques Intelligent** : Les graphiques se mettent automatiquement en pause quand aucune acquisition
|
||||
- **Réponse Instantanée** : Démarrer/arrêter l'acquisition sans délais de redémarrage de processus
|
||||
- **Indicateurs d'État** : Retour visuel pour l'état d'acquisition et l'état du simulateur
|
||||
- **Suivi de Progression** : Nombres d'échantillons temps réel et informations de fichier de données
|
||||
|
||||
## 🔧 Gestion de Configuration
|
||||
|
||||
### Système de Configuration YAML
|
||||
Éditer la configuration à `/config.html` ou directement dans `config/config.yaml` :
|
||||
|
||||
```yaml
|
||||
sensors:
|
||||
sensor_1:
|
||||
id: 1
|
||||
name: "Magnétomètre X"
|
||||
description: "Magnétomètre primaire axe X"
|
||||
serial: "HEXAH-024545-001"
|
||||
enabled: true
|
||||
color:
|
||||
x: "#FF6384"
|
||||
y: "#36A2EB"
|
||||
z: "#4BC0C0"
|
||||
units: "nT"
|
||||
location: "Position Avant"
|
||||
```
|
||||
|
||||
### Traitement des Données
|
||||
- **Conversion d'Horodatage** : Horodatages Unix convertis en objets Date JavaScript
|
||||
- **Données de Champ Magnétique** : Valeurs Bx, By, Bz en nanotesla (nT) → Visualisation graphique
|
||||
- **Données Environnementales** : Température en °C, Pression en Bar
|
||||
- **Données d'Angle** : Angles format IEEE 754 automatiquement convertis en degrés
|
||||
- **Taux Temps Réel** : Lecture de données à 10Hz (configurable)
|
||||
- **Mises à Jour Statiques** : Température et angles se rafraîchissent toutes les 5 secondes
|
||||
|
||||
### Fonctionnalités d'Intégration
|
||||
- **Mappage Automatique de Capteurs** : Capteurs de fichier (Capteur 1-6) → Capteurs d'application (sensor_1-6)
|
||||
- **Respect de Configuration** : Affiche seulement les capteurs activés
|
||||
- **Suivi de Progression** : Barre de progression visuelle avec capacité de navigation
|
||||
- **Contrôle de Vitesse** : Ajuster la lecture de 0.5x à 5x vitesse
|
||||
- **Gestion d'Erreurs** : Rapports d'erreurs complets et récupération
|
||||
|
||||
## <20> Système de Gestion d'État
|
||||
|
||||
L'application utilise `config/status.yaml` pour la communication en temps réel entre les composants :
|
||||
|
||||
```yaml
|
||||
app:
|
||||
mode: development # Mode application : development|production
|
||||
test_trigger: false # Indicateur de déclenchement de test
|
||||
|
||||
acquisition:
|
||||
type: stop # Opération courante : start|stop
|
||||
current_file: null # Nom du fichier de données actif
|
||||
mode: realistic # Mode simulation : realistic|sine|random|step|vibration
|
||||
project: test_project # Nom du projet de collecte de données
|
||||
campaign: demo_run # Nom de la campagne de collecte de données
|
||||
running: false # État d'acquisition
|
||||
sample_count: 0 # Nombre d'échantillons collectés
|
||||
|
||||
simulator:
|
||||
commands: [] # File d'attente des commandes en attente
|
||||
```
|
||||
|
||||
### Modes d'Application
|
||||
|
||||
- **`production`** : Mode d'opération standard
|
||||
- Contrôles de test cachés dans l'interface
|
||||
- Optimisé pour la collecte de données
|
||||
- Mode par défaut pour le déploiement
|
||||
|
||||
- **`development`** : Mode de développement amélioré
|
||||
- Contrôles de test visibles dans le tableau de bord
|
||||
- Bouton "Exécuter Tests" activé
|
||||
- Lien "Résultats des Tests" accessible
|
||||
- Fonctionnalités de débogage améliorées
|
||||
|
||||
### Points de Terminaison API d'État
|
||||
|
||||
**Obtenir l'État Actuel :**
|
||||
```bash
|
||||
GET /api.php?action=get_status
|
||||
```
|
||||
|
||||
**Définir le Mode d'Application :**
|
||||
```bash
|
||||
POST /api.php
|
||||
Content-Type: application/json
|
||||
{
|
||||
"action": "send_simulator_command",
|
||||
"command": {
|
||||
"type": "set_mode",
|
||||
"mode": "development"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Déclencher les Tests (Mode Développement) :**
|
||||
```bash
|
||||
POST /api.php
|
||||
Content-Type: application/json
|
||||
{
|
||||
"action": "send_simulator_command",
|
||||
"command": {
|
||||
"type": "trigger_tests",
|
||||
"test_trigger": true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## <20>🔧 Développement
|
||||
|
||||
### Développement Local (sans Docker)
|
||||
|
||||
Pour le développement avec un serveur PHP local :
|
||||
|
||||
```bash
|
||||
# Démarrer serveur de développement PHP (recommandé)
|
||||
php -S localhost:8080
|
||||
```
|
||||
|
||||
**Note :** Pour la fonctionnalité complète incluant la sauvegarde de configuration, utilisez le setup Docker au lieu du serveur PHP local.
|
||||
|
||||
### Développement Docker
|
||||
|
||||
Pour le développement avec changements de code en direct :
|
||||
|
||||
```bash
|
||||
# Utiliser montages de volumes pour développement
|
||||
cd setup/
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
|
||||
# Surveiller les logs
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
### Permissions de Fichiers
|
||||
|
||||
S'assurer que le répertoire config est accessible en écriture :
|
||||
```bash
|
||||
chmod -R 755 config/
|
||||
chown -R www-data:www-data config/ # Pour Apache
|
||||
```
|
||||
|
||||
### Vue d'Ensemble de l'Architecture
|
||||
|
||||
#### Composants Frontend
|
||||
- **index.html** : Tableau de bord principal avec graphiques temps réel
|
||||
- **config.html** : Interface éditeur de configuration
|
||||
- **Modules CSS** : Style responsive avec design moderne
|
||||
- **Modules JavaScript** : Architecture modulaire ES6+
|
||||
|
||||
#### Modules JavaScript
|
||||
- **sensor-chart.js** : Intégration Chart.js avec données streaming
|
||||
- **data-logger.js** : Exportation CSV et gestion de données
|
||||
- **config-manager.js** : Chargement et gestion de configuration
|
||||
- **php-config-manager.js** : Persistance de configuration côté serveur
|
||||
- **magneto-file-reader.js** : Analyse de fichiers CSV et extraction de données
|
||||
- **magneto-file-integration.js** : Intégration UI pour lecteur de fichiers
|
||||
|
||||
#### Composants Backend
|
||||
- **api.php** : API RESTful pour gestion de configuration
|
||||
- **Alpine Linux** : Image de base Docker légère
|
||||
- **Apache + PHP 8.2** : Serveur web avec support PHP moderne
|
||||
- **Persistance de Volumes** : Volumes Docker pour persistance de données
|
||||
|
||||
## 🚀 Déploiement de Production
|
||||
|
||||
### Déploiement Docker (Recommandé)
|
||||
|
||||
1. **Configurer Environnement** :
|
||||
```bash
|
||||
git clone <repository>
|
||||
cd Mkii
|
||||
```
|
||||
|
||||
2. **Configurer Application** :
|
||||
```bash
|
||||
# Éditer configuration si nécessaire
|
||||
nano config/config.yaml
|
||||
```
|
||||
|
||||
3. **Déployer** :
|
||||
```bash
|
||||
cd setup/
|
||||
./setup.sh
|
||||
```
|
||||
|
||||
4. **Vérifier Déploiement** :
|
||||
```bash
|
||||
./status.sh
|
||||
curl http://localhost:8080
|
||||
```
|
||||
|
||||
### Déploiement Manuel
|
||||
|
||||
Pour déploiement manuel sur stack LAMP existante :
|
||||
|
||||
1. **Copier Fichiers** :
|
||||
```bash
|
||||
cp -r * /var/www/html/
|
||||
```
|
||||
|
||||
2. **Définir Permissions** :
|
||||
```bash
|
||||
chown -R www-data:www-data /var/www/html/config/
|
||||
chmod -R 755 /var/www/html/config/
|
||||
```
|
||||
|
||||
3. **Configurer Apache** :
|
||||
```apache
|
||||
<Directory /var/www/html>
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
```
|
||||
|
||||
## 🛠️ Dépannage / Problèmes Courants
|
||||
|
||||
|
||||
#### Configuration Non Sauvegardée
|
||||
```bash
|
||||
# Vérifier permissions fichiers
|
||||
ls -la config/
|
||||
# Devrait montrer : drwxr-xr-x www-data www-data
|
||||
|
||||
# Corriger permissions
|
||||
sudo chown -R www-data:www-data config/
|
||||
sudo chmod -R 755 config/
|
||||
```
|
||||
|
||||
#### Graphiques Non Affichés
|
||||
1. Vérifier console navigateur pour erreurs JavaScript
|
||||
2. Vérifier que les bibliothèques Chart.js se chargent
|
||||
3. S'assurer que la configuration des capteurs est valide
|
||||
4. Vérifier que la source de données est active
|
||||
|
||||
#### Lecteur de Fichiers Non Fonctionnel
|
||||
1. Vérifier que le format de fichier CSV correspond à la structure attendue
|
||||
2. Vérifier console navigateur pour erreurs d'analyse
|
||||
3. S'assurer que le fichier contient les en-têtes requis : "Horodatage", "Bx (nT)", etc.
|
||||
4. Essayer avec fichier de données exemple du répertoire `/data/`
|
||||
|
||||
#### Problèmes Docker
|
||||
```bash
|
||||
# Vérifier état conteneur
|
||||
cd setup/
|
||||
./status.sh
|
||||
|
||||
# Voir logs
|
||||
./logs.sh
|
||||
|
||||
# Redémarrer conteneurs
|
||||
./restart.sh
|
||||
|
||||
# Reconstruire si nécessaire
|
||||
./rebuild.sh
|
||||
```
|
||||
|
||||
## Optimisation des Performances
|
||||
|
||||
#### Données Haute Fréquence
|
||||
- Ajuster `max_buffer_size` dans la configuration
|
||||
- Réduire le taux de mise à jour graphique si nécessaire
|
||||
- Utiliser la décimation de données pour longs enregistrements
|
||||
|
||||
#### Performance Navigateur
|
||||
- Vider cache navigateur si les graphiques deviennent lents
|
||||
- Fermer onglets navigateur inutilisés
|
||||
- Utiliser navigateur moderne avec accélération matérielle
|
||||
|
||||
#### Performance Docker
|
||||
```bash
|
||||
# Surveiller utilisation ressources
|
||||
docker stats
|
||||
|
||||
# Ajuster limites mémoire dans docker-compose.yml si nécessaire
|
||||
services:
|
||||
sensor-viz-app:
|
||||
mem_limit: 512m
|
||||
```
|
||||
|
||||
## 📝 Référence API
|
||||
|
||||
### API de Configuration
|
||||
|
||||
#### GET /api.php?action=read
|
||||
Obtenir configuration actuelle
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"config": { /* Config YAML en JSON */ }
|
||||
}
|
||||
```
|
||||
|
||||
#### POST /api.php
|
||||
Sauvegarder configuration
|
||||
```json
|
||||
{
|
||||
"action": "write",
|
||||
"config": { /* Nouvelle configuration */ }
|
||||
}
|
||||
```
|
||||
|
||||
#### GET /api.php?action=backup
|
||||
Créer sauvegarde configuration
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"backup_file": "config_backup_2025-07-28_14-30-15.yaml"
|
||||
}
|
||||
```
|
||||
|
||||
### Format d'Exportation de Données
|
||||
|
||||
L'exportation CSV inclut :
|
||||
```csv
|
||||
timestamp,sensor_id,x_raw,y_raw,z_raw,x_processed,y_processed,z_processed
|
||||
2025-07-28T14:30:15.123Z,1,0.123,0.456,0.789,0.123,0.456,0.789
|
||||
```
|
||||
|
||||
## 🔍 Surveillance
|
||||
|
||||
### Logs d'Application
|
||||
```bash
|
||||
# Logs Docker
|
||||
cd setup/
|
||||
./logs.sh
|
||||
|
||||
# Logs Apache (si déploiement manuel)
|
||||
tail -f /var/log/apache2/error.log
|
||||
tail -f /var/log/apache2/access.log
|
||||
```
|
||||
|
||||
### Métriques de Performance
|
||||
- **Taux de Données** : Affiché dans barre d'état tableau de bord
|
||||
- **Utilisation Mémoire** : Surveiller via outils dev navigateur
|
||||
- **Trafic Réseau** : Vérifier onglet réseau navigateur
|
||||
- **Ressources Serveur** : Utiliser `htop` ou stats Docker
|
||||
|
||||
## 🤝 Contribution
|
||||
|
||||
### Style de Code
|
||||
- Utiliser fonctionnalités JavaScript ES6+
|
||||
- Suivre indentation cohérente (4 espaces)
|
||||
- Ajouter commentaires JSDoc pour fonctions
|
||||
- Utiliser HTML et CSS sémantiques
|
||||
|
||||
### Tests
|
||||
- Tester avec fichiers de données magnétomètre exemple
|
||||
- Vérifier persistance configuration
|
||||
- Vérifier design responsive sur appareils mobiles
|
||||
- Valider fonctionnalité exportation CSV
|
||||
|
||||
### Pull Requests
|
||||
1. Fork le dépôt
|
||||
2. Créer branche fonctionnalité
|
||||
3. Ajouter tests pour nouvelle fonctionnalité
|
||||
4. Mettre à jour documentation
|
||||
5. Soumettre pull request avec description claire
|
||||
|
||||
## 🐳 Commandes Docker
|
||||
|
||||
Toutes les commandes Docker doivent être exécutées depuis le répertoire `setup/` :
|
||||
|
||||
```bash
|
||||
# Naviguer vers répertoire setup
|
||||
cd setup/
|
||||
|
||||
# Démarrer application
|
||||
docker-compose up -d
|
||||
|
||||
# Voir logs
|
||||
docker-compose logs -f
|
||||
|
||||
# Arrêter application
|
||||
docker-compose down
|
||||
|
||||
# Redémarrer services
|
||||
docker-compose restart
|
||||
|
||||
# Reconstruire conteneurs
|
||||
docker-compose build --no-cache
|
||||
|
||||
# Accéder shell conteneur
|
||||
docker-compose exec sensor-viz bash
|
||||
```
|
||||
|
||||
### Scripts de Gestion
|
||||
|
||||
Le répertoire setup inclut des scripts de gestion pratiques :
|
||||
|
||||
```bash
|
||||
cd setup/
|
||||
|
||||
# Configuration initiale
|
||||
./setup.sh
|
||||
|
||||
# Vérifier état
|
||||
./status.sh
|
||||
|
||||
# Voir logs
|
||||
./logs.sh
|
||||
|
||||
# Redémarrer application
|
||||
./restart.sh
|
||||
|
||||
# Arrêter application
|
||||
./stop.sh
|
||||
|
||||
# Reconstruire application
|
||||
./rebuild.sh
|
||||
```
|
||||
|
||||
## 🔒 Considérations de Sécurité
|
||||
|
||||
### Protection des Données
|
||||
- Fichiers de configuration protégés de l'accès web direct via règles Apache
|
||||
- En-têtes CORS correctement configurés pour points de terminaison API
|
||||
- Système de sauvegarde automatique empêche perte de configuration
|
||||
- Validation d'entrée sur tous changements de configuration
|
||||
- Aucune donnée sensible stockée dans localStorage navigateur
|
||||
|
||||
### Sécurité Téléchargement de Fichiers
|
||||
- Validation fichiers CSV avant traitement
|
||||
- Limites de taille de fichier appliquées
|
||||
- Pas de stockage côté serveur pour données téléchargées
|
||||
- Analyse côté client empêche vulnérabilités serveur
|
||||
|
||||
## 📈 Caractéristiques de Performance
|
||||
|
||||
### Performance Temps Réel
|
||||
- Optimisé pour mises à jour de données soutenues à 10Hz
|
||||
- Streaming Chart.js efficace avec mise en mémoire tampon circulaire
|
||||
- Décimation automatique de données pour sessions longue durée
|
||||
- Structures de données efficaces en mémoire
|
||||
|
||||
### Compatibilité Navigateur
|
||||
- Navigateurs modernes avec support ES6+ requis
|
||||
- Rendu Canvas accéléré matériellement
|
||||
- Support WebWorker pour traitement arrière-plan
|
||||
- Design responsive pour appareils mobiles
|
||||
|
||||
### Utilisation Ressources
|
||||
- Utilisation mémoire typique : 50-100MB
|
||||
- Utilisation CPU : <10% sur matériel moderne
|
||||
- Bande passante réseau : Minimale (mises à jour config seulement)
|
||||
- Stockage : Rétention données configurable
|
||||
|
||||
## 🏗️ Spécifications Techniques
|
||||
|
||||
### Technologies Frontend
|
||||
- **HTML5** : Balisage sémantique avec fonctionnalités accessibilité
|
||||
- **CSS3** : Mise en page Grid/Flexbox avec variables CSS
|
||||
- **JavaScript ES6+** : Motifs async/await modernes
|
||||
- **Chart.js 4.x** : Graphiques accélérés matériellement
|
||||
- **Plugin Streaming** : Visualisation données temps réel
|
||||
|
||||
### Technologies Backend
|
||||
- **PHP 8.2** : PHP moderne avec typage fort
|
||||
- **Apache 2.4** : Serveur web prêt production
|
||||
- **Alpine Linux** : Empreinte conteneur minimale
|
||||
- **Docker Compose** : Orchestration multi-conteneurs
|
||||
|
||||
### Formats de Données
|
||||
- **YAML** : Configuration lisible humainement
|
||||
- **CSV** : Exportation données standard industrie
|
||||
- **JSON** : Communication API
|
||||
- **IEEE 754** : Représentation angles virgule flottante
|
||||
|
||||
## 📋 Exigences
|
||||
|
||||
### Exigences Système Minimales
|
||||
- **CPU** : Processeur dual-core 1 GHz
|
||||
- **RAM** : 2GB mémoire disponible
|
||||
- **Stockage** : 1GB espace disque libre
|
||||
- **Réseau** : 100 Mbps pour mises à jour temps réel
|
||||
|
||||
### Exigences Navigateur
|
||||
- **Chrome/Chromium** : 80+
|
||||
- **Firefox** : 75+
|
||||
- **Safari** : 13+
|
||||
- **Edge** : 80+
|
||||
|
||||
### Exigences Docker
|
||||
- **Docker** : 20.10+
|
||||
- **Docker Compose** : 2.0+
|
||||
- **Ports Disponibles** : 8080
|
||||
- **Volumes** : Accès système fichiers hôte
|
||||
|
||||
## 🎯 Cas d'Usage
|
||||
|
||||
### Applications de Recherche
|
||||
- **Études Magnétomètre** : Visualisation champ magnétique temps réel
|
||||
- **Analyse Accéléromètre** : Surveillance mouvement et vibration
|
||||
- **Surveillance Environnementale** : Suivi température et orientation
|
||||
- **Validation Données** : Comparaison en direct de capteurs multiples
|
||||
|
||||
### Applications Industrielles
|
||||
- **Contrôle Qualité** : Validation capteurs temps réel
|
||||
- **Surveillance Équipement** : Analyse vibration continue
|
||||
- **Calibration** : Vérification décalage et échelle capteurs
|
||||
- **Journalisation Données** : Enregistrement mesures automatisé
|
||||
|
||||
### Usage Éducatif
|
||||
- **Démonstrations Physique** : Visualisation données capteurs en direct
|
||||
- **Formation Ingénierie** : Analyse données monde réel
|
||||
- **Exemples Programmation** : Motifs développement web modernes
|
||||
- **Science des Données** : Workflows importation et analyse CSV
|
||||
|
||||
## 📄 Licence
|
||||
|
||||
Ce projet est open source et disponible pour usage éducatif et commercial.
|
||||
|
||||
## 🙏 Remerciements
|
||||
|
||||
### Bibliothèques Tierces
|
||||
- **Chart.js** : Bibliothèque graphiques puissante avec support streaming
|
||||
- **js-yaml** : Analyseur YAML JavaScript pour fichiers configuration
|
||||
- **Alpine Linux** : Image de base Docker légère
|
||||
- **Serveur HTTP Apache** : Plateforme serveur web fiable
|
||||
|
||||
### Support Format de Données
|
||||
- **CSV Magnétomètre** : Support pour fichiers données magnétomètre externes
|
||||
- **IEEE 754** : Gestion appropriée données angles virgule flottante
|
||||
- **CSV Point-virgule** : Compatibilité format CSV européen
|
||||
|
||||
## 🤝 Contribution
|
||||
|
||||
Les contributions sont bienvenues ! Veuillez vous concentrer sur :
|
||||
- Améliorations performance pour données haute fréquence
|
||||
- Nouveaux modes simulation et motifs de données
|
||||
- Support mobile amélioré et design responsive
|
||||
- Formats exportation données additionnels et outils analyse
|
||||
- Exemples intégration matériel capteurs réels
|
||||
- Support étendu format données magnétomètre
|
||||
|
||||
### Mises à Jour Majeures Récentes
|
||||
|
||||
#### V2.0 - Architecture Simulateur Continu
|
||||
- **Simulateur Toujours Actif** : Processus arrière-plan élimine délais démarrage
|
||||
- **Contrôle Acquisition Instantané** : Démarrer/arrêter acquisition données sans surcharge processus
|
||||
- **Streaming Graphiques Intelligent** : Pause/reprise automatique basée sur état acquisition
|
||||
- **Contrôle Basé Commandes** : Contrôle professionnel via communication fichier état
|
||||
|
||||
#### V1.5 - Interface Utilisateur/UX Professionnelle
|
||||
- **Interface Modale** : Interface propre et organisée avec dialogues modaux
|
||||
- **État Temps Réel** : Surveillance simulateur en direct et affichage nombre échantillons
|
||||
- **Graphiques Conscients Acquisition** : Graphiques se mettent intelligemment en pause quand pas d'acquisition
|
||||
- **Gestion Fichiers Améliorée** : Navigateur fichiers données complet et contrôles
|
||||
|
||||
#### V1.0 - Fonctionnalités Core
|
||||
- **Lecteur Fichiers Magnétomètre** : Système importation CSV complet pour données externes
|
||||
- **Configuration Capteurs Dynamique** : Jusqu'à 12 capteurs avec configuration en direct
|
||||
- **Déploiement Docker** : Conteneurs basés Alpine avec persistance volumes
|
||||
- **Configuration Web** : Éditeur YAML avec système sauvegarde automatique
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support & Documentation
|
||||
|
||||
### Liens Rapides
|
||||
- **Application Principale** : http://localhost:8080
|
||||
- **Éditeur Configuration** : http://localhost:8080/config.html
|
||||
- **Documentation API** : API REST intégrée pour automatisation
|
||||
- **Logs Conteneur** : `cd setup && ./logs.sh`
|
||||
|
||||
### Problèmes Courants
|
||||
- **Port 8080 utilisé** : Changer port dans `setup/docker-compose.yml`
|
||||
- **Problèmes permissions** : S'assurer volumes Docker ont permissions correctes
|
||||
- **Simulateur ne répond pas** : Vérifier `config/status.yaml` pour communication
|
||||
- **Fichiers CSV ne se chargent pas** : Vérifier format fichier correspond structure attendue
|
||||
|
||||
### Conseils Performance
|
||||
- **Données haute fréquence** : Utiliser déploiement Docker pour meilleure performance
|
||||
- **Gros fichiers** : Considérer chunking fichiers pour très gros ensembles données
|
||||
- **Capteurs multiples** : Limiter capteurs actifs pour performance graphiques optimale
|
||||
- **Acquisition arrière-plan** : Simulateur continue même quand navigateur fermé
|
||||
|
||||
---
|
||||
|
||||
**Construit avec** : Chart.js, JavaScript Vanilla, CSS3, HTML5, PHP 8.2, Apache, Alpine Linux, Docker
|
||||
|
||||
**🛰️ Visualisation de Données de Capteurs en Temps Réel - Système d'Acquisition Continue Professionnel !**
|
||||
5
Wiki-print/data/config.yaml
Normal file
5
Wiki-print/data/config.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
title: Mkii
|
||||
author: Serge NOEL
|
||||
client: Naval Group
|
||||
date: 2025-08-29
|
||||
revision: 1.0
|
||||
BIN
Wiki-print/data/diagrams/diag.png
Normal file
BIN
Wiki-print/data/diagrams/diag.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
1
Wiki-print/data/diagrams/diag.svg
Normal file
1
Wiki-print/data/diagrams/diag.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 23 KiB |
1
Wiki-print/data/diagrams/diagram_1.drawio
Normal file
1
Wiki-print/data/diagrams/diagram_1.drawio
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 23 KiB |
1
Wiki-print/data/diagrams/diagram_1.svg
Normal file
1
Wiki-print/data/diagrams/diagram_1.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 23 KiB |
1
Wiki-print/data/diagrams/diagram_2.drawio
Normal file
1
Wiki-print/data/diagrams/diagram_2.drawio
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 17 KiB |
1
Wiki-print/data/diagrams/diagram_2.svg
Normal file
1
Wiki-print/data/diagrams/diagram_2.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 17 KiB |
BIN
Wiki-print/data/output.docx
Normal file
BIN
Wiki-print/data/output.docx
Normal file
Binary file not shown.
BIN
Wiki-print/data/output.odt
Normal file
BIN
Wiki-print/data/output.odt
Normal file
Binary file not shown.
63
Wiki-print/main.py
Normal file
63
Wiki-print/main.py
Normal file
@@ -0,0 +1,63 @@
|
||||
|
||||
|
||||
import base64
|
||||
import subprocess
|
||||
import yaml
|
||||
import re
|
||||
import os
|
||||
|
||||
# Load config.yaml for document properties
|
||||
def load_config(config_path):
|
||||
with open(config_path, 'r', encoding='utf-8') as f:
|
||||
return yaml.safe_load(f)
|
||||
|
||||
if __name__ == "__main__":
|
||||
config = load_config('/app/data/config.yaml')
|
||||
|
||||
|
||||
# Step 1: Extract ```diagram blocks (base64-encoded SVG) and save as .svg files
|
||||
input_md = "/app/data/article.md"
|
||||
diagrams_dir = "/app/data/diagrams"
|
||||
os.makedirs(diagrams_dir, exist_ok=True)
|
||||
with open(input_md, 'r', encoding='utf-8') as f:
|
||||
md_content = f.read()
|
||||
|
||||
# Replace diagram blocks with image references
|
||||
def replace_diagram_block(match):
|
||||
idx = replace_diagram_block.counter
|
||||
svg_content = base64.b64decode(match.group(1).strip())
|
||||
svg_path = os.path.join(diagrams_dir, f"diagram_{idx}.svg")
|
||||
with open(svg_path, 'wb') as sf:
|
||||
sf.write(svg_content)
|
||||
print(f"Extracted SVG diagram to {svg_path}")
|
||||
replace_diagram_block.counter += 1
|
||||
# Return markdown image reference
|
||||
return f''
|
||||
replace_diagram_block.counter = 1
|
||||
|
||||
new_md_content = re.sub(r'```diagram(.*?)```', replace_diagram_block, md_content, flags=re.DOTALL)
|
||||
|
||||
# Save the modified markdown with image references
|
||||
temp_md = "/app/data/article_with_svgs.md"
|
||||
with open(temp_md, 'w', encoding='utf-8') as f:
|
||||
f.write(new_md_content)
|
||||
|
||||
# Step 2: Convert Markdown to ODT using Pandoc
|
||||
output_odt = "/app/data/output.odt"
|
||||
subprocess.run([
|
||||
"pandoc",
|
||||
temp_md,
|
||||
"-o",
|
||||
output_odt
|
||||
], check=True)
|
||||
|
||||
# Step 2: Convert Markdown to ODT using Pandoc
|
||||
output_odt = "/app/data/output.odt"
|
||||
subprocess.run([
|
||||
"pandoc",
|
||||
input_md,
|
||||
"-o",
|
||||
output_odt
|
||||
], check=True)
|
||||
|
||||
print(f"Converted {input_md} to {output_odt}")
|
||||
19
Wiki-print/pyproject.toml
Normal file
19
Wiki-print/pyproject.toml
Normal file
@@ -0,0 +1,19 @@
|
||||
[tool.poetry]
|
||||
name = "wiki-print"
|
||||
version = "0.1.0"
|
||||
description = "Convert Wiki.js articles with diagrams to LibreOffice documents. Extracts diagram code blocks as .drawio files for draw.io, and uses pandoc for document conversion."
|
||||
authors = ["Your Name <your.email@example.com>"]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = ">=3.11,<3.12"
|
||||
PyYAML = "^6.0"
|
||||
python-docx = "^1.1.0"
|
||||
Pillow = "^10.0.0"
|
||||
requests = "^2.31.0"
|
||||
|
||||
# 're' and 'os' are from the Python standard library and do not need to be listed as dependencies.
|
||||
# 'pandoc' and 'draw.io' are external tools used by the application and should be installed in the environment.
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core>=1.0.0"]
|
||||
build-backend = "poetry.core.masonry.api"
|
||||
4
Wiki-print/requirements.txt
Normal file
4
Wiki-print/requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
PyYAML
|
||||
python-docx
|
||||
Pillow
|
||||
requests
|
||||
Reference in New Issue
Block a user