Application Next.js simple et moderne pour récupérer et afficher les données de chauffage solaire depuis my.solisart.fr.
- Next.js 14+ - Framework React avec App Router
- TypeScript - Typage statique
- Shadcn UI - Composants UI modernes
- Tailwind CSS - Framework CSS utility-first
- Playwright - Scraping web automatisé (optimisé pour Vercel avec configuration spéciale)
- Clerk - Authentification et gestion des utilisateurs
- Node.js 18+ et Yarn
- Git
git clone <votre-repo-url>
cd my-solisartyarn installLe navigateur Chromium est installé automatiquement lors de yarn install via le script postinstall. Si nécessaire, vous pouvez l'installer manuellement :
yarn playwright install chromiumNote pour Vercel : Le navigateur est également installé automatiquement lors du déploiement grâce à la configuration dans vercel.json.
-
Copiez le fichier d'exemple :
cp .env.example .env
-
Modifiez
.envavec vos identifiants et coordonnées :# Coordonnées GPS pour l'application météo WEATHER_LATITUDE=48.8566 WEATHER_LONGITUDE=2.3522 # Identifiants SOLISTAR SOLISTAR_ID=votre-email@example.com SOLISTAR_PASSWORD=votre-mot-de-passe # Clerk Authentication NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_... CLERK_SECRET_KEY=sk_test_... # Browserless.io (pour la production sur Vercel) # ⚠️ IMPORTANT : Collez votre clé API Browserless.io ici # Obtenez votre clé sur https://www.browserless.io/ # Format : BROWSERLESS_API_KEY=votre-cle-api-ici BROWSERLESS_API_KEY= # Pour tester Browserless.io en local, ajoutez : # USE_BROWSERLESS=true
- Créez un compte sur Clerk (gratuit jusqu'à 10 000 utilisateurs actifs/mois)
- Créez une nouvelle application dans le dashboard Clerk
- Récupérez vos clés API :
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY: Clé publique (commence parpk_test_oupk_live_)CLERK_SECRET_KEY: Clé secrète (commence parsk_test_ousk_live_)
- Ajoutez-les dans votre fichier
.env - Configurez les URLs de redirection dans Clerk :
- Sign-in redirect URL:
http://localhost:3000(dev) ou votre domaine de production - Sign-up redirect URL:
http://localhost:3000(dev) ou votre domaine de production
- Sign-in redirect URL:
yarn devL'application sera accessible sur http://localhost:3000
my-solisart/
├── app/
│ ├── api/
│ │ └── heating/
│ │ └── route.ts # API route pour récupérer les données
│ ├── globals.css # Styles globaux Tailwind
│ ├── layout.tsx # Layout principal
│ └── page.tsx # Page principale
├── components/
│ └── ui/ # Composants Shadcn UI
│ ├── card.tsx
│ └── badge.tsx
├── lib/
│ └── utils.ts # Utilitaires (cn function)
├── scripts/
│ └── scrape-heating.ts # Script Playwright pour le scraping
├── data/ # Dossier pour les données (non versionné)
├── .env # Variables d'environnement (non versionné)
├── .env.example # Exemple de variables d'environnement
└── package.json
L'application récupère automatiquement les données suivantes depuis my.solisart.fr :
- Panneaux solaires : Capteurs chaud/froid
- Ballon : Température solaire, appoint, origine, min, confort
- Chaudière : Température
- Radiateur : Entrée, sortie, origine, min, confort
- Thermomètres : Extérieur, intérieur
- Interface moderne avec Shadcn UI
- Cartes organisées par catégorie
- Badges pour les origines (Solaire, Solaire + appoint, Arrêt)
- Affichage automatique au chargement de la page
Note : Toutes les routes API nécessitent une authentification. Les requêtes non authentifiées recevront une erreur 401.
Récupère les données actuelles en exécutant le scraping avec Playwright (configuré pour fonctionner sur Vercel).
Authentification requise : Oui
Réponse :
{
"date": "2024-01-01T12:00:00.000Z",
"data": {
"panels": {
"hotSensor": 45.5,
"coldSensor": 20.3
},
"tank": {
"solar": 55.2,
"additional": 50.1,
"origin": "solar",
"min": 40,
"confort": 55
},
"boiler": 60.5,
"radiator": {
"inlet": 45.2,
"outlet": 42.1,
"origin": "solar",
"min": 18,
"confort": 20
},
"thermometer": {
"outdoor": 15.3,
"indoor": 20.5
}
}
}yarn build
yarn startConsultez le fichier SYNOLOGY.md pour les instructions détaillées.
- ✅ Authentification Clerk : Toutes les pages et routes API sont protégées
- ✅ Rate Limiting : Limitation des requêtes sur les routes d'import (5 requêtes/minute)
- ✅ Headers de sécurité : Protection contre les attaques XSS, clickjacking, etc.
- ✅ Variables d'environnement pour les identifiants
- ✅ Fichiers
.env*exclus du versionnement - ✅ Dossier
data/non versionné - ✅ Gestion d'erreurs appropriée
L'application utilise Clerk pour l'authentification. Toutes les routes sont protégées :
- Les pages redirigent automatiquement vers
/sign-insi l'utilisateur n'est pas authentifié - Les routes API retournent une erreur 401 si l'utilisateur n'est pas authentifié
- Le bouton de déconnexion est disponible dans le header
Les routes d'import (/api/import et /api/weather/import) sont protégées par un rate limiting :
- Maximum 5 requêtes par minute par utilisateur
- Retourne une erreur 429 avec un header
Retry-Aftersi la limite est dépassée
yarn dev- Démarrer le serveur de développementyarn build- Construire l'application pour la productionyarn start- Démarrer le serveur de productionyarn lint- Lancer le linter
- Vérifiez que les identifiants dans
.envsont corrects - Vérifiez que Playwright est installé :
yarn playwright install chromium - Consultez les logs de la console pour plus de détails
Si vous rencontrez des erreurs de permissions sur le dossier data/ :
chmod -R 755 dataEn développement local :
- Assurez-vous que les navigateurs Playwright sont installés :
yarn playwright install chromium - Vérifiez que vous avez les permissions nécessaires pour exécuter les navigateurs
En production (Vercel) :
- Le navigateur Chromium est installé automatiquement lors du déploiement via
vercel.json - La configuration utilise les arguments
--no-sandboxet--disable-setuid-sandboxpour la compatibilité serverless - Si vous rencontrez des erreurs :
- Vérifiez que la variable d'environnement
VERCELest bien définie - Consultez les logs de déploiement pour voir si l'installation de Chromium a réussi
- Assurez-vous que la fonction a suffisamment de mémoire (configurée à 1024MB dans
vercel.json)
- Vérifiez que la variable d'environnement
Ce projet est sous licence MIT.