Récupérer ses informations de consommation électriques via l'API ENEDIS

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 <\>.
gerardosamara
Messages : 15
Inscription : 18 janv. 2018, 12:53

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par gerardosamara »

Bonjour ,

Je suis en train de mettre en place cette super fonction en suivant le "readme" du github , domoticz étant installé sur Raspberry/Strech.
cette commande "npm install winston" ne fonctionne pas

=> npm : command not found

Avez vous une idée ?
Merci

EDIT : npm n'est pas installé par defaut donc commencer par cela !!! et ca a marché ... désolé pour le faux pb

2018-01-18 10:44:13,601 logged in successfully!
2018-01-18 10:44:13,602 retreiving data...
Traceback (most recent call last):
File "/home/pi/domoticz_linky/linky_json.py", line 189, in <module>
main()
File "/home/pi/domoticz_linky/linky_json.py", line 139, in main
res_year = linky.get_data_per_year(token)
File "/home/pi/domoticz_linky/linky.py", line 88, in get_data_per_year
return _get_data(session, 'urlCdcAn')
File "/home/pi/domoticz_linky/linky.py", line 123, in _get_data
res = req.json()
File "/usr/lib/python3/dist-packages/requests/models.py", line 850, in json
return complexjson.loads(self.text, **kwargs)
File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 516, in loads
return _default_decoder.decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 374, in decode
obj, end = self.raw_decode(s)
File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 404, in raw_decode
return self.scan_once(s, idx=_w(s, idx).end())
simplejson.scanner.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
2018-01-18 11:26:34,159 logged in successfully!
2018-01-18 11:26:34,160 retreiving data...
2018-01-18 11:26:56,098 got data!
Dernière modification par gerardosamara le 18 janv. 2018, 21:05, modifié 1 fois.
gerardosamara
Messages : 15
Inscription : 18 janv. 2018, 12:53

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par gerardosamara »

Au passage du Cronjob , les données du device Linky ne sont pas mises à jour correctement

Jan 18 17:30:01 raspberrypi CRON[1328]: (pi) CMD (/home/pi/domoticz_linky/domoticz_linky.sh)

------------- contenu du fichier linky.log --------------------

2018-01-18 17:30:10,231 logged in successfully!
2018-01-18 17:30:10,231 retreiving data...
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 454, in send
r = low_conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/pi/domoticz_linky/linky_json.py", line 189, in <module>
main()
File "/home/pi/domoticz_linky/linky_json.py", line 139, in main
res_year = linky.get_data_per_year(token)
File "/home/pi/domoticz_linky/linky.py", line 88, in get_data_per_year
return _get_data(session, 'urlCdcAn')
File "/home/pi/domoticz_linky/linky.py", line 117, in _get_data
req = session.post(API_BASE_URI + API_ENDPOINT_DATA, allow_redirects=False, data=payload, params=params)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 535, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/lib/python3/dist-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 457, in send
r = low_conn.getresponse()
File "/usr/lib/python3.5/http/client.py", line 1198, in getresponse
response.begin()
File "/usr/lib/python3.5/http/client.py", line 297, in begin
version, status, reason = self._read_status()
File "/usr/lib/python3.5/http/client.py", line 279, in _read_status
raise BadStatusLine(line)
http.client.BadStatusLine: <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
------------------------------

Une idée du problème de non mise à jour de Domoticz par le cron job ?

Merci
Dernière modification par gerardosamara le 19 janv. 2018, 11:06, modifié 1 fois.
singinglarvae
Messages : 17
Inscription : 04 avr. 2016, 11:03

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par singinglarvae »

Marcus a écrit :Bonsoir à tous

@singinglarvae Il faut que tu te logue sur le site toi même et que tu actives l'enregistrement des données de consommation, j'ai perdu 2 heures avec cette bêtise ;)

Marcus
Bonjour,

et merci pour le retour ! Le soucis, c'est que mon enregistrement de données est bien activé. En tout les cas, si je me loggue moi-même sur le site, j'ai bel et bien mes graphs de consommation qui apparaissent et ce depuis déjà quelques mois. Il y aurait une autre option ??

Encore merci !
gerardosamara
Messages : 15
Inscription : 18 janv. 2018, 12:53

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par gerardosamara »

Suite avec le graphe généré

1) Les dates sont incorrectes , les jours du 7 et 8 janvier sont en fait le 17 (hier) et 18 ( aujourd'hui) janvier

2) Les données affichées sont en partie erronées ( entre 2K 6K est ok)
C'est un graphe sur 24 h et non sur 1 mois ( échelle jour en abscisse)

3 ) erreur persistance à chaque activation par cron ( 7h30 , 17h30)

Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/requests/adapters.py", line 454, in send
r = low_conn.getresponse(buffering=True)
TypeError: getresponse() got an unexpected keyword argument 'buffering'


=> Je ne sais pas vraiment par ou commencer
=> Ce problème est t'il connu ? Je suis sur la dernière beta
linky.PNG
linky.PNG (54.71 Kio) Consulté 7507 fois
Martial
Messages : 201
Inscription : 03 mars 2017, 18:58

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par Martial »

Bonjour gerardosamara,
Le problème de date est celui que j'ai indiqué dans mon post: j'ai ajouté un pad() pour que le mois soit bien sur 2 caratères, sinon tout est décalé.
De plus, les chiffres de déc 2017 se retrouvent en déc 2018!
Pour ce dernier problème de dates (que l'on retrouve sur le traitement mensuel), je n'ai pas corrigé le code, mais je modifie le fichier req.sql généré avant de l'injecter (ne pas oublier de mettre dans les shell, la ligne qui commence par cat en commentaire)
Sans oublier les problèmes sur certains coefficients multiplicateurs.
J'espère que cela te sera utile.

Modifs effectuées:

Code : Tout sélectionner

diff mauvais_domoticz_linky.js bon_domoticz_linky/domoticz_linky.js
74c74
<               var req_date=''+q_year+'-'+q_month_e+'-'+q_day_s+' '+pad(obj[i]["time"].substr(0, 5),5)+':00';
---
>               var req_date=''+q_year+'-'+pad(q_month_e,2)+'-'+pad(q_day_s,2)+' '+pad(obj[i]["time"].substr(0, 5),5)+':00';
76c76
<                       console.log('DELETE FROM \'Meter\' WHERE devicerowid='+devicerowid+' and date = \''+req_date+'\'; INSERT INTO \'Meter\' (DeviceRowID,Usage,Value,Date) VALUES ('+devicerowid+', \''+Math.round(obj[i]["conso"]*1000)+'\', \''+Math.round(cumul*1000)+'\', \''+req_date+'\');') ;
---
>                       console.log('DELETE FROM \'Meter\' WHERE devicerowid='+devicerowid+' and date = \''+req_date+'\'; INSERT INTO \'Meter\' (DeviceRowID,Usage,Value,Date) VALUES ('+devicerowid+', \''+Math.round(obj[i]["conso"]*10000)+'\', \''+Math.round(cumul*1000)+'\', \''+req_date+'\');') ;
105c105
<                       console.log('DELETE FROM \'Meter_Calendar\' WHERE devicerowid='+devicerowid+' and date = \''+req_date+'\'; INSERT INTO \'Meter_Calendar\' (DeviceRowID,Value,Counter,Date) VALUES ('+devicerowid+', \''+Number((obj[i]["conso"]*100).toFixed(2))+'\', \''+Math.round(cumul*1000)/1000+'\', \''+req_date+'\');') ;
---
>                       console.log('DELETE FROM \'Meter_Calendar\' WHERE devicerowid='+devicerowid+' and date = \''+req_date+'\'; INSERT INTO \'Meter_Calendar\' (DeviceRowID,Value,Counter,Date) VALUES ('+devicerowid+', \''+Number((obj[i]["conso"]*1000).toFixed(2))+'\', \''+Math.round(cumul*1000)/1000+'\', \''+req_date+'\');') ;
Marcus
Messages : 4
Inscription : 17 janv. 2018, 20:23

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par Marcus »

Génial!!!! Merci Martial!!! j'étais bien incapable de modifier l'erreur sans ta précieuse explication!

Edit: Eeeeeuh ben en fait... Comment fais-tu pour modifier le fichier req.sql avant de l'injecter??
Marcus
Messages : 4
Inscription : 17 janv. 2018, 20:23

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par Marcus »

singinglarvae a écrit : Bonjour,

et merci pour le retour ! Le soucis, c'est que mon enregistrement de données est bien activé. En tout les cas, si je me loggue moi-même sur le site, j'ai bel et bien mes graphs de consommation qui apparaissent et ce depuis déjà quelques mois. Il y aurait une autre option ??

Encore merci !
Tu vois ta consommation demie heure par demie heure?

Si non, tu dois activer "la courbe de charge"
Martial
Messages : 201
Inscription : 03 mars 2017, 18:58

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par Martial »

Pour marcus
ben, avec ton editeur de texte favori, tu remplaces 2018 par 2017 là où c'est nécessaire ... à toi de faire la commande qui va bien en fonction du contexte.
gerardosamara
Messages : 15
Inscription : 18 janv. 2018, 12:53

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par gerardosamara »

Merci @Martial,

La modification "pad" dans le fichier "domoticz.linky.js" a résolu le problème de l'erreur signalé dans une réponse au dessus.

2018-01-19 17:30:03,875 logging in as xxxxxxxx@xxx...
2018-01-19 17:30:09,724 logged in successfully!
2018-01-19 17:30:09,725 retreiving data...
2018-01-19 17:30:33,117 got data!

Je vais observer le graph generé pendant 1 jour ou 2.

EDIT : un premier graph entre hier et ce matin
Linky meter.PNG
Linky meter.PNG (102.27 Kio) Consulté 7159 fois
Marcus
Messages : 4
Inscription : 17 janv. 2018, 20:23

Re: Récupérer ses informations de consommation électriques via l'API ENEDIS

Message par Marcus »

Bonjour!

J'ai oublié une chose importante... Merci epierre pour ce code et ce github!!!

Merci Martial, j'ai compris.
Cependant, j'ai toujours un graphique à la noix... du même genre que le 1er de gerardosamara.
Répondre