Quotidien Shaarli

Tous les liens d'un jour sur une page.

December 3, 2017

?h8LkQQ

#include <SoftwareSerial.h>
SoftwareSerial Serial_Teleinfo(8,12); // Créé une liason série sur les pin 11 et 12
// Pin 11 sur l'optocoupleur
long Index_HC=0;
long Index_HP=0;
byte I_A=0;
int P_W=0;
int sommePU=0;
byte compteur=0;
char PERIODE=' ';

unsigned long temps_d_acquisition = 0;

void setup() {
Serial.begin(9600); // Port série pour liasion Arduino <-> PC
Serial_Teleinfo.begin(1200); // Port série pour liasion Arduino <-> Teleinfo
}

void loop() {

             temps_d_acquisition=millis();

             Recupere_la_Teleinfo();

             //Serial.print("Temps d'aquisition : ");Serial.print(millis()-temps_d_acquisition);Serial.println(" Millisecondes");

             //Serial.print(" => Index HC : ");Serial.print(Index_HC);Serial.println(" Wh");
             //Serial.print(" => Index HP : ");Serial.print(Index_HP);Serial.println(" Wh");
             //Serial.print(" => PERIODE : H") ;Serial.println(PERIODE);
             //Serial.print(" => Intensite instantanee : ");Serial.print(I_A);Serial.println(" A");
             //Serial.print(" => Puissance apparente : ");Serial.print(P_W); Serial.println(" W");
           sommePU=sommePU+I_A;
           compteur = compteur+1;
           //Serial.print(sommePU);
           //Serial.print(compteur);
           if (compteur==30)

{
Serial.print(sommePU/30);
compteur =0;
sommePU=0;
}

}

void Recupere_la_Teleinfo(){

char charIn_Trame_Teleinfo = 0; // stock chaque charactère recu de la trame teleinfo

String Ligne; // stock la ligne complette (entre LF(0x0A) et CR(0x0D))
String Etiquette; // stock l'intitulé
String Valeur; // stock la valeur apres l'intitulé
char Checksum;
/*
Trame recu par la teleinfo (Expliquations ! non recu par la teleinfo)

ADCO 040422040644 5 (N° d'identification du compteur : ADCO (12 caractères))
OPTARIF HC.. < (Option tarifaire (type d'abonnement) : OPTARIF (4 car.))
ISOUSC 45 ? (Intensité souscrite : ISOUSC ( 2 car. unité = ampères))
HCHC 077089461 0 (Index heures creuses si option = heures creuses : HCHC ( 9 car. unité = Wh))
HCHP 096066754 > (Index heures pleines si option = heures creuses : HCHP ( 9 car. unité = Wh))
PTEC HP.. (Période tarifaire en cours : PTEC ( 4 car.))
IINST 002 Y (Intensité instantanée : IINST ( 3 car. unité = ampères))
IMAX 044 G (Intensité maximale : IMAX ( 3 car. unité = ampères))
PAPP 00460 + (Puissance apparente : PAPP ( 5 car. unité = Volt.ampères))
HHPHC E 0 (Groupe horaire si option = heures creuses ou tempo : HHPHC (1 car.))
MOTDETAT 000000 B (Mot d'état (autocontrôle) : MOTDETAT (6 car.))
*/

//RAZ des valeurs
Index_HC=Index_HP=I_A=P_W=0;
PERIODE= ' ';

while ( Index_HC==0 || Index_HP==0 || I_A==0 || P_W==0 || PERIODE==' ' ){ // recommence tant que l'on a pas recu tous les élément voulus

     //Attend un début de ligne (0x0A)
                  charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                  while (charIn_Trame_Teleinfo != 0x0A){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere de début de ligne 0x0A
                        if ((millis()-temps_d_acquisition)>1000 ) {Serial.println("Teleinfo Inaccesible");loop();} // Affiche un erreur si la teleinfo est inaccesible et retourne à Loop
                        if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                        }
                  }
     //Vide Ligne
                  Ligne="";
     //Vide Etiquette
                  Etiquette="";
     //Concatene les carateres recus jusqu'a l'espace suivant (0x20)
                  charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                  while (charIn_Trame_Teleinfo != 0x20){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere Espace
                                     if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                             charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                             if (charIn_Trame_Teleinfo != 0x20){Etiquette += charIn_Trame_Teleinfo;}      // concatene les caractères reçus sauf les espaces
                                             Ligne += charIn_Trame_Teleinfo;
                                     }                    
                   }

     //Vide Valeur
                  Valeur="";    
     //Concatene les carateres recus jusqu'a l'espace suivant (0x20)
                  charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                  while (charIn_Trame_Teleinfo != 0x20){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere Espace
                                     if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                             charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                             if (charIn_Trame_Teleinfo != 0x20){Valeur += charIn_Trame_Teleinfo;}      // concatene les caractères reçus sauf les espaces
                                             Ligne += charIn_Trame_Teleinfo;
                                     }                    
                   }

     //Concatene les carateres recus jusqu'a la fin de ligne (0x0D)
                  charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                  while (charIn_Trame_Teleinfo != 0x0D){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere de fin de ligne
                                     if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                             charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                             if (charIn_Trame_Teleinfo != 0x0D){Ligne += charIn_Trame_Teleinfo;} // concatene les caractères reçus sauf le Charactere de fin de ligne (0x0D)
                                             if (charIn_Trame_Teleinfo != 0x0D){Checksum = charIn_Trame_Teleinfo;}
                                     }                    
                   }
    //Controle du Checksum (Le dernier caractere de la ligne et un caractere de controle)

                       char Controle=0;
                       String trame= Etiquette + " " + Valeur;
                       for (byte i=0;i<(trame.length()-2);i++){
                                 Controle = trame[i] +Controle;
                       }
                       Controle = (Controle & 0x3F) + 0x20;            

         if (Controle = Checksum) { // Si le checksum correspond bien au code controlé

     //Associe la valeur lue à son etiquette
           if (Etiquette.substring (0,4)=="HCHC") {Index_HC = Valeur.toInt();}
           if (Etiquette.substring (0,4)=="HCHP") {Index_HP = Valeur.toInt();}
           if (Etiquette.substring (0,4)=="PTEC") {PERIODE  = Valeur[1];     }
           if (Etiquette.substring (0,4)=="IINS") {I_A      = Valeur.toInt();}
           if (Etiquette.substring (0,4)=="PAPP") {P_W      = Valeur.toInt();}    
         }

}

}

?IBB6aQ

#include <SoftwareSerial.h>
SoftwareSerial Serial_Teleinfo(11,12); // Créé une liason série sur les pin 11 et 12
// Pin 11 sur l'optocoupleur
long Index_HC=0;
long Index_HP=0;
byte I_A=0;
int P_W=0;
char PERIODE=' ';

unsigned long temps_d_acquisition = 0;

void setup() {
Serial.begin(9600); // Port série pour liasion Arduino <-> PC
Serial_Teleinfo.begin(1200); // Port série pour liasion Arduino <-> Teleinfo
}

void loop() {

              temps_d_acquisition=millis();

              Recupere_la_Teleinfo();

              Serial.print("Temps d'aquisition : ");Serial.print(millis()-temps_d_acquisition);Serial.println(" Millisecondes");

              Serial.print(" => Index HC : ");Serial.print(Index_HC);Serial.println(" Wh");
              Serial.print(" => Index HP : ");Serial.print(Index_HP);Serial.println(" Wh");
              Serial.print(" => PERIODE : H") ;Serial.println(PERIODE);
              Serial.print(" => Intensite instantanee : ");Serial.print(I_A);Serial.println(" A");
              Serial.print(" => Puissance apparente : ");Serial.print(P_W); Serial.println(" W");

}

void Recupere_la_Teleinfo(){

char charIn_Trame_Teleinfo = 0; // stock chaque charactère recu de la trame teleinfo

String Ligne; // stock la ligne complette (entre LF(0x0A) et CR(0x0D))
String Etiquette; // stock l'intitulé
String Valeur; // stock la valeur apres l'intitulé
char Checksum;
/*
Trame recu par la teleinfo (Expliquations ! non recu par la teleinfo)

ADCO 040422040644 5 (N° d'identification du compteur : ADCO (12 caractères))
OPTARIF HC.. < (Option tarifaire (type d'abonnement) : OPTARIF (4 car.))
ISOUSC 45 ? (Intensité souscrite : ISOUSC ( 2 car. unité = ampères))
HCHC 077089461 0 (Index heures creuses si option = heures creuses : HCHC ( 9 car. unité = Wh))
HCHP 096066754 > (Index heures pleines si option = heures creuses : HCHP ( 9 car. unité = Wh))
PTEC HP.. (Période tarifaire en cours : PTEC ( 4 car.))
IINST 002 Y (Intensité instantanée : IINST ( 3 car. unité = ampères))
IMAX 044 G (Intensité maximale : IMAX ( 3 car. unité = ampères))
PAPP 00460 + (Puissance apparente : PAPP ( 5 car. unité = Volt.ampères))
HHPHC E 0 (Groupe horaire si option = heures creuses ou tempo : HHPHC (1 car.))
MOTDETAT 000000 B (Mot d'état (autocontrôle) : MOTDETAT (6 car.))
*/

//RAZ des valeurs
Index_HC=Index_HP=I_A=P_W=0;
PERIODE= ' ';

while ( Index_HC==0 || Index_HP==0 || I_A==0 || P_W==0 || PERIODE==' ' ){ // recommence tant que l'on a pas recu tous les élément voulus

      //Attend un début de ligne (0x0A)
                   charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                   while (charIn_Trame_Teleinfo != 0x0A){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere de début de ligne 0x0A
                         if ((millis()-temps_d_acquisition)>1000 ) {Serial.println("Teleinfo Inaccesible");loop();} // Affiche un erreur si la teleinfo est inaccesible et retourne à Loop
                         if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                 charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                         }
                   }
      //Vide Ligne
                   Ligne="";
      //Vide Etiquette
                   Etiquette="";
      //Concatene les carateres recus jusqu'a l'espace suivant (0x20)
                   charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                   while (charIn_Trame_Teleinfo != 0x20){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere Espace
                                      if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                              charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                              if (charIn_Trame_Teleinfo != 0x20){Etiquette += charIn_Trame_Teleinfo;}      // concatene les caractères reçus sauf les espaces
                                              Ligne += charIn_Trame_Teleinfo;
                                      }                     
                    }

      //Vide Valeur
                   Valeur="";     
      //Concatene les carateres recus jusqu'a l'espace suivant (0x20)
                   charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                   while (charIn_Trame_Teleinfo != 0x20){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere Espace
                                      if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                              charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                              if (charIn_Trame_Teleinfo != 0x20){Valeur += charIn_Trame_Teleinfo;}      // concatene les caractères reçus sauf les espaces
                                              Ligne += charIn_Trame_Teleinfo;
                                      }                     
                    }

      //Concatene les carateres recus jusqu'a la fin de ligne (0x0D)
                   charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ;
                   while (charIn_Trame_Teleinfo != 0x0D){ // reste dans cette boucle tant qu'on ne recoit pas le Charactere de fin de ligne
                                      if (Serial_Teleinfo.available()){ // Tant qu'il y a des caractères disponibles
                                              charIn_Trame_Teleinfo = Serial_Teleinfo.read() & 0x7F ; // Stock 1 caractere recu
                                              if (charIn_Trame_Teleinfo != 0x0D){Ligne += charIn_Trame_Teleinfo;} // concatene les caractères reçus sauf le Charactere de fin de ligne (0x0D)
                                              if (charIn_Trame_Teleinfo != 0x0D){Checksum = charIn_Trame_Teleinfo;}
                                      }                     
                    }
     //Controle du Checksum (Le dernier caractere de la ligne et un caractere de controle)

                        char Controle=0;
                        String trame= Etiquette + " " + Valeur;
                        for (byte i=0;i<(trame.length()-2);i++){
                                  Controle = trame[i] +Controle;
                        } 
                        Controle = (Controle & 0x3F) + 0x20;             

          if (Controle = Checksum) { // Si le checksum correspond bien au code controlé

      //Associe la valeur lue à son etiquette
            if (Etiquette.substring (0,4)=="HCHC") {Index_HC = Valeur.toInt();}
            if (Etiquette.substring (0,4)=="HCHP") {Index_HP = Valeur.toInt();}
            if (Etiquette.substring (0,4)=="PTEC") {PERIODE  = Valeur[1];     }
            if (Etiquette.substring (0,4)=="IINS") {I_A      = Valeur.toInt();}
            if (Etiquette.substring (0,4)=="PAPP") {P_W      = Valeur.toInt();}     
          }

}

}