@pietrolubini/homebridge-ecoflow 1.0.2 → 1.1.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/.prettierrc.json +2 -1
- package/README.md +1 -0
- package/config.schema.json +1 -1
- package/dist/accessories/batteries/batteryAccessory.d.ts +59 -0
- package/dist/accessories/{delta2maxAccessory.js → batteries/batteryAccessory.js} +43 -46
- package/dist/accessories/batteries/batteryAccessory.js.map +1 -0
- package/dist/accessories/batteries/delta2Accessory.d.ts +3 -0
- package/dist/accessories/batteries/delta2Accessory.js +4 -0
- package/dist/accessories/batteries/delta2Accessory.js.map +1 -0
- package/dist/accessories/batteries/delta2maxAccessory.d.ts +3 -0
- package/dist/accessories/batteries/delta2maxAccessory.js +4 -0
- package/dist/accessories/batteries/delta2maxAccessory.js.map +1 -0
- package/dist/accessories/ecoFlowAccessory.d.ts +19 -11
- package/dist/accessories/ecoFlowAccessory.js +46 -8
- package/dist/accessories/ecoFlowAccessory.js.map +1 -1
- package/dist/apis/ecoFlowHttpApi.d.ts +46 -0
- package/dist/{accessories/apis → apis}/ecoFlowHttpApi.js +31 -5
- package/dist/apis/ecoFlowHttpApi.js.map +1 -0
- package/dist/apis/ecoFlowMqttApi.d.ts +53 -0
- package/dist/apis/ecoFlowMqttApi.js +100 -0
- package/dist/apis/ecoFlowMqttApi.js.map +1 -0
- package/dist/config.d.ts +2 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/helpers/logger.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +1 -1
- package/dist/platform.js +9 -2
- package/dist/platform.js.map +1 -1
- package/dist/{accessories/services → services}/accessoryInformationService.js +4 -4
- package/dist/services/accessoryInformationService.js.map +1 -0
- package/dist/services/batteryService.js.map +1 -0
- package/dist/services/outletAcService.d.ts +8 -0
- package/dist/services/outletAcService.js +17 -0
- package/dist/services/outletAcService.js.map +1 -0
- package/dist/{accessories/services → services}/outletCarService.d.ts +2 -2
- package/dist/{accessories/services → services}/outletCarService.js +4 -2
- package/dist/services/outletCarService.js.map +1 -0
- package/dist/{accessories/services → services}/outletServiceBase.d.ts +6 -4
- package/dist/{accessories/services → services}/outletServiceBase.js +6 -12
- package/dist/services/outletServiceBase.js.map +1 -0
- package/dist/{accessories/services → services}/outletUsbService.d.ts +2 -2
- package/dist/{accessories/services → services}/outletUsbService.js +2 -2
- package/dist/services/outletUsbService.js.map +1 -0
- package/dist/{accessories/services → services}/serviceBase.d.ts +2 -2
- package/dist/services/serviceBase.js.map +1 -0
- package/package.json +4 -2
- package/dist/accessories/apis/ecoFlowHttpApi.d.ts +0 -16
- package/dist/accessories/apis/ecoFlowHttpApi.js.map +0 -1
- package/dist/accessories/apis/ecoFlowMqttApi.d.ts +0 -23
- package/dist/accessories/apis/ecoFlowMqttApi.js +0 -94
- package/dist/accessories/apis/ecoFlowMqttApi.js.map +0 -1
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.d.ts +0 -47
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js +0 -6
- package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js.map +0 -1
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.d.ts +0 -68
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js +0 -9
- package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js.map +0 -1
- package/dist/accessories/delta2maxAccessory.d.ts +0 -24
- package/dist/accessories/delta2maxAccessory.js.map +0 -1
- package/dist/accessories/services/accessoryInformationService.js.map +0 -1
- package/dist/accessories/services/batteryService.js.map +0 -1
- package/dist/accessories/services/outletAcService.d.ts +0 -6
- package/dist/accessories/services/outletAcService.js +0 -15
- package/dist/accessories/services/outletAcService.js.map +0 -1
- package/dist/accessories/services/outletCarService.js.map +0 -1
- package/dist/accessories/services/outletServiceBase.js.map +0 -1
- package/dist/accessories/services/outletUsbService.js.map +0 -1
- package/dist/accessories/services/serviceBase.js.map +0 -1
- /package/dist/{accessories/services → services}/accessoryInformationService.d.ts +0 -0
- /package/dist/{accessories/services → services}/batteryService.d.ts +0 -0
- /package/dist/{accessories/services → services}/batteryService.js +0 -0
- /package/dist/{accessories/services → services}/serviceBase.js +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import mqtt from 'mqtt';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { getMachineId } from '../helpers/machineId.js';
|
|
4
|
+
export var MqttMessageType;
|
|
5
|
+
(function (MqttMessageType) {
|
|
6
|
+
MqttMessageType["PD"] = "pdStatus";
|
|
7
|
+
MqttMessageType["MPPT"] = "mpptStatus";
|
|
8
|
+
MqttMessageType["INV"] = "invStatus";
|
|
9
|
+
MqttMessageType["BMS"] = "bmsStatus";
|
|
10
|
+
MqttMessageType["EMS"] = "emsStatus";
|
|
11
|
+
})(MqttMessageType || (MqttMessageType = {}));
|
|
12
|
+
export var MqttTopicType;
|
|
13
|
+
(function (MqttTopicType) {
|
|
14
|
+
MqttTopicType["Quota"] = "quota";
|
|
15
|
+
MqttTopicType["SetReply"] = "set_reply";
|
|
16
|
+
})(MqttTopicType || (MqttTopicType = {}));
|
|
17
|
+
export class EcoFlowMqttApi {
|
|
18
|
+
httpApi;
|
|
19
|
+
log;
|
|
20
|
+
client = null;
|
|
21
|
+
certificateData = null;
|
|
22
|
+
quotaSubject = new Subject();
|
|
23
|
+
setReplySubject = new Subject();
|
|
24
|
+
quota$ = this.quotaSubject.asObservable();
|
|
25
|
+
setReply$ = this.setReplySubject.asObservable();
|
|
26
|
+
constructor(httpApi, log) {
|
|
27
|
+
this.httpApi = httpApi;
|
|
28
|
+
this.log = log;
|
|
29
|
+
}
|
|
30
|
+
async destroy() {
|
|
31
|
+
await this.client?.unsubscribeAsync('#');
|
|
32
|
+
this.log.debug('Unsubscribed from all topics');
|
|
33
|
+
await this.client?.end();
|
|
34
|
+
this.log.info('Disconnected from EcoFlow MQTT Service');
|
|
35
|
+
}
|
|
36
|
+
subscribeOnQuota(serialNumber) {
|
|
37
|
+
return this.subscribe(serialNumber, MqttTopicType.Quota);
|
|
38
|
+
}
|
|
39
|
+
subscribeOnSetReply(serialNumber) {
|
|
40
|
+
return this.subscribe(serialNumber, MqttTopicType.SetReply);
|
|
41
|
+
}
|
|
42
|
+
async sendSetCommand(serialNumber, message) {
|
|
43
|
+
const client = await this.connect();
|
|
44
|
+
if (client) {
|
|
45
|
+
const topic = `/open/${this.certificateData.certificateAccount}/${serialNumber}/set`;
|
|
46
|
+
await client.publishAsync(topic, JSON.stringify(message));
|
|
47
|
+
this.log.debug(`Published to topic '${topic}':`, message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async connect() {
|
|
51
|
+
if (!this.client) {
|
|
52
|
+
const certificateData = await this.acquireCertificate();
|
|
53
|
+
if (certificateData) {
|
|
54
|
+
const clientId = `HOMEBRIDGE_${(await getMachineId(this.log)).toUpperCase()}`;
|
|
55
|
+
this.client = await mqtt.connectAsync(`${certificateData.protocol}://${certificateData.url}:${certificateData.port}`, {
|
|
56
|
+
username: `${certificateData.certificateAccount}`,
|
|
57
|
+
password: `${certificateData.certificatePassword}`,
|
|
58
|
+
clientId,
|
|
59
|
+
protocolVersion: 5,
|
|
60
|
+
});
|
|
61
|
+
this.log.info('Connected to EcoFlow MQTT Service');
|
|
62
|
+
this.client.on('message', (topic, message) => {
|
|
63
|
+
const mqttMessage = JSON.parse(message.toString());
|
|
64
|
+
this.processReceivedMessage(topic, (topic.split('/').pop() || ''), mqttMessage);
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return this.client;
|
|
69
|
+
}
|
|
70
|
+
async subscribe(serialNumber, topicType) {
|
|
71
|
+
const client = await this.connect();
|
|
72
|
+
if (client) {
|
|
73
|
+
const topic = `/open/${this.certificateData.certificateAccount}/${serialNumber}/${topicType}`;
|
|
74
|
+
await client.subscribeAsync(topic);
|
|
75
|
+
this.log.debug('Subscribed to topic:', topic);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
processReceivedMessage(topic, topicType, message) {
|
|
81
|
+
switch (topicType) {
|
|
82
|
+
case MqttTopicType.Quota:
|
|
83
|
+
this.quotaSubject.next(message);
|
|
84
|
+
break;
|
|
85
|
+
case MqttTopicType.SetReply:
|
|
86
|
+
this.log.debug(`Read from topic '${topic}':`, message);
|
|
87
|
+
this.setReplySubject.next(message);
|
|
88
|
+
break;
|
|
89
|
+
default:
|
|
90
|
+
this.log.warn('Received message for unsupported topic:', topicType);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async acquireCertificate() {
|
|
94
|
+
if (!this.certificateData) {
|
|
95
|
+
this.certificateData = await this.httpApi.acquireCertificate();
|
|
96
|
+
}
|
|
97
|
+
return this.certificateData;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=ecoFlowMqttApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ecoFlowMqttApi.js","sourceRoot":"","sources":["../../src/apis/ecoFlowMqttApi.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export interface EcoFlowConfig extends PlatformConfig {
|
|
|
3
3
|
devices: DeviceConfig[];
|
|
4
4
|
}
|
|
5
5
|
export declare enum DeviceModel {
|
|
6
|
-
Delta2Max = "Delta 2 Max"
|
|
6
|
+
Delta2Max = "Delta 2 Max",
|
|
7
|
+
Delta2 = "Delta 2"
|
|
7
8
|
}
|
|
8
9
|
export interface DeviceConfig extends AccessoryConfig {
|
|
9
10
|
model: DeviceModel;
|
package/dist/config.js
CHANGED
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,wCAAyB,CAAA;IACzB,iCAAkB,CAAA;AACpB,CAAC,EAHW,WAAW,KAAX,WAAW,QAGtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;IAEE;IACA;IAFnB,YACmB,MAAe,EACf,UAAkB;QADlB,WAAM,GAAN,MAAM,CAAS;QACf,eAAU,GAAV,UAAU,CAAQ;IAClC,CAAC;IAEG,MAAM,CAAC,MAAM,CAAC,MAAe,EAAE,UAAkB;QACtD,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,UAAU,CAAuB,CAAC;IAC9D,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;IAED,8DAA8D;IACvD,IAAI,CAAC,OAAe,EAAE,GAAG,UAAiB;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,8DAA8D;IACvD,OAAO,CAAC,OAAe,EAAE,GAAG,UAAiB;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8DAA8D;IACvD,IAAI,CAAC,OAAe,EAAE,GAAG,UAAiB;QAC/C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC1D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3D,CAAC;IAED,8DAA8D;IACvD,GAAG,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,UAAiB;QAC/D,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,CAAC;IAChE,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3C,CAAC;CACF"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,eAAe,CAAC,GAAQ,EAAE,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;AACjE,CAAC,CAAC"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { API, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service,
|
|
1
|
+
import { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service, UnknownContext } from 'homebridge';
|
|
2
2
|
import { DeviceConfig } from './config.js';
|
|
3
3
|
/**
|
|
4
4
|
* HomebridgePlatform
|
package/dist/platform.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Delta2Accessory } from './accessories/batteries/delta2Accessory.js';
|
|
2
|
+
import { Delta2MaxAccessory } from './accessories/batteries/delta2maxAccessory.js';
|
|
2
3
|
import { DeviceModel } from './config.js';
|
|
3
|
-
import { Delta2MaxAccessory } from './accessories/delta2maxAccessory.js';
|
|
4
4
|
import { Logger } from './helpers/logger.js';
|
|
5
|
+
import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
|
|
5
6
|
/**
|
|
6
7
|
* HomebridgePlatform
|
|
7
8
|
* This class is the main constructor for your plugin, this is where you should
|
|
@@ -50,6 +51,9 @@ export class EcoFlowHomebridgePlatform {
|
|
|
50
51
|
registerDevices() {
|
|
51
52
|
const logs = {};
|
|
52
53
|
const configuredAccessories = [];
|
|
54
|
+
if (!this.ecoFlowConfig.devices) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
53
57
|
for (const config of this.ecoFlowConfig.devices) {
|
|
54
58
|
const log = Logger.create(this.commonLog, config.name);
|
|
55
59
|
const existingAccessory = configuredAccessories.find(accessory => accessory.context.deviceConfig.serialNumber === config.serialNumber);
|
|
@@ -95,6 +99,9 @@ export class EcoFlowHomebridgePlatform {
|
|
|
95
99
|
case DeviceModel.Delta2Max:
|
|
96
100
|
ecoFlowAccessory = new Delta2MaxAccessory(this, accessory, config, log);
|
|
97
101
|
break;
|
|
102
|
+
case DeviceModel.Delta2:
|
|
103
|
+
ecoFlowAccessory = new Delta2Accessory(this, accessory, config, log);
|
|
104
|
+
break;
|
|
98
105
|
default:
|
|
99
106
|
log.warn(`"${config.model}" is not supported. Ignoring the device`);
|
|
100
107
|
}
|
package/dist/platform.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ServiceBase } from './serviceBase.js';
|
|
2
|
-
import { fileURLToPath } from 'url';
|
|
3
|
-
import path from 'path';
|
|
4
1
|
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { ServiceBase } from './serviceBase.js';
|
|
5
5
|
export class AccessoryInformationService extends ServiceBase {
|
|
6
6
|
createService() {
|
|
7
7
|
const service = this.ecoFlowAccessory.accessory.getService(this.ecoFlowAccessory.platform.Service.AccessoryInformation) ||
|
|
@@ -16,7 +16,7 @@ export class AccessoryInformationService extends ServiceBase {
|
|
|
16
16
|
getVersion() {
|
|
17
17
|
const filename = fileURLToPath(import.meta.url);
|
|
18
18
|
const dirname = path.dirname(filename);
|
|
19
|
-
const packageJsonPath = path.resolve(dirname, '
|
|
19
|
+
const packageJsonPath = path.resolve(dirname, '../../package.json');
|
|
20
20
|
const packageData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
21
21
|
return packageData?.version;
|
|
22
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessoryInformationService.js","sourceRoot":"","sources":["../../src/services/accessoryInformationService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,2BAA4B,SAAQ,WAAW;IACvC,aAAa;QAC9B,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC;YACvG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAE1G,OAAO;aACJ,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;aACxF,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;aAC1G,iBAAiB,CAChB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAC1D,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAC1C;aACA,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxG,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,UAAU;QAChB,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,OAAO,WAAW,EAAE,OAAO,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batteryService.js","sourceRoot":"","sources":["../../src/services/batteryService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC1B,aAAa;QAC9B,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1F,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAC9C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAClC,CAAC;QACJ,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,sBAAsB,CAAC,YAAoB;QAChD,MAAM,gBAAgB,GAAG,YAAY,GAAG,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC;QAC1D,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aACjF,WAAW,CACV,gBAAgB;YACd,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,iBAAiB;YAClF,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,oBAAoB,CACxF,CAAC;IACN,CAAC;IAEM,kBAAkB,CAAC,YAAoB;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;aAC7E,WAAW,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC;IAEM,mBAAmB,CAAC,aAAqB;QAC9C,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BatteryAllQuotaData } from 'accessories/batteries/batteryAccessory.js';
|
|
2
|
+
import { EcoFlowAccessoryWithQuota } from '../accessories/ecoFlowAccessory.js';
|
|
3
|
+
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
4
|
+
export declare class OutletAcService<TAllQuotaData extends BatteryAllQuotaData> extends OutletsServiceBase {
|
|
5
|
+
protected readonly ecoFlowAccessory: EcoFlowAccessoryWithQuota<TAllQuotaData>;
|
|
6
|
+
constructor(ecoFlowAccessory: EcoFlowAccessoryWithQuota<TAllQuotaData>);
|
|
7
|
+
protected setOn(value: boolean, revert: () => void): Promise<void>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
2
|
+
export class OutletAcService extends OutletsServiceBase {
|
|
3
|
+
ecoFlowAccessory;
|
|
4
|
+
constructor(ecoFlowAccessory) {
|
|
5
|
+
super('AC', ecoFlowAccessory);
|
|
6
|
+
this.ecoFlowAccessory = ecoFlowAccessory;
|
|
7
|
+
}
|
|
8
|
+
setOn(value, revert) {
|
|
9
|
+
return this.sendOn(3, 'acOutCfg', {
|
|
10
|
+
out_voltage: this.ecoFlowAccessory.quota.inv.cfgAcOutVol,
|
|
11
|
+
out_freq: this.ecoFlowAccessory.quota.inv.cfgAcOutFreq,
|
|
12
|
+
xboost: Number(this.ecoFlowAccessory.quota.inv.cfgAcXboost !== undefined ? this.ecoFlowAccessory.quota.inv.cfgAcXboost : true),
|
|
13
|
+
enabled: Number(value),
|
|
14
|
+
}, revert);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=outletAcService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outletAcService.js","sourceRoot":"","sources":["../../src/services/outletAcService.ts"],"names":[],"mappings":"AAEA,OAAO,EAA+B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,OAAO,eAA2D,SAAQ,kBAAkB;IACjE;IAA/B,YAA+B,gBAA0D;QACvF,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QADD,qBAAgB,GAAhB,gBAAgB,CAA0C;IAEzF,CAAC;IAEkB,KAAK,CAAC,KAAc,EAAE,MAAkB;QACzD,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,EACD,UAAU,EACV;YACE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,WAAY;YACzD,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,YAAa;YACvD,MAAM,EAAE,MAAM,CACZ,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAC/G;YACD,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,EACD,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { EcoFlowAccessory } from '../accessories/ecoFlowAccessory.js';
|
|
1
2
|
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
2
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
3
3
|
export declare class OutletCarService extends OutletsServiceBase {
|
|
4
4
|
constructor(ecoFlowAccessory: EcoFlowAccessory);
|
|
5
|
-
protected setOn(value: boolean): Promise<void>;
|
|
5
|
+
protected setOn(value: boolean, revert: () => void): Promise<void>;
|
|
6
6
|
}
|
|
@@ -3,8 +3,10 @@ export class OutletCarService extends OutletsServiceBase {
|
|
|
3
3
|
constructor(ecoFlowAccessory) {
|
|
4
4
|
super('CAR', ecoFlowAccessory);
|
|
5
5
|
}
|
|
6
|
-
setOn(value) {
|
|
7
|
-
return this.
|
|
6
|
+
setOn(value, revert) {
|
|
7
|
+
return this.sendOn(5, 'mpptCar', {
|
|
8
|
+
enabled: Number(value),
|
|
9
|
+
}, revert);
|
|
8
10
|
}
|
|
9
11
|
}
|
|
10
12
|
//# sourceMappingURL=outletCarService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outletCarService.js","sourceRoot":"","sources":["../../src/services/outletCarService.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,gBAAkC;QAC5C,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAEkB,KAAK,CAAC,KAAc,EAAE,MAAkB;QACzD,OAAO,IAAI,CAAC,MAAM,CAChB,CAAC,EACD,SAAS,EACT;YACE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;SACvB,EACD,MAAM,CACP,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { Service } from 'homebridge';
|
|
2
|
+
import { EcoFlowAccessory } from '../accessories/ecoFlowAccessory.js';
|
|
2
3
|
import { ServiceBase } from './serviceBase.js';
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
export interface MqttSetEnabledMessageParams {
|
|
5
|
+
enabled: number;
|
|
6
|
+
}
|
|
5
7
|
export declare abstract class OutletsServiceBase extends ServiceBase {
|
|
6
8
|
private readonly serviceSubType;
|
|
7
9
|
constructor(serviceSubType: string, ecoFlowAccessory: EcoFlowAccessory);
|
|
8
10
|
updateState(state: boolean): void;
|
|
9
11
|
updateInUse(isInUse: boolean): void;
|
|
10
12
|
protected createService(): Service;
|
|
11
|
-
protected abstract setOn(value: boolean): Promise<void>;
|
|
12
|
-
protected
|
|
13
|
+
protected abstract setOn(value: boolean, revert: () => void): Promise<void>;
|
|
14
|
+
protected sendOn<TParams>(moduleType: number, operateType: string, params: TParams, revert: () => void): Promise<void>;
|
|
13
15
|
private addCharacteristics;
|
|
14
16
|
private getOrAddService;
|
|
15
17
|
}
|
|
@@ -18,20 +18,14 @@ export class OutletsServiceBase extends ServiceBase {
|
|
|
18
18
|
this.addCharacteristics(service);
|
|
19
19
|
return service;
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
id: Math.floor(Math.random() * 1000000),
|
|
24
|
-
version: '1.0',
|
|
25
|
-
moduleType,
|
|
26
|
-
operateType,
|
|
27
|
-
params,
|
|
28
|
-
};
|
|
29
|
-
await this.ecoFlowAccessory.mqttApi.publish('/open/<certificateAccount>/<sn>/set', this.ecoFlowAccessory.config.serialNumber, data);
|
|
21
|
+
sendOn(moduleType, operateType, params, revert) {
|
|
22
|
+
return this.ecoFlowAccessory.sendSetCommand(moduleType, operateType, params, revert);
|
|
30
23
|
}
|
|
31
24
|
addCharacteristics(service) {
|
|
32
|
-
service
|
|
33
|
-
|
|
34
|
-
.
|
|
25
|
+
service.getCharacteristic(this.ecoFlowAccessory.platform.Characteristic.On).onSet(value => {
|
|
26
|
+
const newValue = value;
|
|
27
|
+
this.setOn(newValue, () => this.updateState(!newValue));
|
|
28
|
+
});
|
|
35
29
|
}
|
|
36
30
|
getOrAddService(deviceName, serviceSubType) {
|
|
37
31
|
const serviceName = deviceName + ' ' + serviceSubType;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outletServiceBase.js","sourceRoot":"","sources":["../../src/services/outletServiceBase.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAM/C,MAAM,OAAgB,kBAAmB,SAAQ,WAAW;IAEvC;IADnB,YACmB,cAAsB,EACvC,gBAAkC;QAElC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAHP,mBAAc,GAAd,cAAc,CAAQ;IAIzC,CAAC;IAEM,WAAW,CAAC,KAAc;QAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,WAAW,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACtG,CAAC;IAEM,WAAW,CAAC,OAAgB;QACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,WAAW,EAAE,OAAO,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACjH,CAAC;IAEkB,aAAa;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7F,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,OAAO,CAAC;IACjB,CAAC;IAIS,MAAM,CACd,UAAkB,EAClB,WAAmB,EACnB,MAAe,EACf,MAAkB;QAElB,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACvF,CAAC;IAEO,kBAAkB,CAAC,OAAgB;QACzC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACxF,MAAM,QAAQ,GAAG,KAAgB,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,UAAkB,EAAE,cAAsB;QAChE,MAAM,WAAW,GAAG,UAAU,GAAG,GAAG,GAAG,cAAc,CAAC;QACtD,MAAM,OAAO,GACX,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC;YAC7G,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,UAAU,CACxC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAC7C,WAAW,EACX,cAAc,CACf,CAAC;QAEJ,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE3F,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { EcoFlowAccessory } from '../accessories/ecoFlowAccessory.js';
|
|
1
2
|
import { OutletsServiceBase } from './outletServiceBase.js';
|
|
2
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
3
3
|
export declare class OutletUsbService extends OutletsServiceBase {
|
|
4
4
|
constructor(ecoFlowAccessory: EcoFlowAccessory);
|
|
5
|
-
protected setOn(value: boolean): Promise<void>;
|
|
5
|
+
protected setOn(value: boolean, revert: () => void): Promise<void>;
|
|
6
6
|
}
|
|
@@ -3,8 +3,8 @@ export class OutletUsbService extends OutletsServiceBase {
|
|
|
3
3
|
constructor(ecoFlowAccessory) {
|
|
4
4
|
super('USB', ecoFlowAccessory);
|
|
5
5
|
}
|
|
6
|
-
setOn(value) {
|
|
7
|
-
return this.
|
|
6
|
+
setOn(value, revert) {
|
|
7
|
+
return this.sendOn(1, 'dcOutCfg', { enabled: Number(value) }, revert);
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
//# sourceMappingURL=outletUsbService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outletUsbService.js","sourceRoot":"","sources":["../../src/services/outletUsbService.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEzF,MAAM,OAAO,gBAAiB,SAAQ,kBAAkB;IACtD,YAAY,gBAAkC;QAC5C,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjC,CAAC;IAEkB,KAAK,CAAC,KAAc,EAAE,MAAkB;QACzD,OAAO,IAAI,CAAC,MAAM,CAA8B,CAAC,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACrG,CAAC;CACF"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logging, Service } from 'homebridge';
|
|
2
|
-
import { EcoFlowAccessory } from 'accessories/ecoFlowAccessory.js';
|
|
2
|
+
import { EcoFlowAccessory } from '../accessories/ecoFlowAccessory.js';
|
|
3
3
|
export declare abstract class ServiceBase {
|
|
4
|
-
protected ecoFlowAccessory: EcoFlowAccessory;
|
|
4
|
+
protected readonly ecoFlowAccessory: EcoFlowAccessory;
|
|
5
5
|
protected readonly log: Logging;
|
|
6
6
|
private _service;
|
|
7
7
|
constructor(ecoFlowAccessory: EcoFlowAccessory);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceBase.js","sourceRoot":"","sources":["../../src/services/serviceBase.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,WAAW;IAIA;IAHZ,GAAG,CAAU;IACxB,QAAQ,GAAmB,IAAI,CAAC;IAExC,YAA+B,gBAAkC;QAAlC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAC/D,IAAI,CAAC,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC;IAClC,CAAC;IAEM,UAAU;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;IACvC,CAAC;IAED,qBAAqB;IACrB,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,QAAS,CAAC;IACxB,CAAC;CAGF"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "Homebridge Ecoflow",
|
|
3
3
|
"name": "@pietrolubini/homebridge-ecoflow",
|
|
4
|
-
"version": "1.0
|
|
4
|
+
"version": "1.1.0",
|
|
5
5
|
"description": "Homebridge plugin for EcoFlow devices",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "PietroLubini",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"homepage": "https://github.com/PietroLubini/homebridge-ecoflow#readme",
|
|
17
17
|
"engines": {
|
|
18
18
|
"node": "^18.16.0 || ^20.9.0",
|
|
19
|
-
"homebridge": "^1.
|
|
19
|
+
"homebridge": "^1.7.0"
|
|
20
20
|
},
|
|
21
21
|
"main": "dist/index.js",
|
|
22
22
|
"scripts": {
|
|
@@ -48,6 +48,8 @@
|
|
|
48
48
|
"eslint": "^8.57.0",
|
|
49
49
|
"homebridge": "^1.7.0",
|
|
50
50
|
"nodemon": "^3.1.2",
|
|
51
|
+
"prettier": "^3.3.3",
|
|
52
|
+
"prettier-plugin-organize-imports": "^4.0.0",
|
|
51
53
|
"rimraf": "^5.0.7",
|
|
52
54
|
"ts-node": "^10.9.2",
|
|
53
55
|
"typescript": "^5.4.5"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Logging } from 'homebridge';
|
|
2
|
-
import { AcquireCertificateResponseData, CmdResponseBase, CmdResponseData, HttpMethod } from './interfaces/ecoFlowHttpContacts.js';
|
|
3
|
-
import { DeviceConfig } from '../../config.js';
|
|
4
|
-
export declare class EcoFlowHttpApi {
|
|
5
|
-
private readonly config;
|
|
6
|
-
private readonly log;
|
|
7
|
-
constructor(config: DeviceConfig, log: Logging);
|
|
8
|
-
getQuotas<TCmdResponseData extends CmdResponseData>(quotas: string[]): Promise<TCmdResponseData>;
|
|
9
|
-
getAllQuotas<TCmdResponseData extends CmdResponseData>(): Promise<TCmdResponseData>;
|
|
10
|
-
acquireCertificate(): Promise<AcquireCertificateResponseData | null>;
|
|
11
|
-
protected execute<TResponse extends CmdResponseBase>(relativeUrl: string, method: HttpMethod, queryParameters?: object | null, body?: object | null): Promise<TResponse>;
|
|
12
|
-
private getNonce;
|
|
13
|
-
private composeSignMessage;
|
|
14
|
-
private createHmacSha256;
|
|
15
|
-
private stringifyOptions;
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ecoFlowHttpApi.js","sourceRoot":"","sources":["../../../src/accessories/apis/ecoFlowHttpApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Logging } from 'homebridge';
|
|
2
|
-
import { BmsStatusMqttMessageParams, InvStatusMqttMessageParams, MqttMessage, MqttMessageParams, MqttSetMessageBase, PdStatusMqttMessageParams } from './interfaces/ecoFlowMqttContacts.js';
|
|
3
|
-
import { EcoFlowHttpApi } from './ecoFlowHttpApi.js';
|
|
4
|
-
export declare class EcoFlowMqttApi {
|
|
5
|
-
private httpApi;
|
|
6
|
-
private log;
|
|
7
|
-
private client;
|
|
8
|
-
private certificateData;
|
|
9
|
-
private readonly bmsParamsSubject;
|
|
10
|
-
private readonly invParamsSubject;
|
|
11
|
-
private readonly pdParamsSubject;
|
|
12
|
-
bmsParams$: import("rxjs").Observable<BmsStatusMqttMessageParams>;
|
|
13
|
-
invParams$: import("rxjs").Observable<InvStatusMqttMessageParams>;
|
|
14
|
-
pdParams$: import("rxjs").Observable<PdStatusMqttMessageParams>;
|
|
15
|
-
constructor(httpApi: EcoFlowHttpApi, log: Logging);
|
|
16
|
-
destroy(): Promise<void>;
|
|
17
|
-
subscribe(topicPattern: string, serialNumber: string): Promise<boolean>;
|
|
18
|
-
publish(topicPattern: string, serialNumber: string, data: MqttSetMessageBase): Promise<void>;
|
|
19
|
-
processMqttMessage(message: MqttMessage<MqttMessageParams>): void;
|
|
20
|
-
private connect;
|
|
21
|
-
private acquireCertificate;
|
|
22
|
-
private composeTopic;
|
|
23
|
-
}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import mqtt from 'mqtt';
|
|
2
|
-
import { MqttMessageType, } from './interfaces/ecoFlowMqttContacts.js';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { getMachineId } from './../../helpers/machineId.js';
|
|
5
|
-
export class EcoFlowMqttApi {
|
|
6
|
-
httpApi;
|
|
7
|
-
log;
|
|
8
|
-
client = null;
|
|
9
|
-
certificateData = null;
|
|
10
|
-
bmsParamsSubject = new Subject();
|
|
11
|
-
invParamsSubject = new Subject();
|
|
12
|
-
pdParamsSubject = new Subject();
|
|
13
|
-
bmsParams$ = this.bmsParamsSubject.asObservable();
|
|
14
|
-
invParams$ = this.invParamsSubject.asObservable();
|
|
15
|
-
pdParams$ = this.pdParamsSubject.asObservable();
|
|
16
|
-
constructor(httpApi, log) {
|
|
17
|
-
this.httpApi = httpApi;
|
|
18
|
-
this.log = log;
|
|
19
|
-
}
|
|
20
|
-
async destroy() {
|
|
21
|
-
await this.client?.unsubscribeAsync('#');
|
|
22
|
-
this.log.debug('Unsubscribed from all topics');
|
|
23
|
-
await this.client?.end();
|
|
24
|
-
this.log.info('Disconnected from EcoFlow MQTT Service');
|
|
25
|
-
}
|
|
26
|
-
async subscribe(topicPattern, serialNumber) {
|
|
27
|
-
const client = await this.connect();
|
|
28
|
-
if (client) {
|
|
29
|
-
const topic = this.composeTopic(topicPattern, serialNumber);
|
|
30
|
-
await client.subscribeAsync(topic);
|
|
31
|
-
this.log.debug('Subscribed to topic:', topic);
|
|
32
|
-
client.on('message', (_, message) => {
|
|
33
|
-
const mqttMessage = JSON.parse(message.toString());
|
|
34
|
-
this.processMqttMessage(mqttMessage);
|
|
35
|
-
});
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
async publish(topicPattern, serialNumber, data) {
|
|
41
|
-
const client = await this.connect();
|
|
42
|
-
if (client) {
|
|
43
|
-
const topic = this.composeTopic(topicPattern, serialNumber);
|
|
44
|
-
const message = JSON.stringify(data);
|
|
45
|
-
await client.publishAsync(topic, message);
|
|
46
|
-
this.log.debug(`Published to topic '${topic}'`, message);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
processMqttMessage(message) {
|
|
50
|
-
if (message.typeCode === MqttMessageType.BMS) {
|
|
51
|
-
const params = message.params;
|
|
52
|
-
this.log.debug('BMS:', params);
|
|
53
|
-
this.bmsParamsSubject.next(params);
|
|
54
|
-
}
|
|
55
|
-
else if (message.typeCode === MqttMessageType.INV) {
|
|
56
|
-
const params = message.params;
|
|
57
|
-
this.log.debug('INV:', params);
|
|
58
|
-
this.invParamsSubject.next(params);
|
|
59
|
-
}
|
|
60
|
-
else if (message.typeCode === MqttMessageType.PD) {
|
|
61
|
-
const params = message.params;
|
|
62
|
-
this.log.debug('PD:', params);
|
|
63
|
-
this.pdParamsSubject.next(params);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
async connect() {
|
|
67
|
-
if (!this.client) {
|
|
68
|
-
const certificateData = await this.acquireCertificate();
|
|
69
|
-
if (certificateData) {
|
|
70
|
-
const clientId = `HOMEBRIDGE_${(await getMachineId(this.log)).toUpperCase()}`;
|
|
71
|
-
this.client = await mqtt.connectAsync(`${certificateData.protocol}://${certificateData.url}:${certificateData.port}`, {
|
|
72
|
-
username: `${certificateData.certificateAccount}`,
|
|
73
|
-
password: `${certificateData.certificatePassword}`,
|
|
74
|
-
clientId,
|
|
75
|
-
protocolVersion: 5,
|
|
76
|
-
});
|
|
77
|
-
this.log.info('Connected to EcoFlow MQTT Service');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return this.client;
|
|
81
|
-
}
|
|
82
|
-
async acquireCertificate() {
|
|
83
|
-
if (!this.certificateData) {
|
|
84
|
-
this.certificateData = await this.httpApi.acquireCertificate();
|
|
85
|
-
}
|
|
86
|
-
return this.certificateData;
|
|
87
|
-
}
|
|
88
|
-
composeTopic(topicPattern, serialNumber) {
|
|
89
|
-
return topicPattern
|
|
90
|
-
.replace('<certificateAccount>', this.certificateData.certificateAccount)
|
|
91
|
-
.replace('<sn>', serialNumber);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=ecoFlowMqttApi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ecoFlowMqttApi.js","sourceRoot":"","sources":["../../../src/accessories/apis/ecoFlowMqttApi.ts"],"names":[],"mappings":"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"}
|