Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
decodage date en mode standard
#1
bonjour, nouveau et débutant, j'ai réussi à installer la version lecture linky v10.1 sur mon esp32 vroom. le linky est en mode standard ( j(ai modifié la vitesse du port série pour adapté le code) je voudrai avoir accés à l'étiquette DATE pour décoder la date , le jour ..... j'ai chercher , j'ai écrit pas mal de code, mais là je sèche. quelqu'un a t-il déjà réussi cela ?
ps j'ai écrit un code pour convertir la date unix en "arduino" mais apparemment c'est pas de l'unix?
merci pour votre aide.
Répondre
#2
if (code.indexOf("DATE")>0){
  String test= code.substring(code.indexOf("DATE") + 0);
   DATELinky= test.substring(6, 20);
   
anneelinky="20"+test.substring(6, 8);
moislinky=test.substring(8, 10);
jourlinky=test.substring(10, 12);
   heurelinky=test.substring(12, 14);
   minutelinky=test.substring(14, 16);
   secondelinky=test.substring(16, 18);}
6800W pV
un triac sur  résistance cumulus eau sanitaire
2 relais SSR sur 2 résistances pour cumulus chauffage
et 1 relais  SSR sur radiateur en on/off
4 DS18b20 plus 4 thermistances
2 JSY-MK-194 soit 4 ampèremètre
8 relais  sur 74hc595 contrôle, chaudière, planché, vanne, circulateur.....
Répondre
#3
Photo 
bonsoir, merci pour votre retour. voila ce que j'ai sur le décodage linky , c'est la page html.
je vais essayer vos propositions. merci

https://www.dropbox.com/scl/fi/5zibhrhc5...yq7et&dl=0
Répondre
#4
voilà j'ai mis ce bout de code dans la boucle lecture linky, ( merci cdlnd) ici:
Code :
DataRawLinky[IdxDataRawLinky] = char(13);
            IdxDataRawLinky = (IdxDataRawLinky + 1) % 1000;
            if (code.indexOf("IINST") == 0) {
              Iinst = val.toFloat();
              if (Imoy == 0) { Imoy = Iinst; }
              Imoy = (Iinst + 149 * Imoy) / 150;  //moyenne courant efficace 5 dernieres minutes environ
            }
            if (code.indexOf("PAPP") == 0) {
              Papp = val.toFloat();
              if (PappM == 0) { PappM = Papp; }
              PappM = (Papp + 149 * PappM) / 150;  //moyenne puissance apparente 5 dernieres minutes environ
            }
            if (code.indexOf("HCHP") == 0 || code.indexOf("BASE") == 0) {
              HCHP = val.toInt();
            }
            if (code.indexOf("HCHC") == 0) {
              HCHC = val.toInt();
            }
            if (code.indexOf("DATE") > 0) {
             
              String test = code.substring(code.indexOf("DATE") + 0);
              DATELinky = test.substring(6, 20);

              anneelinky = "20" + test.substring(6, 8);
              moislinky = test.substring(8, 10);
              jourlinky = test.substring(10, 12);
              heurelinky = test.substring(12, 14);
              minutelinky = test.substring(14, 16);
              secondelinky = test.substring(16, 18);

              Serial.print("DATE*****************************");
              Serial.println(anneelinky);
              Serial.print(moislinky);
              Serial.println(jourlinky);

              Serial.print(heurelinky);
              Serial.print(minutelinky);
              Serial.println(secondelinky);
            }
          }

          break;
j'ai rien comme si l'étiquette date était vide , alors que ce n'est pas le cas ( je l'ai sur la page html). j'ai retourné le problème dans tout les sens, j'ai même change le signe supérieur en différent ( j'ai juste le chiffre 20 qui est ajouté pour les années). merci pour votre lecture.
Répondre
#5
bonjour, je continue mon exploration, je m’aperçois que mes graphes sont aussi vide ( comme ils ne m'intéresse pas pour l'instant,  je pensai qu'il fallait les actionner) donc j'ai peut être un soucis ailleurs. j'ai copié le code  lecture linky mode historique v1.10 tel quel, j'ai juste modifié la vitesse de réception du serial 2. je reçoit la trame dans le serial moniteur.dans la page hmtl en bas. Je cale! merci de votre lecture.

https://www.dropbox.com/scl/fi/77wznnmfs...ase3w&dl=0
Répondre
#6
(30-03-2025, 08:51 AM)tictic tac a écrit : bonjour, je continue mon exploration, je m’aperçois que mes graphes sont aussi vide ( comme ils ne m'intéresse pas pour l'instant,  je pensai qu'il fallait les actionner) donc j'ai peut être un soucis ailleurs. j'ai copié le code  lecture linky mode historique v1.10 tel quel, j'ai juste modifié la vitesse de réception du serial 2. je reçoit la trame dans le serial moniteur.dans la page hmtl en bas. Je cale! merci de votre lecture.

https://www.dropbox.com/scl/fi/77wznnmfs...ase3w&dl=0

Bonjour 

  le prog d'André est spécifique au mode historique, il y a quelques autre modif a faire en plus du simple changement de vitesse port série

  entre autre : 
  en mode standard, le séparateur n'est plus un espace mais une tabulation et certaine ligne comporte aussi un champ représentant le moment de l'événement
  les étiquettes mode historique ne sont plus les même en mode standard

  https://www.enedis.fr/media/2035/download
Merci André Smile ,
Routeur V14.21 (since V2.01) / 1xESP32 (IP fixe) / Source UxI / 5 actions
Panneaux 1680Wc
1 Triac : ECS 2000W
1 SSR (multi) : ECS 1800W
1 SSR (On-Off) : Circulateur plancher chauffant eau 50W
1 SSR (multi) : circuit d'eau 1500W
1 SSR (multi) : Ultime 2000W
Répondre
#7
bonjour, comme me le faisait remarquer michy ( c'est pas possible il y trop de changement a faire). je suis donc parti sur la version "routeur solaire V3.11 linky" j'ai pas besoin de plus car je n'ai pas de prod solaire.
j'ai réussi à obtenir la date et l'heure. je suis bloqué sur l'étiquette STGE, j'ai besoin de récupérer les bit 26 et 27. seulement c'est un String, quand je le transforme en INT ça passe pas car dedans il y des caractères (STGE = 012A4401) la fonction Val.toInt bloque. j'ai essayé pas mal de chose. mais la je séche.
merci de votre aide.
ps je récupére le STGE ave ça:
Code :
if (code.indexOf("STGE") == 0) {
      Serial.println ("****STGE******");
      unsigned long Decod_Couleur;
     int Couleur;
      Decod_Couleur=val.toInt();
     
      Serial.println (Decod_Couleur);
Répondre
#8
Bonjour,

retire toint() et mais ta variable en String

if (code.indexOf("STGE") == 0) {
      Serial.println ("****STGE******");
      String Decod_Couleur;
    int Couleur;
      Decod_Couleur=val;
   
      Serial.println (Decod_Couleur);

Re 
que veux tu faire réellement pourquoi utilisé le RMS si ta pas de production donc pas besoin de router?
tu veux juste récupérer les infos du linky avec le tic afin de les voir sur une pageweb?
6800W pV
un triac sur  résistance cumulus eau sanitaire
2 relais SSR sur 2 résistances pour cumulus chauffage
et 1 relais  SSR sur radiateur en on/off
4 DS18b20 plus 4 thermistances
2 JSY-MK-194 soit 4 ampèremètre
8 relais  sur 74hc595 contrôle, chaudière, planché, vanne, circulateur.....
Répondre
#9
bonjour, merci cdlnd. mon objectif c'est en effet d'afficher les infos modes standard du linky sur une page html.Ensuite pouvoir faire du délestage ( en heure creuse ( machine a laver, sèche linge, lave vaisselle et bientôt une pompe a chaleur).
pour en revenir sur mon morceau de code. Cela me donne bien ce que je retrouve sur les infos du linky. mais je voudrais pouvoir lire les bits de cette étiquette pour savoir qu'elle est la couleur du jour, de lendemain. merci pour votre lecture.
Répondre
#10
(Hier, 10:06 AM)tictic tac a écrit : je voudrais pouvoir lire les bits de cette étiquette pour savoir qu'elle est la couleur du jour, de lendemain. merci pour votre lecture.

Bonjour, 

en partant de l’hypothèse que STGE est récupérer dans un variable String  => String STGE = "012A4401";

quelques déclarations variables et constantes pour extraire les informations

Code :
uint32_t statusReg=0;
byte contact = 0;
byte depassement = 0;
byte indexActif = 0;
byte colDuJour = 0;
byte colDemain = 0;
#define UNKN 0b00
#define BLEU 0b01
#define BLAN 0b10
#define ROUG 0b11
char tarifTempo[6][9] = {"Bleu HC","Bleu HP", "Blanc HC", "Blanc HP","Rouge HC","Rouge HP"};
char couleur[4][5] = {"UNKN","BLEU","BLAN","ROUG"};

 
Code :
   statusReg = strtoul(STGE.c_str(),NULL,16); // converti la chaine d'un texte hexa en numérique
  contact = statusReg & 0b1;  // le premier bit du registre donne l'état du contact sec (période creuse / période pleine)
  depassement = (statusReg >> 7) & 0b1;  // le bit 7 du registre donne l'information du dépassement de la puissance souscrite
  indexActif  = (statusReg >> 10) & 0b1111;  // les bits 10, 11, 12 et 13 donne l'index actif (comptage énergie)
  // 0b0000 = Index 1 = tempo heure creuse tarif bleu
  // 0b0001 = Index 2 = tempo heure pleine tarif bleu
  // 0b0010 = Index 3 = tempo heure creuse tarif blanc
  // 0b0011 = Index 4 = tempo heure pleine tarif blanc
  // 0b0100 = Index 5 = tempo heure creuse tarif rouge
  // 0b0101 = Index 6 = tempo heure pleine tarif rouge
  colDuJour = (statusReg >> 24) & 0b11;  // les bits 24 et 25 donne la couleur du jour
  colDemain = (statusReg >> 26) & 0b11;  // les bits 26 et 27 donne la couleur de demain
  Serial.println(statusReg, BIN);
  Serial.printf("Le contact C1 C2 est : %s\n", (contact == 1 ? "ouvert" : "fermé"));
  Serial.printf("En ce moment, la puissance soutirée%sdépasse%sle contrat souscrit\n",(depassement ? " ": " ne "),(depassement ? " ": " pas "));
  Serial.printf("Tarif en cours : %s\n",tarifTempo[indexActif]);
  Serial.printf("Couleur du jour : %s\n",couleur[colDuJour]);
  Serial.printf("Couleur de demain : %s\n", couleur[colDemain]);
Merci André Smile ,
Routeur V14.21 (since V2.01) / 1xESP32 (IP fixe) / Source UxI / 5 actions
Panneaux 1680Wc
1 Triac : ECS 2000W
1 SSR (multi) : ECS 1800W
1 SSR (On-Off) : Circulateur plancher chauffant eau 50W
1 SSR (multi) : circuit d'eau 1500W
1 SSR (multi) : Ultime 2000W
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)