Denky D4 + Tempo
-
j'écrirais plutôt comme ça (j'ai pas vérifié) mais sans savoir comment est calculé ton
status_register
depuis l'étiquette, difficile de savoir si il y a buguint8_t sr = status_register >> 24; if ( sr ) { char txt[32]; char coul[4][6] = { "----", "Bleu", "Blanc", "Rouge" }; uint8_t val = sr & 0x03 ; if (val) { WSContentSend_P(HTTP_ENERGY_LABEL_VALUE, PSTR("Jour"), coul[val]); } sr >>= 2; val = sr & 0x03; if (val) { WSContentSend_P(HTTP_ENERGY_LABEL_VALUE, PSTR("Demain"), coul[val]); } sr >>= 2; val = sr & 0x03; if (val) { sprintf_P(txt, PSTR("Pointe mobile %d"), val); WSContentSend_P(HTTP_ENERGY_LABEL_VALUE, PSTR("Préavis"), txt); } sr >>= 2; val = sr & 0x03; if (val) { sprintf_P(txt, PSTR("En cours %d"), val); WSContentSend_P(HTTP_ENERGY_LABEL_VALUE, PSTR("Pointe mobile"), txt); } }
En revanche les décalages de bits semblent bons et conformes à la spec
-
Le code partagé est issu du repo Tasmota de @Charles
J'ai juste dit que j'étais d'accord avec lui sur les bitmaskingJe 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 -
@Tostaky je me souviens même pas avoir codé ça c'est le plus drole
-
@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
-
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 -
-
@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.
-
@Nicolas-Bernaerts ah excellent et joli en plus
-
@Charles Merci
-
This post is deleted! -
@Charles said in Denky D4 + Tempo:
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.
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 -
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.
-
@Tostaky said in Denky D4 + Tempo:
STGE = xBxxxxx => B = 1011 => aujourd'hui rouge (3), demain blanc (2).
L'interface affiche toujours rouge / rougeje 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é enstrtoul
)
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 ?
-
@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.
-
@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.
-
@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.
-
@Nicolas-Bernaerts : Merci pour ces explications. J'ai créé un compte RTE du coup.
-
@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 / rougeje 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é enstrtoul
)
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