mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-30 06:06:36 +00:00
Add Shelly 3EM heartbeat
Add Shelly 3EM heartbeat to reinit if interrupts stopped (#13515)
This commit is contained in:
parent
f69421ced5
commit
d43127ce58
@ -41,6 +41,8 @@
|
||||
//#define ADE7880_DEBUG
|
||||
//#define ADE7880_PROFILING
|
||||
|
||||
#define ADE7880_HEARTBEAT 5 // Allow x seconds of missed interrupts before reinit
|
||||
|
||||
// Default calibration parameters can be overridden by a rule as documented above.
|
||||
#define ADE7880_FREQ_INIT 0 // Connected to networks with fundamental frequencies between 55 Hz and 66 Hz (1). Default 45 Hz to 55 Hz (0).
|
||||
#define ADE7880_AIGAIN_INIT 3166385 // rms, current_a
|
||||
@ -262,6 +264,7 @@ struct Ade7880 {
|
||||
bool calib_frequency;
|
||||
bool irq0_state;
|
||||
uint8_t cycle_count;
|
||||
uint8_t heartbeat;
|
||||
} Ade7880;
|
||||
|
||||
/*********************************************************************************************/
|
||||
@ -460,6 +463,7 @@ bool Ade7880SetCalibrate(void) {
|
||||
#endif // ADE7880_PROFILING
|
||||
|
||||
if (Ade7880Init()) {
|
||||
Ade7880.heartbeat = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -534,6 +538,7 @@ void Ade7880Service0(void) {
|
||||
// Poll sequence
|
||||
SkipSleep(false);
|
||||
Ade7880Cycle();
|
||||
Ade7880.heartbeat = 0;
|
||||
Ade7880.irq0_state = 0;
|
||||
}
|
||||
|
||||
@ -545,6 +550,15 @@ void IRAM_ATTR Ade7880Isr0(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void Ade7880Heartbeat(void) {
|
||||
// Reinit if interrupt stopped
|
||||
Ade7880.heartbeat++;
|
||||
if (Ade7880.heartbeat > ADE7880_HEARTBEAT) {
|
||||
AddLog(LOG_LEVEL_DEBUG, PSTR("A78: Reinit"));
|
||||
Ade7880SetCalibrate();
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************************************/
|
||||
|
||||
bool Ade7880SetDefaults(const char* json) {
|
||||
@ -747,6 +761,9 @@ bool Xnrg23(uint8_t function) {
|
||||
case FUNC_LOOP:
|
||||
if (Ade7880.irq0_state) { Ade7880Service0(); }
|
||||
break;
|
||||
case FUNC_EVERY_SECOND:
|
||||
Ade7880Heartbeat();
|
||||
break;
|
||||
#ifdef ADE7880_MORE_REGS
|
||||
case FUNC_JSON_APPEND:
|
||||
Ade7880Show(1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user