 void getTI() {
 	static TeleInfo last; // dernière lecture
 	char c; // le char qu'on read
+	byte nb = 0;
+
+	// enable this softSerial to listening - only if more than one softSerial is in use
+	tiSerial.listen();
+
+	// clear the softSerial buffer
+	// pas sur que ca serve vraiement en fait...
+	if ( tiSerial.overflow() ) {
+#ifdef DEBUG_ENABLED
+		Serial.println( F( "Serial overflow, flushing datas" ) );
+#endif
+		// j'ai des doutes, comme le compteur bombarde en permanence, on terminera jamais cette boucle...
+		while ( Serial.available() ) {
+  			c = tiSerial.read();
+#ifdef DEBUG_ENABLED
+		Serial.print( c );
+#endif
+		}
+#ifdef DEBUG_ENABLED
+		Serial.println( F( "Serial overflow end" ) );
+#endif
+	}
 
 	// tout d'abord on cherche une fin de ligne
 	while ( readTI() != '\n' );
+
 	// maintenant on cherche le label MOTDETAT (cad fin de trame)
 	// TIP: c'est le seul qui commence par un M!
 	bool sol = true; // start of line

		Serial.print( F(" CHECKSUM=") );
		Serial.println( cs, HEX );
#endif
		goto readLine;
	}

	if ( strTI( label, "ADCO", value, last.ADCO, msgADCO ) )			goto readLine;
	if ( strTI( label, "OPTARIF", value, last.OPTARIF, msgOPTARIF ) )	goto readLine;
	if ( atoiTI( label, "ISOUSC", value, last.ISOUSC, msgISOUSC ) )		goto readLine;
	//if ( atolTI( label, "BASE", value, last.BASE, msgBASE ) )			goto readLine;

	if ( atolTI( label, "HCHC", value, last.HC_HC, msgHC_HC ) )			goto readLine;
	if ( atolTI( label, "HCHP", value, last.HC_HP, msgHC_HP ) )			goto readLine;

	if ( atolTI( label, "EJPHN", value, last.EJP_HN, msgEJP_HN ) )		goto readLine;
	if ( atolTI( label, "EJPHPM", value, last.EJP_HPM, msgEJP_HPM ) )	goto readLine;

	if ( atolTI( label, "BBRHCJB", value, last.BBR_HC_JB, msgBBR_HC_JB ) ) goto readLine;
	if ( atolTI( label, "BBRHPJB", value, last.BBR_HP_JB, msgBBR_HP_JB ) ) goto readLine;
	if ( atolTI( label, "BBRHCJW", value, last.BBR_HC_JW, msgBBR_HC_JW ) ) goto readLine;
	if ( atolTI( label, "BBRHPJW", value, last.BBR_HP_JW, msgBBR_HP_JW ) ) goto readLine;
	if ( atolTI( label, "BBRHCJR", value, last.BBR_HC_JR, msgBBR_HC_JR ) ) goto readLine;
	if ( atolTI( label, "BBRHPJR", value, last.BBR_HP_JR, msgBBR_HP_JR ) ) goto readLine;

	if ( atoiTI( label, "PEJP", value, last.PEJP, msgPEJP ) )			goto readLine;
	if ( strTI( label, "PTEC", value, last.PTEC, msgPTEC ) )			goto readLine;

	if ( strTI( label, "DEMAIN", value, last.DEMAIN, msgDEMAIN ) )		goto readLine;

	if ( atoiTI( label, "IINST", value, last.IINST, msgIINST ) )		goto readLine;
	if ( atoiTI( label, "ADPS", value, last.ADPS, msgADPS ) )			goto readLine;
	if ( atoiTI( label, "IMAX", value, last.IMAX, msgIMAX ) )			goto readLine;
	if ( atolTI( label, "PAPP", value, last.PAPP, msgPAPP ) )			goto readLine;

	if ( charTI( label, "HHPHC", value[0], last.HHPHC, msgHHPHC ) )		goto readLine;

#ifdef DEBUG_ENABLED
	Serial.print( F( "unkown LABEL=" ) );

MyMessage msgIMAX( CHILD_ID_IMAX, V_CURRENT );

#define CHILD_ID_PAPP 7
MyMessage msgPAPP( CHILD_ID_PAPP, V_WATT ); // pas vrai c'est des VA!

// infos tarif BASE
///////////////////////////////////
#define CHILD_ID_BASE 10
MyMessage msgBASE( CHILD_ID_BASE, V_KWH ); // en fait c'est des WH

// infos tarif HC/HP
///////////////////////////////////
#define CHILD_ID_HC_HC 20
MyMessage msgHC_HC( CHILD_ID_HC_HC, V_KWH ); // en fait c'est des WH

#define CHILD_ID_HC_HP 21
MyMessage msgHC_HP( CHILD_ID_HC_HP, V_KWH) ; // en fait c'est des WH

// infos EJP
#define CHILD_ID_EJP_HN 30
MyMessage msgEJP_HN( CHILD_ID_EJP_HN, V_KWH ); // en fait c'est des WH

#define CHILD_ID_EJP_HPM 31
MyMessage msgEJP_HPM( CHILD_ID_EJP_HPM, V_KWH ); // en fait c'est des WH

#define CHILD_ID_PEJP 32
MyMessage msgPEJP( CHILD_ID_PEJP, V_KWH ); // ya pas de type pour des durées...
