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’#eedomus.
Remarque initiale : Ce tutoriel vit la fois sur les forums eedomus et touteladomotique.com donc n’hésitez pas à les consulter.
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 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 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
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
//******************** 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"=>"#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.
//*************************************** 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"
- 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)
- 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 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
- 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');
- 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.
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 :
Voilà pour la petite histoire !
[highlight bgcolor="#dd9933" txtcolor="#ffffff"]EDIT du 30/11/2014Je 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/2014Nouvelle vague d'optimisations.
Pas besoin de tout réinitialiser, j'ai juste optimisé le chargement des graphiques
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.
Merci pour l’article.
Un peu complexe, mais je l’appliquer chez moi
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 ?
Merci pour ton retour :). Que veux-tu savoir sur mon travail ?
Quel est ton pseudo sur le forum eedomus ? , je te MP, on sur l’email de ce commentaire.
Je peux héberger ton script sur le serveur de mon futur site de vulgarisation domotique si tu le souhaites (www.domotique-pour-tous.com, down pour le moment.).
Mon pseudo c’est “pacific_boy”
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.
Je viens de changer d’hébergeur : https://mon-partage.fr/f/MxiY2S14/
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
Je l’ai deja verifier mais je ne trouve pas l’erreur. Comment puis je t’envoyer mon fichier ?
Merci
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
Merci pour ce complément !
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.
Il serait peut etre intéressant d integrer les courbes de conso elect dans le meme graph que les temperatures.
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
Peux-tu me donner plus de détail car j’ai du mal à visualiser le problème ?
[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
Il doit y avoir un problème avec certains périphérique car j’avais eu cette erreur quand l’API eedomus renvoyait une erreur …
[EDIT du 01/12/2014]
Nouvelle vague d’optimisations.
Pas besoin de tout réinitialiser, j’ai juste optimisé le chargement des graphiques
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 ?
Merci pour ton retour 🙂
Pour ton problème aurais-tu un exemple d’historique retourner par l’api eedomus ?
l’URL est la suivante : https://api.eedomus.com/get?action=periph.history&periph_id=XXXX&api_user=XXXX&api_secret=XXXX
J’obtiens le message Page web inaccessible
Il faut que tu remplace les XXX par l’id de ton periph, ton user et et ton mdp …
C’est bien ce que j’ai fait
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
Bonjour,
OK merci. Le module consommètre est celui qui n’a pas l’onglet valeur ?
Chez moi il s’appelle “électricité” et n’a pas d’onglet valeur
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 ?
Bonjour à tous,
Je viens de publier la v2 :).
Pour la migration sa se passe par ici : https://www.domo-blog.fr/maj-interface-graphique-consommations-temperatures-leedomus-v2/
++
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 🙂
Bonjour j’ai eu le même problème sur un capteur 4en1.
Le problème ne vient pas sur développement mais de l’API eedomus.
Cela a été corrigé pour moi après un mail au support API,ce fut corrigé en 1/2 journée
Dit leur qu’avec la requête
https://api.eedomus.com/get?action=periph.list&api_user=XXXX&api_secret=XXXX
Tu n’as pas les id que tu préciser as de tes modules manquant
Fait un fichier PHP sur ton n’as pour leur faciliter le check:
Merci pour ce retour. Je viens de contacter la support Eedomus comme évoqué. A suivre…
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?
Si l’url de la requête pointe vers l’api local, aucun problème pour récupérer les infos même sans connexion
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
Salut,
Oui stp il faut quand même mettre à jour car il y a eu quelques optimisation dans le script.
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 🙂