VOUS ÊTES ICI: Accueil » Blog » Domotique » Eedomus » Interface graphique des consommations et températures pour l’Eedomus
Eedomus

Interface graphique des consommations et températures pour l’Eedomus

Pour mon premier article sur la domotique je vais vous présenter une petite application que je viens de développer pour me permettre de visualiser facilement ma consommation électrique, l’environnement et les événements mesurés dans mon appartement grâce à l’.

Remarque initiale : Ce tutoriel vit la fois sur les forums eedomus et touteladomotique.com donc n’hésitez pas à les consulter.

Interface graphique eedomus

Présentation des fonctionnalités

    • Import des consommations, des mesures de l’environnement (, 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 :
      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)

Récapitulatif par périodes

    • Affichage d’un top cinq des périphériques les plus coûteux

Top cinq des consommations

    • 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 la consommation journalière de chaque périphérique.

Bilan par périphérique
Bilan par périphérique par jour

    • Affichage des consommations par pièces avec la possibilité de visualiser la consommation de chaque périphérique dans une pièce

Consommation par pièces
Consommation dans une pièce

    • Affichage des consommations par usage avec la possibilité de visualiser la consommation de chaque périphérique pour un usage

Conommation par usage
Consommation 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

Détail de la consommation dans le temps

    • Affichage des températures et des consignes de chauffages en fonction du temps

Détail des températures et des consignes de chauffages dans le 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)

Détail de la luminosité dans le temps

    • Affichage de l’humidité en fonction du temps

Détail de l'humidité dans le temps

    • Affichage du en fonction du temps

Détail du C.O.2 dans le temps

    • Affichage de la en fonction du temps

Détail de la pression dans le temps

    • Affichage du en fonction du temps

Détail du bruit dans le temps

    • Affichage de la pluie en fonction du temps

Détail de la pluie dans le 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)

Evénements

    • Filtre par périphériques, pièces et dates

Filtre par périphériques et pièces
Filtre par dates

    • Affichage dynamique pour PC, tablette et smartphone

Affichage smartphone

Mise en place

Pré-requis :

  • Une box Eedomus
  • Une base de donnée Mysql
  • Un serveur (pour moi se sera un NAS Synology)
  • Les sources téléchargeables ici

Installation de la base de données :

    • 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 de la base de donnée

  • Création des tables à l’aide du fichier « ddl. » présent dans les sources précédemment téléchargées
  • Et voilà la base de données est opérationnelle

Installation de l’application sur un serveur PHP :

  • 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

    Trouver les user et mdp API
    User et mdp API

    //******************** 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


    //******************** 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


    //*************************************** 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"=>"", "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.


    //*************************************** 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;

Import des données depuis l'eedomus :

    • 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"

Ajouter un actionneur HTTP

    • 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 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)

Ajout valeur actinneur HTTP

Info 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) :

Règle actionneur HTTP

Encore une étape (facultative) :

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
    Ajout image pièces
  • 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 : INSERT INTO historique_eedomus.valeur_periph (peripherique, id_eedomus, libelle, image) VALUES ('999999', '', 'DEFAUT', 'URL_IMAGE');
  • Lancer l'application :

    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.

    Voilà pour la petite histoire !

    [highlight bgcolor="#dd9933" txtcolor="#ffffff"]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, ...)

    [highlight bgcolor="#dd9933" txtcolor="#ffffff"]EDIT du 01/12/2014

    Nouvelle vague d'optimisations.
    Pas besoin de tout réinitialiser, j'ai juste optimisé le chargement des graphiques

    [highlight bgcolor="#dd9933" txtcolor="#ffffff"]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 :

    Abonnez vous
    NE MANQUEZ
    PLUS RIEN
    Recevez les prochains
    articles par mail
    JE M' ABONNE
Abonnez vous
NE MANQUEZ
PLUS RIEN
Recevez les prochains
articles par mail
JE M' ABONNE
close-link
NOEL 2 DOMO-BLOG

Venez Jouer
avec nous !

Cette année Noel sera connecté
JOUER
#Noel2DOmoBlog
close-link