Les Informations Linky en temps Réel

les autres capteurs : Sondes Météo, switches
epierre
Messages : 550
Enregistré le : 27 mai 2015, 09:32
Contact :

Re: Les Informations Linky en temps Réel

Message par epierre » 30 sept. 2019, 13:16

bemo47 a écrit :
29 sept. 2019, 22:46
bonjour,
je vois plein de posts ou l'on parle de récupération des données Enedis du Linky, conso par heures, mais ou puis je trouver un tuto qui explique comment installer sur un domoticz sur windows ? est ce possible ou faut il un Linux ?
je viens de faire un .bat pour windows sur gazpar https://github.com/empierre/domoticz_gaspar

celui de linky je le ferai peut-être mais bientôt cela ne fonctionnera plus avec leur nouveau site...
Imperihome & Domoticz: MyDomoAtHome !
eedomus+ - Domoticz - MySensors
zigbee zwave nrf24l rfx

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


epierre
Messages : 550
Enregistré le : 27 mai 2015, 09:32
Contact :

Re: Les Informations Linky en temps Réel

Message par epierre » 30 sept. 2019, 15:50

epierre a écrit :
24 sept. 2019, 17:01
Hello,

Ne voyant rien je suis passé en debug, qu'est-ce qui cloche ?

2019-09-24 17:00:16.933 (DL2) /home/odroid/domoticz/plugins/LinkyD2L/D2L.pyResult is 256
2019-09-24 17:00:16.934 (DL2) fichier D2L.txt inexistant
Hello,

eesmart me dit qu'ils n'arrivent pas à reproduire le problème, j'ai mis à jour à partir de ton git et domoticz me dit:
2019-09-30 15:50:11.288 Error: (DL2) 'onHeartbeat' failed 'ValueError':'invalid literal for int() with base 10: 'None''.
2019-09-30 15:50:11.288 Error: (DL2) ----> Line 158 in '/home/odroid/domoticz/plugins/LinkyD2L/plugin.py'
2019-09-30 15:50:11.288 Error: (DL2) ----> Line 101 in '/home/odroid/domoticz/plugins/LinkyD2L/plugin.py'
Imperihome & Domoticz: MyDomoAtHome !
eedomus+ - Domoticz - MySensors
zigbee zwave nrf24l rfx

denis_brasseur
Messages : 288
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Les Informations Linky en temps Réel

Message par denis_brasseur » 02 oct. 2019, 18:06

denis_brasseur a écrit :
28 sept. 2019, 15:59
.......................
.......................................
........................................................

Egalement un message récurrent dans les logs, mais qui n'est apapru qu'au bout de 30 mn environ

Code : Tout sélectionner

2019-09-28 16:11:50.055 Error: (D2L) 'onHeartbeat' failed 'TypeError':'attribute of type 'NoneType' is not callable'.
2019-09-28 16:11:50.055 Error: (D2L) ----> Line 158 in '/home/pi/domoticz/plugins/LinkyD2L/plugin.py', function onHeartbeat
2019-09-28 16:11:50.055 Error: (D2L) ----> Line 107 in '/home/pi/domoticz/plugins/LinkyD2L/plugin.py', function onHeartbeat
Il s'agit apparemment d'une anomalie connue
Python Plugin: OpenAQ
La solution (qui fonctionne) est celle ci :

Code : Tout sélectionner

# dat0 = datetime.datetime.strptime(ix0[0],'%Y-%m-%dT%H:%M:%S')
try:
  dat0 = datetime.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')
except TypeError:
  dat0 = datetime.fromtimestamp(time.mktime(time.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')))
  
# dat1 = datetime.datetime.strptime(ix1[0],'%Y-%m-%dT%H:%M:%S')
try:
  dat1 = datetime.strptime(ix1[0], '%Y-%m-%dT%H:%M:%S')
except TypeError:
  dat1 = datetime.fromtimestamp(time.mktime(time.strptime(ix1[0], '%Y-%m-%dT%H:%M:%S')))
 
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

philou55
Messages : 12
Enregistré le : 22 juil. 2019, 21:42

Re: Les Informations Linky en temps Réel

Message par philou55 » 02 oct. 2019, 20:01

En fait , les problèmes que Epierre rencontre sont liés au fait que son D2L ne fournit pas
les informations relatives à l'intensité consommée : la date est à zéro et il y a 'none' dans
la valeur en ampère , ce qui n'est pas le cas dans mon installation
Les réponses fournies par le support D2L ne sont pas encore satisfaisantes ...
Je contournerai le problème, si besoin, on ne suivra pas l'intensité si elle n'est pas disponible
En tout cas, merci à vous de votre intérêt et de votre support ...

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


philou55
Messages : 12
Enregistré le : 22 juil. 2019, 21:42

Re: Les Informations Linky en temps Réel

Message par philou55 » 03 oct. 2019, 20:48

J'ai mis à disposition dans le Github du projet une version de D2L.py qui contourne le problème (si il existe)
et qui permet a Epierre d'enfin voir ses KWH

denis_brasseur
Messages : 288
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Les Informations Linky en temps Réel

Message par denis_brasseur » 12 oct. 2019, 14:25

Erreur récurrente visible dans les logs, en plus de l'erreur régulière lié à la conversion de la date de dernier index.
J'ai apporté quelques modifcations afin de corriger cette problématique d'erreur :

Code : Tout sélectionner

#
# Author: Philou55 sur base GizMoCuz
#
# Integration Domoticz de l ERL D2L pour le compteur Linky 
#
"""
<plugin key="LinkyD2L" name="D2L pour Linky" author="Philou55" version="1.0.0">
    <description>
        Declarez le D2L avec vos identifiants ConsoSpy et vous obtiendrez
        <ul style="list-style-type:square">
                <li>votre index de relève en temps réel</li>
        </ul>
    </description>
    <params>
         <param field="Username" label="Identifiant" width="100px" required="true" default=""/>
         <param field="Password" label="mot de passe" width="100px" required="true" default=""/>
         <param field="Mode1" label="Scan Delay (mn)" width="20px" required="true" default="1"/>
         <param field="Mode2" label="Debug  Y/N"  width="20px" required="true" default="N"/>
    </params>
</plugin>
"""

import Domoticz
import json
import os
from datetime import datetime
import time

#import requests

class BasePlugin:

    # controle du heartbeat
    flag01 = 0
    nflag01 = 6
    sMins = None 
    path = None
    sUser = None
    sPassword = None
    sDebug = None
    debug = False
    def __init__(self):
        #self.var = 123
        return

    def onStart(self):
        self.flag01=0
        # self.nflag01 = int(Parameters["Frequence"])
        Domoticz.Heartbeat(20)
        self.path=os.getcwd() + "/plugins/LinkyD2L"
        self.sUser=Parameters["Username"]
        self.sPassword=Parameters["Password"]
        self.sMins=Parameters["Mode1"]
        self.nflag01 = int(self.sMins) * 3
        self.sDebug=Parameters["Mode2"].upper()
        if self.sDebug == "Y" : self.debug=True
        Domoticz.Log("START with (" + self.sUser+","+self.sPassword+") scan every "+self.sMins+" mn ("+str(self.nflag01)+ "HB) , Debug="+self.sDebug)

        if(len(Devices)==0): 
           Domoticz.Device(Name="LKY_IndexKWH",  Unit=1, TypeName="Custom", Used=1).Create()
           Domoticz.Device(Name="LKY_Amperes",  Unit=2, TypeName="Current/Ampere", Used=1).Create()
           Domoticz.Device(Name="LKY_Watts",  Unit=3, TypeName="kWh", Used=1).Create()
  
        if self.debug: DumpConfigToLog()

    def onStop(self):
        Domoticz.Log("onStop called")

    def onConnect(self, Connection, Status, Description):
        Domoticz.Log("onConnect called")

    def onMessage(self, Connection, Data):
        Domoticz.Log("onMessage called")

    def onCommand(self, Unit, Command, Level, Hue):
        Domoticz.Log("onCommand called for Unit " + str(Unit) + ": Parameter '" + str(Command) + "', Level: " + str(Level))

    def onNotification(self, Name, Subject, Text, Status, Priority, Sound, ImageFile):
        Domoticz.Log("Notification: " + Name + "," + Subject + "," + Text + "," + Status + "," + str(Priority) + "," + Sound + "," + ImageFile)

    def onDisconnect(self, Connection):
        Domoticz.Log("onDisconnect called")

    def onHeartbeat(self):
        if self.flag01 == 0:
          script=self.path + "/D2L.py"
          res=os.system("python " + script + " " + self.sUser + " "+ self.sPassword)
          if self.debug: Domoticz.Log(script+"Result is "+str(res))

          fichier=(self.path + "/" + "D2L.json")
          if os.path.isfile(fichier):
            with open(fichier) as json_file:
              data = json.load(json_file)
              # print (data)
            # Domoticz.Log(data['Heure']+"="+data['Index'])
            # index recupere par GetIndexBetween
            try:
              ix0=data['Index0'].split("=")
              nValue=float(ix0[1])/1000.
              #Domoticz.Log(str(nValue)+ " Kwh")
              Devices[1].Update(nValue=int(data['Index']),sValue=str(nValue))
            except:
              Domoticz.Log("Erreur calcul Index")
            # intensite du courant
            try:
              sValue2=data['Courant']+";0;0"
              Devices[2].Update(nValue=int(data['Courant']),sValue=sValue2)
              # Domoticz.Log(Devices[2].Name+" : "+sValue2)
              # calcul de la puissance en WH
            except:
              Domoticz.Log("Erreur calcul Courant")
            try:
              ix1=data['Index1'].split("=")
              conso=int(ix0[1]) - int(ix1[1])
              try:
                dat0 = datetime.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')
              except TypeError:
                dat0 = datetime.fromtimestamp(time.mktime(time.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')))
              try:
                dat1 = datetime.strptime(ix1[0], '%Y-%m-%dT%H:%M:%S')
              except TypeError:
                dat1 = datetime.fromtimestamp(time.mktime(time.strptime(ix1[0], '%Y-%m-%dT%H:%M:%S')))
              duree=(dat0-dat1).seconds
              if int(duree) != 0 :
                instantwatt=float(conso)*3600/float(duree)
                # Domoticz.Log("Conso:"+str(conso)+" de "+ix1[0]+" a "+ix0[0]+" soit "+ str(duree)+ "==> " +str(instantwatt))
                sValue3=str(instantwatt)+";"+str(nValue*1000)
                Devices[3].Update(nValue=0,sValue=sValue3)
                # Domoticz.Log(Devices[3].Name+" ==> "+sValue3)
            except:
              Domoticz.Log("Erreur calcul Puissance")
          else:
            Domoticz.Log("fichier D2L.txt inexistant")
        
        self.flag01 = self.flag01 + 1
        if self.flag01 >= self.nflag01: self.flag01=0


global _plugin
_plugin = BasePlugin()

def onStart():
    global _plugin
    _plugin.onStart()

def onStop():
    global _plugin
    _plugin.onStop()

def onConnect(Connection, Status, Description):
    global _plugin
    _plugin.onConnect(Connection, Status, Description)

def onMessage(Connection, Data):
    global _plugin
    _plugin.onMessage(Connection, Data)

def onCommand(Unit, Command, Level, Hue):
    global _plugin
    _plugin.onCommand(Unit, Command, Level, Hue)

def onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile):
    global _plugin
    _plugin.onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile)

def onDisconnect(Connection):
    global _plugin
    _plugin.onDisconnect(Connection)

def onHeartbeat():
    global _plugin
    _plugin.onHeartbeat()

    # Generic helper functions

def DumpConfigToLog():
    for x in Parameters:
        if Parameters[x] != "":
            Domoticz.Log( "'" + x + "':'" + str(Parameters[x]) + "'")
    Domoticz.Log("Device count: " + str(len(Devices)))
    for x in Devices:
        Domoticz.Log("Device:           " + str(x) + " - " + str(Devices[x]))
        Domoticz.Log("Device ID:       '" + str(Devices[x].ID) + "'")
        Domoticz.Log("Device Name:     '" + Devices[x].Name + "'")
        Domoticz.Log("Device nValue:    " + str(Devices[x].nValue))
        Domoticz.Log("Device sValue:   '" + Devices[x].sValue + "'")
        Domoticz.Log("Device LastLevel: " + str(Devices[x].LastLevel))
    return
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

philou55
Messages : 12
Enregistré le : 22 juil. 2019, 21:42

Re: Les Informations Linky en temps Réel

Message par philou55 » 14 oct. 2019, 20:27

Merci de cette contribution ...
Je n'ai pas le problème sur mon installation, il faudra qu'on comprenne nos différences
Je ne suis pas en mesure d'évaluer le code sur mon installation (vivent les vacances)
Mais si il est sans conséquence, je mettrai en ligne cette version dans le GitHub
Encore une fois, Merci !!!

denis_brasseur
Messages : 288
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Les Informations Linky en temps Réel

Message par denis_brasseur » 15 oct. 2019, 05:09

philou55 a écrit :
14 oct. 2019, 20:27
Merci de cette contribution ...
Je n'ai pas le problème sur mon installation, il faudra qu'on comprenne nos différences
Je ne suis pas en mesure d'évaluer le code sur mon installation (vivent les vacances)
Mais si il est sans conséquence, je mettrai en ligne cette version dans le GitHub
Encore une fois, Merci !!!
Les erreurs que je rencontrais proviennent du fait que quelques valeurs ne remontent pas de mon D2L vers consospy.

Cela semble s'expliquer par le fait que mon compteur LINKY est à une vingtaine de mètres de mon PI.
Capture.PNG
Capture.PNG (62.67 Kio) Vu 466 fois
Pour certaines journées, j'ai une vingtaine de "trous" dans le suivi des intensités, avec apparition de messages d'erreurs dans les logs.
J'ai ainsi remplacé

Code : Tout sélectionner

sValue2=data['Courant']+";0;0"
Devices[2].Update(nValue=int(data['Courant']),sValue=sValue2)
par

Code : Tout sélectionner

try:
  sValue2=data['Courant']+";0;0"
  Devices[2].Update(nValue=int(data['Courant']),sValue=sValue2)
except:
 Domoticz.Log("Erreur calcul Courant")
Se produisait également des messages réguliers lors de la méthode de calcul ci dessous :

Code : Tout sélectionner

	dat0 = datetime.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')
que j'ai remplacé par :

Code : Tout sélectionner

try:
  dat0 = datetime.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')
except TypeError:
  dat0 = datetime.fromtimestamp(time.mktime(time.strptime(ix0[0], '%Y-%m-%dT%H:%M:%S')))
J'ai interpellé le support client de eeSmart pour comprendre le fonctionnement de l'API afin de voir si d'autres données sont récupérables et exploitables, voici leur réponse :
Il est préférable de ne maintenir qu'un seul plugin.
Pour l'évolution de celui-existant, je vous laisse contacter son auteur via le forum, il sera ravi d'échanger avec vous.
Si vous m'y autorisez, je peux lui transmettre vos coordonnées.

Cordialement,
Alain, Support eeSmart
J'avoue être très intéressé par les fonctionnalité du module D2L, à condition de pouvoir aller au delà de la simple récupération de l'intensité et du calcul de la puissance.

A disposition pour échanger sur ce sujet.
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

denis_brasseur
Messages : 288
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: Les Informations Linky en temps Réel

Message par denis_brasseur » 16 nov. 2019, 19:13

Plus de données depuis ce matin 5h12.
Les données sont bien disponibles depuis https://suivi.consospy.fr/, mais le fichier D2L.txt remonte l'erreur 'Identifiants incorrects'
{'status': 2
'version': '1.0.3'
'erreur': 'Identifiants incorrects'}
Mon identifiant n'a pas changé, le mot de passe non plus.
Une idée ?
Pi3 + DD PiDrive + RFXtrx433 + AEON Labs ZW090
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
D2L LINKY
FGR-223 "Roller Shutter 3"

philou55
Messages : 12
Enregistré le : 22 juil. 2019, 21:42

Re: Les Informations Linky en temps Réel

Message par philou55 » 16 nov. 2019, 19:24

Bonjour,

J'ai constaté le même problème ce matin sur mon installation
Après quelques investigations ,j'ai ouvert un appel au support eeSmart vers 12h00
Voici la réponse , à 12h20
"
Notre serveur est tombé.
Nous investirons afin de le relancer dans les meilleurs délais.
"
Attendons ...

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre