homebridge-shelly-energy-meter 0.9.0-beta.0 → 0.9.0-beta.1
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.
|
@@ -4,23 +4,20 @@ export declare class ShellyEnergyMeterPlatformAccessory {
|
|
|
4
4
|
private readonly platform;
|
|
5
5
|
private readonly accessory;
|
|
6
6
|
private consumptionService;
|
|
7
|
-
private returnService;
|
|
8
7
|
private energyHistoryService;
|
|
9
|
-
private returnEnergyHistoryService;
|
|
10
8
|
private macAddress;
|
|
11
9
|
private deviceConfig;
|
|
12
10
|
private total_act_power;
|
|
13
11
|
private total_act_energy;
|
|
14
|
-
private total_act_return_energy;
|
|
15
12
|
private total_current;
|
|
13
|
+
private avg_voltage;
|
|
16
14
|
private EvePowerConsumption;
|
|
17
15
|
private EveTotalConsumption;
|
|
18
16
|
private EveAmpere;
|
|
17
|
+
private EveVolatage;
|
|
19
18
|
private PowerMeterService;
|
|
20
|
-
private
|
|
21
|
-
private
|
|
22
|
-
private isPollingEMStatus;
|
|
23
|
-
private isPollingEMDataStatus;
|
|
19
|
+
private pollingInterval?;
|
|
20
|
+
private isUpdating;
|
|
24
21
|
constructor(platform: ShellyEnergyMeterPlatform, accessory: PlatformAccessory);
|
|
25
22
|
private registerEveCharacteristics;
|
|
26
23
|
private createEveCharacteristics;
|
|
@@ -28,6 +25,10 @@ export declare class ShellyEnergyMeterPlatformAccessory {
|
|
|
28
25
|
private setupService;
|
|
29
26
|
private startPolling;
|
|
30
27
|
stopPolling(): void;
|
|
31
|
-
private
|
|
32
|
-
private
|
|
28
|
+
private updateFromDevice;
|
|
29
|
+
private handleStatusResult;
|
|
30
|
+
private handleDataStatusResult;
|
|
31
|
+
private calculateAverageVoltage;
|
|
32
|
+
private formatError;
|
|
33
|
+
private updateAllCharacteristics;
|
|
33
34
|
}
|
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
import { getEMStatus, getEMDataStatus } from './shellyAPI.js';
|
|
2
2
|
const POWER_METER_SERVICE_UUID = '00000001-0000-1777-8000-775D67EC4377';
|
|
3
|
+
const WH_TO_KWH = 1000;
|
|
4
|
+
const DEFAULT_POLL_INTERVAL = 10000;
|
|
3
5
|
export class ShellyEnergyMeterPlatformAccessory {
|
|
4
6
|
platform;
|
|
5
7
|
accessory;
|
|
6
8
|
consumptionService;
|
|
7
|
-
returnService;
|
|
8
9
|
energyHistoryService;
|
|
9
|
-
returnEnergyHistoryService;
|
|
10
10
|
macAddress;
|
|
11
11
|
deviceConfig;
|
|
12
12
|
total_act_power = 0;
|
|
13
13
|
total_act_energy = 0;
|
|
14
|
-
total_act_return_energy = 0;
|
|
15
14
|
total_current = 0;
|
|
15
|
+
avg_voltage = 0;
|
|
16
16
|
EvePowerConsumption;
|
|
17
17
|
EveTotalConsumption;
|
|
18
18
|
EveAmpere;
|
|
19
|
+
EveVolatage;
|
|
19
20
|
PowerMeterService;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
isPollingEMStatus = false;
|
|
23
|
-
isPollingEMDataStatus = false;
|
|
21
|
+
pollingInterval;
|
|
22
|
+
isUpdating = false;
|
|
24
23
|
constructor(platform, accessory) {
|
|
25
24
|
this.platform = platform;
|
|
26
25
|
this.accessory = accessory;
|
|
@@ -32,10 +31,11 @@ export class ShellyEnergyMeterPlatformAccessory {
|
|
|
32
31
|
this.startPolling();
|
|
33
32
|
}
|
|
34
33
|
registerEveCharacteristics() {
|
|
35
|
-
const { EvePowerConsumption, EveTotalConsumption, EveAmpere, PowerMeterService } = this.createEveCharacteristics(this.platform.api);
|
|
34
|
+
const { EvePowerConsumption, EveTotalConsumption, EveAmpere, EveVolatage, PowerMeterService } = this.createEveCharacteristics(this.platform.api);
|
|
36
35
|
this.EvePowerConsumption = EvePowerConsumption;
|
|
37
36
|
this.EveTotalConsumption = EveTotalConsumption;
|
|
38
37
|
this.EveAmpere = EveAmpere;
|
|
38
|
+
this.EveVolatage = EveVolatage;
|
|
39
39
|
this.PowerMeterService = PowerMeterService;
|
|
40
40
|
}
|
|
41
41
|
createEveCharacteristics(api) {
|
|
@@ -79,15 +79,29 @@ export class ShellyEnergyMeterPlatformAccessory {
|
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
|
+
class EveVolatage extends Characteristic {
|
|
83
|
+
static UUID = 'E863F10A-079E-48FF-8F27-9C2605A29F52';
|
|
84
|
+
constructor() {
|
|
85
|
+
super('Volt', EveVolatage.UUID, {
|
|
86
|
+
format: 'float',
|
|
87
|
+
unit: 'V',
|
|
88
|
+
maxValue: 1000000000,
|
|
89
|
+
minValue: 0,
|
|
90
|
+
minStep: 0.001,
|
|
91
|
+
perms: ["pr" /* Perms.PAIRED_READ */, "ev" /* Perms.NOTIFY */],
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
82
95
|
class PowerMeterService extends Service {
|
|
83
96
|
constructor(name) {
|
|
84
97
|
super(name, POWER_METER_SERVICE_UUID);
|
|
85
98
|
this.addOptionalCharacteristic(EvePowerConsumption);
|
|
86
99
|
this.addOptionalCharacteristic(EveTotalConsumption);
|
|
87
100
|
this.addOptionalCharacteristic(EveAmpere);
|
|
101
|
+
this.addOptionalCharacteristic(EveVolatage);
|
|
88
102
|
}
|
|
89
103
|
}
|
|
90
|
-
return { EvePowerConsumption, EveTotalConsumption, EveAmpere, PowerMeterService };
|
|
104
|
+
return { EvePowerConsumption, EveTotalConsumption, EveAmpere, EveVolatage, PowerMeterService };
|
|
91
105
|
}
|
|
92
106
|
setupAccessoryInfo() {
|
|
93
107
|
const info = this.accessory.getService(this.platform.api.hap.Service.AccessoryInformation);
|
|
@@ -99,7 +113,6 @@ export class ShellyEnergyMeterPlatformAccessory {
|
|
|
99
113
|
setupService() {
|
|
100
114
|
// Use device MAC address as unique subtype to prevent UUID collisions with multiple accessories
|
|
101
115
|
const consumptionSubtype = `${this.macAddress}-consumption`;
|
|
102
|
-
const returnSubtype = `${this.macAddress}-return`;
|
|
103
116
|
// Setup consumption power service
|
|
104
117
|
let existingConsumptionService = this.accessory.services.find(service => service.UUID === POWER_METER_SERVICE_UUID && service.subtype === consumptionSubtype);
|
|
105
118
|
if (!existingConsumptionService) {
|
|
@@ -111,116 +124,95 @@ export class ShellyEnergyMeterPlatformAccessory {
|
|
|
111
124
|
this.consumptionService.getCharacteristic(this.EvePowerConsumption).onGet(() => this.total_act_power);
|
|
112
125
|
this.consumptionService.getCharacteristic(this.EveTotalConsumption).onGet(() => this.total_act_energy);
|
|
113
126
|
this.consumptionService.getCharacteristic(this.EveAmpere).onGet(() => this.total_current);
|
|
127
|
+
this.consumptionService.getCharacteristic(this.EveVolatage).onGet(() => this.avg_voltage);
|
|
114
128
|
this.energyHistoryService = new this.platform.FakeGatoHistoryService('energy', this.accessory, {
|
|
115
129
|
log: this.platform.log,
|
|
116
130
|
storage: 'fs',
|
|
117
131
|
});
|
|
118
|
-
// Setup return power service
|
|
119
|
-
let existingReturnService = this.accessory.services.find(service => service.UUID === POWER_METER_SERVICE_UUID && service.subtype === returnSubtype);
|
|
120
|
-
if (!existingReturnService) {
|
|
121
|
-
const service = new this.PowerMeterService(`${this.deviceConfig.name} Return`, POWER_METER_SERVICE_UUID);
|
|
122
|
-
service.subtype = returnSubtype;
|
|
123
|
-
existingReturnService = this.accessory.addService(service);
|
|
124
|
-
}
|
|
125
|
-
this.returnService = existingReturnService;
|
|
126
|
-
this.returnService.getCharacteristic(this.EveTotalConsumption).onGet(() => this.total_act_return_energy);
|
|
127
|
-
this.returnEnergyHistoryService = new this.platform.FakeGatoHistoryService('energy', this.accessory, {
|
|
128
|
-
log: this.platform.log,
|
|
129
|
-
storage: 'fs',
|
|
130
|
-
});
|
|
131
132
|
}
|
|
132
133
|
startPolling() {
|
|
133
|
-
void this.
|
|
134
|
-
void this.
|
|
135
|
-
this.pollingEMStatusInterval = setInterval(() => void this.updateEMStatusFromDevice(), this.deviceConfig.update_interval ?? 10000);
|
|
136
|
-
this.pollingEMDataStatusInterval = setInterval(() => void this.updateEMDataStatusFromDevice(), this.deviceConfig.update_interval ?? 10000);
|
|
134
|
+
void this.updateFromDevice();
|
|
135
|
+
this.pollingInterval = setInterval(() => void this.updateFromDevice(), this.deviceConfig.update_interval ?? DEFAULT_POLL_INTERVAL);
|
|
137
136
|
}
|
|
138
137
|
stopPolling() {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.platform.log.debug(`[${this.deviceConfig.name}] EMStatus polling stopped.`);
|
|
143
|
-
}
|
|
144
|
-
if (this.pollingEMDataStatusInterval) {
|
|
145
|
-
clearInterval(this.pollingEMDataStatusInterval);
|
|
146
|
-
this.pollingEMDataStatusInterval = undefined;
|
|
147
|
-
this.platform.log.debug(`[${this.deviceConfig.name}] EMDataStatus polling stopped.`);
|
|
148
|
-
}
|
|
138
|
+
clearInterval(this.pollingInterval);
|
|
139
|
+
this.pollingInterval = undefined;
|
|
140
|
+
this.platform.log.debug(`[${this.deviceConfig.name}] Data polling stopped.`);
|
|
149
141
|
}
|
|
150
|
-
async
|
|
151
|
-
if (this.
|
|
142
|
+
async updateFromDevice() {
|
|
143
|
+
if (this.isUpdating) {
|
|
144
|
+
this.platform.log.debug(`[${this.deviceConfig.name}] Skipping update - previous update still in progress`);
|
|
152
145
|
return;
|
|
153
146
|
}
|
|
154
|
-
this.
|
|
147
|
+
this.isUpdating = true;
|
|
155
148
|
try {
|
|
156
|
-
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
this.consumptionService.getCharacteristic(this.EvePowerConsumption).updateValue(this.total_act_power);
|
|
167
|
-
this.consumptionService.getCharacteristic(this.EveAmpere).updateValue(this.total_current);
|
|
149
|
+
// Run both requests in parallel
|
|
150
|
+
const [statusResult, dataResult] = await Promise.allSettled([
|
|
151
|
+
getEMStatus(this.deviceConfig, this.platform.log),
|
|
152
|
+
getEMDataStatus(this.deviceConfig, this.platform.log),
|
|
153
|
+
]);
|
|
154
|
+
// Process both results (updates internal state)
|
|
155
|
+
this.handleStatusResult(statusResult);
|
|
156
|
+
this.handleDataStatusResult(dataResult);
|
|
157
|
+
// Update all characteristics and history with consistent data
|
|
158
|
+
this.updateAllCharacteristics();
|
|
168
159
|
}
|
|
169
160
|
catch (err) {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
this.platform.log.error(`[${this.deviceConfig.name}] Request failed:`, message);
|
|
175
|
-
// write zero on error
|
|
176
|
-
this.total_act_power = 0;
|
|
177
|
-
this.total_current = 0;
|
|
178
|
-
this.consumptionService.getCharacteristic(this.EvePowerConsumption).updateValue(0);
|
|
179
|
-
this.consumptionService.getCharacteristic(this.EveAmpere).updateValue(0);
|
|
161
|
+
// Catches unexpected errors in handlers (not API calls)
|
|
162
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
163
|
+
this.platform.log.error(`[${this.deviceConfig.name}] Unexpected error:`, message);
|
|
180
164
|
}
|
|
181
165
|
finally {
|
|
182
|
-
this.
|
|
166
|
+
this.isUpdating = false;
|
|
183
167
|
}
|
|
184
168
|
}
|
|
185
|
-
|
|
186
|
-
if (
|
|
187
|
-
|
|
169
|
+
handleStatusResult(result) {
|
|
170
|
+
if (result.status === 'fulfilled') {
|
|
171
|
+
const data = result.value;
|
|
172
|
+
this.total_act_power = data.total_act_power ?? 0;
|
|
173
|
+
this.total_current = data.total_current ?? 0;
|
|
174
|
+
this.avg_voltage = this.calculateAverageVoltage(data);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
this.platform.log.error(`[${this.deviceConfig.name}] Request failed (status):`, this.formatError(result.reason));
|
|
178
|
+
this.total_act_power = 0;
|
|
179
|
+
this.total_current = 0;
|
|
180
|
+
this.avg_voltage = 0;
|
|
188
181
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
const phaseCConsumption = data.c_total_act_energy ?? 0;
|
|
195
|
-
// Sum and convert Wh to kWh
|
|
196
|
-
this.total_act_energy = (Math.max(0, phaseAConsumption) + Math.max(0, phaseBConsumption) + Math.max(0, phaseCConsumption)) / 1000;
|
|
197
|
-
const phaseAReturn = data.a_total_act_ret_energy ?? 0;
|
|
198
|
-
const phaseBReturn = data.b_total_act_ret_energy ?? 0;
|
|
199
|
-
const phaseCReturn = data.c_total_act_ret_energy ?? 0;
|
|
200
|
-
// Sum and convert Wh to kWh
|
|
201
|
-
this.total_act_return_energy = (Math.max(0, phaseAReturn) + Math.max(0, phaseBReturn) + Math.max(0, phaseCReturn)) / 1000;
|
|
202
|
-
this.consumptionService.getCharacteristic(this.EveTotalConsumption).updateValue(this.total_act_energy);
|
|
203
|
-
this.returnService.getCharacteristic(this.EveTotalConsumption).updateValue(this.total_act_return_energy);
|
|
204
|
-
this.energyHistoryService.addEntry({ time: Math.floor(Date.now() / 1000), totalEnergy: this.total_act_energy });
|
|
205
|
-
this.returnEnergyHistoryService.addEntry({ time: Math.floor(Date.now() / 1000), totalEnergy: this.total_act_return_energy });
|
|
182
|
+
}
|
|
183
|
+
handleDataStatusResult(result) {
|
|
184
|
+
if (result.status === 'fulfilled') {
|
|
185
|
+
const data = result.value;
|
|
186
|
+
this.total_act_energy = (data.total_act ?? 0) / WH_TO_KWH;
|
|
206
187
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
210
|
-
message = 'Request timeout';
|
|
211
|
-
}
|
|
212
|
-
this.platform.log.error(`[${this.deviceConfig.name}] Request failed:`, message);
|
|
213
|
-
// write zero on error
|
|
188
|
+
else {
|
|
189
|
+
this.platform.log.error(`[${this.deviceConfig.name}] Request failed (data):`, this.formatError(result.reason));
|
|
214
190
|
this.total_act_energy = 0;
|
|
215
|
-
this.total_act_return_energy = 0;
|
|
216
|
-
this.consumptionService.getCharacteristic(this.EveTotalConsumption).updateValue(0);
|
|
217
|
-
this.returnService.getCharacteristic(this.EveTotalConsumption).updateValue(0);
|
|
218
|
-
this.energyHistoryService.addEntry({ time: Math.floor(Date.now() / 1000), totalEnergy: 0 });
|
|
219
|
-
this.returnEnergyHistoryService.addEntry({ time: Math.floor(Date.now() / 1000), totalEnergy: 0 });
|
|
220
191
|
}
|
|
221
|
-
|
|
222
|
-
|
|
192
|
+
}
|
|
193
|
+
calculateAverageVoltage(data) {
|
|
194
|
+
const voltages = [data.a_voltage, data.b_voltage, data.c_voltage];
|
|
195
|
+
const valid = voltages.filter((v) => typeof v === 'number' && v > 0);
|
|
196
|
+
return valid.length > 0 ? valid.reduce((sum, v) => sum + v, 0) / valid.length : 0;
|
|
197
|
+
}
|
|
198
|
+
formatError(err) {
|
|
199
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
200
|
+
return 'Request timeout';
|
|
223
201
|
}
|
|
202
|
+
return err instanceof Error ? err.message : String(err);
|
|
203
|
+
}
|
|
204
|
+
updateAllCharacteristics() {
|
|
205
|
+
// Update all status characteristics
|
|
206
|
+
this.consumptionService.getCharacteristic(this.EvePowerConsumption).updateValue(this.total_act_power);
|
|
207
|
+
this.consumptionService.getCharacteristic(this.EveAmpere).updateValue(this.total_current);
|
|
208
|
+
this.consumptionService.getCharacteristic(this.EveVolatage).updateValue(this.avg_voltage);
|
|
209
|
+
this.consumptionService.getCharacteristic(this.EveTotalConsumption).updateValue(this.total_act_energy);
|
|
210
|
+
// Add history entry with consistent power and energy values
|
|
211
|
+
this.energyHistoryService.addEntry({
|
|
212
|
+
time: Math.floor(Date.now() / 1000),
|
|
213
|
+
power: this.total_act_power,
|
|
214
|
+
totalEnergy: this.total_act_energy,
|
|
215
|
+
});
|
|
224
216
|
}
|
|
225
217
|
}
|
|
226
218
|
//# sourceMappingURL=platformAccessory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAI9D,MAAM,wBAAwB,GAAG,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"platformAccessory.js","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "homebridge-shelly-energy-meter",
|
|
3
3
|
"displayName": "Shelly (Pro) 3EM Energy Meter",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "0.9.0-beta.
|
|
5
|
+
"version": "0.9.0-beta.1",
|
|
6
6
|
"description": "A short description about what your plugin does.",
|
|
7
7
|
"author": "Patrick Probst",
|
|
8
8
|
"license": "Apache-2.0",
|