Page 1 sur 1

TeleInfo

Publié : 12 nov. 2017, 14:08
par djskyz
Bonjour à tous,

Il y'a plus de 2 ans , j'ai mis en place la teleInfo en branchant le montage à base d'optocoupleur sur le GPIO du Raspberry.

Hors depuis la réécriture du module Téléinfo, je me rends compte que mes compteurs ne se mettent à jour que tous les 5 mns.

J'ai fait un tours sur le GitHub pour regarder un peu les sources ...

Le test avant mise à jour des compteurs se fait sur la valeur de PAPP, hors mon compteur ne renvoie pas cette info.
(Fichier TeleinfoBase.cpp procedure ProcessTeleinfo()).

Il y'a bien dans cette procedure un test qui calcul le PAPP en fonction de la valeur du IINST :

Code : Tout sélectionner

// PAPP only exist on some meter versions. If not present, we can approximate it as (current x 230V)
	if ((teleinfo.PAPP == 0) && ((teleinfo.IINST > 0) || (teleinfo.IINST1 > 0) || (teleinfo.IINST2 > 0) || (teleinfo.IINST3 > 0)))
		teleinfo.PAPP = (teleinfo.triphase ? (teleinfo.IINST1 + teleinfo.IINST2 + teleinfo.IINST3) : (teleinfo.IINST)) * 230;
mais a priori "teleinfo.PAPP" doit être mal initialisé car la mise à jour doit se faire apres cette condition :

Code : Tout sélectionner

	if ((teleinfo.pAlertPAPP != teleinfo.PAPP) || (difftime(atime, teleinfo.last) >= 290))
Hors chez moi la mise à jour ne se fait que tous les 5 mns malgré la variation de IINST.

Cela est embêtant pour moi car j'utilise le compteur de pourcentage de charge pour mes scripts de chauffage ...

Aujourd'hui je suis obligé de mettre un délai d'attente de donnée à 1 minutes afin de redémarrer le service Teleinfo plus fréquemment.

Ce problème est-il connu ? Je ne trouve aucune info en ce sens ...

Par avance merci.

Re: TeleInfo

Publié : 12 nov. 2017, 14:24
par pigloox
As tu essayé ceci ?

Image

Re: TeleInfo

Publié : 12 nov. 2017, 14:39
par djskyz
Oui j'ai essayé sans succès ...

Chez toi il se mets à jour plus fréquemment ??

Re: TeleInfo

Publié : 12 nov. 2017, 14:57
par pigloox
Il est vrai qu'au niveau de la base de données les valeurs sont enregistrées toutes les 5 minutes mais j'ai bien les remontées qui se font régulièrement :

-l'affichage de la conso instantanée varie bien plusieurs fois en 5 minutes
-idem pour le courant

Pour l'affichage du pourcentage de consommation je ne peux pas te dire car je ne l'utilise pas mais pourquoi ne te bases tu pas sur le courant ? Et il me semble qu'avant la réécriture de ce module, le pourcentage n'était pas implémenté.

Re: TeleInfo

Publié : 12 nov. 2017, 15:05
par djskyz
Chez moi les remontées ne se font que toutes les 5mns, ducoups courant ou pourcentage de consommation ca ne règle pas mon soucis ...

Effectivement avant la réécriture du module j'utilisais le courant ...

Ton compteur renvoie la valeur PAPP chez toi ?

Voici ma trame Téléinfo :

Code : Tout sélectionner

ADCO 039801185156 F
OPTARIF HC.. <
ISOUSC 30 9
HCHC 199488240 3
HCHP 037372281 4
PTEC HP..  
IINST 003 Z
IMAX 034 F
HHPHC A ,
MOTDETAT 030000 E

Re: TeleInfo

Publié : 28 nov. 2017, 15:37
par djskyz
Bon, j'ai fouiller dane le code de domoticz et trouvé le problème, et ca me perturbe que personne ne l'ai relevé ou alors il y'a trés peu de gens qui ont des compteurs sans PAPP ...

Alors je m'en remet au forum car j'ai un peu de mal avec GtHub et surtout pas enormement de temps pour m'y pencher plus longtemps alors si un des developpeur peux s'en occuper ...

Le probleme vient de la "TeleInfoBase.cpp" :

Code : Tout sélectionner

// PAPP only exist on some meter versions. If not present, we can approximate it as (current x 230V)
	if ((teleinfo.PAPP == 0) && ((teleinfo.IINST > 0) || (teleinfo.IINST1 > 0) || (teleinfo.IINST2 > 0) || (teleinfo.IINST3 > 0)))
		teleinfo.PAPP = (teleinfo.triphase ? (teleinfo.IINST1 + teleinfo.IINST2 + teleinfo.IINST3) : (teleinfo.IINST)) * 230;
Cette condition initialise la valeur PAPP quand celle-ci n'existe pas dans la trame TeleInfo.
Le problème c'est qu'après la premiere trame le PAPP n'est plus jamais à 0 donc ne varie plus dans le code ...

J'ai compilé une version qui fonctionne chez moi, en créant un boolean withPAPP, qui passe a "true" QUE lorsque l'info PAPP existe vraiment dans la trame TeleInfo.

TeleinfoBase.cpp

Code : Tout sélectionner

	// PAPP only exist on some meter versions. If not present, we can approximate it as (current x 230V)
	if ((!teleinfo.withPAPP) && ((teleinfo.IINST > 0) || (teleinfo.IINST1 > 0) || (teleinfo.IINST2 > 0) || (teleinfo.IINST3 > 0)))
		teleinfo.PAPP = (teleinfo.triphase ? (teleinfo.IINST1 + teleinfo.IINST2 + teleinfo.IINST3) : (teleinfo.IINST)) * 230;
TeleinfoBase.h

Code : Tout sélectionner

	...
		class CTeleinfoBase : public CDomoticzHardwareBase
		{
		...
		bool    triphase;
            	bool    withPAPP;    //For meters with no PAPP
			int    CRCmode1;	 // really a bool, but with a special "un-initialized state"
			_tTeleinfo()
			{
				ISOUSC = 0;
				IINST = 0;
				...		
				last = 0;
				triphase = false;
               			withPAPP = false;
 
TeleinfoSerial.cpp

Code : Tout sélectionner

...
void CTeleinfoSerial::MatchLine()
{
...
	if (label == "ADCO") teleinfo.ADCO = vString;
	else if (label == "OPTARIF") teleinfo.OPTARIF = vString;
	else if (label == "ISOUSC") teleinfo.ISOUSC = value;
	else if (label == "PAPP") { teleinfo.PAPP = value; teleinfo.withPAPP = true;}
	else if (label == "PTEC")  teleinfo.PTEC = vString;
	else if (label == "IINST") teleinfo.IINST = value;
...