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 :

    Restez connecté aux nouveautés domotiques, inscrivez-vous à notre newsletter

A propos de cet auteur

Damien

Damien

Passionné d’informatique et étant ingénieur dans le même domaine, je me suis lancé dans l’aventure domotique il y a quelques mois. C’est donc naturellement que j’ai commencé à développer quelques fonctionnalités, que je souhaite partager avec vous !!

68 Comments

Cliquez ici pour poster un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

  • Merci pour le partage, travail admirable (bootstrap + Jquery + highcharts). Possible que tu me MP pour échanger, j’avais commencé un peu le même dev et j’aurai quelques questions ?

  • Excellent tuto & travail !!
    Pour avoir commencé a faire qq chose de similaire je sais de quoi je parle. Highchart n est pas évident a mettre en place.
    Par contre serait il possible SVP de mettre les sources sur un autre hebergeur. SendBox a une limitation sur le nombre de telechargement.

  • Salut,

    J’ai un message d’erreur, ca n’exporte pas vers ma BDD. J’ai ce message lors du test :

    Notice: Undefined index: id in /volume1/web/eedomus/importEedomus.php on line 18

    Notice: Undefined index: id in /volume1/web/eedomus/importEedomus.php on line 21

    Notice: Undefined property: stdClass::$history in /volume1/web/eedomus/importEedomus.php on line 23

    Notice: Undefined index: id in /volume1/web/eedomus/importEedomus.php on line 35
    Erreur SQL avec la requete : SELECT MAX(`date_fin`) as `date_fin` FROM `consommation` where `peripherique` = You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near  » at line 1

    Une idée ?

    Merci

    • Salut,

      Je penses que tu as une erreur dans le fichier parametres.php car dans la requête il manque l’id du périphérique.
      Vérifie le bien. SI tu trouve pas transfère moi ton fichier.

      Bonne soirée

  • Pour ceux qui ont l erreur du style:

    Parse error: syntax error, unexpected T_OBJECT_OPERATOR in /share/MD0_DATA/Web/eedomus/sources/fonctions.php on line 192

    Cela vient d une version de PHP trop ancienne (NAS non mis a jour par exemple ^^)

    Pour contourner il suffit de modifier ou créer un fichier .htaccess dans le root directory eedomus et rajouter les lignes suivantes:

    SetEnv PHP_VER 5
    AddType x-mapp-php5 .php

  • ATTENTION ATTENTION ATTENTION !!!!!!

    Eedomus vient d’inverser l’ordre de l’historique via l’API afin de retourner en premier les derniers historiques.

    J’ai donc dû prendre en compte cette modification dans mon script car sa cassait tout !!!!!!

    Il faut donc que vous retéléchargiez mes sources et si le scripts d’import a déjà été lancé aujourd’hui il faudra vider les tables dans la base de données puis relancer un import général …

    Le lien des nouvelles sources : https://mon-partage.fr/f/lUCx9a4f/

  • Pour revenir a l erreur Parse error: syntax error, unexpected T_OBJECT_OPERATOR pour une meilleure compatibilité avec les differents systemes, notemment versionning de php, peut etre faut il passer par des variables intermédiaires.

    La ligne 192 du fichier fonction.php:
    $nbJourDiff = (new DateTime(date(« Ymd », $dateDebutTime)))->diff(new DateTime(date(« Ymd », $dateFinTime)))->days;

    deviendrait ces lignes:
    $v1_nbJourDiff = (new DateTime(date(« Ymd », $dateDebutTime)));
    $v2_nbJourDiff = $v1_nbJourDiff->diff(new DateTime(date(« Ymd », $dateFinTime)));
    $nbJourDiff = $v2_nbJourDiff->days;

    Juste une suggestion.

  • bsr
    j’ai essayer d emettre en place votre solution
    voila le message d’erreur que j’ai

    Notice: Trying to get property of non-object in /volume1/web/eedomus/importEedomus.php on line 155 Notice: Trying to get property of non-object in /volume1/web/eedomus/importEedomus.php on line 155 Erreur SQL avec la requete : SELECT MAX(`date_fin`) as `date_fin` FROM `consommation` where `peripherique` = 999999
    No database selected

    voila ce que j’ai mis dans parametre.php

    //server MySQL
    $server=’localhost’;
    //MySQL login
    $sqllogin= »; //chris
    //MySQL password
    $sqlpass= »; //christophe
    //MySQL dataBase
    $dataBase= »; //historique_eedomus

    $periphs= array(
    // Lampes
    // Salon
    array(« id »=>999999, »conso »=>200),
    // Cuisine plafonnier
    array(« id »=>999999, »conso »=>160),
    // Cuisine LED
    array(« id »=>999999, »conso »=>12),
    // Chambre
    array(« id »=>999999, »conso »=>15),
    // Salle de bain
    array(« id »=>999999, »conso »=>12),
    // Prises
    // Salon
    array(« id »=>104365, « libelle »=> »Prise TV »),
    // Radiateurs
    // Salon
    array(« id »=>999999, »conso »=>2000),
    // Chambre
    array(« id »=>999999, »conso »=>1000),
    // Salle de bain
    array(« id »=>999999, »conso »=>500),
    // Températures
    // Salon
    array(« id »=>999999, »libelle »=> »Température Salon », « temperature »=>true),
    // Chambre
    array(« id »=>999999, »temperature »=>true),
    // Salle de bain
    array(« id »=>999999, »temperature »=>true),
    // Extérieur
    array(« id »=>999999, »libelle »=> »Température Extérieur », « temperature »=>true)

    je n’en ai mis que un pour l’instant
    pouvez vous m’aider
    merci a vous

    • Salut,

      Il faut mettre comme cela :

      //MySQL login
      $sqllogin= ‘chris’;
      //MySQL password
      $sqlpass= ‘christophe’;
      //MySQL dataBase
      $dataBase= ‘historique_eedomus’;

      Pense aussi a renseigner tes id de périphérique en remplacant les 999999 par les tiens

  • merci c’est ok
    je recupere su mon eedomus les donnees de mon ecodevices

    ce que je ne comprend pas c’est que la valeurs enregistree sur la eedomus ne correspond pas a ce que je recupere avec votre solution

    avez vous deja eu ce pb
    cdt

  • [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, …)

  • Génial je suis en train d’adopter tout ça l’interface est vraiment sympa, à mon sens il manquerai juste la possibilité de rapatrier les cumuls de pluviométrie et ce serai parfait!. en tout cas très beau travaille de ta part et merci du partage 😉
    juste une chose quand je fais mon importeedomus j’ai le message suivant je sais pas si c’est important car cela à l’air de fonctionner quand même sur synology dsm5.1 5004.
    Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 Notice: Undefined property: stdClass::$history in /volume1/web/script/consoeedomus/importEedomus.php on line 43 1

  • D’abord bravo et un grand merci pour ce développement remarquable. J’ai commencé la mise en oeuvre qui fonctionne correctement avec les températures (intérieur et extérieur) par contre je rencontre un problème avec la récupération des mesures d’énergie de mon Home Energy Meter d’Aeotec. Je ne récupère que 4 enregistrement alors qu’avec un export Excel j’en récupère 7430.
    De plus les valeurs récupérées ne correspondent à aucune valeur de mon fichier Excel. L’id périphérique est pourtant correct, je ne vois pas quelle est la cause de ce problème.

    Une idée ?

      • J’avais oublié le .com . Voici ce que j’obtiens en réponse:

        { « success »: 1, « body »: { « history »: [ [« 0″, »2014-11-29 02:46:43 »], [« 2097.152″, »2014-11-29 02:46:06 »], [« 0″, »2014-11-27 20:07:42 »], [« 20971.52″, »2014-11-27 20:07:06 »], [« 0″, »2014-11-27 19:18:26 »], [« 16777.216″, »2014-11-27 19:17:49 »], [« 0″, »2014-11-27 09:19:57 »], [« 0.256″, »2014-11-27 09:19:21 »], [« 0″, »2014-11-18 16:56:36 »]] } }

  • Cela montre bien que 4 valeurs possibles …
    Du [« 0?, »2014-11-29 02:46:43?] au [« 2097.152?, »2014-11-29 02:46:06?]
    Du [« 0?, »2014-11-27 20:07:42?] au [« 20971.52?, »2014-11-27 20:07:06?]
    Du [« 0?, »2014-11-27 19:18:26?] au [« 16777.216?, »2014-11-27 19:17:49?]
    Du [« 0?, »2014-11-27 09:19:57?] au [« 0.256?, »2014-11-27 09:19:21?]
    Du [« 0?, »2014-11-18 16:56:36?] pas de valeur final …

    • J’ai trouvé l’erreur. Mon périphérique (id=130274) possède deux canaux associés à des sondes (pince ampèremétrique).
      Le canal « pince n° 3 » (id=130276) me donne bien toutes les valeurs. Lorsque je teste l’url http://192.168.1.253/eedomus/importEedomus.php, les tables sont bien renseignées avec toutes les valeurs.

      Il me reste un problème concernant le déclenchement du script php à partir de l’actionneur http. Lorsque je teste l’actionneur (après avoir vidé les tables de la base), j’obtiens en retour une page avec du code html dans lequel figurent des erreurs mais pas une donnée n’est chargée dans les tables.

      Voici le code html qui est retourné:
      

      ( ! ) Warning: mysqli::mysqli() [mysqli.mysqli]: (28000/1045): Access denied for user ‘root’@’192.168.1.253’ (using password: YES) in E:\dev\wamp\www\eedomus\importEedomus.php on line 7
      Call Stack
      #TimeMemoryFunctionLocation
      10.0016425200{main}( )..\importEedomus.php:0
      20.0226519968mysqli->mysqli( )..\importEedomus.php:7

      ( ! ) Warning: mysqli::set_charset() [mysqli.set-charset]: Couldn’t fetch mysqli in E:\dev\wamp\www\eedomus\importEedomus.php on line 8
      Call Stack
      #TimeMemoryFunctionLocation
      10.0016425200{main}( )..\importEedomus.php:0
      20.0330520392mysqli->set_charset( )..\importEedomus.php:8

      ( ! ) Warning: mysqli::query() [mysqli.query]: Couldn’t fetch mysqli in E:\dev\wamp\www\eedomus\sources\fonctions.php on line 363
      Call Stack
      #TimeMemoryFunctionLocation
      10.0016425200{main}( )..\importEedomus.php:0
      20.2157553152recuperationCaracteristiques( )..\importEedomus.php:18
      30.2157554752insertSQL( )..\importEedomus.php:176
      40.2158554784mysqli->query( )..\fonctions.php:363

      ( ! ) Warning: insertSQL() [function.insertsql]: Couldn’t fetch mysqli in E:\dev\wamp\www\eedomus\sources\fonctions.php on line 363
      Call Stack
      #TimeMemoryFunctionLocation
      10.0016425200{main}( )..\importEedomus.php:0
      20.2157553152recuperationCaracteristiques( )..\importEedomus.php:18
      30.2157554752insertSQL( )..\importEedomus.php:176

      Erreur SQL avec la requete : INSERT INTO `piece` (`id`,`libelle`) VALUES (14298,’Maison’) ON DUPLICATE KEY UPDATE `libelle`=’Maison’;

      • La première ligne de l’erreur est parlante : Access denied for user ‘root’@’192.168.1.253?
        Tu dois avoir une erreur dans le login/mdp ou l’URL de ta base de donnée

      • Comme toi, c’est la première erreur qui m’a sauté au yeux et cela m’aurait arrangé que ce soit cela. Mais lorsque je lance le script php à partir d’un navigateur cela fonctionne correctement. Le script fait appel au même fichier paramètres dans lequel figurent le compte root et son mot de passe.

        D’autre part si tu regarde dans la suite du message html tu vois que le script a continuer à se dérouler car il y a d’autres erreur ex:
        Erreur SQL avec la requete : INSERT INTO `piece` (`id`,`libelle`) VALUES (14298,’Maison’) ON DUPLICATE KEY UPDATE `libelle`=’Maison’;

        Ceci semble confirmer qu’il ne s’agit pas d’un problème de droit d’accès à la base. Le problème est plus complexe et pour l’instant je ne vois pas quelle en est la cause.

      • Finalement c’est bien un problème d’accès à la base. Maintenant mon script lancé par un navigateur me retourne l’erreur : Access denied for user ‘root’@’192.168.1.253’ (using password: YES). C’est plutôt rassurant.

        Par contre la ou cela se complique c’est qu’avec un outil comme MySQLWorkbench j’arrive bien à me connecter avec le mot de passe du compte root qui est le même que dans le fichier paramètre ??? De plus le script a déja fonctionné une fois . Je ne vois pas ce qui a changé dans ma configuration ??? Je continue a investiguer.

      • Bingo:

        Ça marche quand je met 127.0.0.1:3306 comme adresse serveur. (idem que pour la connexion avec MySQLWorkbench. C’est une solution de contournement, il faut que je comprenne pourquoi cela ne marche pas lorsque je mets l’adresse IP de mon serveur.

  • Bonjour,

    pour les problèmes Access denied for user ‘root’@’192.168.1.253?, il faut créer un user ‘root’@’192.168.1.253’ dans la base de données avec les droits full.
    Sinon, aucune donnée de températures se chargent, voici ma conf :
    $periphs= array(
    // Prises
    // Salon
    array(« id »=>9999, »libelle »=> »Prise TV »),
    // Cuisine
    array(« id »=>99998, »libelle »=> »Prise Combine »),
    // Temperatures
    // Sejour
    array(« id »=>999788, »temperature »=>true),
    // Cuisine
    array(« id »=>997788, »temperature »=>true),
    // Exterieur
    array(« id »=>778899, »libelle »=> »Temperature Exterieure », « temperature »=>true)

    Avez vous une idée ?

    Merci

    • J’ai créé le nouveau user root @ 192.168.1.253 et maintenant l’import fonctionne.
      Merci , j’ai appris quelque chose sur les droits Mysql.

      Patrice

  • Bonjour,

    pour les températures, c’est bon, les données arrivent. Faut il attendre un certain temps ?
    J’ai un suivi d’une prise via Aeon_Labs_Smart_Energy, mais aucune donnée n’est remontée. Ai je raté quelque chose ? Une configuration spécifique pour ce module ?

    Merci d’avance.

    • Bonsoir,

      Rien de spécifique normalement pour ce type de périphérique mise à part que pour ma part je n’ai pas mis l’ID du périphérique mais l’ID du consommètre lié à se périphérique dans l’eedomus. En faite quand tu ajoute se périphérique sa crée automatiquement un autre autre périphérique qui mesure la consommation.

      Bonne soirée

  • Salut,
    Merci pour les sources, merci pour le tutoriel .
    Est ce que tu penses mettre les sources en gestion de configuration, sous Github par exemple, pour qu’on puisse collaborer ?

    Matt

    • Bonsoir,

      Un grand merci pour cet excellent travail.
      Derniere version installée : 1.07
      J’ai positionné l’ensemble ‘Serveur Web + Apache + PHP’ sur ma raspberry et cela semble fonctionner.
      J’ai des timeout mais on va laisser tourner un peu…

      D’accord avec Matt pour Github…..

      Denis

      • Bonjour,

        Les timeout sur l’eedomus sont normal moi j’ai réglé pour ne plus les afficher car s’était un peu chiant …

        Pour Github, je ne suis pas pour pour l’instant car je veux pouvoir avoir mon propre code pour mon usage indépendamment de ce que vous pourriez faire. En revanche si vous souhaitez en faire un pour vous pas de soucis.

        D’ailleurs je pense mettre une nouvelle version de mon appli d’ici la fin du mois avec plein de nouveauté.

        Bonne journée !

  • Bonjour,

    J ai un petit soucis avec ce programme.
    J ai installé MariaDB et MyPhpAdmin sur mon NAS Syno.
    J ai configuré mon fichier mais losque je veux acceder a http;/IP/eedomus j ai ce message:

    Erreur SQL avec la requete : SELECT MIN(c.`date_debut`) as dateDebut, MAX(c.`date_fin`) as dateFin FROM `consommation` c
    Table ‘historique_eedomus.consommation’ doesn’t exist

    Lorsque j accede à http://IP/eedomus/importEedomus.php j ai cela:
    Erreur SQL avec la requete : INSERT INTO `piece` (`id`,`libelle`) VALUES (11992,’terrasse’) ON DUPLICATE KEY UPDATE `libelle`=’terrasse’;
    Table ‘historique_eedomus.piece’ doesn’t exist

    Une petite idée ?
    Merci d avance et merci pour tout ce travail partagé.

    Matt

    • as-tu bien executé cette étape ? Il semblerait que les tables n’existent pas :
      « Création des tables à l’aide du fichier « ddl.sql » présent dans les sources précédemment téléchargées »

  • Re-bonjour,

    Bon finalement j ai trouvé mon erreur, j avais simplement oublié d importer la base SQL…
    Tout va bien donc, encore merci pour ce travail.

    Matt

  • Bonjour,

    avez vous des modules Qubino (type volet roulant) dans vos stats ? J’en ai deux, et les stats ne me semblent pas correctes ?
    Y a t’il une configuration spécifique ?

    Merci d’avance.

    • Bonjour,

      J’ai des modules volets Fibaro mais les valeurs dans l’historique eedomus sont incohérente pour relever la consommation donc je ne les ai pas intégrées.

      Bonne journée !

  • Pour les modules Fibaro, les valeurs sont correctes. Je n’ai pas réussi à intégrer la smart enegy d’Aeton. Au niveau de la box, j’ai les valeurs.
    Via l’application, il ne m’affiche rien.
    As tu essayé avec des prises enocean ?

  • bonsoir`j’avais une petite question, sur une prise commandée sans mesure de consommation j’avais donc déclaré le périphérique dans le fichier parametres.php comme cela :
    array(« id »=>155662, « type »=> »consommation_theorique », « conso »=>21, « evennement »=>true),

    sauf que l’ajout de la ligne dans le fichier j’avais mis en valeur de conso 200 avant de m’en apercevoir une fois les 1ers imports en bdd faits. j’ai modifié la valeurs dans le fichier parametres.php mis j’ai l’impression que le changement ne se répercute pas sur le calcul dans la bdd….il faudrait modifier la valeur manuellement dans la base sql ?

  • Le calcul de la conso est fait a l’importation et le résultat est stocké en bdd. Donc si tu change la valeur sa impactera que les prochains imports.

    pour corriger ton problème il faut que tu supprime les valeurs en base de données.

  • bonjour, et bon boulot !
    je suis en train de mettre en place ton appli sur mon syno.
    je te proposerai bien 2 évolutions à faire dans ta todo liste, et pourquoi pas y contribuer :
    1. ajouter de la sécurité login/pwd, le fichier .htaccess fait très bien son travail (petite MAJ), ou implémenter directement sur l’interface web (MAJ modérée)
    2. Intégrer le paramétrage api box/modules directement dans la BDD, ainsi que les heure creuses. Cela implique le développement d’une interface et table de paramétrage (grosse MAJ) si besoin d’aide…

    Le fichier de paramétrage ne servirait donc qu’à la connexion.
    Car là tous ceux qui n’ont pas de sécurité, dévoile à monsieur Google (la terre donc) tout les code API…

    Bonne continuation
    Julien

    • Salut,

      Merci pour ton retour !
      Pour le .htaccess je suis preneur, sa faisait partie de ma totolist mais je n’ai pas pris le temps de m’en occuper.
      Pour le deuxième point pourquoi pas mais je n’ai vraiment pas le temps de faire ce développement et je ne suis pas sur qu’il apporte une grosse plus value car on y touche pas souvent au fichier … mais après si tu te sens de le faire hésite pas !!

      Bonne soirée !

  • Excellent développement et tuto. Merci !!
    Je viens de mettre en place sur Syno et ça semble bien fonctionner.
    J’ai juste une question :
    Mes relevés de conso sur prises télécommandées avec conso théorique fonctionnent bien.
    En revanche, mes remontées de consommètres de la multiptrise GreenWave, ne semblent rien donner.
    Ces 6 consommètres n’ont pas d’affectation de pièce sur Eedomus donc ils aparaissent dans TECHNIQUE.
    Dans le script parametres.php, j’ai indiqué les ID de ces consommètres et ai indiqué les pièces où se trouvent les appareils.
    Merci pour vos retours,
    Max

  • Complément à mon commentaire ci-dessus, en effet, les relevés de consommation de ces consommètres semblent bien enregistrés dans la BD SQL, mais dans la table périphériques, je ne les vois pas… Merci 🙂

  • Super boulot !!! Merci pour le partage! Y a t il un moyen de récupérer l’historique des températures extérieures issues de l’objet « Météo temperature ». Dans mon cas, seul la date du jour est chargée via le script. Est-ce un limitation de l’API ? Je suis en abonnement premium…. donc pas de limitation de ce coté là.

    Merci pour ton retour,
    Vincent

  • bonjour, je suis en train de mettre en place ce relevé et je rencontre un probleme.
    je vois que si coupure internet, il n’est finalement pas possible de récupérer l’historique.
    ne pourrait on pas faire une base temporaire qui récupère toutes les valeurs et traiter ensuite cette base pour faire l’historique.
    biensur il faudrait la purger de temps en temps.

    cette modification ne permettrait pas de s’affranchir de la limitation de requête API?

      • sauf que l’api locale ne permet pas faire la requête d’historique des périphériques.
        Par conséquent le script ne remplit pas la bas sql

      • Ah oui, j’avais oublié ce détail 🙂 je n’ai pas d’autres solutions, sinon clé 3g et hop plus de perte même en cas de coupure adsl et en plus tu sécurise le système

  • Salut tout le monde,

    Je reviens vers vous car j’ai été contacté par Eedomus concernant mon script car il rencontre quelques soucis avec la charge indu par mon script sur leur API. En effet nous avons tous mis la même horaire pour l’exécution du script et j’avais omis de vous préciser une petite config. De plus nous avons donc regardé ensemble pour voir comment améliorer les choses tout en gardant le même niveau de service pour l’utilisation de l’API. En effet dans l’état actuel eedomus pourrait être amener à limiter d’avantage l’API pour les non abonnés afin que leur serveur tiennent la route.

    PAS DE PANIQUE !

    Voilà ce que vous devez tous faire pour ne pas que cela arrive 🙂

    1/ Sauvegarder votre fichier « parametres.php »

    2/ Télécharger la nouvelle version du script : https://mon-partage.fr/f/dDxGZ6XG/
    3/ Mettre à jour tous les fichiers et recopier votre configuration dans le nouveau fichier « paramètres.php ». Aucune manipulation à faire sur la base de données.

    4/ Modifier la règle lié à votre actionneur HTTP dans l’interface eedomus qui permets de lancer l’exécution du script afin de mettre des horaires différents en gardant 2 horaires par jours et à 12h d’intervalle (voir le tuto il a été mis à jour). Soyer un peu créatif pour ne pas tous mettre le même horaire 🙂

    5/ Modifier les paramètres expert de l’actionneur HTTP qui lance le script pour positionner « Ignorer les erreurs » sur « Toujours » afin que le script ne s’exécute pas en boucle quand il met du temps à répondre (voir le tuto il a été mis à jour)

    Et voilà tout ça devrait permettre d’améliorer la charge des serveurs eedomus et de garder un niveau de service correct.

    Merci d’avance à tout le monde pour cette manipulation et n’hésitez pas à venir vers moi si vous avez des soucis.

    Bonne soirée !

    PS : j’ai ajouté un paramètre dans le fichier « parametres.php » afin de pouvoir désactiver la sauvegarde des requêtes dans le répertoire « data ».

    • bonjour a toi

      en fait si je comprend bien c’est au niveau de la mise a jour des donnees
      moi en fait je n’utilise pas la eedomus pour faire c’est mise a jour ,mais mon syno ,donc j’ai change les horaires
      faut il quand meme mettre le pactage a jour ?
      merci a toi

  • Bonjour Damien, j’utilise ton script depuis quelques mois sur un serveur dédié et je pensais y apporter des modification.
    Mais plutôt que de le faire de mon côté je pensais qu’il serait bon de mettre ton script sur github pour que cela profite à tous.
    Je peux m’en charger si tu le souhaite tout en te laissant la paternité de l’objet 🙂

Choix box domotique
promos domotique
promos domotique