Simulation de trames teleInfo par WinInfo.ino
-
Bonjour,
j'ai ajouté une option pour simuler des trames teleInfo en bouclant TX serial1 vers Rx serial2.
Je vous joint 1 fichier avec les modifications à ajouter à WinInfo.ino ainsi qu'un copie décran de l'onglet tinfo associé.
[0_1518804378137_modif WinInfo.txt](Envoi en cours 100%)
-
Je vous colle le code directement, problème avec un fichier.
#define SIMUTRAMETEMPO
#ifdef SIMUTRAMETEMPO
//avec esp12 0.9
//strapper ces 2 pins:
//emission sur serial1 esp12-->GPIO2--->TXD1-->D4
//réception sur serial après le swap-->GPIO13---->RXD2--->D7//fonctions calcChecksum de LibTeleinfo modifié
unsigned char calcChecksum(char *mot)
{
unsigned int i;
unsigned int sum = ' '; // Somme des codes ASCII du message + un espace// avoid dead loop, always check all is fine if (mot) { // this will not hurt and may save our life ;-) if (strlen(mot)) { while (*mot) sum += *mot++; return ((sum & 63) + ' '); } } return 0;
}
/* ======================================================================
Function: initSimuTrame
Purpose :
Input :
Output : -
Comments: -
====================================================================== */
int cptChar = 500;
unsigned long cpt = 0; //max:4294967295
#define END_STR '\0' // End of group
#define NBCHAR 23
#define NBCHAMP 17//options supplémentaire du compilateur, ajouter -fpermissive
//ATTENTION a tabnames de webserver.cpp si version LibTeleinfo-syslog.zip
char TRAME[][NBCHAR] = { "\x02\0","\rADCO 039801172264 \0", "\rOPTARIF BBR* \0", "\rISOUSC 45 \0",
"\rBBRHCJB 008078393 \0", "\rBBRHPJB 015766489 \0", "\rBBRHCJW 001256887 \0",
"\rBBRHPJW 002075407 \0", "\rBBRHCJR 000153905 \0", "\rBBRHPJR 000532607 \0",
"\rPTEC HCJW \0", "\rDEMAIN BLEU \0", "\rIINST 001 \0","\rIMAX 025 \0",
"\rHHPHC Y \0","\rMOTDETAT 000000 \0","\x03\0" };
void initSimuTrameTempo(void)
{
for (int i = 1; i < NBCHAMP - 1; i++)
{
TRAME[i][0] = TINFO_SGR;
for (int j = 0; j <NBCHAR; j++)
{
if (TRAME[i][j] == END_STR)
{
TRAME[i][j] = calcChecksum(&TRAME[i][1]); //CRC
TRAME[i][j + 1] = TINFO_EGR;
TRAME[i][j + 2] = END_STR;
break;
}
}
}
}
void emetTrameTempo(void)
{
char Etiq[] = "ADCO";
//mise a jour du compteur
char buffer[13];
sprintf(buffer, "%012u", cpt);
for (int i = 0; i < 12; i++)
TRAME[1][i + 6] = buffer[i];
TRAME[1][19] = tinfo.calcChecksum(&Etiq[0], &buffer[0]);
//emission d'une trame complète
for (int i = 0; i < NBCHAMP; i++)
{
for (int j = 0; j < NBCHAR; j++)
{
if (TRAME[i][j] != END_STR)
Serial1.write(TRAME[i][j]);
else
break;
}
delay(10);//tempo inter champ
}
cpt += 1; //pas de test de débordement...
delay(10);//tempo intertrame
}#endif //SIMUTRAMETEMPO
#ifdef SIMUTRAMETEMPO
//dans setup juste avant Init teleinfo
Serial1.begin(1200, SERIAL_7E1);
Serial1.setRxBufferSize(1024);
initSimuTrameTempo();
#endif // SIMUTRAMETEMPO#ifdef SIMUTRAMETEMPO
//au début de loop
cptChar += 1;
if(cptChar>=500)
{
emetTrameTempo();
cptChar = 0;
}
#endif //SIMUTRAMETEMPO -
Bonjour,
c'est pas con un mode débug. L'idéal serait de pouvoir l'activer depuis l'interface web, et sans modification de cablage. Cela permettrait en cas de soucis de faire un debug plus simple. Sur d'autres forums, certains se plaignent de ne pas recevoir de trames, ce mode permettrait déjà de savoir si le soucis est coté compteur ou coté ordinateur.
-
Bonjour
C'est toujours possible mais il faudrait prévoir un relais pour commuter l'entrée série entre la liaison teleinfo ou la simulation. -
non, c'est juste en sortie que ça devrait se jouer. Selon une option dans l'interface web, on pourrait choisir d'avoir les données réelles ou des données simulées.
Si on a une box domotique derrière qui ne reçoit rien, le mode debug permettrait de savoir si le soucis est en amont ou en aval de l'esp -
@mjeanne
Vous parlez-donc d'une version wifinfo modifiée? qui réémet les informations reçues de Rx serial vers Tx serial1 au profit d'une box domotique.