VOUS ÊTES ICI: Accueil » Blog » Domotique » Eedomus » Comptage énergétique hebdo/mois/année via php/MySQL
Eedomus

Comptage énergétique hebdo/mois/année via php/MySQL

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  2020-04-02 at 16:32

domadoo-aeon-labs-pince

Schéma de principe

script-php-electique-eedomus-domotique-sql

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.

Télécharger les fichiers

 

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« :

script-php-electique-eedomus-domotique-sql-bdd

3 Créez une nouvelle base de donnée que nous nommerons « historique« :
script-php-electique-eedomus-domotique-sql-table

4 Phpmyadmin vous confirme alors la bonne la création de cette dernière:
script-php-electique-eedomus-domotique-sql-db

5 Sélectionnez la base historique dans l’index des bases de données en cliquant dessus:
script-php-electique-eedomus-domotique-sql-historique

6 Rendez-vous maintenant dans l’onglet SQL:
script-php-electique-eedomus-domotique-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 €)
script-php-electique-eedomus-domotique-sql-peripherique-configuration

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 :

rec_ok
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:
update_ok
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:
script-php-electique-eedomus-domotique-sql-http

Et la règle suivante qui l’actionne tous les jours à 5h00:
script-php-electique-eedomus-domotique-sql

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:
script-php-electique-eedomus-domotique-sql

3 Et la règle qui stocke la consommation de la journée en base tous les soirs à 23h59:
script-php-electique-eedomus-domotique-sql-conso

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.

script-php-electique-eedomus-domotique-sql-report

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

A propos de cet auteur

Aurélien Brunet

Aurélien Brunet

Chef de projet informatique, anciennement informaticien spécialisé dans l'IT industrielle, le réseau et les bases de données, un peu geek à mes heures perdues, je me suis mis à la domotique en 2012 pour sécuriser mon domicile.
Depuis, je test, j’installe, je code, j’améliore mon installation et surtout, je partage avec vous mon expertise via ce blog pour améliorer votre quotidien dans la maison connectée !

57 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.

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

  • 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

  • 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

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

    Que puis-je faire ?

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

  • 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

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

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

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

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

  • 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

      • 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

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

    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.

Choix box domotique
promos domotique