diff --git a/src/coordinator/helpers/inverterController.ts b/src/coordinator/helpers/inverterController.ts index 5fd2800..05dc83e 100644 --- a/src/coordinator/helpers/inverterController.ts +++ b/src/coordinator/helpers/inverterController.ts @@ -96,6 +96,9 @@ export class InverterController { private secondsToSample: number; private intervalSeconds: number; + private controlLimitsLoopTimer: NodeJS.Timeout | null = null; + private applyControlLoopTimer: NodeJS.Timeout | null = null; + constructor({ config, limiters, @@ -196,7 +199,7 @@ export class InverterController { // update at most every 1 second const delay = Math.max(1000 - duration, 0); - setTimeout(() => { + this.controlLimitsLoopTimer = setTimeout(() => { void this.updateControlLimitsLoop(); }, delay); } @@ -235,7 +238,7 @@ export class InverterController { const delay = Math.max(this.intervalSeconds * 1000 - duration, 0); - setTimeout(() => { + this.applyControlLoopTimer = setTimeout(() => { void this.applyControlLoop(); }, delay); } @@ -361,6 +364,16 @@ export class InverterController { return rampedInverterConfiguration; } + + public destroy() { + if (this.controlLimitsLoopTimer) { + clearTimeout(this.controlLimitsLoopTimer); + } + + if (this.applyControlLoopTimer) { + clearTimeout(this.applyControlLoopTimer); + } + } } export function calculateInverterConfiguration({ diff --git a/src/coordinator/index.ts b/src/coordinator/index.ts index 5b827c5..1e22057 100644 --- a/src/coordinator/index.ts +++ b/src/coordinator/index.ts @@ -81,6 +81,16 @@ export function createCoordinator(): Coordinator { logger.info('Destroying coordinator'); siteSamplePoller.destroy(); + invertersPoller.destroy(); + inverterController.destroy(); + sep2Instance?.sep2Client.destroy(); + sep2Instance?.derHelper.destroy(); + sep2Instance?.mirrorUsagePointListHelper.destroy(); + limiters.csipAus?.destroy(); + limiters.fixed?.destroy(); + limiters.negativeFeedIn?.destroy(); + limiters.twoWayTariff?.destroy(); + limiters.mqtt?.destroy(); }, }; } diff --git a/src/limiters/index.ts b/src/limiters/index.ts index 0209e42..7bbb60f 100644 --- a/src/limiters/index.ts +++ b/src/limiters/index.ts @@ -43,3 +43,11 @@ export function getLimiters({ : null, }; } + +export function destroyLimiters(limiters: Limiters): void { + Object.values(limiters).forEach((limiter) => { + if (limiter && typeof limiter.destroy === 'function') { + limiter.destroy(); + } + }); +} diff --git a/src/sep2/index.ts b/src/sep2/index.ts index 0700930..ff617da 100644 --- a/src/sep2/index.ts +++ b/src/sep2/index.ts @@ -26,6 +26,7 @@ export type Sep2Instance = { derHelper: DerHelper; mirrorUsagePointListHelper: MirrorUsagePointListHelper; limiter: CsipAusLimiter; + destroy: () => void; }; export function getSep2Instance({ @@ -265,5 +266,18 @@ export function getSep2Instance({ derHelper, mirrorUsagePointListHelper, limiter, + destroy: () => { + pinoLogger.info('Destroying SEP2 instance'); + + timeHelper.destroy(); + endDeviceListHelper.destroy(); + registrationHelper.destroy(); + derListHelper.destroy(); + derHelper.destroy(); + functionSetAssignmentsListHelper.destroy(); + mirrorUsagePointListHelper.destroy(); + limiter.destroy(); + derControlsHelper.destroy(); + }, }; }