Community Forum
    • Blog
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    Denky D4 + Tempo

    Scheduled Pinned Locked Moved Denky D4
    23 Posts 5 Posters 1.9k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T Offline
      Tostaky
      last edited by

      Le code partagé est issu du repo Tasmota de @Charles 😊
      J'ai juste dit que j'étais d'accord avec lui sur les bitmasking

      Je ne m'explique juste pas pourquoi il y a un décallage entre la mise à jour du registre par Enedis, et la mise à jour de l'interface (par défaut) du denky 🙂
      Je ne suis pas allé jusque là dans la relecture du code

      CharlesC 2 Replies Last reply Reply Quote
      • CharlesC Offline
        Charles @Tostaky
        last edited by

        @Tostaky je me souviens même pas avoir codé ça c'est le plus drole 🙂

        1 Reply Last reply Reply Quote
        • CharlesC Offline
          Charles @Tostaky
          last edited by

          @Tostaky tu peux augmenter le niveau de log et afficher la console il doit afficher le status register en hexa normalement ça permettrait déjà de vérifier

          1 Reply Last reply Reply Quote
          • T Offline
            Tostaky
            last edited by Tostaky

            Après 10 minutes de log su service web sur le niveau le plus verbeux, pas de traces de l'étiquette en question STEG.
            Pourtant, le script berry qui envoie 0,1,2, ou 3 à EmonCMS détecte bien le changement à 20h

            CharlesC 1 Reply Last reply Reply Quote
            • CharlesC Offline
              Charles @Tostaky
              last edited by Charles

              @Tostaky

              C'est pas normal, tu dois avoir une trace de STEG comme c'est codé ici et du dois aussi l'avoir dans la trame MQTT si c'est configuré non?

              T 2 Replies Last reply Reply Quote
              • Nicolas BernaertsN Offline
                Nicolas Bernaerts @Tostaky
                last edited by Nicolas Bernaerts

                @Tostaky @localhost61 @Charles Hello,

                Pour information, je suis en train d'intégrer la lecture des données Tempo de RTE dans mon fork Tasmota Teleinfo.

                Un nouveau topic MQTT sera disponible afin de récupérer les données :

                .../sensor/TEMPO
                    {"Time":"2022-10-10T23:51:09", "Tempo":{"J-1":"bleu","J":"blanc","J+1":"rouge"}}
                

                Pour récupérer ces données, il faudra simplement avoir créé un compte sur le site RTE et généré sa clé privée (même compte que pour Ecowatt).

                Je pense pouvoir publier cette nouvelle version d'ici 1 ou 2 jours.

                Capture d’écran du 2023-12-05 21-34-06.png

                CharlesC Nicolas BernaertsN 2 Replies Last reply Reply Quote
                • CharlesC Offline
                  Charles @Nicolas Bernaerts
                  last edited by

                  @Nicolas-Bernaerts ah excellent et joli en plus 🙂

                  Nicolas BernaertsN 1 Reply Last reply Reply Quote
                  • Nicolas BernaertsN Offline
                    Nicolas Bernaerts @Charles
                    last edited by

                    @Charles Merci 😚

                    1 Reply Last reply Reply Quote
                    • T Offline
                      Tostaky @Charles
                      last edited by

                      This post is deleted!
                      1 Reply Last reply Reply Quote
                      • T Offline
                        Tostaky @Charles
                        last edited by Tostaky

                        @Charles said in Denky D4 + Tempo:

                        @Tostaky

                        C'est pas normal, tu dois avoir une trace de STEG comme c'est codé ici et du dois aussi l'avoir dans la trame MQTT si c'est configuré non?

                        Pas de MQTT pour moi. Néanmoins, j'ai des gros doigts. STGE != STEG.

                        21:03:25.957 RSL: SENSOR = {"Time":"2023-12-06T21:03:25","ENERGY":{"TotalStartTime":"2023-12-06T09:54:49","Total":14623.401,"Yesterday":14.950,"Today":4.984,"Period":[0,0,0],"Power":[0,227,336],"ApparentPower":[0,227,336],"ReactivePower":[0,0,0],"Factor":[0.00,1.00,1.00],"Voltage":[238,224,241],"Current":[0.000,1.000,1.000],"Load":0},"TIC":{"ADSC":"022076***","VTIC":2,"NGTF":"TEMPO","LTARF":"HP  ROUGE","EAST":14623401,"EASF01":6659364,"EASF02":7829254,"EASF03":76043,"EASF04":30388,"EASF05":16803,"EASF06":11549,"EASF07":0,"EASF08":0,"EASF09":0,"EASF10":0,"EASD01":9237921,"EASD02":2600419,"EASD03":1209456,"EASD04":1575605,"EAIT":3127874,"ERQ1":1964972,"ERQ2":362712,"ERQ3":54345,"ERQ4":927425,"IRMS1":0,"IRMS2":1,"IRMS3":1,"URMS1":238,"URMS2":224,"URMS3":241,"PREF":9,"PCOUP":9,"SINSTS":595,"SINSTS1":31,"SINSTS2":227,"SINSTS3":336,"SMAXSN":3380,"SMAXSN1":1090,"SMAXSN2":1030,"SMAXSN3":1300,"SMAXSN-1":6480,"SMAXSN1-1":3090,"SMAXSN2-1":2670,"SMAXSN3-1":1390,"SINSTI":0,"SMAXIN":2710,"SMAXIN-1":260,"CCASN":390,"CCASN-1":426,"CCAIN":0,"CCAIN-1":0,"UMOY1":236,"UMOY2":224,"UMOY3":240,"STGE":"9B3AD501","PRM":****,"RELAIS":0,"NTARF":6,"NJOURF":0,"NJOURF+1":0}}
                        

                        STGE = xBxxxxx => B = 1011 => aujourd'hui rouge (3), demain blanc (2).
                        L'interface affiche toujours rouge / rouge

                        @Nicolas-Bernaerts said in Denky D4 + Tempo:

                        @Tostaky @localhost61 @Charles Hello,

                        Pour information, je suis en train d'intégrer la lecture des données Tempo de RTE dans mon fork Tasmota Teleinfo.

                        Un nouveau topic MQTT sera disponible afin de récupérer les données :

                        .../sensor/TEMPO
                            {"Time":"2022-10-10T23:51:09", "Tempo":{"J-1":"bleu","J":"blanc","J+1":"rouge"}}
                        

                        Pour récupérer ces données, il faudra simplement avoir créé un compte sur le site RTE et généré sa clé privée (même compte que pour Ecowatt).

                        Je pense pouvoir publier cette nouvelle version d'ici 1 ou 2 jours.

                        Capture d’écran du 2023-12-05 21-34-06.png

                        Génial.
                        Je viens de terminer mon alerting mail en m'appuyant sur l'API publique d'EDF. Pas besoin de compte et de clef d'API.
                        Le code est là : https://github.com/sosandroid/Monitoring_Energie/tree/main/src/tempo

                        CharlesC 1 Reply Last reply Reply Quote
                        • Nicolas BernaertsN Offline
                          Nicolas Bernaerts @Nicolas Bernaerts
                          last edited by Nicolas Bernaerts

                          Je viens de publier une version Teleinfo v13.2 qui gère :

                          • Tempo
                          • Ecowatt v4 et v5

                          Attention, le fichier de configuration sur le littlefs est maintenant rte.cfg (au lieu de ecowatt.cfg).

                          Si vous aviez déclaré Ecowatt précédemment, il faudra :

                          • redéclarer votre clé privée via rte_key maclebase64
                          • activer ecowatt de nouveau via eco_enable 1
                          • activer tempo via tempo_enable 1
                          • redémarrer l'ESP

                          L'aide est disponible en mode console via rte_help.

                          WendigogoW 1 Reply Last reply Reply Quote
                          • CharlesC Offline
                            Charles @Tostaky
                            last edited by Charles

                            @Tostaky said in Denky D4 + Tempo:

                            STGE = xBxxxxx => B = 1011 => aujourd'hui rouge (3), demain blanc (2).
                            L'interface affiche toujours rouge / rouge

                            je comprends pas j'ai testé le même code et aucun soucis

                            https://onlinegdb.com/_VnKGhRZ5

                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <stdint.h>
                            
                            
                            int main()
                            {
                                uint32_t status_register = strtol("9B3AD501", NULL, 16);
                                printf("Status Register is 0x%08X\r\n", status_register);
                                
                                if (status_register >> 24) {
                                    char txt[32]; 
                                    uint8_t sr = status_register >> 24;
                                    uint8_t val = sr & 0x03;
                                    if (val) {
                                        printf("Jour %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge");
                                    }
                                    val = (sr >> 2) & 0x03;
                                    if (val) {
                                        printf("Demain %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge");
                                    }
                                    val = (sr >> 4) & 0x03;
                                    if (val) {
                                        printf("Préavis pointe mobile %d\r\n", val);
                                    }
                                    val = (sr >> 6) & 0x03;
                                    if (val) {
                                        printf("Pointe mobile en cours %d\r\n", val);
                                    }
                                }
                                return 0;
                            }
                            

                            La sortie donne bien ça

                            Status Register is 0x9B3AD501
                            Jour Rouge
                            Demain Blanc
                            Préavis Pointe mobile 1
                            Pointe mobile En cours 2
                            

                            peut être essayer cette 2eme méthode au cas ou (avec aussi le strtol changé en strtoul)
                            https://onlinegdb.com/ADbvc4273

                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <stdint.h>
                            
                            
                            int main()
                            {
                                uint32_t status_register = strtoul("9B3AD501", NULL, 16);
                                printf("Status Register is 0x%08X\r\n", status_register);
                                
                                if (status_register >> 24) {
                                    char txt[32]; 
                                    char coul[4][6] = { "----", "Bleu", "Blanc", "Rouge" };
                                    
                                    uint8_t sr = status_register >> 24;
                                    uint8_t val = sr & 0x03;
                                    if (val) {
                                        printf("Jour %s\r\n", coul[val]);
                                    }
                                    val = (sr >> 2) & 0x03;
                                    if (val) {
                                        printf("Demain %s\r\n", coul[val]);
                                    }
                                    val = (sr >> 4) & 0x03;
                                    if (val) {
                                        printf("Préavis pointe mobile %d\r\n", val);
                                    }
                                    val = (sr >> 6) & 0x03;
                                    if (val) {
                                        printf("Pointe mobile en cours %d\r\n", val);
                                    }
                                }
                                return 0;
                                return 0;
                            }
                            

                            qui donne la même chose mais codé différemment, t'as moyen de tester ?

                            T 1 Reply Last reply Reply Quote
                            • WendigogoW Offline
                              Wendigogo @Nicolas Bernaerts
                              last edited by

                              @Nicolas-Bernaerts : Excellent !
                              Je mets à jour le Denky-D4.

                              Tu penses inclure le code de @Tostaky pour ne plus avoir à créer de compte EDF ?

                              Merci.

                              Nicolas BernaertsN 2 Replies Last reply Reply Quote
                              • Nicolas BernaertsN Offline
                                Nicolas Bernaerts @Wendigogo
                                last edited by

                                @Wendigogo En fait, le problème est double :

                                • les API EDF répondent quand elles veulent ... elles peuvent mettre 10s a répondre et l'ESP reboot en watchdog
                                • elles sont très en retard par rapport à RTE : RTE donne l'info vers 9h, EDF souvent après 11h
                                  Donc les données RTE sont beaucoup plus fiables sur les 2 aspects.
                                WendigogoW 1 Reply Last reply Reply Quote
                                • Nicolas BernaertsN Offline
                                  Nicolas Bernaerts @Wendigogo
                                  last edited by

                                  @Wendigogo Je suis en train de voir comment exploiter l'etiquette STGE pour recuperer ces donnees directement depuis le compteur. Mais il reste a verifier la fiabilite et la prevenance.

                                  1 Reply Last reply Reply Quote
                                  • WendigogoW Offline
                                    Wendigogo @Nicolas Bernaerts
                                    last edited by

                                    @Nicolas-Bernaerts : Merci pour ces explications. J'ai créé un compte RTE du coup.

                                    1 Reply Last reply Reply Quote
                                    • T Offline
                                      Tostaky @Charles
                                      last edited by

                                      @Charles said in Denky D4 + Tempo:

                                      @Tostaky said in Denky D4 + Tempo:

                                      STGE = xBxxxxx => B = 1011 => aujourd'hui rouge (3), demain blanc (2).
                                      L'interface affiche toujours rouge / rouge

                                      je comprends pas j'ai testé le même code et aucun soucis

                                      https://onlinegdb.com/_VnKGhRZ5

                                      #include <stdio.h>
                                      #include <stdlib.h>
                                      #include <stdint.h>
                                      
                                      
                                      int main()
                                      {
                                          uint32_t status_register = strtol("9B3AD501", NULL, 16);
                                          printf("Status Register is 0x%08X\r\n", status_register);
                                          
                                          if (status_register >> 24) {
                                              char txt[32]; 
                                              uint8_t sr = status_register >> 24;
                                              uint8_t val = sr & 0x03;
                                              if (val) {
                                                  printf("Jour %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge");
                                              }
                                              val = (sr >> 2) & 0x03;
                                              if (val) {
                                                  printf("Demain %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge");
                                              }
                                              val = (sr >> 4) & 0x03;
                                              if (val) {
                                                  printf("Préavis pointe mobile %d\r\n", val);
                                              }
                                              val = (sr >> 6) & 0x03;
                                              if (val) {
                                                  printf("Pointe mobile en cours %d\r\n", val);
                                              }
                                          }
                                          return 0;
                                      }
                                      

                                      La sortie donne bien ça

                                      Status Register is 0x9B3AD501
                                      Jour Rouge
                                      Demain Blanc
                                      Préavis Pointe mobile 1
                                      Pointe mobile En cours 2
                                      

                                      peut être essayer cette 2eme méthode au cas ou (avec aussi le strtol changé en strtoul)
                                      https://onlinegdb.com/ADbvc4273

                                      #include <stdio.h>
                                      #include <stdlib.h>
                                      #include <stdint.h>
                                      
                                      
                                      int main()
                                      {
                                          uint32_t status_register = strtoul("9B3AD501", NULL, 16);
                                          printf("Status Register is 0x%08X\r\n", status_register);
                                          
                                          if (status_register >> 24) {
                                              char txt[32]; 
                                              char coul[4][6] = { "----", "Bleu", "Blanc", "Rouge" };
                                              
                                              uint8_t sr = status_register >> 24;
                                              uint8_t val = sr & 0x03;
                                              if (val) {
                                                  printf("Jour %s\r\n", coul[val]);
                                              }
                                              val = (sr >> 2) & 0x03;
                                              if (val) {
                                                  printf("Demain %s\r\n", coul[val]);
                                              }
                                              val = (sr >> 4) & 0x03;
                                              if (val) {
                                                  printf("Préavis pointe mobile %d\r\n", val);
                                              }
                                              val = (sr >> 6) & 0x03;
                                              if (val) {
                                                  printf("Pointe mobile en cours %d\r\n", val);
                                              }
                                          }
                                          return 0;
                                          return 0;
                                      }
                                      

                                      qui donne la même chose mais codé différemment, t'as moyen de tester ?

                                      Je n'ai pas modifié de code coté Denky car j'ai pris un firmware déjà compilé.
                                      A la lecture du code, je suis 100% d'accord avec le fonctionnement.
                                      Comme le script Berry accède à la valeur STGE et la décode correctement pour la transmettre à EmonCMS, j'en déduis que c'est quelque part entre la libteleinfo et l'affichage.

                                      C'est plus à titre informatif que je fais remonter car j'utilise peu l'affichage

                                      1 Reply Last reply Reply Quote
                                      • T Offline
                                        Tostaky
                                        last edited by

                                        Bonjour,

                                        Pour continuer sur ce sujet, j'ai essayé de passer sur le firmware de @Nicolas-Bernaerts. Les différents retours que j'ai pu lire est que cela améliore la comptabilisation de l'énergie entre Enedis, le Denky et EmonCMS.

                                        Aujourd'hui j'utilise un firmware "standard" et un script Berry pour alimenter EmonCMS toutes les 8500ms.

                                        En passant à la version 14.9beta de @Nicolas-Bernaerts, je n'ai plus de données qui remlontent. Le script Berry ne fonctionne plus.
                                        J'ai fait un rollback et tout est rentré dans l'ordre.

                                        Néanmoins, je voudrais tester ce firmware. De manière à préparer le script avant (je n'ai pas accès au Denky avant le WE prochain), est-il possible de valider que le script simplifié suivant

                                        var payload = {}
                                        def rule_tic(value, trigger)
                                        
                                          payload['IDX_SOUT'] = value['EAST']
                                          payload['IDX_SOUT_HP'] = value['EASF02']
                                          payload['IDX_SOUT_HC'] = value['EASF01']
                                          payload['IDX_INJ'] = value['EAIT']
                                          payload['PUI_SOUT'] = value['SINSTS']
                                          payload['PUI_INJ'] = value['SINSTI']
                                        
                                        end
                                        
                                        def start()
                                          # Callback on each frame interception
                                          tasmota.add_rule("TIC",rule_tic)
                                          # fire first post in 5s 
                                          tasmota.set_timer(5000, send_emoncms)
                                        end
                                        
                                        def send_emoncms()
                                         ...
                                        end
                                        

                                        devient

                                        var payload = {}
                                        
                                        def rule_meter (value, trigger)
                                          payload['PUI_SOUT'] = value['W']
                                          payload['PUI_INJ'] = value['PW']
                                           
                                        end
                                        
                                        def rule_contract (value, trigger)
                                          payload['IDX_SOUT'] = value['CONSO']
                                          payload['IDX_SOUT_HP'] = value['EASF02']
                                          payload['IDX_SOUT_HC'] = value['EASF01']
                                          payload['IDX_INJ'] = value['PROD']
                                        end
                                        
                                        def send_emoncms()
                                         ...
                                        end
                                        
                                        def start()
                                          # Callback on each frame interception
                                          tasmota.add_rule("METER",rule_meter)
                                          tasmota.add_rule("CONTRACT",rule_contract)
                                          # fire first post in 5s 
                                          tasmota.set_timer(5000, send_emoncms)
                                        end
                                        
                                        T 1 Reply Last reply Reply Quote
                                        • T Offline
                                          Tostaky @Tostaky
                                          last edited by

                                          @Tostaky said in Denky D4 + Tempo:

                                          payload['IDX_SOUT_HP'] = value['EASF02']
                                          payload['IDX_SOUT_HC'] = value['EASF01']

                                          Evidement, ces lignes sont en trop

                                          1 Reply Last reply Reply Quote
                                          • First post
                                            Last post

                                          3

                                          Online

                                          5.7k

                                          Users

                                          534

                                          Topics

                                          5.0k

                                          Posts

                                          Top Topics

                                          • Denky 4 - Domoticz - Triphasé -
                                            Nicolas BernaertsN
                                            Nicolas Bernaerts
                                            0
                                            7
                                            249

                                          • Denky D4 et Linky Standard TInfo Rx Non Configuré
                                            CharlesC
                                            Charles
                                            0
                                            5
                                            282

                                          • CC1101
                                            CharlesC
                                            Charles
                                            0
                                            2
                                            117

                                          Popular Tags

                                          teleinfo
                                          24 topics
                                          arduino
                                          19 topics
                                          remora
                                          16 topics
                                          esp8266
                                          10 topics
                                          arduipi
                                          10 topics
                                          wifinfo
                                          7 topics
                                          raspberry
                                          7 topics
                                          broadcast
                                          7 topics
                                          Copyright © 2022 Charles-Henri Hallard | Return to blog page | Powered by NodeBB