Il arrive que suite à des évènements les données de Domoticz partent en sucette.
Par exemple ci-dessous suite à une coupure de courant le total du compteur de courant est revenu à zéro et le compteur d'utilisation a repris un chiffre totalement faux (à priori au moins une partie du compteur)
Corriger le problème est expliqué au moins en partie sur cet article :
http://framboiseaupotager.blogspot.com/2017/11/acces-direct-la-base-de-donnees-de.html
Il est indiqué que domoticz utilise une base de données SQLite.
Mon Domoticz est installé sur un Raspberry pi.
Du coup on peut lire et modifier les données de la BDD de Domiticz avec le client sqlite3 que l'on peut installer sous Linux avec cette commande
sudo apt-get install sqlite3
Lien vers le fichier : cliquez ici
La base de données de domoticz se nomme domoticz.db
Sur le site framboiseaupotager il est dit qu'elle est dans /home/domoticz
Sur mon installation elle est sous /home/pi/domoticz
Il faut aller dans le répertoire qui contient la base de données avec une commande du type
cd /home/pi/domoticz
Lien vers le fichier : cliquez ici
Ensuite ouvrir la base de données domoticz.db sous forme de colonnes avec les commandes
.open domoticz.db
.headers on
.mode column
Lien vers le fichier : cliquez ici
Maintenant il faut trouver la table qui contient les données à corriger.
Dans Domoticz il faut relever l'idx du compteur à corriger.
Dans mon cas c'est le 166
Pour mon cas j'ai trouvé les données dans la table Meter
J'ai pu afficher les différents devices contenus dans cette table Meter via cette commande
select distinct DeviceRowId from Meter order by DeviceRowId;
Lien vers le fichier : cliquez ici
Par contre, pour mon device 166, je me suis rendu compte avec cette commande que la table Meter ne contient que 2 jours de données
select * from Meter where DeviceRowId=166 order by Date Desc;
Lien vers le fichier : cliquez ici
La table Meter_Calendar elle contient toutes les données (concaténé je crois bien), chose que j'ai pu constater avec la commande
select * from Meter_Calendar where DeviceRowId=166 order by Date Desc;
Lien vers le fichier : cliquez ici
En temps normal, pour une date donnée, dans la base, le champ Value donne le total de la conso de la journée et Counter correspond à la conso de cette journée additionnée avec le total (champ Counter) de la date N-1
Dans l'interface de Domoticz la valeur du champ Counter est affiché à la date N+1
Quand cela déconne le champ Value prend une valeur aberrante
La date qui me pose problème s'affiche à la date du 9 janvier dans Domoticz.
Pour afficher toutes les valeurs entre 2 dates on peut utiliser une requête du type
select * from Meter_Calendar where DeviceRowId=166 and Date BETWEEN "2021-01-07" AND "2021-01-11" order by Date;
Lien vers le fichier : cliquez ici
Je n'ai pas consommé 556241 watts en une journée, c'est une aberration.
et ici je ne peux pas déduire la valeur de la consommation électrique car mon module a planté.
Je suis allé voir sur le site d'Enedis ma consommation sur ce jour là et elle a été de 42900. Pour injecter cette valeur j'ai utilisé cette requête :
update Meter_Calendar set Value=42900 where date ="2021-01-09" and DeviceRowId = 166;
Lien vers le fichier : cliquez ici
Cela a bien corrigé la valeur de la consommation sur la date du 9 mais pas le total de la conso (champ Counter) sur les jours suivants
En date du 9 le total à mettre dans le champ Counter c'est la consommation de la journée (que j'avais récupéré chez Enedis) + la valeur du champ Counter à la date N-1, cad le 8.
Cela donne 42900 + 531123 = 574023
Pour injecter ces 574023 la requête sera
update Meter_Calendar set Counter=574023 where date ="2021-01-09" and DeviceRowId = 166;
Lien vers le fichier : cliquez ici
C'est super j'ai corrigé la date du 9 mais il faut que je corrige le total de la conso sur tous les autres jours, et là ...
Il faudrait que j'arrive à faire un script qui traite chaque date mais comment ?
J'ai pensé à faire une procédure stockée mais ce n'est pas supporté par sqllite.
sqllite supporte les triggers mais pas les variables dans les triggers.
Du coup j'ai fait une technique un peu bourrin, cad que j'ai fait une copie des valeurs que j'ai collé dans un tableau Excel.
J'ai ensuite ajouté une première colonne qui recalcule le bon total de la conso, en prennant la conso du jour + le total de la veille,
puis j'ai ajouté une dernière colonne qui sert à créer la requete SQL de mise à jour de la valeur.
Enfin j'ai copié ces requêtes de mise à jour que j'ai collé dans la console de sqllite3 pour qu'elle les exécute.
En bas de l'article j'ai mis la copie du fichier excel que j'ai fait, avec les formules utilisées. Cela sera a adapter à votre cas (modification de l'idx etc )
Téléchargement(s)
Nom | Site Web d origine | Description |
---|---|---|
4601Domoticz_formule_corr... | Fichier excel avec un exemple de formule pour corrigier le cumul de Domoticz |