Remarque initiale : Ce tutoriel vit la fois sur les forums ci-dessous donc n’hésitez pas à les consulter :
- Domo-blog.fr : http://www.domo-blog.fr/interface-graphique-consommations-temperatures-leedomus/
- Touteladomotique.com : http://www.touteladomotique.com/forum/viewtopic.php?f=82&t=15716
Présentation des fonctionnalités
- Import des consommations, des mesures de l'environnement (température, humidité, luminosité, ...) et d'événements divers depuis l'Eedomus
- Import et classement automatique par pièces et usages
- Calcul de la consommation en fonction des heures creuses et pleines
- Regroupement des relevé par type dans des onglets :
- Affichage d'un bilan énergétique pour des périodes prédéfinies (hier, semaine courante, semaine dernière, mois courant, mois dernier, année courante et année dernière)
- Affichage d'un top cinq des périphériques les plus coûteux
- Affichage d'un bilan par périphérique pour des périodes prédéfinies (hier, semaine courante, semaine dernière, mois courant, mois dernier, année courante et année dernière) et sur la période sélectionnée. On peut aussi cliquer sur la petite icône en bout de ligne pour afficher sous forme de graphique la consommation journalière de chaque périphérique.
- Affichage des consommations par pièces avec la possibilité de visualiser la consommation de chaque périphérique dans une pièce
- Affichage des consommations par usage avec la possibilité de visualiser la consommation de chaque périphérique pour un usage
- Affichage de la consommation en fonction du temps pour visualiser les temps et périodes de marche de chaque périphérique
- Affichage des températures et des consignes de chauffages en fonction du temps
- Affichage de la luminosité en fonction du temps (un palier de 30 lux a été appliqué afin de limiter les données affichées)
- Affichage de l'humidité en fonction du temps
- Affichage du C.O.2 en fonction du temps
- Affichage de la pression en fonction du temps
- Affichage du bruit en fonction du temps
- Affichage de la pluie en fonction du temps
- Affichage d'une time line des événements (changement de valeurs, déclenchement de scène, ...) des 10 000 derniers changements d’état/valeurs des périphériques (il faut jouer sur la période affichées pour voir les événements plus anciens)
- Filtre par périphériques, pièces et dates
- Affichage dynamique pour PC, tablette et smartphone
Mise en place
Pré-requis :
- Une box Eedomus
- Une base de donnée Mysql
- Un serveur php (pour moi se sera un NAS Synology)
- Les sources téléchargeables https://mon-partage.fr/f/dDxGZ6XG/
- Se connecter à l'interface de la base de données avec phpMyAdmin par exemple
- Créer une base de données avec l'encodage "utf8_genral_ci". Dans mon cas je l'ai appelée "historique_eedomus"
- Création des tables à l'aide du fichier "ddl.sql" présent dans les sources précédemment téléchargées
- Et voilà la base de données est opérationnelle
- Placer les sources sur votre serveur PHP et noter le chemin d'accès. Dans mon cas ce sera : http://XXX.XXX.X.XXX/eedomus/
- Ensuite ouvrez le fichier "parametres.php" qui se trouve dans le répertoire "sources" puis renseigner vos paramètres. ATTENTION : Il faut ue l'encodage soit en UTF-8 (avec notepad++ par exemple sa se fait tout seul)
- Pour gérer l'historique avec l'eedomus il faut accéder à l'API dans le cloud. Il faut donc que vous renseignez vos identifiants API. Vous pouvez les obtenir dans les paramètres expert d'un périphérique sur l'Eedomus puis en cliquant sur la petite clé devant le code API
- Code : Tout sélectionner
//******************** API eedomus ********************
// Identifiants de l'API eeDomus
$api_user = ''; //ici saisir api user
$api_secret = ''; //ici saisir api secret
- Renseignez ensuite vos identifiants MySql et le nom de la base de données que vous avez créée précédemment
- Code : Tout sélectionner
//******************** Parametres network ********************
//server MySQL
$server='localhost';
//MySQL login
$sqllogin=''; //ici saisir le user sql de phpmyadmin
//MySQL password
$sqlpass=''; //ici saisir le pass du user phpmyadmin
//MySQL dataBase
$dataBase='';
- Ensuite il faut mettre l'ensemble des codes API que vous souhaitez suivre. Attention à bien respecter le format décrit pour que cela fonctionne. Attention aussi car je n'ai géré que les périphériques que je possède (lampes avec et sans variateurs, prises murale avec mesure de la consommation et thermomètres), il est donc possible que tous les cas ne soient pas gérés
- Code : Tout sélectionner
//*************************************** codes api *************************
// Pour les périphériques électriques sans mesure de la consommation il faut saisir le code API
// dans "id" et la consommation maximum du périphérique et le type "consommation_theorique"
// Exemple pour un plafonnier de 200 wattts :
// array("id"=>999999,"conso"=>200, "type"=>"consommation_theorique")
// Vous pouvez aussi surcharger le libellé saisie dans l'eedomus ainsi :
// array("id"=>999999,"conso"=>200, "type"=>"consommation_theorique", "libelle"=>"Mon libelle personnalisé")
// Pour les périphériques électriques avec mesure de la consommation il faut saisir le code API
// dans "id" et le type "consommetre"
// Exemple pour une prise TV :
// array("id"=>999999, "type"=>"consommetre")
// Vous pouvez aussi surcharger le libellé saisie dans l'eedomus ainsi :
// array("id"=>999999, "type"=>"consommetre", "libelle"=>"Mon libelle personnalisé")
// Pour les thermomètres il faut saisir le code API dans "id", le type "temperature" et
// l'unité de mesure
// Exemple pour une thermomètre :
// array("id"=>999999, "type"=>"temperature", "unite"=>"°C"),
// Vous pouvez aussi surcharger le libellé saisie dans l'eedomus ainsi :
// array("id"=>999999, "type"=>"temperature", "unite"=>"°C", "libelle"=>"Mon libelle personnalisé")
// Pour les autres mesures d'environnements il suffit de remplacer le type et l'unité par celui souhaité
// Les type d'environnements pris en charge sont lister dans la variable $typeEnvironnement
// Vous pouvez rajouter les votre pour qu'ils soient sauvegarder en base de données. Par contre si vous
// souhaiter les visualiser par des graphiques il faudra que vous modifiez le code
// Il faut aussi modifier le colonne type de la table environnement pour quelle accepte votre nouveau type car il s'agit d'un enum
// Pour visualiser un périphérique dans l'onglet événement il suffit de lui rajouter le flag "evennement"=>true
// Exemple pour la lampe du salon :
// array("id"=>999999, "type"=>"consommation_theorique", "conso"=>200, "evennement"=>true)
// Si vous souhaitez suivre des périphériques autres (scène, volets, ...) dans l'onglets événements uniquement
// il suffit de ne pas reneigner de type
// Exemple :
// array("id"=>999999, "type"=>"", "evennement"=>true),
// Attention aussi il ne faut pas mettre des périphériques qui font de la consommation cumulée c'est
// à dire qui enregistrer jour après jour la consommation TOTAL et non la consommation
// journalière sinon sa ne marchera pas très bien ...
// Dans l'exemple ci-dessous il faut remplacer les 999999 par vos id de périphériques et il faut supprimer
// les lignes que vous n'utiliserez pas.
// ATTENTION : à la fin de chaque ligne il doit y avoir une virgule sauf pour la dernière ligne
$periphs= array(
// Lampes
// Salon
array("id"=>999999, "type"=>"consommation_theorique", "conso"=>200, "evennement"=>true),
// Prises
// Salon
array("id"=>999999, "type"=>"consommetre", "evennement"=>true, "unite"=>"Watt", "libelle"=>"Prise TV Salon"),
// Radiateurs
// Salon
array("id"=>999999, "type"=>"consommation_theorique", "conso"=>2000, "evennement"=>true),
// Températures
// Salon
array("id"=>999999, "type"=>"temperature", "evennement"=>true, "unite"=>"°C", "libelle"=>"Température Salon"),
// Consignes Températures
// Salon
array("id"=>999999, "type"=>"consigne_chauffage", "evennement"=>true, "unite"=>"°C"),
// Luminosité
// Salon
array("id"=>999999, "type"=>"luminosite", "evennement"=>true, "unite"=>"lux"),
// Volets
// Salon
array("id"=>999999, "type"=>"", "evennement"=>true),
// Centralisation
array("id"=>999999, "type"=>"", "evennement"=>true, "valeurs_ignorees"=>array("Auto")),
// Détecteur de mouvements
// Salon
array("id"=>999999, "type"=>"", "evennement"=>true, "libelle"=>"Mouvement Salon"),
// Scènes
// Bonne nuit
array("id"=>999999, "type"=>"", "evennement"=>true),
// Humidité
// Salon
array("id"=>999999, "type"=>"humidite", "evennement"=>true, "unite"=>"%", "libelle"=>"Humidité Salon"),
// C02
// Salon
array("id"=>999999, "type"=>"co2", "evennement"=>true, "unite"=>"ppm", "libelle"=>"C.0.2 Salon"),
// Niveau sonore
// Salon
array("id"=>999999, "type"=>"decibelmetre", "evennement"=>true, "unite"=>"dB", "libelle"=>"Niveau sonore Salon"),
// Pression
// Salon
array("id"=>999999, "type"=>"pression", "evennement"=>true, "unite"=>"hPa", "libelle"=>"Pression Salon"),
// Pluviomètre
// Extérieur
array("id"=>999999, "type"=>"pluviometre", "evennement"=>true, "unite"=>"mm", "libelle"=>"Pluviomètre Extérieur"),
// C02
// Salon
array("id"=>999999, "type"=>"qualiteAir", "evennement"=>true, "libelle"=>"Qualité air Salon")
);
// Type d'environnement possible
$typeEnvironnement = array("temperature","consigne_chauffage","luminosite","humidite","decibelmetre","pression","pluviometre", "co2");
// Type de consommation possible
$typeConsommation = array("consommation_theorique","consommetre");
- Et pour finir on renseigne les horaires des heures creuses et les tarifs des heures creuses et pleines. Attention aussi à bien respecter le format.
- Code : Tout sélectionner
//*************************************** Heures creuses *************************
// Permet de calculer les consommations en fonctions des heures creuses et pleines
// Il faut dans un premier temps renseigner le type de consommation. Pour cela il
// y a différent choix :
// classique : sans heures creuses
// => Il faut renseigner uniquement le tarif d'heures pleines et laisser vide le
// tableau d'heures creuses
//
// tranche : permet de calculer les consommations avec des heures creuses
// => Il faut renseigner le tarif d'heures pleines et le tableau d'heures creuses.
// pour chaque ligne du tableau d'heures creuses il faut mettre l'heure de début, de fin et le tarif
// ATTENTION : il faut découper les tranches de sortes à ce que la première tranche commence
// au minimum à 00h et la dernière tranche finisse maximum à 00h
// Exemple pour une tranche horaire d'heures creuses de 22h38 à 6h on renseigne comme suivant :
// $heures_creuses = array(
// array("debut"=>"00:00", "fin"=>"06:00","tarif"=>0.06936),
// array("debut"=>"22:38", "fin"=>"00:00","tarif"=>0.06936)
// );
// Exemple pour une tranche horaire d'heures creuses de 14h à 17h on renseigne comme suivant :
// $heures_creuses = array(
// array("debut"=>"14:00", "fin"=>"17:00","tarif"=>0.06936)
// );
$typeConso = "tranche"; // valeur possible : classique, tranche, tempo (non géré pour le moment)
$heures_creuses = array(
array("debut"=>"00:00", "fin"=>"06:00","tarif"=>0.06936),
array("debut"=>"22:38", "fin"=>"00:00","tarif"=>0.06936)
);
$prix_kwh_heures_pleines=0.1122;
- Pour cela il faut ajouter un nouvel Actionneur Http dans l'eedomus
- Il faut lui donner un petit nom, une pièce et un usage
- Dans les paramètres expert il faut mettre "Ignorer les erreurs" sur "Toujours"
- Ensuite on va dans l'onglet "Valeurs" et on ajoute un nouvelle valeur. Dans la colonne "URL", il faut mettre l'adresse de votre serveur Web (ex : http://XXX.XXX.X.XXX/). Et dans le colonne "Paramètres" on met le chemin (celui qu'on a noté tout à l'heure) vers le script d'import (ex : eedomus/importEedomus.php). Vous pouvez ensuite tester l'import en cliquant sur le bouton "Tester" (Ne pes faire cette dernière étape en cas de migration de v1 vers la v2)
Ne vous inquiétez pas si l’eedomus renvoit un message d’erreur. Le script étant exécuté sur le serveur, même si le temps dépasse 10 secondes, l’insertion des données fonctionne totalement (vous pouvez vérifier directement dans phpmyadmin).
- Pour finir on ajoute une règle pour l’exécution automatique du script toutes les 12 heures (à savoir que sans l'abonnement premium l'historique n'est gardé que 24h). Pour cela on clique sur l'onglet "Règles associées" puis sur "Nouvelle règle". Puis on la renseigne comme ci-dessous (pour les horaires mettre deux déclenchements par jour avec 12h d'intervalle soyer imaginatif pour ne pas tous mettre la même heure afin de ne pas surcharger les serveurs eedomus) :
Encore deux étapes :
Pour la sauvegarde du flux renvoyé par l'eedomus il faut donner les droits d'accès en lecture/écriture au processus HTTP au répertoire "data" des sources téléchargées.
Pour que la time line des événements soit jolie, je récupère les images des valeurs prédéfinies via l'API eedomus mais cela ne couvre pas tous les cas. Il faut donc faire des manipulations à la main dans la base de données ou via des requêtes SQL. Ces manipulations ne sont à faire qu'à l'ajout de nouvelle pièces et périphériques.
Voici la manipulation :
- Pour la récupération des images, on se connecte à l'interface eedomus
- On va sur la pièce ou le périphérique dont on veut récupérer l'image puis on fait clique droit puis "Copier l'URL de l'image"
- Attention : on ne conserve que la partie après "mdm/". Exemple : user/XXXX/lampe%20off.png
- Ensuite on se connecte à phpMyAdmin et on se positionne sur notre base de données
- Pour les pièces, on modifie la colonne image de la pièce voulu en y collant la partie de l'URL que l'on garde
- Pour les périphériques comme les thermomètres nous n'avons pas de valeurs prédéfinies donc l'API ne retourne aucune valeur. Il faut donc ajouter une image à la main avec la requête suivante en remplacant 999999 par l'id de votre périphérique et URL_IMAGE par la partie de l'URL récupérée ci-dessus :
- Code : Tout sélectionner
INSERT INTO `historique_eedomus`.`valeur_periph` (`peripherique`, `id_eedomus`, `libelle`, `image`) VALUES ('999999', '', 'DEFAUT', 'URL_IMAGE');
Maintenant il ne vous reste plus qu'a lancer l'application avec l'URL (ex : http://XXX.XXX.X.XXX/eedomus/) puis à profiter de l'ensemble des fonctions de l'application.
Si vous constatez des bugs n'hésitez pas à me les remonter, j'essayerai de les corriger autant que cela me sera possible.
Fonctionnement du script d'import
Pour ceux que sa intéresse voici comment fonctionne le script :
- Dans un premier temps il parcourt l'ensemble des périphériques que vous lui avez donné
- Ensuite pour chaque périphérique il regarde s'il est déjà connu en base de donnée, si ce n'est pas le cas il va chercher ses caractéristiques (pièces, usage, libellé, ...) et les insère en base
- Ensuite il va chercher l'historique sur l'eedomus et le parcourt pour l'insérer en base
- Si le périphérique est déjà connu il repart de la date de dernier import puis ajoute les nouveaux
- Pour la récupération des informations, il fait la différences entre les variateurs, les consomètres, les switch classiques et les thermomètres grâce aux infos que vous saisissez dans les paramètres du script.
[EDIT du 30/11/2014]
Je viens d'apporter plusieurs évolutions majeures :
- Récupération de l'ensemble des données via l'API eedomus même lorsqu'il y a plus de 10 000 relevés. Attention dans le cas où il y a beaucoup de données le script peut mettre plusieurs minutes à s’exécuter
- Possibilité d'avoir plusieurs tranches horaires dans une même journée. Pour le paramétrage voir l'article ci-dessus
- Optimisation de chargement de la page pour quelle se charge plus vite quand il y a beaucoup de données. Attention toute fois la page peut encore mettre de 30sec à 1minute pour se charger entièrement lorsque il y a beaucoup de données (ex: 400 000 points sur un graphique = 40sec ...). J'essayerai d'optimiser encore peu tout ça quand j'aurais plus de temps
- Ajout d'index en base de données pour accélérer le chargement de la page
Pour la mise en place de tout ça je vous conseil de vider votre base de données et de tout recharger (script dll.sql, import, ...)
[EDIT du 01/12/2014]
Nouvelle vague d'optimisations.
Pas besoin de tout réinitialiser, j'ai juste optimisé le chargement des graphiques
[EDIT du 31/01/2015]
Je viens de publier la v2 ainsi qu'un article pour la migration depuis la v1.
Cette article a été mis à jour pour permettre une mise en place depuis rien.
L'article pour la migration ce trouve ici : http://forum.eedomus.com/viewtopic.php?f=12&t=2398