Système de supervision et gestion d'irrigation basé sur l'humidité du sol, fournissant une interface de monitoring en temps réel, une base de données persistante avec MongoDB, et une API REST pour l'intégration.
Voici une démonstration complète du système en action :
Ci-dessus : Interface de monitoring en temps réel affichant l'humidité actuelle, l'historique graphique, les statistiques et les recommandations d'irrigation automatisées.
Ce système permet de :
- Monitorer l'humidité du sol en temps réel
- Configurer des seuils d'irrigation personnalisés
- Obtenir des recommandations automatisées d'irrigation
- Conserver un historique complet des mesures
- Intégrer des capteurs ou systèmes externes via API REST
- Supervision en temps réel : Affichage de l'humidité actuelle, moyenne, minimum et maximum
- Historique graphique : Visualisation des 50 dernières mesures avec Chart.js
- Logique d'irrigation configurable : Seuils adaptables selon les besoins (SEC, OPTIMAL, HUMIDE)
- Analyse intelligente : Recommandations automatiques basées sur les paramètres
- Persistance MongoDB : Stockage durable des logs avec TTL (7 jours)
- API REST complète : Endpoints pour toutes les opérations (lecture, écriture, analyse)
- Interface responsive : Design moderne adapté à tous les écrans
Rôle : Le capteur d'humidité mesure le niveau d'eau dans le sol en temps réel. C'est le cœur du système qui communique avec la carte BBC Microbit pour transmettre les données au serveur central.
Rôle : La pompe d'irrigation est l'actionneur du système. Elle reçoit les commandes de contrôle du serveur et active ou désactive l'irrigation en fonction des recommandations du système d'analyse basé sur les seuils configurés.
Rôle : La carte BBC Microbit est le microcontrôleur embarqué qui gère l'acquisition des données du capteur, le contrôle de la pompe et la communication réseau avec le serveur API. Elle constitue le cerveau du système IoT côté matériel.
Rôle : MongoDB stocke de manière persistante tous les enregistrements d'humidité avec timestamps, les paramètres de logique d'irrigation configurés et les historiques. Les données expirent automatiquement après 7 jours pour optimiser l'espace disque.
Rôle : Affiche l'historique complet de toutes les mesures enregistrées, les timestamps précis, les sources de données et permet de consulter les patterns d'humidité pour une meilleure compréhension du comportement du système.
Rôle : Gère tous les timestamps en format ISO 8601 pour garantir une traçabilité précise de chaque événement dans le système. Essentiel pour l'analyse temporelle et la recherche d'historique par date.
smart-irrigation-system/
├── index.html # Interface web (HTML5/CSS3/JavaScript)
├── start.bat # Script de démarrage (Windows)
├── README.md # Documentation
├── assets/ # Ressources (images, GIF)
│ ├── detecteur.jpeg # Photo du capteur
│ ├── pompe.jpeg # Photo de la pompe
│ ├── BBC_microbit.png # Image de la carte
│ ├── mongodb.png # Logo MongoDB
│ ├── logs.png # Interface des logs
│ ├── date.png # Gestion des timestamps
│ └── gif-demo.gif # Démonstration animée
│
└── backend/
├── app.py # API Flask
├── requirements.txt # Dépendances Python
└── .env # Configuration
- Python 3.8 ou supérieur
- MongoDB Community Edition 4.0+
- Navigateur moderne (Chrome, Firefox, Safari, Edge)
Windows :
# Installer Python depuis https://www.python.org/downloads/
# Installer MongoDB depuis https://www.mongodb.com/try/download/communitymacOS :
brew install python@3.11
brew install mongodb-communityLinux (Ubuntu/Debian) :
sudo apt-get update
sudo apt-get install -y python3.11 python3-pip
sudo apt-get install -y mongodbcd smart-irrigation-system
cd backend
pip install -r requirements.txtÉditer backend/.env :
MONGO_URI=mongodb://localhost:27017
DB_NAME=arrosage_intelligent
Windows :
Double-cliquer sur start.bat
macOS / Linux :
cd backend
python app.pyLe serveur démarre sur http://localhost:5000
Ouvrir index.html dans un navigateur (ou file:///chemin/vers/index.html)
- Charger données de démonstration : Cliquer sur "Charger démo" pour peupler la base
- Configurer les seuils : Modifier les valeurs d'humidité selon vos besoins
- Analyser la situation : Cliquer "Analyser maintenant" pour obtenir une recommandation
- Consulter l'historique : Observer le tableau des dernières mesures
curl http://localhost:5000/api/latestRéponse :
{
"humidity": 65,
"timestamp": "2026-05-19T14:30:00Z",
"source": "sensor_01"
}curl -X POST http://localhost:5000/api/readings \
-H "Content-Type: application/json" \
-d '{
"humidity": 65,
"source": "sensor_01"
}'curl -X POST http://localhost:5000/api/readings/bulk \
-H "Content-Type: application/json" \
-d '[
{"humidity": 45},
{"humidity": 52},
{"humidity": 48}
]'curl http://localhost:5000/api/statsRéponse :
{
"avg": 55,
"min": 25,
"max": 80
}curl http://localhost:5000/api/analyzeRéponse :
{
"current_humidity": 26,
"status": "ALERTE_SECHERESSE",
"recommendation": "Irrigation immédiate recommandée",
"urgency": "CRITIQUE",
"thresholds": {
"dry": 30,
"optimal_min": 45,
"optimal_max": 75,
"wet": 80
},
"timestamp": "2026-05-19T14:30:00.000Z"
}| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/latest |
Dernière mesure enregistrée |
| GET | /api/history |
50 dernières mesures |
| GET | /api/stats |
Statistiques (moyenne, min, max) |
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /api/readings |
Ajouter une mesure |
| POST | /api/readings/bulk |
Ajouter plusieurs mesures |
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/logic |
Récupérer les paramètres d'irrigation |
| PUT | /api/logic |
Mettre à jour les paramètres |
| GET | /api/analyze |
Analyser et obtenir une recommandation |
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/health |
Vérifier la santé du système |
| POST | /api/demo/seed |
Charger données de démonstration |
Les paramètres d'irrigation peuvent être personnalisés :
| Paramètre | Valeur par défaut | Description |
|---|---|---|
dry_threshold |
30% | Seuil d'alerte sécheresse |
optimal_min |
45% | Humidité minimale recommandée |
optimal_max |
75% | Humidité maximale recommandée |
wet_threshold |
80% | Seuil d'humidité excessive |
auto_irrigation |
true | Activation de l'irrigation automatique |
| Humidité | Statut | Recommandation | Urgence |
|---|---|---|---|
| < 30% | ALERTE_SECHERESSE | Irrigation immédiate | CRITIQUE |
| 30-45% | SEC | Irrigation recommandée | HAUTE |
| 45-75% | OPTIMAL | Aucune action | BASSE |
| 75-80% | HUMIDE | Attendre avant irrigation | BASSE |
| > 80% | TRÈS_HUMIDE | Trop d'eau - vérifier | MOYENNE |
MongoDB contient deux collections :
Enregistre chaque mesure d'humidité :
{
"_id": ObjectId,
"humidity": 65,
"timestamp": "2026-05-19T14:30:00Z",
"source": "sensor_01"
}TTL Index : Les mesures expirent après 7 jours
Stocke les paramètres d'irrigation :
{
"name": "default",
"dry_threshold": 30,
"optimal_min": 45,
"optimal_max": 75,
"wet_threshold": 80,
"auto_irrigation": true,
"last_updated": "2026-05-19T14:00:00Z"
}Vérifier que MongoDB est en cours d'exécution :
# Windows
net start MongoDB
# Linux
sudo systemctl start mongod
sudo systemctl status mongod- Vérifier que le serveur Flask est lancé sur le port 5000
- Vérifier la configuration MongoDB dans
.env - Consulter les logs du terminal pour les erreurs de connexion
- Vérifier que MongoDB est connecté
- Vérifier la configuration
MONGO_URIdans.env - Recharger les données avec le bouton "Charger démo"
Modifier le port dans backend/app.py (dernière ligne) :
app.run(debug=True, host="localhost", port=8000) # Port 8000 au lieu de 5000Pour intégrer un capteur d'humidité :
import requests
# Configuration
API_URL = "http://localhost:5000/api/readings"
SENSOR_ID = "greenhouse_01"
# Lire le capteur et envoyer les données
humidity = read_sensor() # Votre fonction de lecture
requests.post(API_URL, json={
"humidity": humidity,
"source": SENSOR_ID
})Éditer index.html dans la section <style> :
:root {
--teal: #1d9e75; /* Couleur principale */
--red: #da3633; /* Couleur d'alerte */
--bg: #0d1117; /* Fond */
--surface: #161b22; /* Surface secondaire */
/* ... autres couleurs ... */
}Éditer backend/app.py ligne 50 :
db.logic.insert_one({
"name": "default",
"dry_threshold": 25, # Modifier ici
"optimal_min": 40,
"optimal_max": 70,
"wet_threshold": 85,
"auto_irrigation": True
})- Maximum 50 mesures affichées dans l'historique
- Les mesures expirent après 7 jours (configurable)
- Serveur de développement Flask (non adapté à la production)
- Pas de mécanisme d'authentification pour les endpoints API
Pour déployer en production :
- Utiliser un serveur WSGI (Gunicorn, uWSGI)
- Configurer HTTPS
- Ajouter une authentification API
- Utiliser MongoDB Atlas ou une instance dédiée
- Configurer des sauvegardes automatiques
Pour signaler des bugs ou proposer des améliorations, créer une issue sur GitHub.
MIT License - Libre d'utilisation à des fins personnelles, éducatives et commerciales.
Auteur : Wassim Lazim
Dernière mise à jour : Mai 2026






