Script Véolia

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Script Véolia

Message par domcars0 »

Une valeur négative de consommation journalière dans le fichier csv de Veolia Med n'est pas une erreur. On remarque qu'alors, dans le fichier csv, il y a deux valeurs pour le même jour. La valeur négative indique la valeur du compteur et il suffit d'additionner les deux valeurs du jour pour obtenir la conso effective de ce jour.
C'est une manière de fournir de temps à autre la valeur (en litres) du compteur.
Le script tient compte de ce type de valeur et remet ainsi à jour la valeur du compteur (en tenant compte de la valeur d'ajustement indiqué dans la config du périph virtuel) dans la table DeviceStatus.
PS: Je peux donc te dire que le 18/02 à 24:00 ton compteur d'eau indiquait 504.254 m3 ;)
La liberté a un prix... celui de l'effort.
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Script Véolia

Message par domcars0 »

J'ai constaté que, dans la derniere version de DomoticzVeolia(Med), on avait pas les valeurs correctes du compteur dans l'historique (Rapport).
Je viens de pousser une nouvelle version.
https://github.com/domcars0/DomoticzVeolia/releases
Il est préférable de refaire les imports depuis le début des consos dispos sur votre compte Veolia Med.
La liberté a un prix... celui de l'effort.
Noryav
Messages : 2
Inscription : 27 avr. 2020, 12:50

Re: Script Véolia

Message par Noryav »

Bonjour,

Je débute sur Domoticz.
J'ai étudié le script et ai essayé de l'exécuter en local et à distance.

Je n'y parvenais pas mais, an me basant sur quelques connaissances d'autres technos, en mettant la page sur /var/www/html, je peux parser la page php. En local, cela donne donc http://192.168.1.13/water.php

En mode debug, j'arrive à lire les valeurs des tables, récupérer les données Véolia (en l'occurrence Eau du Grand Lyon) mais les mises à jour sont en échec.
En passant les requêtes générées (débug) dans DB browser for SQLITE sur le Raspberry, elles passent sans problème.
Est-ce qu'il faut faire quelque-chose pour autoriser la modification de la base de données depuis php ? (je m'étonne de ne pas avoir à donner un compte R/W).
Merci de vos conseils.
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Script Véolia

Message par domcars0 »

Slt,
Lorsque tu executes le script via un browser (http://.../water.php) c'est sûrement l'utilisateur www-data (le user qui , sur raspian/debian/ubuntu fait tourner le serveur web) qui l'exécute.
La Base de données (le fichier domoticz.db) appartient probablement à root (ou à pi , ça dépend de ta config domoticz) et, si le fichier de la base de données est en mode rwxr_xr_x alors www-data n'a pas le droit de le modifier. Il ne peut donc pas faire les insertions. Tu ne peux donc pas, à priori, faire de modification de la base de données via l'interface web.
Ce script doit être exécuté par le propriétaire de la base de donnée domoticz.db (normalement par un crontab de ce proprio, voir le fichier README)
Pour pouvoir l'exécuter il te suffit peut-être de le rendre exécutable (% sudo chmod 755 water.php)? As tu bien installé php-cli (l'interface php en ligne de commande)?
Cdlt.
PS: Content au passage de voir que ce script fonctionne également pour Véolia "Eau du Grand Lyon", merci pour l'info.
La liberté a un prix... celui de l'effort.
les2v
Messages : 13
Inscription : 23 juil. 2019, 01:15

Re: Script Véolia

Message par les2v »

Bonjour à tous,

J'essaye d'installer le script véolia de domocars0 et je me confronte toujours à une problématique après moultes essais. Mon problème est le fait que les valeurs récupérées sur le site véolia ne sont pas écrites dans la table Meter_Calendar.
Voici les infos extraites du log lors de l’exécution de la commande suivante:
pi@raspberrypi:~/DomoticzVeolia $ ./water.php 02 2020

---
login ok
Consommations journalières du fichier Veolia Med pour le mois 2020-02 :
Le 01/02/2020 : 520 litre(s)
Le 02/02/2020 : 436 litre(s)
[...]
>>> Valeur du compteur à la date du 25/02/2020 : 0
> INSERT INTO Meter_Calendar VALUES(17,10,,'2020-02-26');
>>> Valeur du compteur à la date du 26/02/2020 : 0
> INSERT INTO Meter_Calendar VALUES(17,105,,'2020-02-27');
>>> Valeur du compteur à la date du 27/02/2020 : 0
> INSERT INTO Meter_Calendar VALUES(17,105,,'2020-02-28');
>>> Valeur du compteur à la date du 28/02/2020 : 0
> INSERT INTO Meter_Calendar VALUES(17,105,,'2020-02-29');
> DELETE FROM Meter WHERE DeviceRowID=17 AND Date LIKE '2020-05-31 %' ;
PHP Warning: SQLite3::exec(): near ",": syntax error in /home/pi/DomoticzVeolia/water.php on line 255
Mise à jour des données de consommation journalières effectuée avec succès.
Pour les données de consommations horaires, ne pas passer de paramètres.
---

L'idx 17 correspond à l'idx du dispositif "eau" créé à partir du disposition véolia (dummy)
La valeur 105 (pour le 28/02) correspond à la consommation de la journée du 28/02.
La date est bien 2020-02-29.
Pourtant rien n'est écrit dans la DB domoticz "Meter_Calendar" correspondant à l'idx quand j'ouvre la db dans SQLite.
La structure de la db d'après sqlite est : DeviceRowID, Value,Counter,Date.
J'ai toujours 0 sur le compteur lorsque je le charge dans domoticz.
La version de Domoticz est 2020.02 (Compile Date: 2020-04-26 13:47:55)

Est normal d'avoir une erreur à la fin de l'exécution du script?
Est ce normal d'avoir ,, entre la valeur de consommation et la date?
Quand j'exécute deux fois le script sur le même mois (Février par exemple) j'ai exactement le même log.
Domoticz tourne sur un rasp v1 avec PHP7.3 (et non PHP5 puisqu'il est obsolète).
La bd (domoticz.db) est en 777 donc pas de probleme de droit d'acces en lecture et ecriture.

Est ce quelqu'un aurait une piste.?
Suis je seul à avoir ce problème?
Merci pour votre aide.
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Script Véolia

Message par domcars0 »

Salut,
IL y a effectivement un problème car la valeur de $compteur ne devrait pas être null dans la requête INSERT SQL. Cette variable est initialisée à 0 à la ligne 180 puis mise à jour avec sa valeur éventuellement présente dans la BdD.

Comme tu n'as rien dans ta BdD. on a donc bien dans le log :
Valeur du compteur à la date du 25/02/2020 : 0

On a pas récupérer non plus de valeur de compteur dans le csv de Veolia, sinon on aurait vu dans le log une ligne comme:
Valeur du Compteur , selon Veolia, le XX/02/2020 = NNN

$compteur n'a donc pas été incrémentée de 'nombre de litres par jour', car on a pas sa véritable valeur , ni en BdD ni donnée par Veolia. $compteur vaut donc 0.

La requếte d'INSERT est contruite à la ligne 229
$requete = " INSERT INTO Meter_Calendar VALUES($device_idx,".$liters.",". $compteur .",'".$sql_date."'); ";
On voit bien que la 3ème valeur a la valeur de $compteur.

Mais l'instruction SQL INSERT échoue car $compteur est devenu null ???
INSERT INTO Meter_Calendar VALUES(17,10,,'2020-02-26');

Je me demande si tu as bien la dernière version? C'est la V1.2.0, elle est ici : https://github.com/domcars0/DomoticzVeo ... v1.2.0.zip
As tu essayé d'importer avant 2020 ? Tu n'aurais pas modifié le code par inadvertance ? Pourrais tu "tracer" la valeur de $compteur dans le script stp.
Merci.
La liberté a un prix... celui de l'effort.
les2v
Messages : 13
Inscription : 23 juil. 2019, 01:15

Re: Script Véolia

Message par les2v »

Bonjour Domcars0,

Merci pour ta réponse rapide.
Es tu sur du lien du zip que tu as mis car water.php ne s'execute pas? J'ai une fatal erreur.
J'ai "cloné" la dernière version par cette commande:
sudo git clone https://github.com/domcars0/DomoticzVeolia.git
puis fait un diff des 2 fichiers water.php et ils sont identiques.
pi@raspberrypi:~/temp/DomoticzVeolia $ diff water.php ../../DomoticzVeolia/water.php -s
Les fichiers water.php et ../../DomoticzVeolia/water.php sont identiques
Je ne pense donc pas avoir de probleme de version de fichier.

Je viens de faire plusieurs tests (environ une demi douzaine) en 2019 et 2020.
1/ "Janvier" me donne bien la valeur du compteur le 10 et le 17:
> INSERT INTO Meter_Calendar VALUES(17,270,,'2020-01-10');
>>> Valeur du compteur à la date du 09/01/2020 : 0
>>> Valeur du Compteur , selon Veolia, le 10/01/2020 = 1453772
>>> Consommation effective du 11/01/2020 = 586 litre(s)
> INSERT INTO Meter_Calendar VALUES(17,586,1454358,'2020-01-11');
[...]
> INSERT INTO Meter_Calendar VALUES(17,377,1456832,'2020-01-17');
>>> Valeur du Compteur , selon Veolia, le 17/01/2020 = 1456832
>>> Consommation effective du 18/01/2020 = 551 litre(s)
> INSERT INTO Meter_Calendar VALUES(17,551,1457383,'2020-01-18');
[...]
> INSERT INTO Meter_Calendar VALUES(17,371,1463728,'2020-01-31');
> DELETE FROM Meter WHERE DeviceRowID=17 AND Date LIKE '2020-06-01 %' ;
PHP Warning: SQLite3::exec(): near ",": syntax error in /home/pi/DomoticzVeolia/water.php on line 257
Mise à jour des données de consommation journalières effectuée avec succès.
Pour les données de consommations horaires, ne pas passer de paramètres.

Malheureusement, aucune donnée n'est chargée dans la db.

2/ Je me lance dans le debug de la valeur du compteur mais je t'avoue que je suis pas un pro du php....
Je commencer le "trace" de la valeur de compteur en insérant après la ligne 194:
ligne 194: >>> $date->setTime(23,55,00);
ligne 195: >>> echo "VFD0:".$compteur."\n";
Le résultat est le suivant:
[...]
Dernier update du compteur le 2020-05-31 : 0 litres (valeur d'ajustement = 0 litres ).
Historique des compteurs = 1 jour(s).
VFD0:0
>>> Valeur du compteur à la date du 31/12/2019 : 0
> INSERT INTO Meter_Calendar VALUES(17,577,,'2020-01-01');
VFD0:
>>> Valeur du compteur à la date du 01/01/2020 : 0
> INSERT INTO Meter_Calendar VALUES(17,577,,'2020-01-02');
VFD0:
[...]
> INSERT INTO Meter_Calendar VALUES(17,270,,'2020-01-10');
VFD0:
>>> Valeur du compteur à la date du 09/01/2020 : 0
>>> Valeur du Compteur , selon Veolia, le 10/01/2020 = 1453772
VFD0:1453772

3/ Je deplace maintenant "mon echo" après la ligne 199 et ajoute un echo 2 lignes apres
$c = $result->fetchArray(SQLITE3_ASSOC);
echo "VFD0:".$compteur."\n";
$compteur = $c['Counter'];
echo "VFD1:".$compteur."\n";

Le résultat est le suivant:
[...]
Dernier update du compteur le 2020-05-31 : 0 litres (valeur d'ajustement = 0 litres ).
Historique des compteurs = 1 jour(s).
VFD0:0
VFD1:
>>> Valeur du compteur à la date du 31/12/2019 : 0

J'espere que ca t'aide...
Merci.
domcars0
Messages : 238
Inscription : 18 févr. 2017, 20:23

Re: Script Véolia

Message par domcars0 »

Salut,
Merci, t'es un chef, t'as tapé dans le mille ! Je crois que j'ai trouvé le bug. Je ne l'avais pas car j'ai une valeur d'ajustement :roll:
Peux tu stp remplacer la ligne 200 :

Code : Tout sélectionner

$compteur = $c['Counter'];
par

Code : Tout sélectionner

if ( empty($c['Counter']) === false && is_numeric($c['Counter']) ) // then
      $compteur = $c['Counter'];
Merci de me dire si c'est ok.
Dernière modification par domcars0 le 02 juin 2020, 12:35, modifié 1 fois.
La liberté a un prix... celui de l'effort.
les2v
Messages : 13
Inscription : 23 juil. 2019, 01:15

Re: Script Véolia

Message par les2v »

Bonjour,

Merci pour ton msg.
Voici le nouveau code:

$c = $result->fetchArray(SQLITE3_ASSOC);

//echo "VFD0:".$compteur."\n";
//ligne originale: $compteur = $c['Counter']; remplacée par

if ( empty($c['Counter']) === false && is_numeric($c['Counter']) ) then
$compteur = $c['Counter'];

//echo "VFD1:".$compteur."\n";

Lorsque je le lance le script, j'ai une erreur. Sans doute évidente mais je ne vois pas.

pi@raspberrypi:~/DomoticzVeolia $ ./water.php 01 2020
PHP Parse error: syntax error, unexpected '$compteur' (T_VARIABLE) in /home/pi/DomoticzVeolia/water.php on line 204

Je continue à chercher mais tu trouveras sans doute avant moi.
les2v
Messages : 13
Inscription : 23 juil. 2019, 01:15

Re: Script Véolia

Message par les2v »

Bonjour,

Le "then" est de trop.
Je savais c'était évident. :D
Ça semble marcher:

Le 31/01/2020 : 371 litre(s)
Dernier update du compteur le 2020-05-31 : 0 litres (valeur d'ajustement = 0 litres ).
Historique des compteurs = 1 jour(s).
>>> Valeur du compteur à la date du 31/12/2019 : 0
> INSERT INTO Meter_Calendar VALUES(17,577,0,'2020-01-01');
>>> Valeur du compteur à la date du 01/01/2020 : 0
[...]
> INSERT INTO Meter_Calendar VALUES(17,270,0,'2020-01-10');
>>> Valeur du compteur à la date du 09/01/2020 : 0
>>> Valeur du Compteur , selon Veolia, le 10/01/2020 = 1453772
>>> Consommation effective du 11/01/2020 = 586 litre(s)
> INSERT INTO Meter_Calendar VALUES(17,586,1454358,'2020-01-11');
> INSERT INTO Meter_Calendar VALUES(17,472,1454830,'2020-01-12');
[...]
> INSERT INTO Meter_Calendar VALUES(17,377,1456832,'2020-01-17');
>>> Valeur du Compteur , selon Veolia, le 17/01/2020 = 1456832
>>> Consommation effective du 18/01/2020 = 551 litre(s)
> INSERT INTO Meter_Calendar VALUES(17,551,1457383,'2020-01-18');

Je vois également des datas sur le graph dans Domoticz.
Je fais qlq tests supplémentaires et te confirme cela.
Répondre