Denky D4 + Tempo
-
@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
-
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
-
@Tostaky said in Denky D4 + Tempo:
payload['IDX_SOUT_HP'] = value['EASF02']
payload['IDX_SOUT_HC'] = value['EASF01']Evidement, ces lignes sont en trop