EasyDash est une interface domotique moderne, réactive et entièrement personnalisable conçue pour remplacer l'interface native de Jeedom. Elle se connecte directement à votre box via l'API REST ou WebSocket et vous permet de créer des dashboards sur mesure — idéaux pour une tablette murale ou un smartphone.
Non affilié à Jeedom SAS. EasyDash est un projet open source indépendant.
| Widget | Description |
|---|---|
| Info | Affiche la valeur d'une commande (température, humidité, état…) |
| Action | Déclenche une commande Jeedom (bouton, script…) |
| Toggle | Interrupteur on/off avec retour d'état visuel |
| Slider | Contrôle de valeur numérique (volume, luminosité…) |
| Scénario | Lance, arrête ou suit l'état d'un scénario en temps réel |
| Graphique | Historique d'une commande en courbe ou barres (Recharts) |
| Thermostat | Température actuelle, consigne, indicateur chauffe/clim |
| Caméra | Flux vidéo ou snapshot MJPEG/HTTP |
| Météo | Prévisions météo intégrées |
| Alarme | Activation/désactivation d'alarme avec code PIN sécurisé (SHA-256), card rouge quand armée |
| Volet / Portail | Boutons Ouvrir / Stop / Fermer, affichage de position en temps réel, curseur de positionnement optionnel |
Petit · Moyen · Grand · Large · Très Large — redimensionnables dans la grille par glisser-déposer.
- Multi-dashboards — créez autant de dashboards que vous voulez, organisez-les par pièce ou usage
- Glisser-déposer — réorganisez vos widgets librement en mode édition
- Swipe — naviguez entre dashboards par balayage sur mobile/tablette
- Images de fond — personnalisez le fond de chaque dashboard (via ImgBB)
- Favoris — épinglez vos widgets préférés sur un dashboard dédié
- API REST — connexion standard par clé API
- WebSocket (JSON-RPC) — mises à jour temps réel sans polling agressif
- Mode Proxy — résout les erreurs CORS quand EasyDash est sur un domaine différent de Jeedom
- Backoff automatique — protection anti-bannissement IP (gestion des erreurs consécutives)
- Cache intelligent — les données sont conservées lors de la navigation entre dashboards
- Web Push API — notifications push sur mobile/desktop même application fermée
- Clés VAPID — authentification sécurisée entre le serveur et les navigateurs
- Gestion multi-appareils — abonnez plusieurs appareils indépendamment
- Intégré au système d'alertes — une alerte déclenchée notifie tous les appareils abonnés
- Règles configurables — définissez des seuils (>, <, =) sur n'importe quelle commande Jeedom
- Sévérités :
info,warning,critical - Cooldown — évite le spam de notifications (délai entre deux déclenchements)
- Hysteresis — retour à la normale uniquement si la valeur s'éloigne suffisamment du seuil
- Historique — consultez les alertes passées dans l'onglet dédié des réglages
- Toast in-app — alerte affichée en temps réel dans l'interface
- PIN admin PBKDF2-SHA-256 — protège le mode édition et les paramètres (min. 6 caractères, anti-bruteforce 5 tentatives / 5 min)
- Code PIN alarme PBKDF2-SHA-256 — le code de désactivation n'est jamais stocké en clair (sel aléatoire, 100 000 itérations)
- En-têtes HTTP — CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy sur toutes les réponses
- Proxy caméra sécurisé — prévention SSRF, validation d'URL, restriction aux protocoles HTTP/HTTPS
- Clé API chiffrée — AES-GCM en localStorage, jamais exposée en clair
- TLS conditionnel — connexion sécurisée si votre Jeedom est en HTTPS
- Design sombre (dark mode natif)
- Mode Kiosque — plein écran + maintien d'écran allumé pour tablette murale
- PWA — installable sur mobile comme une application native, service worker actif
- Landing page — page d'accueil pour les nouveaux visiteurs avec démo en un clic
- Alertes batterie — notification automatique si un équipement est < 20 %
- Panel Santé — état du système Jeedom, ports USB, redémarrage, sauvegarde
- Export/import de la configuration en JSON
- Synchronisation Google Drive — sauvegardez et restaurez vos dashboards dans le cloud
- Choix entre Fusionner (ajoute sans écraser) ou Remplacer tout à l'import
docker run -d \
--name easydash \
-p 3000:3000 \
-e VAPID_PUBLIC_KEY=votre_cle_publique \
-e VAPID_PRIVATE_KEY=votre_cle_privee \
-e VAPID_SUBJECT=mailto:contact@exemple.fr \
-v easydash_push_data:/app/data \
--restart unless-stopped \
ghcr.io/nicolas62/easydash-app:latestservices:
easydash:
image: ghcr.io/nicolas62/easydash-app:latest
container_name: easydash_app
ports:
- "3000:3000"
environment:
- VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY}
- VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY}
- VAPID_SUBJECT=${VAPID_SUBJECT:-mailto:contact@exemple.fr}
volumes:
- easydash_push_data:/app/data
restart: unless-stopped
volumes:
easydash_push_data:docker-compose up -dAccès : http://votre-ip:3000
Les clés VAPID sont nécessaires pour activer les notifications push. Générez-les une seule fois :
npx web-push generate-vapid-keysCopiez Public Key dans VAPID_PUBLIC_KEY et Private Key dans VAPID_PRIVATE_KEY.
Sans clés VAPID, les push notifications sont désactivées. L'application fonctionne normalement sans elles.
Prérequis : Node.js 22+
# Cloner le dépôt
git clone https://github.com/nicolas62/Easydash-App.git
cd Easydash-App
# Installer les dépendances
npm install
# Lancer en développement
npm run devAccès : http://localhost:5173
Créez un fichier .env.local pour activer les push notifications en dev :
VITE_VAPID_PUBLIC_KEY=votre_cle_publique
VAPID_PRIVATE_KEY=votre_cle_privee
VAPID_SUBJECT=mailto:contact@exemple.frnpm run build
npm run start # Démarre le serveur Express sur le port 3000Au premier lancement, une landing page s'affiche. Vous pouvez :
- Essayer la démo — ouvre une démo en direct dans un nouvel onglet (aucune donnée sauvegardée)
- Commencer gratuitement — ouvre directement la configuration
Dans les réglages, renseignez :
| Champ | Description |
|---|---|
| URL Jeedom | Adresse de votre box (ex: http://192.168.1.10) |
| Clé API | Clé API Jeedom (Réglages → Système → Configuration → API) |
| WebSocket | Activez pour les mises à jour temps réel |
| Mode Proxy | Activez si EasyDash est sur un domaine différent de Jeedom (résout CORS) |
| Intervalle de refresh | Fréquence de mise à jour par polling (min. 30s) |
Le widget Alarme permet de piloter une alarme Jeedom avec protection par code PIN.
| Champ | Description |
|---|---|
| Commande Activer | ID de la commande action pour armer l'alarme |
| Commande Désactiver | ID de la commande action pour désarmer l'alarme |
| Commande État (optionnel) | ID de la commande info pour lire l'état réel |
| Valeur = armé | Valeur retournée par la commande État quand armée (défaut : 1) |
| Code PIN | Code de désactivation — stocké uniquement sous forme de hash SHA-256, jamais en clair |
Quand l'alarme est armée, la card devient rouge. Cliquer sur "Désactiver" demande le code PIN avant d'exécuter la commande.
Le widget Volet / Portail permet de piloter un volet roulant, une porte de garage ou un portail depuis Jeedom.
| Champ | Description |
|---|---|
| Commande Ouvrir (requis) | ID de la commande action pour monter / ouvrir |
| Commande Fermer (requis) | ID de la commande action pour descendre / fermer |
| Commande Stop (optionnel) | ID de la commande action pour stopper le mouvement — affiche un bouton Stop entre Ouvrir et Fermer |
| Position actuelle (optionnel) | ID de la commande info retournant la position en % (0–100) — affichée en temps réel |
| Définir la position (optionnel) | ID de la commande action (slider) pour envoyer une position cible — affiche un curseur 0–100 % |
| Technologie | Usage |
|---|---|
| React 19 + TypeScript 5.8 | Interface utilisateur |
| Vite 6 | Build et développement |
| Tailwind CSS 4 | Styles |
| Recharts | Graphiques d'historique |
| @dnd-kit | Glisser-déposer |
| Express 5 | Serveur Node.js + route proxy |
| web-push | Envoi de notifications push (VAPID) |
| Firebase | Authentification (optionnel) |
| vite-plugin-pwa | Support PWA + Service Worker |
| Web Crypto API | Hachage SHA-256 du code PIN alarme |
| Docker + ghcr.io | Déploiement containerisé |
| GitHub Actions | CI/CD (build + push automatique) |
- Code PIN admin : le mode édition et les paramètres sont protégés par un code PIN hashé PBKDF2-SHA-256 (min. 6 caractères). Anti-bruteforce : 5 tentatives → verrouillage 5 min. Section "Sécurité" dans les Paramètres.
- Session admin déverrouillée : une seule saisie par session, bouton cadenas dans le header pour re-verrouiller.
- Sécurité — code PIN alarme migré de SHA-256 non salé vers PBKDF2-SHA-256 (100 000 itérations, sel 16 octets), rétrocompatible.
- Sécurité — en-têtes HTTP : CSP, X-Frame-Options: DENY, X-Content-Type-Options: nosniff, Referrer-Policy.
- Sécurité — clé API ImgBB dans le corps POST (au lieu du paramètre d'URL), validation protocole URL caméra.
- Fix TypeScript : erreur
virtual:pwa-registercorrigée viatsconfig.json.
- Nouveau widget Volet / Portail : boutons Ouvrir / Stop / Fermer, position temps réel, curseur de positionnement optionnel (0–100 %)
- Mise à jour sécurité : vite 6.4.2 (GHSA-4w7w-66w2-5vf9, GHSA-p9ff-h696-f583), firebase 12.12.0 + override protobufjs ≥ 7.5.5 (GHSA-xq3m-2v4x-88gg)
- Suppression lodash des dépendances directes (non utilisé dans le code source)
- Suppression de l'intégration Google AdSense et des fichiers Android legacy
- Nouveau widget Alarme : activation/désactivation, état optionnel, card rouge quand armée
- Code PIN alarme sécurisé par hash SHA-256 (Web Crypto API) — jamais stocké en clair
- Correction Service Worker : re-activation du
registerSWpour maintenir le push entre les sessions - Correction état push "Non abonné" après rechargement de page (init optimiste depuis localStorage)
- Système d'alertes : règles configurables avec seuils, sévérité, cooldown, hystérésis
- Notifications Push (Web Push API + VAPID) : notifications même application fermée
- Gestion multi-appareils pour les abonnements push
- Historique des alertes consultable dans les réglages
- SEO amélioré : meta tags enrichis, JSON-LD
SoftwareApplication, landing page optimisée - Landing page entièrement refondue : démo, comparatif, FAQ, widgets démo visuels
- Page Mentions Légales (
/legal) - Démo accessible via
?demo=trueen nouvel onglet (sans persistance localStorage)
- Correction du mode édition : bouton flottant "Ajouter un widget"
- Heartbeat WebSocket : détection des connexions zombie et reconnexion automatique
- Import de configuration : choix Fusionner / Remplacer tout
- Pipeline CI/CD : build Docker automatique sur
ghcr.ioà chaque commit
- Nouveaux widgets : Caméra, Météo, Thermostat
- Connexion WebSocket JSON-RPC pour mises à jour temps réel
- Mode Kiosque : plein écran + maintien d'écran
- Cache intelligent entre dashboards
- Synchronisation Google Drive (sauvegarde/restauration)
- Rafraîchissement instantané au changement de dashboard
- Nouveau widget Graphique (historique)
- Onglet Santé : état système, maintenance Jeedom
- Amélioration du drag & drop
- Images de fond personnalisables
- Support complet des scénarios (lancement, arrêt, logs)
- Navigation par swipe sur mobile
- Mode Cycle (séquences d'actions multi-étapes)
- Widgets Info, Action, Toggle, Slider, Scénario
Les contributions sont les bienvenues !
- Forkez le dépôt
- Créez une branche (
git checkout -b feature/ma-fonctionnalite) - Committez vos changements
- Ouvrez une Pull Request
MIT — voir LICENSE
Fait avec ❤️ pour la communauté Jeedom · easydash.fr
