Skip to content

đŸŒ± SystĂšme d'arrosage intelligent avec IA mĂ©tĂ©orologique - React + Node.js + TypeScript + Docker

Notifications You must be signed in to change notification settings

THEKetsu/smart-watering

Repository files navigation

đŸŒ± Smart Watering - SystĂšme d'Arrosage Intelligent

Docker React Node.js TypeScript PostgreSQL

SystÚme complet d'arrosage automatique intelligent basé sur l'IA météorologique et les besoins spécifiques des plantes.

📾 Aperçu de l'Application

🏠 Dashboard Principal

Dashboard Vue d'ensemble avec graphiques météo, alertes et planning d'arrosage

đŸŒ± Gestion des Plantes

Plantes Interface intuitive pour ajouter, modifier et suivre vos plantes

📊 Planning Intelligent

Planning Recommandations d'arrosage basées sur l'IA météorologique

☀ DonnĂ©es MĂ©tĂ©orologiques

Météo Intégration temps réel avec prévisions 7 jours

🚀 FonctionnalitĂ©s

🧠 Intelligence Artificielle

  • Algorithme adaptatif : Ajustement automatique selon conditions mĂ©tĂ©o
  • PrĂ©diction mĂ©tĂ©orologique : IntĂ©gration OpenWeatherMap 7 jours
  • Facteurs saisonniers : Adaptation aux cycles naturels des plantes
  • Score de confiance : Évaluation de la fiabilitĂ© des recommandations
  • Apprentissage continu : AmĂ©lioration basĂ©e sur l'historique

🌿 Gestion des Plantes

  • 6 types supportĂ©s : Succulente, tropicale, mĂ©diterranĂ©enne, tempĂ©rĂ©e, dĂ©sert, aquatique
  • ParamĂštres personnalisables : FrĂ©quence, quantitĂ©, seuils de tempĂ©rature/humiditĂ©
  • Multiplicateurs saisonniers : Adaptation fine selon les saisons
  • Historique complet : Suivi des arrosages et performances

📊 Interface Moderne

  • Dashboard interactif : Visualisation temps rĂ©el avec graphiques
  • Responsive design : Compatible mobile/desktop
  • ThĂšme nature : Design inspirĂ© du jardinage
  • Gestion intuitive : CRUD complet avec validation avancĂ©e

đŸ—ïž Architecture ConteneurisĂ©e

  • Docker & Docker Compose : DĂ©ploiement en un clic
  • Microservices : SĂ©paration frontend/backend/base de donnĂ©es
  • ScalabilitĂ© : PrĂȘt pour la production
  • Monitoring optionnel : Prometheus/Grafana intĂ©grĂ©s

📋 PrĂ©requis

  • Docker 20.10+
  • Docker Compose 2.0+
  • ClĂ© API OpenWeatherMap (gratuite)
  • 4GB RAM minimum
  • Ports libres : 3000, 3001, 5432

⚡ Installation Rapide

# 1. Cloner le projet
git clone https://github.com/votre-username/smart-watering
cd smart-watering

# 2. Configuration initiale
make install

# 3. Configurer la clé API dans .env
OPENWEATHER_API_KEY=votre_cle_api_ici

# 4. Déploiement complet
make deploy

# 5. Accéder à l'application
# Frontend: http://localhost:3000
# Backend:  http://localhost:3001

đŸ› ïž Commandes Utiles

# Gestion des services
make start          # Démarrer tous les services
make stop           # ArrĂȘter tous les services  
make restart        # Redémarrer tous les services
make status         # Statut des conteneurs

# Développement
make dev            # Mode développement (sans Docker)
make logs           # Voir tous les logs
make health         # Vérifier la santé des services

# Maintenance
make backup         # Sauvegarde complĂšte
make restore FILE=backup.sql.gz  # Restauration
make clean          # Nettoyage complet

# Tests et qualité
make test           # Lancer les tests
make lint           # Vérification du code

đŸ—ïž Architecture

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   Frontend      │    │   Backend       │    │   Database      │
│   React + TS    │◄──â–ș│   Node.js + TS  │◄──â–ș│   PostgreSQL    │
│   Port: 3000    │    │   Port: 3001    │    │   Port: 5432    │
└─────────────────┘    └─────────────────┘    └─────────────────┘
         │                       │                       │
         │              ┌─────────────────┐              │
         │              │   Redis Cache   │              │
         └───────────────   Port: 6379    ├──────────────┘
                        └─────────────────┘
                                │
                    ┌─────────────────┐
                    │ OpenWeatherMap  │
                    │      API        │
                    └─────────────────┘

Stack Technologique

Frontend

  • React 18 avec TypeScript
  • Material-UI pour l'interface
  • React Query pour l'Ă©tat serveur
  • Recharts pour les graphiques
  • React Hook Form + Yup validation

Backend

  • Node.js 18 avec TypeScript
  • Express.js + TypeORM
  • Cron jobs automatisĂ©s
  • Architecture modulaire
  • API RESTful complĂšte

Base de données

  • PostgreSQL 15
  • Migrations automatiques
  • Index optimisĂ©s
  • Vues statistiques prĂ©calculĂ©es

Infrastructure

  • Docker & Docker Compose
  • Nginx reverse proxy
  • Monitoring Prometheus/Grafana
  • Sauvegardes automatisĂ©es

📊 Algorithme Intelligent

Facteurs de Décision

const recommendation = WateringAlgorithm.calculateWateringRecommendation(
  plant,           // Caractéristiques spécifiques
  weatherData,     // Données météo actuelles + prévisions
  lastWatering,    // Historique d'arrosage
  forecastDays     // Horizon de prévision (3-5 jours)
);

Logique d'Adaptation

  1. Analyse des besoins de base : Fréquence et quantité selon le type de plante
  2. Facteur saisonnier : Multiplication selon la saison (hiver: 0.5x, été: 1.5x)
  3. Conditions météorologiques :
    • TempĂ©rature > 30°C → +30% d'eau
    • HumiditĂ© < 40% → +20% d'eau
    • Pluie prĂ©vue → Report d'arrosage
  4. Historique : Ajustement selon les arrosages précédents
  5. Score de confiance : Évaluation de la fiabilitĂ© (0-1)

Exemples de Comportement

đŸŒ§ïž Pluie prĂ©vue : "Pluie prĂ©vue dans 2 jours (8mm) - Arrosage reportĂ©"

đŸ”„ Canicule : "TempĂ©rature Ă©levĂ©e (35°C) + Air sec (25%) → 400ml au lieu de 250ml"

❄ Hiver : "Saison hivernale → QuantitĂ© rĂ©duite Ă  125ml (×0.5)"

🔧 Configuration AvancĂ©e

Variables d'Environnement

# API Météo (OBLIGATOIRE)
OPENWEATHER_API_KEY=votre_cle_api

# Base de données
DB_HOST=database
DB_PORT=5432
DB_NAME=smart_watering
DB_USER=postgres
DB_PASSWORD=mot_de_passe_securise

# Sécurité
JWT_SECRET=cle_secrete_jwt
CORS_ORIGIN=http://localhost:3000

# Cache Redis (optionnel)
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=mot_de_passe_redis

Profils de Déploiement

# Développement (services de base)
make deploy

# Production (avec reverse proxy)
make deploy-prod

# Monitoring (avec Prometheus/Grafana)
make deploy-monitoring

Configuration des Plantes

interface PlantConfig {
  name: string;
  type: PlantType;                    // Type de plante
  baseWateringFrequencyDays: number;  // Fréquence de base (jours)
  baseWaterAmountMl: number;          // Quantité de base (ml)
  
  // Multiplicateurs saisonniers
  springMultiplier: number;           // Printemps (1.2)
  summerMultiplier: number;           // ÉtĂ© (1.5)  
  autumnMultiplier: number;           // Automne (0.8)
  winterMultiplier: number;           // Hiver (0.5)
  
  // Seuils environnementaux
  minTemperature: number;             // Temp minimale (°C)
  maxTemperature: number;             // Temp maximale (°C)
  idealHumidity: number;              // Humidité idéale (%)
  rainThresholdMm: number;            // Seuil pluie pour annuler (mm)
}

📊 API Documentation

Endpoints Principaux

# Plantes
GET    /api/plants                    # Liste des plantes
POST   /api/plants                    # Créer une plante
GET    /api/plants/:id                # Détails d'une plante
PUT    /api/plants/:id                # Modifier une plante
DELETE /api/plants/:id                # Supprimer une plante

# Planning d'arrosage
GET    /api/schedules/today           # Planning du jour
GET    /api/schedules/pending         # Arrosages en attente
POST   /api/schedules/generate        # Générer le planning
PATCH  /api/schedules/:id/complete    # Marquer comme terminé
PATCH  /api/schedules/:id/skip        # Ignorer un arrosage

# Météo
GET    /api/weather/current           # Conditions actuelles
GET    /api/weather/forecast          # Prévisions 7 jours
POST   /api/weather/update            # Mise à jour forcée
GET    /api/weather/stats             # Statistiques météo

Exemples de RequĂȘtes

# Créer une plante
curl -X POST http://localhost:3001/api/plants \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Monstera",
    "type": "tropical",
    "baseWateringFrequencyDays": 7,
    "baseWaterAmountMl": 300
  }'

# Générer le planning du jour
curl -X POST http://localhost:3001/api/schedules/generate

# Marquer un arrosage comme terminé
curl -X PATCH http://localhost:3001/api/schedules/abc123/complete \
  -H "Content-Type: application/json" \
  -d '{"actualAmount": 280, "notes": "Plante en bonne santé"}'

🔐 SĂ©curitĂ©

Mesures Implémentées

  • Validation stricte : Tous les inputs validĂ©s avec Joi
  • Sanitization : Protection contre injections SQL/XSS
  • CORS configurĂ© : Origines autorisĂ©es uniquement
  • Rate limiting : Protection contre abus API
  • Conteneurs non-root : SĂ©curitĂ© renforcĂ©e Docker
  • Variables sensibles : Stockage sĂ©curisĂ© dans .env

Production

# HTTPS avec certificats SSL
# Reverse proxy Nginx
# Firewall conteneurisé
# Logs centralisés
# Monitoring sécurisé

🚀 DĂ©ploiement Production

Serveur VPS/Cloud

# 1. Préparation serveur
sudo apt update && sudo apt install docker.io docker-compose-plugin

# 2. Cloner et configurer
git clone https://repo.git && cd smart-watering
cp .env.example .env
# Éditer .env avec vos vraies configurations

# 3. Déploiement production
make deploy-prod

# 4. Configuration domaine + SSL
# Configurer DNS vers votre serveur
# Certificats SSL automatiques avec Certbot

Monitoring

# Déploiement avec monitoring
make deploy-monitoring

# AccĂšs aux interfaces
# Grafana:    http://votre-domaine:3001
# Prometheus: http://votre-domaine:9090

đŸ“± Évolutions Futures

Roadmap 2024

  • Application mobile React Native
  • Notifications push PWA + push notifications
  • API vocale IntĂ©gration assistants vocaux
  • IoT sensors Capteurs d'humiditĂ© du sol
  • Multi-utilisateurs Gestion des comptes
  • API publique Documentation OpenAPI
  • Machine Learning AmĂ©lioration algorithme IA

Contributions

Les contributions sont les bienvenues !

  1. Fork le projet
  2. Créer une branche feature (git checkout -b feature/AmazingFeature)
  3. Commit (git commit -m 'Add AmazingFeature')
  4. Push (git push origin feature/AmazingFeature)
  5. Ouvrir une Pull Request

📝 License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

  • OpenWeatherMap pour les donnĂ©es mĂ©tĂ©orologiques gratuites
  • Material-UI pour les composants React magnifiques
  • TypeScript pour la robustesse du code
  • Docker pour la simplicitĂ© de dĂ©ploiement
  • PostgreSQL pour la fiabilitĂ© des donnĂ©es

đŸŒ± DĂ©veloppĂ© avec ❀ pour un jardinage plus intelligent đŸŒ±

Documentation ‱ Issues ‱ Discussions

About

đŸŒ± SystĂšme d'arrosage intelligent avec IA mĂ©tĂ©orologique - React + Node.js + TypeScript + Docker

Resources

Stars

Watchers

Forks

Packages

No packages published