Dans cet article, nous allons voir une technique plus poussée que mon premier tuto pour faire le suivi de votre consommation électrique.
Pour cela, j’ai développé un script qui va nous permettre de stocker la consommation journalière dans une base de données MySQL hébergée sur un Raspberry Pi faisant office de serveur web ou un NAS Synology, puis nous utiliserons un second script qui manipulera les données pour les renvoyées dans la box domotique Eedomus.
Enfin, sachez que chez moi, j’ai construit ce reportage pour ma box domotique Eedomus à partir des relevés réalisé par le périphérique Z-Wave de pince ampèremétrique Aeon Labs.
Dernière mise à jour du tarif le 2024-12-03 at 17:02
Schéma de principe
Bien, vous avez compris le principe? Téléchargez les fichiers sur notre GitHub et passons à l’étape suivante, la construction de la base de donnée qui hébergera nos relevés.
Configuration de la base de données
1 Commencez par vous connectez à l’interface phpmyadmin de votre serveur web via l’URL: (192.168.x.x représente l’adresse du serveur web)
http://192.168.x.x/phpmyadmin/
2 Rendez-vous alors dans l’onglet “base de données“:
3 Créez une nouvelle base de donnée que nous nommerons “historique“:
4 Phpmyadmin vous confirme alors la bonne la création de cette dernière:
5 Sélectionnez la base historique dans l’index des bases de données en cliquant dessus:
6 Rendez-vous maintenant dans l’onglet SQL:
7 Collez le code suivant dans la fenêtre puis faites exécuter afin de créer la table SQL
CREATE TABLE IF NOT EXISTS electricite ( id int(11) NOT NULL AUTO_INCREMENT, date date NOT NULL, conso decimal(5,2) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=96 ;
Le script a créé la table électricité ainsi que ses champs. Nous en avons terminé avec la partie SQL, vous pouvez fermer phpmyadmin, la suite se passe sur la box domotique Eedomus.
Configuration eedomus
Passons à la configuration coté eedomus. Soit vous avez déjà appliqué mon premier tuto et dans ce cas vous réutiliserez les périphériques actuels en ajoutant simplement ceux qui manques, soit vous débutés complètement auquel cas, il vous faut créer autant de périphériques virtuels qu’il est nécessaire (cout hier, cout hebdo, cout mensuel, kwh hebdo, kwh mensuel…).
Configurez ces périphériques ainsi: (type de données “nombre décimal” unité kWh ou €)
Notez les numéros api de chacun de ces périphériques dans un coin pour la suite.
Configuration du script php
1 Ouvrez le fichier parametres.php et remplacez les xxxxx et les 11111 par vos informations:
<?php /*************************************************************************************/ /* ### Report electricité eedomus SQL V2.0 ### */ /* */ /* Developpement par Aurel@domo-blog.fr */ /* */ /*************************************************************************************/ //*************************************** API eedomus ********************************* // Identifiants de l'API eeDomus $api_user = "xxxxx"; //ici saisir api user $api_secret = "xxxxxxxxxxxxx"; //ici saisir api secret //*************************************** Parametres network ************************** //@IP eedomus $IPeedomus="192.168.x.x"; //ici saisir ip eedomus //server MySQL $server='localhost'; //MySQL login $sqllogin='xxxxxx'; //ici saisir le user sql de phpmyadmin //MySQL password $sqlpass='xxxxxxx'; //ici saisir le pass du user phpmyadmin //*************************************** codes api couts elec ************************* //numero du peripherique relevé hebdo $periph_hebdo=11111; //numero du peripherique relevé mensuel $periph_mensuel=11111; //numero du peripherique relevé annuel $periph_annuel=11111; //*************************************** codes api kWh elec *************************** //hebdo kWh $periph_annuel=11111; //hebdo kWh $periph_hebdokwh=11111; //mensuel kWh $periph_mensuelkwh=11111; //annuel kWh $periph_annuelkwh=11111; //*************************************** codes api relevé elec ************************* //numero du peripherique de relevé electrique $periph_rlv_elec=11111; //tarif du kWh $prix_kwh=0.1329; ?>
2 Uploadez les fichier téléchargés sur github dans le répertoire racine de votre serveur web (web sous syno et www sur rapsberry pi)
Test de configuration
1 Il est temps de tester le bon fonctionnement des scripts. ouvrez votre navigateur web et saisissez l’URL: (ou 192.168.x.x et l’adresse de votre serveur web)
http://192.168.x.x/report_elec/import_elec.php
Le navigateur doit vous retourner le message suivant :
Cela signifie que le script peut extraire les données de l’eedomus pour les stocker dans la base de données.
2 Testons à présent le second script, toujours dans votre navigateur, saisissez l’URL: (ou 192.168.x.x et l’adresse de votre serveur web)
http://192.168.x.x/report_elec/trait_elec.php
Le navigateur retourne les messages suivants:
Cela signifie que le script arrive à injecter correctement les données dans les divers périphériques de l’eedomus que nous avons créé plus haut.
Si vous ouvrez la pièce électricité de votre eedomus vous constaterez que des valeurs sont apparues dans les périphériques.
Voilà, vous venez de mettre en place des scripts et une base de données qui peuvent interagir avec votre eedomus. Ce n’est pas si sorcier !
Les règles
Passons à présent à l’automatisation de tout ce petit monde.
1 Pour le traitement et la mise à jour des données, j’ai simplement repris l’actionneur HTTP du premier tuto qui s’appelle toujours opération auquel j’ai supprimé les actions de l’autre tuto pour les remplacées par la seule et unique action suivante:
Et la règle suivante qui l’actionne tous les jours à 5h00:
2 Pour l’import en base j’ai pour ma part une autre pièce “SQL” ou j’ai tous mes actionneurs SQL, mais vous pouvez parfaitement le mettre à la suite dans l’actionneur “opération”, appliquez simplement cette ligne de paramétrage à votre actionneur:
3 Et la règle qui stocke la consommation de la journée en base tous les soirs à 23h59:
C’est terminé!
Vous avez à présent un suivi de votre consommation électrique simple, car seulement constitué d’un actionneur et de deux règles. Mais surtout fiable, car si le script d’update plante un soir, il pourra être appelé à un autre moment et les données remonteront dans vos différents états sans aucune perte.
le tuto doit être vraiment bien fait car j’ai réussi du premier coup 😉
merci aurel
cool ! j’ai essayé de faire en sorte que ce script fonctionne avec le moins de manipulations dessus pour la config, il semble que ca fonctionne à merveille! Tu as a présent un pied dans le dashboard ! ; ) bienvenue !
Tu me mets la pression ASECADOMOTIQUE54 😉 LOL, l’ancien tuto d’Aurel fonctionne super bien du coup j’ai pas envie de tout pété pour faire un truc que je suis pas sûr de reussir!!!!
Va falloir que je me lance 😉
++ les gars;)
Ludo tu peux partir du principe que si j’ai réussi c’est que c’est largement à ta porté d’autant que la version antérieur m’avait l’air plus coriace à mettre en oeuvre. Et puis si tu veux utiliser le future dashboard d’aurel je crois que tu n’a pas vraiment le choix… vas y fonce!!
OK, j’ai un ptit crenau demain, je vais me lancer 😉
Merci du coup de pouce 😉
bon j’ai peut être crié victoire un peu trop vite…
je n’ai pas de valeur dans cumul an en € et dans le j-1 en €, je n’ai pas souvenir d’avoir eu à renseigner l’api j-1 dans le fichier paramètre c’est normal?par contre l’api du cumul annuel en € est bien renseigné lui.
j’ai vérifié mes règles elles s’exécutent bien.
enfin en regardant l’historique de mes valeurs kwh je constate qu’elles remontent tout les jours la même valeurs,alors que mon periph de mesure tourne?????
je J-1 n’est pas renseigné dans le tuto, il était sur l’ancien tuto, c’était simplement une copie de la valeur jour dans un autre état pour faire les calculs. Dans le fonctionnement sql il n’est pas nécessaire de plus tu retrouve cette infos sur le périphérique conversion en euro.
pour le cumul annuel vérifie que tu as bien renseigner le bon code api dans le fichier parametres.
Bonjour Aurel!
Merci une nouvelle fois pour tes tutos.
J’ai réalisé le premier tuto que tu nous avais proposé. Il utilise la conversion en euros de l’outils eedomus. Ce qui dans ce cas renvoie le coût selon la période et selon le type de jours (pour ma part TEMPO). Or, je constate qu’il faut saisir le cout au kwh dans le “parametre.php” Ce dernier est unique. Tout en gardant le premier tuto opérationnel, je peux remplir la base avec ma consommation en kWh, et n’en récupérer que le cumul de puissance consommé. Mais qu’en sera t’il pour cet alléchant dashboard? Aura t’il la gestion HC/HP et tempo pour certains d’entre nous?
Merci pour ta réponse et longue vie à ce blog!
Effectivement, c’est une bonne remarque, j’ai développé ce dashboard pour mon utilisation et n’ayant pas d’heures creuses, je n’ai malheureusement pas pris en compte ce paramètre dans mon dev.
Merci de l’éclaircissement, du coup je ne sais pas quelle puissance mettre dans le champs periph_rlv_elec puisque j’en ai pas moins de 6… l’adapter à la spécification TEMPO serait trop compliqué pour ma maigre voire inexistante connaissance du PHP.
Merci encore!
Djo
merci pour ton retour aurel,
effectivement il y avait une coquille dans mon fichier paramètre,
sinon est il possible de faire un raz des compteurs?
vu que j’ai appelé 15 fois l’url report elec
oui, rends toi dans ton phpmyadmin et cancel les enregistrements en trop ; )
Bonjour,
J’essaye de réaliser ce tuto depuis pas mal de temps mais je suis complètement débutante pour tout ce qui touche à Php alors j’ai eu un peu de mal ! Maintenant que ma DB fonctionne, j’ai suivi de nouveau le tuto (j’ai tout repris à zéro pour être sûre) et maintenant j’ai une erreur sur la dernière étape ! A savoir l’exécution de trait_elec.
Voici le message que j’ai : Une erreur est survenue sur l’update hebdo: []Une erreur est survenue sur l’update mensuel: []Une erreur est survenue sur l’update annuel: []Une erreur est survenue sur l’update kwh hebdo: []Une erreur est survenue sur l’update kwh mensuel: []Une erreur est survenue sur l’update kwh annuel: []
Une idée d’où cela pourrait venir ? J’ai pourtant bien renseigné toutes mes API dans paramètres. Par contre mes actionneurs ne s’appellent pas exactement pareil mais tant que les API sont bonnes ce n’est pas un souci ? Merci d’avance.
Cette fonctionnalité est tellement utile, j’ai hâte de pouvoir la faire fonctionner !
Salut,
effectivement les noms importent pas, simplement les codes doivent être les bon. As sut bien vérifié test code API et l’adresse IP de la box? attention de bien garder les “”.
Tu as raison, c’est sans doute un souci avec mon IP Eedomus. En effet j’ai mis ma BD sur un site externe car je n’ai pas de NAS ou de serveur à la maison donc forcément l’appel local ne doit pas fonctionner ^^. Une idée de comment trouver la bonne IP ? Mon mari a attribué un port à la box mais ça ne semble pas suffir :s
Ah ben dans ce cas il faut NATer un port et le rendre accessible depuis l’extérieur (dyndns).
Salut Aurel,
Je me lance pour installer ton script et en suivant le tuto je bloque dés le départ …
Lorsque j’exécute la requête sql dans la base de donnée “historique”,
j’ai un retour ” formulaire incomplet”
je suis sur syno et mysql n’est pas mon fort 🙁
As tu une idée ?
merci,
j’ai copié :
CREATE TABLE IF NOT EXISTS `electricite` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
`conso` decimal(5,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=96 ;
hum, la comme ca je vois pas, est tu bien sur la base historique quand tu exécute cette requête?Tu peux aussi essayer de créer les champs manuellement en te référant à la requête.
oui je suis bien sur la bonne base pour executer la requete….
je vais tester en manuel…
pour confirmation les champs à créer sont bien : id, date et conso ?
merci,
@Aurel :
J’ai suivit le premier tuto = parfait.
Par contre j’ai créé les périphériques virtuels pour les KwH /Jour/mois/année, mais dans le script tu as $periph_rlv_elec=11111;
Je ne vois pas à quoi il correspond : car avec un relevé de compteur USB (tu n’as pas par défaut la charge en KwH par jours : je l’ai uniquement en instantanée (cf :http://maison-et-domotique.com/books/releve-de-consommation-usb-sur-eedomus/)
Question : tu as fait un nouveau périphérique virtuelle en calculant chaque jours la différence en te basant sur l’index des heures pleines et creuses ou autrement dis : comment du coup faire pour avoir ces info (kwh/j kwh/mois etc..)
En te remerciant
slt Aurel,
je me suis fait cette réflexion, y a t’il pas possibilité de réutiliser ce même script pour réaliser un cumul des précipitations.ou n’y a t’il pas plus simple je pense au formule math de tinto?
Bonjour.
J’ai essayé de réaliser votre code et en essayant de créer les champs dans l’onglet SQL de “historique”, j’ai ce message quand j’execute votre script :
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘
electricite
(id
int(11) NOT NULL AUTO_INCREMENT, <cod' at line 1Que puis-je faire ?
Bonjour, code SQL corrigé, ca fonctionnera à present 😉
Beau travail Aurel. Un bel exemple de ce que devrait faire eedomus en standard dés qu’on lui dit qu’une ecodevice est sur le réseau.
rebonjour Aurel,
pourrais tu me donner le lien vers le premier tuto pour faire ” l’actionneur HTTP du premier tuto qui s’appel toujours operation” ?
merci
Bonjour, ça fonctionne en partie chez moi mais j’ai cette erreur qui apparait :
Une erreur est survenue sur l’update hebdo: [{ “success”: “0”, “body”: { “error_code”: “2”, “error_msg”: “Missing parameter [value].” } }]Une erreur est survenue sur l’update mensuel: [{ “success”: “0”, “body”: { “error_code”: “2”, “error_msg”: “Missing parameter [value].” } }]update annuel ok
update kWh hebdo ok
update kWh mensuel ok
update kWh annuel ok
une petite idée svp ???,
merci
étrange cette erreur, as tu bien les données en base?
“les données en base ” ???? cad dans phpmyadmin ?
je regarde ce soir chez moi et te tiens au courant..mais bizzare car la conso annuelle affiche 15 Kwh depuis hier et 0 en conso mensuelle et hebdo . En revanche, pas d’indication pour les autres …
oui, il faut vérifier dans phpmyadmin pour s’assurer que ce ne soit pas une fausse erreur car le script indique que l’update est bien passé quand même.
ok, car pas normal, tu devrais avoir la même donnée dans tout les champs à la première exécution. N’ hésite pas a vider la table au cas ou et refaire une passe sur la procédure, tu as peut être oublié quelque chose car tu es le premier à me remonter ce cas.
je vais en effet tout ré importer. je te tiens au courant. merci encore
bien, je viens de réimporter dans myphpadmin…pas mieux, le résultat est le même.
Je m’aperçois que dans le fichier paramétres.php, les lignes 35 et 41 semblent les mêmes ou tout du moins la 36 semble en trop, non ?
J’ai également le même message que bigmacmo ???
Bonjour,
je suis novice en NAS et commence sur Edomus.
J’ai décidé de me lancer dans les scripts et je viens d’appliquer votre tuto mais j’ai quelques soucis:
-Quand je rentre http://192.168.x.x/report_elec/import_elec.php (avec mon IP) j’ai ce résultat: “Parse error: syntax error, unexpected end of file in /volume1/web/report_elec/parametres.php on line 50″
-Quand je rentre juste l’ip du NAS j’obtiens ceci ” Web Station has been enabled. To finish setting up your website, please see the “Web Service” section of DSM Help”
Je pense avoir un problème d’accès
Je suis perdu pouvez vous m’aider?
merci d’avance.
Bonjour, le probleme semble venir du service web sur le NAS. Il faut peut etre le relancer ou rebooter le NAS.
Merci pour la réponse, mais meme en rebutant le NAS rien de change
J’ai meme essayé avec un autre script avec http://192.168.x.x/pluviometrie/pluviometrie.php et j’ai erreur 404
Pas de solution pour mon problème?
Est ce un problème de droit d’accès
Merci d’avance
Bonsoir,
Merci pour ce tuto très intéressant !
Par contre je bloque au moment de tester le fichier : http://192.168.x.x/report_elec/trait_elec.php
J’obtiens un résultat à moitié positif :
Une erreur est survenue sur l’update hebdo: [{ “success”: “0”, “body”: { “error_code”: “2”, “error_msg”: “Missing parameter [value].” } }]Une erreur est survenue sur l’update mensuel: [{ “success”: “0”, “body”: { “error_code”: “2”, “error_msg”: “Missing parameter [value].” } }]Une erreur est survenue sur l’update annuel: [{ “success”: “0”, “body”: { “error_code”: “2”, “error_msg”: “Missing parameter [value].” } }]update kWh hebdo ok
update kWh mensuel ok
update kWh annuel ok
J’ai bien vérifié, les codes API des états update hebdo, mensuel et annuel sont pourtant bons…
Et j’ai bien uploadé le fichier comptage elec 2.0.
Une autre question :
Quel périphérique faut il exactement renseigner dans la partie :
//numero du peripherique de relevé electrique
$periph_rlv_elec=xxxxxx;
Je possède un boitier usb de téléinfo qui remonte plusieurs informations, laquelle prendre ?
Enfin, y aurait t-il la possibilité de préciser un tarif du kWh en HP et HC ?
Merci par avance.
Bonjour, cela semble indiquer que le code API du périphérique est manquant, il faut vérifier que les périphériques soient bien tous renseigner dans le fichier de paramètres.
bonjour,
je constate pareil. on ne mets rien ni avant ni après les numéros d’api des périphériques?
merci pour la réponse
Bonjour, avez vous regardé du coté de la base de donnée si des données y sont présentes?
oui, cela remonte bien dans la base de donnée. en fait, j’avais mis l’api de la conso en watts et pas celui du prix. en le modifiant cela marche!! par contre, il faudra changer dans le script à chaque fous que le tarif est modifié? merci bcp
genial ! 🙂
Pour ce qui est du tarif, oui, il faut le changer dans le fichier paramètre quand il change.
bonjour, avez vous trouvé?
Je n’arrive pas à reproduire le pb chez moi avec le même script. Lancez une session phpmyadmin sur votre base de donnée et exécutez la requête suivante sur la table electricite afin de verifier que vous disposez bien des derniers relevés en base:
SELECT conso, DATE
FROM electricite
ORDER BY DATE DESC
Ce script est super mais ce serait bien de l’avoir adapté aux heures pleines et creuses comme la plupart des abonnements.
Bonjour,
ce n’est malheureusement pas mon cas, je l’avais donc développé sans cette option à l’époque. Mais je prends note pour la prochaine version.
Merci, moi aussi j’essaye de l’adapter, mais je n’ai pas votre niveau malheureusement !!!
Si jamais je réussi, je posterais….
Bon j’ai bien réussi à modifier le script import_elec.php qui me remonte bien les index HC et HP sur ma table modifié ‘historique’.
J’ai également bien modifié le script parametres. php
Par contre reste le plus dur !!! les calculs ! et là je sèche sur le dernier script trait_elec.php
Je n’arrive pas à faire les soustraction entre les colonnes de lignes différentes pour avoir les consos.
aperçu de la table sur 2 jours :
id / date / conso_HC / conso_HP
104 / 2017-03-19 / 10324700 / 1301174600
103 / 2017-03-20 / 10324753 / 1301180000
Bonjour ,,
ou en es tu?? j’aimerais faire la meme chose, faut il creer des etats?
merci
Je n’ai pas avancé. Avec les beaux jours, je suis plutôt dehors !!!
J’arrive bien à remplir la table avec les indices, mais je bloque sur les opérations à faire pour avoir les différentes conso
ok
peut tu me dire combien de periph ou etat faut il creer stp??
ou me faire une capture d’ecran
merci
Bonjour
peut ont adapter ce script au tarif heures creuse et pleine??
pour le relevage electrique j’ai un ecodevice cela focntionne
merci d’avance
Bonjour,
oui, je vais me pencher sur le problème.
ok si je peut t’aide en quoi que ce soit meme si je suis novice
Bonjour,
je viens de réaliser les configurations,
Cependant, j’ai un mauvais retour, je ne comprend pas pourquoi.
Une erreur est survenue sur l’update hebdo: []Une erreur est survenue sur l’update mensuel: []Une erreur est survenue sur l’update annuel: []Une erreur est survenue sur l’update kwh hebdo: []Une erreur est survenue sur l’update kwh mensuel: []Une erreur est survenue sur l’update kwh annuel: []
En faisant un requête SQL voila se que j’obtient:
conso
DATE Décroissant 1
0.00
0000-00-00
0.00
0000-00-00
0.00
0000-00-00
0.00
0000-00-00
0.00
0000-00-00
tout mes periph id sont bien renseigner
//*************************************** codes api couts elec *************************
//numero du peripherique relevé hier
$periph_hier=675916;
//numero du peripherique relevé hebdo
$periph_hebdo=675917;
//numero du peripherique relevé mensuel
$periph_mensuel=675919;
//numero du peripherique relevé annuel
$periph_annuel=675920;
//*************************************** codes api kWh elec ***************************
//hier kWh
$periph_hierkwh=675912;
//hebdo kWh
$periph_hebdokwh=675921;
//mensuel kWh
$periph_mensuelkwh=675922;
//annuel kWh
$periph_annuelkwh=675923;
//*************************************** codes api relevé elec *************************
//numero du peripherique de relevé electrique
$periph_rlv_elec=338616;
merci pour votre soutiens.