homebridge-rainforest-eagle3 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/platform.js CHANGED
@@ -6,21 +6,28 @@ const eagleClient_1 = require("./eagleClient");
6
6
  const gridMeterAccessory_1 = require("./gridMeterAccessory");
7
7
  const exportMeterAccessory_1 = require("./exportMeterAccessory");
8
8
  const eveCharacteristics_1 = require("./eveCharacteristics");
9
+ const matterEnergy_1 = require("./matterEnergy");
10
+ const updatePolicy_1 = require("./updatePolicy");
11
+ const powerSwitch_1 = require("./powerSwitch");
9
12
  const MIN_POLL_INTERVAL = 5;
10
13
  const DISCOVER_RETRY_MS = 30000;
11
14
  const NO_METER_RETRY_MS = 60000;
12
15
  const AUTH_BACKOFF_MS = 60000;
16
+ const THROTTLE_STATS_INTERVAL_MS = 60 * 60 * 1000;
13
17
  class EAGLEPlatform {
14
18
  constructor(log, config, api) {
15
19
  this.log = log;
16
20
  this.api = api;
17
21
  this.accessories = [];
22
+ this.switchStats = new updatePolicy_1.UpdateStats();
18
23
  this.pollInFlight = false;
19
24
  this.backedOff = false;
20
25
  this.Service = api.hap.Service;
21
26
  this.Characteristic = api.hap.Characteristic;
22
27
  this.eveChars = (0, eveCharacteristics_1.createEveCharacteristics)(api);
23
28
  const eagleConfig = config;
29
+ this.updatePolicy = (0, updatePolicy_1.resolveUpdatePolicy)(eagleConfig);
30
+ this.eveThrottle = new updatePolicy_1.EveUpdateThrottle(this.updatePolicy, new updatePolicy_1.UpdateStats(), (message) => this.log.debug(message));
24
31
  if (!eagleConfig.cloudId || !eagleConfig.installCode) {
25
32
  this.log.error('Missing required config: cloudId and installCode are required.');
26
33
  // Platform will do nothing; Homebridge still loads cleanly.
@@ -29,6 +36,7 @@ class EAGLEPlatform {
29
36
  this.showExportMeter = false;
30
37
  this.meterName = 'Grid Meter';
31
38
  this.exportMeterName = 'Grid Meter - Export';
39
+ this.matterEnabled = false;
32
40
  return;
33
41
  }
34
42
  const host = eagleConfig.host || `eagle-${eagleConfig.cloudId}.local`;
@@ -44,6 +52,7 @@ class EAGLEPlatform {
44
52
  this.showExportMeter = eagleConfig.showExportMeter ?? false;
45
53
  this.exportMeterName = eagleConfig.exportMeterName ?? 'Grid Meter - Export';
46
54
  this.meterName = eagleConfig.meterName ?? (this.showExportMeter ? 'Grid Meter - Import' : 'Grid Meter');
55
+ this.matterEnabled = eagleConfig.matter === true;
47
56
  this.client = new eagleClient_1.EagleClient(host, eagleConfig.cloudId, eagleConfig.installCode, log);
48
57
  this.log.info('Finished initializing platform:', config.name ?? settings_1.PLATFORM_NAME);
49
58
  this.api.on('didFinishLaunching', () => {
@@ -54,8 +63,21 @@ class EAGLEPlatform {
54
63
  if (this.pollTimer) {
55
64
  clearInterval(this.pollTimer);
56
65
  }
66
+ if (this.throttleStatsTimer) {
67
+ clearInterval(this.throttleStatsTimer);
68
+ }
57
69
  });
58
70
  }
71
+ /** Push an Eve power/energy value, subject to the evePowerUpdates mode. */
72
+ updateEve(service, characteristic, key, value, unit) {
73
+ if (this.eveThrottle.shouldSend(key, value, unit)) {
74
+ service.updateCharacteristic(characteristic, value);
75
+ }
76
+ }
77
+ /** On/off state for a power-derived On characteristic, with deadband and hold. */
78
+ createPowerSwitch(key) {
79
+ return new powerSwitch_1.PowerSwitch(key, this.updatePolicy.switchHoldSeconds, this.switchStats, (message) => this.log.debug(message));
80
+ }
59
81
  configureAccessory(accessory) {
60
82
  this.log.info('Loading accessory from cache:', accessory.displayName);
61
83
  this.accessories.push(accessory);
@@ -117,9 +139,40 @@ class EAGLEPlatform {
117
139
  this.log.info('Removing stale export meter accessory');
118
140
  this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [existingExport]);
119
141
  }
142
+ // --- Matter (optional) ---
143
+ // Independent of showExportMeter: the grid meter is bidirectional on the
144
+ // Matter side regardless of whether Import/Export are split into two
145
+ // HomeKit/Eve accessories.
146
+ if (this.matterEnabled) {
147
+ const bridge = new matterEnergy_1.MatterEnergyBridge(this.api, this.log, 'bidirectional');
148
+ if (bridge.isSupported()) {
149
+ this.gridMatterBridge = bridge;
150
+ bridge.register(`${meterAddress}-grid-net`, 'Grid', meterAddress.replace(/^0x/i, ''), {
151
+ powerW: 0,
152
+ importedEnergyKWh: 0,
153
+ exportedEnergyKWh: 0,
154
+ }).catch(() => { });
155
+ }
156
+ else {
157
+ this.log.info('[matter] Config option "matter" is enabled, but the Matter API is unavailable. It needs a Homebridge build with the ElectricalSensor device type, with Matter enabled on this plugin\'s child bridge. Continuing with HomeKit/Eve only.');
158
+ }
159
+ }
120
160
  }
121
161
  startPolling(meterAddress) {
122
- this.pollTimer = setInterval(async () => {
162
+ const p = this.updatePolicy;
163
+ const eveDesc = p.evePowerUpdates === 'throttled'
164
+ ? `throttled (max(${p.minChangeWatts} W, ${p.minChangePercent}%), ${p.minChangeKwh} kWh, every ${p.maxIntervalSeconds}s)`
165
+ : p.evePowerUpdates;
166
+ this.log.info(`Eve power updates: ${eveDesc}; On switch hold: ${p.switchHoldSeconds}s`);
167
+ if (p.evePowerUpdates !== 'live' || p.switchHoldSeconds > 0) {
168
+ this.throttleStatsTimer = setInterval(() => {
169
+ const eve = this.eveThrottle.stats.take();
170
+ const sw = this.switchStats.take();
171
+ this.log.info(`HomeKit updates in the last hour: Eve power ${eve.sent} sent, ${eve.suppressed} suppressed; ` +
172
+ `On switches ${sw.sent} sent, ${sw.suppressed} held`);
173
+ }, THROTTLE_STATS_INTERVAL_MS);
174
+ }
175
+ const poll = async () => {
123
176
  if (this.pollInFlight) {
124
177
  this.log.debug('Poll skipped — previous request still in flight');
125
178
  return;
@@ -133,6 +186,11 @@ class EAGLEPlatform {
133
186
  const reading = await this.client.queryMeter(meterAddress);
134
187
  this.gridMeterAccessory?.updateValues(reading);
135
188
  this.exportMeterAccessory?.updateValues(reading);
189
+ this.gridMatterBridge?.update({
190
+ powerW: reading.demand_kw * 1000,
191
+ importedEnergyKWh: reading.summation_delivered_kwh,
192
+ exportedEnergyKWh: reading.summation_received_kwh ?? 0,
193
+ }).catch(() => { });
136
194
  }
137
195
  catch (err) {
138
196
  if (err instanceof eagleClient_1.HttpError) {
@@ -162,7 +220,11 @@ class EAGLEPlatform {
162
220
  finally {
163
221
  this.pollInFlight = false;
164
222
  }
165
- }, this.pollIntervalMs);
223
+ };
224
+ // Poll once right away so HomeKit has the correct values on startup,
225
+ // rather than placeholders until the first interval elapses.
226
+ void poll();
227
+ this.pollTimer = setInterval(poll, this.pollIntervalMs);
166
228
  }
167
229
  enterBackoff(durationMs) {
168
230
  this.backedOff = true;
@@ -1 +1 @@
1
- {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { UpdateStats } from './updatePolicy';
2
+ /** Switch turns on when power rises above this many watts. */
3
+ export declare const SWITCH_ON_ABOVE_W = 50;
4
+ /** Switch turns off when power falls below this many watts. */
5
+ export declare const SWITCH_OFF_BELOW_W = 20;
6
+ export declare class PowerSwitch {
7
+ private readonly key;
8
+ private readonly holdSeconds;
9
+ private readonly stats;
10
+ private readonly debug;
11
+ private readonly now;
12
+ private reported;
13
+ private pendingSince;
14
+ constructor(key: string, holdSeconds: number, stats?: UpdateStats, debug?: (message: string) => void, now?: () => number);
15
+ /** The state last reported to HomeKit (false before the first reading). */
16
+ get state(): boolean;
17
+ /**
18
+ * Feed a new power reading. Returns the state to push to HomeKit, or null
19
+ * when the reported state should not change. The first reading is always
20
+ * reported immediately.
21
+ */
22
+ update(watts: number): boolean | null;
23
+ }
24
+ //# sourceMappingURL=powerSwitch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powerSwitch.d.ts","sourceRoot":"","sources":["../src/powerSwitch.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,qBAAa,WAAW;IAKpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IARtB,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,YAAY,CAAuB;gBAGxB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,GAAE,WAA+B,EACtC,KAAK,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,EAC3C,GAAG,GAAE,MAAM,MAAiB;IAG/C,2EAA2E;IAC3E,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;CAgCtC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ // On/off state derived from a power reading, for the standard HomeKit On
3
+ // characteristic. Stays evented so Home automations keep working, but with
4
+ // two safeguards against flapping:
5
+ //
6
+ // - Deadband: turns on above SWITCH_ON_ABOVE_W and off below SWITCH_OFF_BELOW_W.
7
+ // - Hold: a new state must persist for holdSeconds before it is reported
8
+ // (0 disables the hold). Automations triggered by the switch can therefore
9
+ // fire up to holdSeconds (plus one poll) after the underlying change.
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.PowerSwitch = exports.SWITCH_OFF_BELOW_W = exports.SWITCH_ON_ABOVE_W = void 0;
12
+ const updatePolicy_1 = require("./updatePolicy");
13
+ /** Switch turns on when power rises above this many watts. */
14
+ exports.SWITCH_ON_ABOVE_W = 50;
15
+ /** Switch turns off when power falls below this many watts. */
16
+ exports.SWITCH_OFF_BELOW_W = 20;
17
+ class PowerSwitch {
18
+ constructor(key, holdSeconds, stats = new updatePolicy_1.UpdateStats(), debug = () => { }, now = Date.now) {
19
+ this.key = key;
20
+ this.holdSeconds = holdSeconds;
21
+ this.stats = stats;
22
+ this.debug = debug;
23
+ this.now = now;
24
+ this.reported = null;
25
+ this.pendingSince = null;
26
+ }
27
+ /** The state last reported to HomeKit (false before the first reading). */
28
+ get state() {
29
+ return this.reported ?? false;
30
+ }
31
+ /**
32
+ * Feed a new power reading. Returns the state to push to HomeKit, or null
33
+ * when the reported state should not change. The first reading is always
34
+ * reported immediately.
35
+ */
36
+ update(watts) {
37
+ if (this.reported === null) {
38
+ this.reported = watts > exports.SWITCH_ON_ABOVE_W;
39
+ this.stats.sent++;
40
+ return this.reported;
41
+ }
42
+ const target = this.reported ? watts >= exports.SWITCH_OFF_BELOW_W : watts > exports.SWITCH_ON_ABOVE_W;
43
+ if (target === this.reported) {
44
+ if (this.pendingSince !== null) {
45
+ this.debug(`${this.key}: pending change cancelled at ${watts} W, staying ${onOff(target)}`);
46
+ this.pendingSince = null;
47
+ }
48
+ return null;
49
+ }
50
+ const now = this.now();
51
+ if (this.pendingSince === null) {
52
+ this.pendingSince = now;
53
+ }
54
+ const heldS = (now - this.pendingSince) / 1000;
55
+ if (heldS >= this.holdSeconds) {
56
+ this.reported = target;
57
+ this.pendingSince = null;
58
+ this.stats.sent++;
59
+ return target;
60
+ }
61
+ this.stats.suppressed++;
62
+ this.debug(`${this.key}: holding change to ${onOff(target)} at ${watts} W (${heldS}s of ${this.holdSeconds}s)`);
63
+ return null;
64
+ }
65
+ }
66
+ exports.PowerSwitch = PowerSwitch;
67
+ function onOff(state) {
68
+ return state ? 'on' : 'off';
69
+ }
70
+ //# sourceMappingURL=powerSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"powerSwitch.js","sourceRoot":"","sources":["../src/powerSwitch.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,2EAA2E;AAC3E,mCAAmC;AACnC,EAAE;AACF,kFAAkF;AAClF,0EAA0E;AAC1E,8EAA8E;AAC9E,yEAAyE;;;AAEzE,iDAA6C;AAE7C,8DAA8D;AACjD,QAAA,iBAAiB,GAAG,EAAE,CAAC;AACpC,+DAA+D;AAClD,QAAA,kBAAkB,GAAG,EAAE,CAAC;AAErC,MAAa,WAAW;IAItB,YACmB,GAAW,EACX,WAAmB,EACnB,QAAqB,IAAI,0BAAW,EAAE,EACtC,QAAmC,GAAG,EAAE,GAAE,CAAC,EAC3C,MAAoB,IAAI,CAAC,GAAG;QAJ5B,QAAG,GAAH,GAAG,CAAQ;QACX,gBAAW,GAAX,WAAW,CAAQ;QACnB,UAAK,GAAL,KAAK,CAAiC;QACtC,UAAK,GAAL,KAAK,CAAsC;QAC3C,QAAG,GAAH,GAAG,CAAyB;QARvC,aAAQ,GAAmB,IAAI,CAAC;QAChC,iBAAY,GAAkB,IAAI,CAAC;IAQxC,CAAC;IAEJ,2EAA2E;IAC3E,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,KAAa;QAClB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,yBAAiB,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,0BAAkB,CAAC,CAAC,CAAC,KAAK,GAAG,yBAAiB,CAAC;QACvF,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,iCAAiC,KAAK,eAAe,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC5F,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YAC3B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;QAC1B,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;QAC/C,IAAI,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,uBAAuB,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,OAAO,KAAK,QAAQ,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;QAChH,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAtDD,kCAsDC;AAED,SAAS,KAAK,CAAC,KAAc;IAC3B,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AAC9B,CAAC"}
@@ -9,5 +9,12 @@ export interface EAGLEConfig extends PlatformConfig {
9
9
  meterName?: string;
10
10
  showExportMeter?: boolean;
11
11
  exportMeterName?: string;
12
+ matter?: boolean;
13
+ evePowerUpdates?: 'throttled' | 'pollOnly' | 'live';
14
+ minChangeWatts?: number;
15
+ minChangePercent?: number;
16
+ minChangeKwh?: number;
17
+ maxIntervalSeconds?: number;
18
+ switchHoldSeconds?: number;
12
19
  }
13
20
  //# sourceMappingURL=settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,WAAW,iCAAiC,CAAC;AAE1D,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,43 @@
1
+ export type EvePowerUpdates = 'throttled' | 'pollOnly' | 'live';
2
+ export declare const EVE_POWER_UPDATE_MODES: readonly EvePowerUpdates[];
3
+ export type EveUnit = 'W' | 'kWh';
4
+ export interface UpdatePolicyOptions {
5
+ evePowerUpdates: EvePowerUpdates;
6
+ minChangeWatts: number;
7
+ minChangePercent: number;
8
+ minChangeKwh: number;
9
+ maxIntervalSeconds: number;
10
+ switchHoldSeconds: number;
11
+ }
12
+ export declare const DEFAULT_UPDATE_POLICY: UpdatePolicyOptions;
13
+ /** Builds options from raw config values, falling back to defaults for missing/invalid entries. */
14
+ export declare function resolveUpdatePolicy(config: Record<string, unknown>): UpdatePolicyOptions;
15
+ /** Sent/suppressed counters for the hourly summary log. */
16
+ export declare class UpdateStats {
17
+ sent: number;
18
+ suppressed: number;
19
+ /** Returns the counts since the previous call and resets them. */
20
+ take(): {
21
+ sent: number;
22
+ suppressed: number;
23
+ };
24
+ }
25
+ /** Decides, per accessory+characteristic key, whether an Eve value is pushed. */
26
+ export declare class EveUpdateThrottle {
27
+ private readonly options;
28
+ readonly stats: UpdateStats;
29
+ private readonly debug;
30
+ private readonly now;
31
+ private readonly lastSent;
32
+ constructor(options: UpdatePolicyOptions, stats?: UpdateStats, debug?: (message: string) => void, now?: () => number);
33
+ /** Whether Eve characteristics should advertise NOTIFY (false in pollOnly mode). */
34
+ get notify(): boolean;
35
+ /**
36
+ * Returns true if `value` should be pushed for `key`. The first value for a
37
+ * key is always pushed in throttled mode, so HomeKit gets the correct value
38
+ * immediately on startup.
39
+ */
40
+ shouldSend(key: string, value: number, unit: EveUnit): boolean;
41
+ private isSignificant;
42
+ }
43
+ //# sourceMappingURL=updatePolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updatePolicy.d.ts","sourceRoot":"","sources":["../src/updatePolicy.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;AAChE,eAAO,MAAM,sBAAsB,EAAE,SAAS,eAAe,EAAsC,CAAC;AAEpG,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC;AAElC,MAAM,WAAW,mBAAmB;IAClC,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,qBAAqB,EAAE,mBAOnC,CAAC;AAEF,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAexF;AAED,2DAA2D;AAC3D,qBAAa,WAAW;IACtB,IAAI,SAAK;IACT,UAAU,SAAK;IAEf,kEAAkE;IAClE,IAAI,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;CAM7C;AAOD,iFAAiF;AACjF,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,KAAK,EAAE,WAAW;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;gBAGrC,OAAO,EAAE,mBAAmB,EACpC,KAAK,GAAE,WAA+B,EAC9B,KAAK,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,EAC3C,GAAG,GAAE,MAAM,MAAiB;IAG/C,oFAAoF;IACpF,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO;IAuB9D,OAAO,CAAC,aAAa;CAkBtB"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ // Controls how much HomeKit event traffic the plugin generates.
3
+ //
4
+ // The EAGLE is polled every ~15 s and its readings differ slightly on nearly
5
+ // every poll. Pushing every value produces a steady stream of HomeKit events,
6
+ // so the Eve custom power/energy characteristics are pushed according to the
7
+ // `evePowerUpdates` mode:
8
+ //
9
+ // throttled (default) — push when the value changes by at least the
10
+ // configured threshold, or maxIntervalSeconds after
11
+ // the last push
12
+ // pollOnly — never push; NOTIFY is removed, values are served
13
+ // from onGet only
14
+ // live — push every poll (behavior before 1.2.0)
15
+ //
16
+ // Standard HomeKit characteristics are always evented; the power-derived On
17
+ // switches are handled separately by PowerSwitch (see powerSwitch.ts).
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.EveUpdateThrottle = exports.UpdateStats = exports.DEFAULT_UPDATE_POLICY = exports.EVE_POWER_UPDATE_MODES = void 0;
20
+ exports.resolveUpdatePolicy = resolveUpdatePolicy;
21
+ exports.EVE_POWER_UPDATE_MODES = ['throttled', 'pollOnly', 'live'];
22
+ exports.DEFAULT_UPDATE_POLICY = {
23
+ evePowerUpdates: 'throttled',
24
+ minChangeWatts: 25,
25
+ minChangePercent: 2,
26
+ minChangeKwh: 0.1,
27
+ maxIntervalSeconds: 300,
28
+ switchHoldSeconds: 60,
29
+ };
30
+ /** Builds options from raw config values, falling back to defaults for missing/invalid entries. */
31
+ function resolveUpdatePolicy(config) {
32
+ const d = exports.DEFAULT_UPDATE_POLICY;
33
+ const num = (v, fallback) => typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : fallback;
34
+ const mode = config.evePowerUpdates;
35
+ return {
36
+ evePowerUpdates: exports.EVE_POWER_UPDATE_MODES.includes(mode)
37
+ ? mode
38
+ : d.evePowerUpdates,
39
+ minChangeWatts: num(config.minChangeWatts, d.minChangeWatts),
40
+ minChangePercent: num(config.minChangePercent, d.minChangePercent),
41
+ minChangeKwh: num(config.minChangeKwh, d.minChangeKwh),
42
+ maxIntervalSeconds: num(config.maxIntervalSeconds, d.maxIntervalSeconds),
43
+ switchHoldSeconds: num(config.switchHoldSeconds, d.switchHoldSeconds),
44
+ };
45
+ }
46
+ /** Sent/suppressed counters for the hourly summary log. */
47
+ class UpdateStats {
48
+ constructor() {
49
+ this.sent = 0;
50
+ this.suppressed = 0;
51
+ }
52
+ /** Returns the counts since the previous call and resets them. */
53
+ take() {
54
+ const stats = { sent: this.sent, suppressed: this.suppressed };
55
+ this.sent = 0;
56
+ this.suppressed = 0;
57
+ return stats;
58
+ }
59
+ }
60
+ exports.UpdateStats = UpdateStats;
61
+ /** Decides, per accessory+characteristic key, whether an Eve value is pushed. */
62
+ class EveUpdateThrottle {
63
+ constructor(options, stats = new UpdateStats(), debug = () => { }, now = Date.now) {
64
+ this.options = options;
65
+ this.stats = stats;
66
+ this.debug = debug;
67
+ this.now = now;
68
+ this.lastSent = new Map();
69
+ }
70
+ /** Whether Eve characteristics should advertise NOTIFY (false in pollOnly mode). */
71
+ get notify() {
72
+ return this.options.evePowerUpdates !== 'pollOnly';
73
+ }
74
+ /**
75
+ * Returns true if `value` should be pushed for `key`. The first value for a
76
+ * key is always pushed in throttled mode, so HomeKit gets the correct value
77
+ * immediately on startup.
78
+ */
79
+ shouldSend(key, value, unit) {
80
+ switch (this.options.evePowerUpdates) {
81
+ case 'live':
82
+ this.stats.sent++;
83
+ return true;
84
+ case 'pollOnly':
85
+ this.stats.suppressed++;
86
+ return false;
87
+ }
88
+ const now = this.now();
89
+ const last = this.lastSent.get(key);
90
+ if (last === undefined || this.isSignificant(last, value, unit, now)) {
91
+ this.lastSent.set(key, { value, time: now });
92
+ this.stats.sent++;
93
+ return true;
94
+ }
95
+ this.stats.suppressed++;
96
+ this.debug(`Suppressed ${key} update ${value} ${unit} (last sent ${last.value} ${unit})`);
97
+ return false;
98
+ }
99
+ isSignificant(last, value, unit, now) {
100
+ const { minChangeWatts, minChangePercent, minChangeKwh, maxIntervalSeconds } = this.options;
101
+ // Sign change, including crossing to/from 0 (import vs export).
102
+ if (Math.sign(value) !== Math.sign(last.value)) {
103
+ return true;
104
+ }
105
+ const threshold = unit === 'W'
106
+ ? Math.max(minChangeWatts, (minChangePercent / 100) * Math.abs(last.value))
107
+ : minChangeKwh;
108
+ if (Math.abs(value - last.value) >= threshold) {
109
+ return true;
110
+ }
111
+ return now - last.time >= maxIntervalSeconds * 1000;
112
+ }
113
+ }
114
+ exports.EveUpdateThrottle = EveUpdateThrottle;
115
+ //# sourceMappingURL=updatePolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updatePolicy.js","sourceRoot":"","sources":["../src/updatePolicy.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "homebridge-rainforest-eagle3",
3
3
  "displayName": "Eagle 3",
4
- "version": "1.0.0",
5
- "description": "Homebridge plugin for Rainforest EAGLE-200 smart meter — Eve Energy accessory with fakegato history.",
4
+ "version": "1.2.0",
5
+ "description": "Homebridge plugin for Rainforest EAGLE-3 smart meter — Eve Energy accessory with fakegato history.",
6
6
  "author": {
7
7
  "name": "David Carson",
8
8
  "email": "dacarson@gmail.com",
@@ -18,7 +18,7 @@
18
18
  },
19
19
  "engines": {
20
20
  "node": ">=18.0.0",
21
- "homebridge": ">=1.6.0"
21
+ "homebridge": ">=2.0.0"
22
22
  },
23
23
  "main": "dist/index.js",
24
24
  "files": [
@@ -29,7 +29,8 @@
29
29
  "build": "rimraf ./dist && tsc",
30
30
  "watch": "npm run build && nodemon",
31
31
  "lint": "eslint src/**.ts",
32
- "prepublishOnly": "npm run build"
32
+ "prepublishOnly": "npm run build",
33
+ "test": "rimraf ./build-test && tsc -p tsconfig.test.json && node --test build-test/*.spec.js"
33
34
  },
34
35
  "keywords": [
35
36
  "homebridge-plugin",
@@ -40,7 +41,7 @@
40
41
  "energy"
41
42
  ],
42
43
  "peerDependencies": {
43
- "homebridge": ">=1.6.0"
44
+ "homebridge": ">=2.0.0"
44
45
  },
45
46
  "dependencies": {
46
47
  "fakegato-history": "^0.6.7",
@@ -52,7 +53,7 @@
52
53
  "@typescript-eslint/eslint-plugin": "^7.0.0",
53
54
  "@typescript-eslint/parser": "^7.0.0",
54
55
  "eslint": "^8.57.0",
55
- "homebridge": "^1.8.0",
56
+ "homebridge": "^2.0.0",
56
57
  "nodemon": "^3.0.0",
57
58
  "rimraf": "^5.0.0",
58
59
  "typescript": "^5.4.0"