@pietrolubini/homebridge-ecoflow 1.0.3 → 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.
Files changed (86) hide show
  1. package/.prettierrc.json +2 -1
  2. package/README.md +32 -0
  3. package/config.schema.json +18 -1
  4. package/dist/accessories/batteries/batteryAccessory.d.ts +59 -0
  5. package/dist/accessories/batteries/batteryAccessory.js +120 -0
  6. package/dist/accessories/batteries/batteryAccessory.js.map +1 -0
  7. package/dist/accessories/batteries/delta2Accessory.d.ts +3 -0
  8. package/dist/accessories/batteries/delta2Accessory.js +4 -0
  9. package/dist/accessories/batteries/delta2Accessory.js.map +1 -0
  10. package/dist/accessories/batteries/delta2maxAccessory.d.ts +3 -0
  11. package/dist/accessories/batteries/delta2maxAccessory.js +4 -0
  12. package/dist/accessories/batteries/delta2maxAccessory.js.map +1 -0
  13. package/dist/accessories/ecoFlowAccessory.d.ts +19 -11
  14. package/dist/accessories/ecoFlowAccessory.js +49 -8
  15. package/dist/accessories/ecoFlowAccessory.js.map +1 -1
  16. package/dist/apis/ecoFlowHttpApi.d.ts +46 -0
  17. package/dist/{accessories/apis → apis}/ecoFlowHttpApi.js +31 -6
  18. package/dist/apis/ecoFlowHttpApi.js.map +1 -0
  19. package/dist/apis/ecoFlowMqttApi.d.ts +53 -0
  20. package/dist/apis/ecoFlowMqttApi.js +100 -0
  21. package/dist/apis/ecoFlowMqttApi.js.map +1 -0
  22. package/dist/characteristics/CustomCharacteristic.d.ts +16 -0
  23. package/dist/characteristics/CustomCharacteristic.js +78 -0
  24. package/dist/characteristics/CustomCharacteristic.js.map +1 -0
  25. package/dist/config.d.ts +11 -1
  26. package/dist/config.js +7 -0
  27. package/dist/config.js.map +1 -1
  28. package/dist/helpers/logger.js +6 -6
  29. package/dist/helpers/logger.js.map +1 -1
  30. package/dist/index.js +1 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/platform.d.ts +7 -4
  33. package/dist/platform.js +29 -13
  34. package/dist/platform.js.map +1 -1
  35. package/dist/{accessories/services → services}/accessoryInformationService.d.ts +2 -1
  36. package/dist/services/accessoryInformationService.js +32 -0
  37. package/dist/services/accessoryInformationService.js.map +1 -0
  38. package/dist/{accessories/services/batteryService.d.ts → services/batteryStatusService.d.ts} +3 -2
  39. package/dist/services/batteryStatusService.js +32 -0
  40. package/dist/services/batteryStatusService.js.map +1 -0
  41. package/dist/services/outletAcService.d.ts +8 -0
  42. package/dist/services/outletAcService.js +17 -0
  43. package/dist/services/outletAcService.js.map +1 -0
  44. package/dist/{accessories/services → services}/outletCarService.d.ts +2 -2
  45. package/dist/{accessories/services → services}/outletCarService.js +4 -2
  46. package/dist/services/outletCarService.js.map +1 -0
  47. package/dist/services/outletServiceBase.d.ts +24 -0
  48. package/dist/services/outletServiceBase.js +62 -0
  49. package/dist/services/outletServiceBase.js.map +1 -0
  50. package/dist/{accessories/services → services}/outletUsbService.d.ts +2 -2
  51. package/dist/{accessories/services → services}/outletUsbService.js +2 -2
  52. package/dist/services/outletUsbService.js.map +1 -0
  53. package/dist/services/serviceBase.d.ts +24 -0
  54. package/dist/services/serviceBase.js +52 -0
  55. package/dist/services/serviceBase.js.map +1 -0
  56. package/docs/images/BatteryAdditionalCharacteristics.jpg +0 -0
  57. package/package.json +3 -1
  58. package/dist/accessories/apis/ecoFlowHttpApi.d.ts +0 -16
  59. package/dist/accessories/apis/ecoFlowHttpApi.js.map +0 -1
  60. package/dist/accessories/apis/ecoFlowMqttApi.d.ts +0 -23
  61. package/dist/accessories/apis/ecoFlowMqttApi.js +0 -94
  62. package/dist/accessories/apis/ecoFlowMqttApi.js.map +0 -1
  63. package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.d.ts +0 -47
  64. package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js +0 -6
  65. package/dist/accessories/apis/interfaces/ecoFlowHttpContacts.js.map +0 -1
  66. package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.d.ts +0 -68
  67. package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js +0 -9
  68. package/dist/accessories/apis/interfaces/ecoFlowMqttContacts.js.map +0 -1
  69. package/dist/accessories/delta2maxAccessory.d.ts +0 -24
  70. package/dist/accessories/delta2maxAccessory.js +0 -117
  71. package/dist/accessories/delta2maxAccessory.js.map +0 -1
  72. package/dist/accessories/services/accessoryInformationService.js +0 -24
  73. package/dist/accessories/services/accessoryInformationService.js.map +0 -1
  74. package/dist/accessories/services/batteryService.js +0 -29
  75. package/dist/accessories/services/batteryService.js.map +0 -1
  76. package/dist/accessories/services/outletAcService.d.ts +0 -6
  77. package/dist/accessories/services/outletAcService.js +0 -15
  78. package/dist/accessories/services/outletAcService.js.map +0 -1
  79. package/dist/accessories/services/outletCarService.js.map +0 -1
  80. package/dist/accessories/services/outletServiceBase.d.ts +0 -15
  81. package/dist/accessories/services/outletServiceBase.js +0 -44
  82. package/dist/accessories/services/outletServiceBase.js.map +0 -1
  83. package/dist/accessories/services/outletUsbService.js.map +0 -1
  84. package/dist/accessories/services/serviceBase.d.ts +0 -11
  85. package/dist/accessories/services/serviceBase.js +0 -17
  86. package/dist/accessories/services/serviceBase.js.map +0 -1
@@ -0,0 +1,53 @@
1
+ import { Logging } from 'homebridge';
2
+ import { EcoFlowHttpApi } from './ecoFlowHttpApi.js';
3
+ export declare enum MqttMessageType {
4
+ PD = "pdStatus",
5
+ MPPT = "mpptStatus",
6
+ INV = "invStatus",
7
+ BMS = "bmsStatus",
8
+ EMS = "emsStatus"
9
+ }
10
+ export interface MqttQuotaMessage {
11
+ typeCode: MqttMessageType;
12
+ }
13
+ export interface MqttQuotaMessageWithParams<TParams> extends MqttQuotaMessage {
14
+ typeCode: MqttMessageType;
15
+ params: TParams;
16
+ }
17
+ export interface MqttSetMessage {
18
+ id: number;
19
+ version: string;
20
+ operateType: string;
21
+ }
22
+ export interface MqttSetMessageWithParams<TParams> extends MqttSetMessage {
23
+ moduleType: number;
24
+ params: TParams;
25
+ }
26
+ export interface MqttSetReplyMessage extends MqttSetMessage {
27
+ data: {
28
+ ack: boolean;
29
+ };
30
+ }
31
+ export declare enum MqttTopicType {
32
+ Quota = "quota",
33
+ SetReply = "set_reply"
34
+ }
35
+ export declare class EcoFlowMqttApi {
36
+ private httpApi;
37
+ private log;
38
+ private client;
39
+ private certificateData;
40
+ private readonly quotaSubject;
41
+ private readonly setReplySubject;
42
+ readonly quota$: import("rxjs").Observable<MqttQuotaMessage>;
43
+ readonly setReply$: import("rxjs").Observable<MqttSetReplyMessage>;
44
+ constructor(httpApi: EcoFlowHttpApi, log: Logging);
45
+ destroy(): Promise<void>;
46
+ subscribeOnQuota(serialNumber: string): Promise<boolean>;
47
+ subscribeOnSetReply(serialNumber: string): Promise<boolean>;
48
+ sendSetCommand(serialNumber: string, message: MqttSetMessage): Promise<void>;
49
+ private connect;
50
+ private subscribe;
51
+ private processReceivedMessage;
52
+ private acquireCertificate;
53
+ }
@@ -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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"}
@@ -0,0 +1,16 @@
1
+ import { Characteristic } from 'hap-nodejs';
2
+ export declare class InputConsumptionWatt extends Characteristic {
3
+ static readonly UUID: string;
4
+ constructor();
5
+ }
6
+ export declare class OutputConsumptionWatt extends Characteristic {
7
+ static readonly UUID: string;
8
+ constructor();
9
+ }
10
+ export declare class PowerConsumption {
11
+ static readonly InputConsumptionWatts: typeof InputConsumptionWatt;
12
+ static readonly OutputConsumptionWatts: typeof OutputConsumptionWatt;
13
+ }
14
+ export declare class CustomCharacteristic {
15
+ static readonly PowerConsumption: typeof PowerConsumption;
16
+ }
@@ -0,0 +1,78 @@
1
+ import { Characteristic } from 'hap-nodejs';
2
+ export class InputConsumptionWatt extends Characteristic {
3
+ static UUID = '13172B0A-D346-4730-9732-32EF5B6EF8B7';
4
+ constructor() {
5
+ super('Input Consumption', InputConsumptionWatt.UUID, {
6
+ description: 'Input Consumption, W',
7
+ format: "float" /* Formats.FLOAT */,
8
+ perms: ["ev" /* Perms.NOTIFY */, "pr" /* Perms.PAIRED_READ */],
9
+ minValue: 0,
10
+ minStep: 1,
11
+ unit: "celsius" /* Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
12
+ });
13
+ this.value = this.getDefaultValue();
14
+ }
15
+ }
16
+ export class OutputConsumptionWatt extends Characteristic {
17
+ // Eve characteristic
18
+ static UUID = 'E863F10D-079E-48FF-8F27-9C2605A29F52';
19
+ constructor() {
20
+ super('Output Consumption', OutputConsumptionWatt.UUID, {
21
+ description: 'Output Consumption, W',
22
+ format: "float" /* Formats.FLOAT */,
23
+ perms: ["ev" /* Perms.NOTIFY */, "pr" /* Perms.PAIRED_READ */],
24
+ unit: "celsius" /* Units.CELSIUS */, // To allow setting numeric value for conditions in ShortCuts
25
+ minValue: 0,
26
+ minStep: 1,
27
+ });
28
+ this.value = this.getDefaultValue();
29
+ }
30
+ }
31
+ // https://gist.github.com/simont77/3f4d4330fa55b83f8ca96388d9004e7d
32
+ // export class PowerConsumptionVolt extends Characteristic {
33
+ // public static readonly UUID: string = 'E863F10A-079E-48FF-8F27-9C2605A29F52';
34
+ // constructor() {
35
+ // super('Voltage', PowerConsumptionVolt.UUID, {
36
+ // description: '"Voltage, V" in Eve App',
37
+ // format: Formats.FLOAT,
38
+ // perms: [Perms.NOTIFY, Perms.PAIRED_READ],
39
+ // minValue: 0,
40
+ // maxValue: 300,
41
+ // });
42
+ // this.value = this.getDefaultValue();
43
+ // }
44
+ // }
45
+ // export class PowerConsumptionAmpere extends Characteristic {
46
+ // public static readonly UUID: string = 'E863F126-079E-48FF-8F27-9C2605A29F52';
47
+ // constructor() {
48
+ // super('Current', PowerConsumptionAmpere.UUID, {
49
+ // description: '"Current, A" in Eve App',
50
+ // format: Formats.FLOAT,
51
+ // perms: [Perms.NOTIFY, Perms.PAIRED_READ],
52
+ // minValue: 0,
53
+ // maxValue: 100,
54
+ // });
55
+ // this.value = this.getDefaultValue();
56
+ // }
57
+ // }
58
+ // export class PowerConsumptionKilowattHour extends Characteristic {
59
+ // public static readonly UUID: string = 'E863F10C-079E-48FF-8F27-9C2605A29F52';
60
+ // constructor() {
61
+ // super('Total Consumption', PowerConsumptionKilowattHour.UUID, {
62
+ // description: '"Total Consumption, kW/h" in Eve App',
63
+ // format: Formats.FLOAT,
64
+ // perms: [Perms.NOTIFY, Perms.PAIRED_READ],
65
+ // minValue: 0,
66
+ // maxValue: 50,
67
+ // });
68
+ // this.value = this.getDefaultValue();
69
+ // }
70
+ // }
71
+ export class PowerConsumption {
72
+ static InputConsumptionWatts = InputConsumptionWatt;
73
+ static OutputConsumptionWatts = OutputConsumptionWatt;
74
+ }
75
+ export class CustomCharacteristic {
76
+ static PowerConsumption = PowerConsumption;
77
+ }
78
+ //# sourceMappingURL=CustomCharacteristic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomCharacteristic.js","sourceRoot":"","sources":["../../src/characteristics/CustomCharacteristic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,OAAO,oBAAqB,SAAQ,cAAc;IAC/C,MAAM,CAAU,IAAI,GAAW,sCAAsC,CAAC;IAC7E;QACE,KAAK,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,IAAI,EAAE;YACpD,WAAW,EAAE,sBAAsB;YACnC,MAAM,6BAAe;YACrB,KAAK,EAAE,uDAAiC;YACxC,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YACV,IAAI,+BAAe,EAAE,6DAA6D;SACnF,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC;;AAGH,MAAM,OAAO,qBAAsB,SAAQ,cAAc;IACvD,qBAAqB;IACd,MAAM,CAAU,IAAI,GAAW,sCAAsC,CAAC;IAC7E;QACE,KAAK,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,IAAI,EAAE;YACtD,WAAW,EAAE,uBAAuB;YACpC,MAAM,6BAAe;YACrB,KAAK,EAAE,uDAAiC;YACxC,IAAI,+BAAe,EAAE,6DAA6D;YAClF,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IACtC,CAAC;;AAGH,oEAAoE;AACpE,6DAA6D;AAC7D,kFAAkF;AAClF,oBAAoB;AACpB,oDAAoD;AACpD,gDAAgD;AAChD,+BAA+B;AAC/B,kDAAkD;AAClD,qBAAqB;AACrB,uBAAuB;AACvB,UAAU;AACV,2CAA2C;AAC3C,MAAM;AACN,IAAI;AAEJ,+DAA+D;AAC/D,kFAAkF;AAClF,oBAAoB;AACpB,sDAAsD;AACtD,gDAAgD;AAChD,+BAA+B;AAC/B,kDAAkD;AAClD,qBAAqB;AACrB,uBAAuB;AACvB,UAAU;AACV,2CAA2C;AAC3C,MAAM;AACN,IAAI;AAEJ,qEAAqE;AACrE,kFAAkF;AAClF,oBAAoB;AACpB,sEAAsE;AACtE,6DAA6D;AAC7D,+BAA+B;AAC/B,kDAAkD;AAClD,qBAAqB;AACrB,sBAAsB;AACtB,UAAU;AACV,2CAA2C;AAC3C,MAAM;AACN,IAAI;AAEJ,MAAM,OAAO,gBAAgB;IACpB,MAAM,CAAU,qBAAqB,GAAgC,oBAAoB,CAAC;IAC1F,MAAM,CAAU,sBAAsB,GAAiC,qBAAqB,CAAC;;AAGtG,MAAM,OAAO,oBAAoB;IACxB,MAAM,CAAU,gBAAgB,GAA4B,gBAAgB,CAAC"}
package/dist/config.d.ts CHANGED
@@ -3,11 +3,21 @@ 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;
10
11
  serialNumber: string;
11
12
  accessKey: string;
12
13
  secretKey: string;
14
+ battery?: BatteryDeviceConfig;
15
+ }
16
+ export interface BatteryDeviceConfig {
17
+ additionalCharacteristics: AdditionalBatteryCharacteristicType[];
18
+ }
19
+ export declare enum AdditionalBatteryCharacteristicType {
20
+ BatteryLevel = "Battery Level, %",
21
+ InputConsumptionInWatts = "Input Consumption, W",
22
+ OutputConsumptionInWatts = "Output Consumption, W"
13
23
  }
package/dist/config.js CHANGED
@@ -1,5 +1,12 @@
1
1
  export var DeviceModel;
2
2
  (function (DeviceModel) {
3
3
  DeviceModel["Delta2Max"] = "Delta 2 Max";
4
+ DeviceModel["Delta2"] = "Delta 2";
4
5
  })(DeviceModel || (DeviceModel = {}));
6
+ export var AdditionalBatteryCharacteristicType;
7
+ (function (AdditionalBatteryCharacteristicType) {
8
+ AdditionalBatteryCharacteristicType["BatteryLevel"] = "Battery Level, %";
9
+ AdditionalBatteryCharacteristicType["InputConsumptionInWatts"] = "Input Consumption, W";
10
+ AdditionalBatteryCharacteristicType["OutputConsumptionInWatts"] = "Output Consumption, W";
11
+ })(AdditionalBatteryCharacteristicType || (AdditionalBatteryCharacteristicType = {}));
5
12
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAMA,MAAM,CAAN,IAAY,WAEX;AAFD,WAAY,WAAW;IACrB,wCAAyB,CAAA;AAC3B,CAAC,EAFW,WAAW,KAAX,WAAW,QAEtB"}
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;AAcD,MAAM,CAAN,IAAY,mCAIX;AAJD,WAAY,mCAAmC;IAC7C,wEAAiC,CAAA;IACjC,uFAAgD,CAAA;IAChD,yFAAkD,CAAA;AACpD,CAAC,EAJW,mCAAmC,KAAnC,mCAAmC,QAI9C"}
@@ -13,27 +13,27 @@ export class Logger {
13
13
  }
14
14
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
15
  info(message, ...parameters) {
16
- this.logger.info(this.wrapMessage(message), parameters);
16
+ this.logger.info(this.wrapMessage(message), ...parameters);
17
17
  }
18
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
19
  success(message, ...parameters) {
20
- this.logger.success(this.wrapMessage(message), parameters);
20
+ this.logger.success(this.wrapMessage(message), ...parameters);
21
21
  }
22
22
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
23
23
  warn(message, ...parameters) {
24
- this.logger.warn(this.wrapMessage(message), parameters);
24
+ this.logger.warn(this.wrapMessage(message), ...parameters);
25
25
  }
26
26
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
27
  error(message, ...parameters) {
28
- this.logger.error(this.wrapMessage(message), parameters);
28
+ this.logger.error(this.wrapMessage(message), ...parameters);
29
29
  }
30
30
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
31
31
  debug(message, ...parameters) {
32
- this.logger.debug(this.wrapMessage(message), parameters);
32
+ this.logger.debug(this.wrapMessage(message), ...parameters);
33
33
  }
34
34
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
35
  log(level, message, ...parameters) {
36
- this.logger.log(level, this.wrapMessage(message), parameters);
36
+ this.logger.log(level, this.wrapMessage(message), ...parameters);
37
37
  }
38
38
  wrapMessage(message) {
39
39
  return `[${this.deviceName}] ${message}`;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/helpers/logger.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,MAAM;IACoB;IAAkC;IAAvE,YAAqC,MAAe,EAAmB,UAAkB;QAApD,WAAM,GAAN,MAAM,CAAS;QAAmB,eAAU,GAAV,UAAU,CAAQ;IAAG,CAAC;IAEtF,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"}
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,GAAG,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8DAA8D;IACvD,OAAO,CAAC,OAAe,EAAE,GAAG,UAAiB;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAChE,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,GAAG,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC9D,CAAC;IAED,8DAA8D;IACvD,KAAK,CAAC,OAAe,EAAE,GAAG,UAAiB;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;IAC9D,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,GAAG,UAAU,CAAC,CAAC;IACnE,CAAC;IAEO,WAAW,CAAC,OAAe;QACjC,OAAO,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3C,CAAC;CACF"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { PLATFORM_NAME } from './settings.js';
2
1
  import { EcoFlowHomebridgePlatform } from './platform.js';
2
+ import { PLATFORM_NAME } from './settings.js';
3
3
  /**
4
4
  * This method registers the platform with Homebridge
5
5
  */
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE1D;;GAEG;AACH,eAAe,CAAC,GAAQ,EAAE,EAAE;IAC1B,GAAG,CAAC,gBAAgB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;AACjE,CAAC,CAAC"}
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"}
@@ -1,17 +1,20 @@
1
- import { API, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service, Characteristic, UnknownContext } from 'homebridge';
1
+ import { API, Characteristic, DynamicPlatformPlugin, Logging, PlatformAccessory, PlatformConfig, Service, UnknownContext } from 'homebridge';
2
+ import { EcoFlowAccessory } from './accessories/ecoFlowAccessory.js';
3
+ import { CustomCharacteristic } from './characteristics/CustomCharacteristic.js';
2
4
  import { DeviceConfig } from './config.js';
3
5
  /**
4
6
  * HomebridgePlatform
5
7
  * This class is the main constructor for your plugin, this is where you should
6
8
  * parse the user config and discover/register accessories with Homebridge.
7
9
  */
10
+ export type EcoFlowCharacteristic = typeof Characteristic & typeof CustomCharacteristic;
8
11
  export declare class EcoFlowHomebridgePlatform implements DynamicPlatformPlugin {
9
12
  private readonly commonLog;
10
13
  readonly config: PlatformConfig;
11
14
  readonly api: API;
12
15
  private readonly ecoFlowConfig;
13
16
  readonly Service: typeof Service;
14
- readonly Characteristic: typeof Characteristic;
17
+ readonly Characteristic: EcoFlowCharacteristic;
15
18
  readonly accessories: PlatformAccessory[];
16
19
  constructor(commonLog: Logging, config: PlatformConfig, api: API);
17
20
  /**
@@ -20,6 +23,6 @@ export declare class EcoFlowHomebridgePlatform implements DynamicPlatformPlugin
20
23
  */
21
24
  configureAccessory(accessory: PlatformAccessory): void;
22
25
  registerDevices(): void;
23
- cleanupDevices(configuredAccessories: PlatformAccessory[], logs: Record<string, Logging>): void;
24
- createAccessory(accessory: PlatformAccessory<UnknownContext>, config: DeviceConfig, log: Logging): void;
26
+ cleanupDevices(configuredAccessories: PlatformAccessory[], configuredEcoFlowAccessories: EcoFlowAccessory[], logs: Record<string, Logging>): void;
27
+ createAccessory(accessory: PlatformAccessory<UnknownContext>, config: DeviceConfig, log: Logging): EcoFlowAccessory | null;
25
28
  }
package/dist/platform.js CHANGED
@@ -1,12 +1,9 @@
1
- import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
1
+ import { Delta2Accessory } from './accessories/batteries/delta2Accessory.js';
2
+ import { Delta2MaxAccessory } from './accessories/batteries/delta2maxAccessory.js';
3
+ import { CustomCharacteristic } from './characteristics/CustomCharacteristic.js';
2
4
  import { DeviceModel } from './config.js';
3
- import { Delta2MaxAccessory } from './accessories/delta2maxAccessory.js';
4
5
  import { Logger } from './helpers/logger.js';
5
- /**
6
- * HomebridgePlatform
7
- * This class is the main constructor for your plugin, this is where you should
8
- * parse the user config and discover/register accessories with Homebridge.
9
- */
6
+ import { PLATFORM_NAME, PLUGIN_NAME } from './settings.js';
10
7
  export class EcoFlowHomebridgePlatform {
11
8
  commonLog;
12
9
  config;
@@ -22,7 +19,10 @@ export class EcoFlowHomebridgePlatform {
22
19
  this.api = api;
23
20
  this.ecoFlowConfig = this.config;
24
21
  this.Service = api.hap.Service;
25
- this.Characteristic = api.hap.Characteristic;
22
+ this.Characteristic = {
23
+ ...api.hap.Characteristic,
24
+ ...CustomCharacteristic,
25
+ };
26
26
  this.commonLog.debug('Finished initializing platform:', this.config.platform);
27
27
  // Homebridge 1.8.0 introduced a `log.success` method that can be used to log success messages
28
28
  // For users that are on a version prior to 1.8.0, we need a 'polyfill' for this method
@@ -50,6 +50,7 @@ export class EcoFlowHomebridgePlatform {
50
50
  registerDevices() {
51
51
  const logs = {};
52
52
  const configuredAccessories = [];
53
+ const configuredEcoFlowAccessories = [];
53
54
  if (!this.ecoFlowConfig.devices) {
54
55
  return;
55
56
  }
@@ -67,29 +68,41 @@ export class EcoFlowHomebridgePlatform {
67
68
  // see if an accessory with the same uuid has already been registered and restored from
68
69
  // the cached devices we stored in the `configureAccessory` method above
69
70
  let accessory = this.accessories.find(accessory => accessory.UUID === uuid);
71
+ let ecoFlowAccessory = null;
70
72
  if (accessory) {
71
73
  log.info('Restoring existing accessory from cache');
72
- this.createAccessory(accessory, config, log);
74
+ ecoFlowAccessory = this.createAccessory(accessory, config, log);
73
75
  }
74
76
  else {
75
77
  log.info('Adding new accessory');
76
78
  accessory = new this.api.platformAccessory(config.name, uuid);
77
79
  accessory.context.deviceConfig = config;
78
- this.createAccessory(accessory, config, log);
80
+ ecoFlowAccessory = this.createAccessory(accessory, config, log);
79
81
  // link the accessory to your platform
80
82
  this.api.registerPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
81
83
  }
82
84
  configuredAccessories.push(accessory);
85
+ if (ecoFlowAccessory) {
86
+ configuredEcoFlowAccessories.push(ecoFlowAccessory);
87
+ }
83
88
  logs[accessory.displayName] = log;
84
89
  }
85
- this.cleanupDevices(configuredAccessories, logs);
90
+ this.cleanupDevices(configuredAccessories, configuredEcoFlowAccessories, logs);
86
91
  }
87
- cleanupDevices(configuredAccessories, logs) {
92
+ cleanupDevices(configuredAccessories, configuredEcoFlowAccessories, logs) {
93
+ const removedAccessories = [];
88
94
  this.accessories
89
95
  .filter(accessory => !configuredAccessories.includes(accessory))
90
96
  .forEach(accessory => {
91
97
  logs[accessory.displayName].info('Removing obsolete accessory');
92
98
  this.api.unregisterPlatformAccessories(PLUGIN_NAME, PLATFORM_NAME, [accessory]);
99
+ removedAccessories.push(accessory);
100
+ });
101
+ configuredEcoFlowAccessories
102
+ .filter(ecoFlowAccessory => !removedAccessories.includes(ecoFlowAccessory.accessory))
103
+ .forEach(ecoFlowAccessory => {
104
+ logs[ecoFlowAccessory.accessory.displayName].info('Initializing accessory');
105
+ ecoFlowAccessory.initialize();
93
106
  });
94
107
  }
95
108
  createAccessory(accessory, config, log) {
@@ -98,10 +111,13 @@ export class EcoFlowHomebridgePlatform {
98
111
  case DeviceModel.Delta2Max:
99
112
  ecoFlowAccessory = new Delta2MaxAccessory(this, accessory, config, log);
100
113
  break;
114
+ case DeviceModel.Delta2:
115
+ ecoFlowAccessory = new Delta2Accessory(this, accessory, config, log);
116
+ break;
101
117
  default:
102
118
  log.warn(`"${config.model}" is not supported. Ignoring the device`);
103
119
  }
104
- ecoFlowAccessory?.initialize();
120
+ return ecoFlowAccessory;
105
121
  }
106
122
  }
107
123
  //# sourceMappingURL=platform.js.map
@@ -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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"}
@@ -1,6 +1,7 @@
1
- import { Service } from 'homebridge';
1
+ import { Characteristic, Service } from 'homebridge';
2
2
  import { ServiceBase } from './serviceBase.js';
3
3
  export declare class AccessoryInformationService extends ServiceBase {
4
4
  protected createService(): Service;
5
+ protected addCharacteristics(): Characteristic[];
5
6
  private getVersion;
6
7
  }
@@ -0,0 +1,32 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { ServiceBase } from './serviceBase.js';
5
+ export class AccessoryInformationService extends ServiceBase {
6
+ createService() {
7
+ return this.getOrAddService(this.platform.Service.AccessoryInformation, 'Information');
8
+ }
9
+ addCharacteristics() {
10
+ const characteristics = [
11
+ this.addCharacteristic(this.platform.Characteristic.Manufacturer),
12
+ this.addCharacteristic(this.platform.Characteristic.Model),
13
+ this.addCharacteristic(this.platform.Characteristic.SerialNumber),
14
+ this.addCharacteristic(this.platform.Characteristic.FirmwareRevision),
15
+ this.addCharacteristic(this.platform.Characteristic.Identify),
16
+ ];
17
+ this.service
18
+ .setCharacteristic(this.platform.Characteristic.Manufacturer, 'EcoFlow')
19
+ .setCharacteristic(this.platform.Characteristic.Model, this.ecoFlowAccessory.config.model)
20
+ .setCharacteristic(this.platform.Characteristic.SerialNumber, this.ecoFlowAccessory.config.serialNumber)
21
+ .setCharacteristic(this.platform.Characteristic.FirmwareRevision, this.getVersion());
22
+ return characteristics;
23
+ }
24
+ getVersion() {
25
+ const filename = fileURLToPath(import.meta.url);
26
+ const dirname = path.dirname(filename);
27
+ const packageJsonPath = path.resolve(dirname, '../../package.json');
28
+ const packageData = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
29
+ return packageData?.version;
30
+ }
31
+ }
32
+ //# sourceMappingURL=accessoryInformationService.js.map
@@ -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,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;IACzF,CAAC;IAEkB,kBAAkB;QACnC,MAAM,eAAe,GAAG;YACtB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC;YAC1D,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;YACrE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;SAC9D,CAAC;QAEF,IAAI,CAAC,OAAO;aACT,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,SAAS,CAAC;aACvE,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC;aACzF,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC;aACvG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,OAAO,eAAe,CAAC;IACzB,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"}
@@ -1,7 +1,8 @@
1
- import { Service } from 'homebridge';
1
+ import { Characteristic, Service } from 'homebridge';
2
2
  import { ServiceBase } from './serviceBase.js';
3
- export declare class BatteryService extends ServiceBase {
3
+ export declare class BatteryStatusService extends ServiceBase {
4
4
  protected createService(): Service;
5
+ protected addCharacteristics(): Characteristic[];
5
6
  updateStatusLowBattery(batteryLevel: number): void;
6
7
  updateBatteryLevel(batteryLevel: number): void;
7
8
  updateChargingState(chargingPower: number): void;
@@ -0,0 +1,32 @@
1
+ import { ServiceBase } from './serviceBase.js';
2
+ export class BatteryStatusService extends ServiceBase {
3
+ createService() {
4
+ return this.getOrAddService(this.platform.Service.Battery, this.ecoFlowAccessory.config.name);
5
+ }
6
+ addCharacteristics() {
7
+ return [
8
+ this.addCharacteristic(this.platform.Characteristic.StatusLowBattery),
9
+ this.addCharacteristic(this.platform.Characteristic.BatteryLevel),
10
+ this.addCharacteristic(this.platform.Characteristic.ChargingState),
11
+ ];
12
+ }
13
+ updateStatusLowBattery(batteryLevel) {
14
+ const statusLowBattery = batteryLevel < 20;
15
+ this.log.debug('Status Low Battery ->', statusLowBattery);
16
+ this.service
17
+ .getCharacteristic(this.platform.Characteristic.StatusLowBattery)
18
+ .updateValue(statusLowBattery
19
+ ? this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_LOW
20
+ : this.platform.Characteristic.StatusLowBattery.BATTERY_LEVEL_NORMAL);
21
+ }
22
+ updateBatteryLevel(batteryLevel) {
23
+ this.log.debug('BatteryLevel ->', batteryLevel);
24
+ this.service.getCharacteristic(this.platform.Characteristic.BatteryLevel).updateValue(batteryLevel);
25
+ }
26
+ updateChargingState(chargingPower) {
27
+ const isCharging = chargingPower > 0;
28
+ this.log.debug('ChargingState ->', isCharging);
29
+ this.service.getCharacteristic(this.platform.Characteristic.ChargingState).updateValue(isCharging);
30
+ }
31
+ }
32
+ //# sourceMappingURL=batteryStatusService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batteryStatusService.js","sourceRoot":"","sources":["../../src/services/batteryStatusService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAChC,aAAa;QAC9B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChG,CAAC;IAEkB,kBAAkB;QACnC,OAAO;YACL,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;YACrE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC;YACjE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC;SACnE,CAAC;IACJ,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,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC;aAChE,WAAW,CACV,gBAAgB;YACd,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,iBAAiB;YACjE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAC,oBAAoB,CACvE,CAAC;IACN,CAAC;IAEM,kBAAkB,CAAC,YAAoB;QAC5C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACtG,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,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACrG,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
+ }