homebridge-midea-platform 1.2.5 → 1.2.6-beta.2

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.
@@ -14,6 +14,7 @@ export var DeviceType;
14
14
  DeviceType[DeviceType["AIR_CONDITIONER"] = 172] = "AIR_CONDITIONER";
15
15
  DeviceType[DeviceType["DEHUMIDIFIER"] = 161] = "DEHUMIDIFIER";
16
16
  DeviceType[DeviceType["HEAT_PUMP_WIFI_CONTROLLER"] = 195] = "HEAT_PUMP_WIFI_CONTROLLER";
17
+ DeviceType[DeviceType["FRESH_AIR_APPLIANCE"] = 206] = "FRESH_AIR_APPLIANCE";
17
18
  DeviceType[DeviceType["FRONT_LOAD_WASHER"] = 219] = "FRONT_LOAD_WASHER";
18
19
  DeviceType[DeviceType["DISHWASHER"] = 225] = "DISHWASHER";
19
20
  DeviceType[DeviceType["ELECTRIC_WATER_HEATER"] = 226] = "ELECTRIC_WATER_HEATER";
@@ -21,6 +22,19 @@ export var DeviceType;
21
22
  DeviceType[DeviceType["FAN"] = 250] = "FAN";
22
23
  DeviceType[DeviceType["HUMIDIFIER"] = 253] = "HUMIDIFIER";
23
24
  })(DeviceType || (DeviceType = {}));
25
+ export const DeviceTypeToName = {
26
+ [DeviceType.UNKNOWN]: 'Unknown',
27
+ [DeviceType.AIR_CONDITIONER]: 'Air Conditioner',
28
+ [DeviceType.DEHUMIDIFIER]: 'Dehumidifier',
29
+ [DeviceType.HEAT_PUMP_WIFI_CONTROLLER]: 'Heat Pump Wifi Controller',
30
+ [DeviceType.FRESH_AIR_APPLIANCE]: 'Fresh Air Appliance',
31
+ [DeviceType.FRONT_LOAD_WASHER]: 'Front Load Washer',
32
+ [DeviceType.DISHWASHER]: 'Dishwasher',
33
+ [DeviceType.ELECTRIC_WATER_HEATER]: 'Electric Water Heater',
34
+ [DeviceType.GAS_WATER_HEATER]: 'Gas Water Heater',
35
+ [DeviceType.FAN]: 'Fan',
36
+ [DeviceType.HUMIDIFIER]: 'Humidifier',
37
+ };
24
38
  export var ParseMessageResult;
25
39
  (function (ParseMessageResult) {
26
40
  ParseMessageResult[ParseMessageResult["SUCCESS"] = 0] = "SUCCESS";
@@ -1 +1 @@
1
- {"version":3,"file":"MideaConstants.js","sourceRoot":"","sources":["../../src/core/MideaConstants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MideaConstants.js","sourceRoot":"","sources":["../../src/core/MideaConstants.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,7 @@ import type { Config, DeviceConfig } from '../platformUtils.js';
4
4
  import MideaA1Device from './a1/MideaA1Device.js';
5
5
  import MideaACDevice from './ac/MideaACDevice.js';
6
6
  import MideaC3Device from './c3/MideaC3Device.js';
7
+ import MideaCEDevice from './ce/MideaCEDevice.js';
7
8
  import MideaDBDevice from './db/MideaDBDevice.js';
8
9
  import MideaE1Device from './e1/MideaE1Device.js';
9
10
  import MideaE2Device from './e2/MideaE2Device.js';
@@ -11,5 +12,5 @@ import MideaE3Device from './e3/MideaE3Device.js';
11
12
  import MideaFADevice from './fa/MideaFADevice.js';
12
13
  import MideaFDDevice from './fd/MideaFDDevice.js';
13
14
  export default class DeviceFactory {
14
- static createDevice(logger: Logger, device_info: DeviceInfo, config: Config, deviceConfig: DeviceConfig): MideaACDevice | MideaA1Device | MideaDBDevice | MideaE2Device | MideaE3Device | MideaFADevice | MideaE1Device | MideaC3Device | MideaFDDevice | null;
15
+ static createDevice(logger: Logger, device_info: DeviceInfo, config: Config, deviceConfig: DeviceConfig): MideaACDevice | MideaA1Device | MideaDBDevice | MideaE2Device | MideaE3Device | MideaFADevice | MideaE1Device | MideaC3Device | MideaFDDevice | MideaCEDevice | null;
15
16
  }
@@ -2,6 +2,7 @@ import { DeviceType } from '../core/MideaConstants.js';
2
2
  import MideaA1Device from './a1/MideaA1Device.js';
3
3
  import MideaACDevice from './ac/MideaACDevice.js';
4
4
  import MideaC3Device from './c3/MideaC3Device.js';
5
+ import MideaCEDevice from './ce/MideaCEDevice.js';
5
6
  import MideaDBDevice from './db/MideaDBDevice.js';
6
7
  import MideaE1Device from './e1/MideaE1Device.js';
7
8
  import MideaE2Device from './e2/MideaE2Device.js';
@@ -30,6 +31,8 @@ export default class DeviceFactory {
30
31
  return new MideaFADevice(logger, device_info, config, deviceConfig);
31
32
  case DeviceType.HUMIDIFIER:
32
33
  return new MideaFDDevice(logger, device_info, config, deviceConfig);
34
+ case DeviceType.FRESH_AIR_APPLIANCE:
35
+ return new MideaCEDevice(logger, device_info, config, deviceConfig);
33
36
  default:
34
37
  return null;
35
38
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DeviceFactory.js","sourceRoot":"","sources":["../../src/devices/DeviceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAElD,mFAAmF;AACnF,MAAM,CAAC,OAAO,OAAO,aAAa;IACzB,MAAM,CAAC,YAAY,CAAC,MAAc,EAAE,WAAuB,EAAE,MAAc,EAAE,YAA0B;QAC5G,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,eAAe;gBAC7B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,yBAAyB;gBACvC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,iBAAiB;gBAC/B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,qBAAqB;gBACnC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,gBAAgB;gBAC9B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,GAAG;gBACjB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"DeviceFactory.js","sourceRoot":"","sources":["../../src/devices/DeviceFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAElD,mFAAmF;AACnF,MAAM,CAAC,OAAO,OAAO,aAAa;IACzB,MAAM,CAAC,YAAY,CAAC,MAAc,EAAE,WAAuB,EAAE,MAAc,EAAE,YAA0B;QAC5G,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,UAAU,CAAC,YAAY;gBAC1B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,eAAe;gBAC7B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,yBAAyB;gBACvC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,iBAAiB;gBAC/B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,qBAAqB;gBACnC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,gBAAgB;gBAC9B,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,GAAG;gBACjB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,UAAU;gBACxB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE,KAAK,UAAU,CAAC,mBAAmB;gBACjC,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YACtE;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,34 @@
1
+ /***********************************************************************
2
+ * Midea Fresh Air Appliance Device class
3
+ *
4
+ * Copyright (c) 2025 Kovalovszky Patrik, https://github.com/kovapatrik
5
+ *
6
+ * With thanks to https://github.com/georgezhao2010/midea_ac_lan
7
+ *
8
+ */
9
+ import type { Logger } from 'homebridge';
10
+ import type { DeviceInfo } from '../../core/MideaConstants.js';
11
+ import MideaDevice, { type DeviceAttributeBase } from '../../core/MideaDevice.js';
12
+ import type { MessageRequest } from '../../core/MideaMessage.js';
13
+ import type { Config, DeviceConfig } from '../../platformUtils.js';
14
+ import { MessageSet } from './MideaCEMessage.js';
15
+ export interface CEAttributes extends DeviceAttributeBase {
16
+ POWER: boolean;
17
+ AUTO_SET_MODE: boolean;
18
+ SILENT_MODE: boolean;
19
+ MODE: number;
20
+ SILENT_MODE_LEVEL: number;
21
+ TARGET_TEMPERATURE: number;
22
+ CURRENT_TEMPERATURE: number;
23
+ ERROR_CODE: number;
24
+ RUN_MODE_UNDER_AUTO_CONTROL: number;
25
+ }
26
+ export default class MideaCEDevice extends MideaDevice {
27
+ attributes: CEAttributes;
28
+ constructor(logger: Logger, device_info: DeviceInfo, config: Config, deviceConfig: DeviceConfig);
29
+ build_query(): MessageRequest[];
30
+ process_message(msg: Buffer): void;
31
+ set_subtype(): void;
32
+ make_message_set(): MessageSet;
33
+ set_attribute(attributes: Partial<CEAttributes>): Promise<void>;
34
+ }
@@ -0,0 +1,98 @@
1
+ /***********************************************************************
2
+ * Midea Fresh Air Appliance Device class
3
+ *
4
+ * Copyright (c) 2025 Kovalovszky Patrik, https://github.com/kovapatrik
5
+ *
6
+ * With thanks to https://github.com/georgezhao2010/midea_ac_lan
7
+ *
8
+ */
9
+ import MideaDevice from '../../core/MideaDevice.js';
10
+ import { MessageCEResponse, MessageQuery, MessageSet } from './MideaCEMessage.js';
11
+ export default class MideaCEDevice extends MideaDevice {
12
+ attributes;
13
+ constructor(logger, device_info, config, deviceConfig) {
14
+ super(logger, device_info, config, deviceConfig);
15
+ this.attributes = {
16
+ POWER: false,
17
+ AUTO_SET_MODE: false,
18
+ SILENT_MODE: false,
19
+ MODE: 4,
20
+ SILENT_MODE_LEVEL: 0,
21
+ TARGET_TEMPERATURE: 24,
22
+ CURRENT_TEMPERATURE: 22,
23
+ ERROR_CODE: 0,
24
+ RUN_MODE_UNDER_AUTO_CONTROL: 0,
25
+ };
26
+ }
27
+ build_query() {
28
+ return [new MessageQuery(this.device_protocol_version)];
29
+ }
30
+ process_message(msg) {
31
+ const message = new MessageCEResponse(msg);
32
+ if (this.verbose) {
33
+ this.logger.debug(`[${this.name}] Body:\n${JSON.stringify(message.body)}`);
34
+ }
35
+ const changed = {};
36
+ for (const status of Object.keys(this.attributes)) {
37
+ const value = message.get_body_attribute(status.toLowerCase());
38
+ if (value !== undefined) {
39
+ if (this.attributes[status] !== value) {
40
+ // Track only those attributes that change value. So when we send to the Homebridge /
41
+ // HomeKit accessory we only update values that change. First time through this
42
+ // should be most/all attributes having initialized them to invalid values.
43
+ this.logger.debug(`[${this.name}] Value for ${status} changed from '${this.attributes[status]}' to '${value}'`);
44
+ changed[status] = value;
45
+ }
46
+ this.attributes[status] = value;
47
+ }
48
+ }
49
+ // Now we update Homebridge / Homekit accessory
50
+ if (Object.keys(changed).length > 0) {
51
+ this.update(changed);
52
+ }
53
+ else {
54
+ this.logger.debug(`[${this.name}] Status unchanged`);
55
+ }
56
+ }
57
+ set_subtype() {
58
+ this.logger.debug('No subtype for FA device');
59
+ }
60
+ make_message_set() {
61
+ const message = new MessageSet(this.device_protocol_version);
62
+ message.power = this.attributes.POWER;
63
+ message.mode = this.attributes.MODE;
64
+ message.auto_set_mode = this.attributes.AUTO_SET_MODE;
65
+ message.silent_mode = this.attributes.SILENT_MODE;
66
+ message.silent_mode_level = this.attributes.SILENT_MODE_LEVEL;
67
+ message.target_temperature = this.attributes.TARGET_TEMPERATURE;
68
+ return message;
69
+ }
70
+ async set_attribute(attributes) {
71
+ const messageToSend = {
72
+ SET: undefined,
73
+ };
74
+ try {
75
+ for (const [k, v] of Object.entries(attributes)) {
76
+ if (v === this.attributes[k]) {
77
+ this.logger.info(`[${this.name}] Attribute ${k} already set to ${v}`);
78
+ continue;
79
+ }
80
+ this.logger.info(`[${this.name}] Set device attribute ${k} to: ${v}`);
81
+ this.attributes[k] = v;
82
+ messageToSend.SET ??= this.make_message_set();
83
+ messageToSend.SET[k.toLowerCase()] = v;
84
+ }
85
+ for (const [k, v] of Object.entries(messageToSend)) {
86
+ if (v !== undefined) {
87
+ this.logger.debug(`[${this.name}] Set message ${k}:\n${JSON.stringify(v)}`);
88
+ await this.build_send(v);
89
+ }
90
+ }
91
+ }
92
+ catch (err) {
93
+ const msg = err instanceof Error ? err.stack : err;
94
+ this.logger.debug(`[${this.name}] Error in set_attribute (${this.ip}:${this.port}):\n${msg}`);
95
+ }
96
+ }
97
+ }
98
+ //# sourceMappingURL=MideaCEDevice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MideaCEDevice.js","sourceRoot":"","sources":["../../../src/devices/ce/MideaCEDevice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /***********************************************************************
2
+ * Midea Fresh Air Appliance Device message handler class
3
+ *
4
+ * Copyright (c) 2025 Kovalovszky Patrik, https://github.com/kovapatrik
5
+ *
6
+ * With thanks to https://github.com/georgezhao2010/midea_ac_lan
7
+ *
8
+ */
9
+ import { MessageBody, MessageRequest, MessageResponse, MessageType } from '../../core/MideaMessage.js';
10
+ declare abstract class MessageCEBase extends MessageRequest {
11
+ constructor(device_protocol_version: number, message_type: MessageType, body_type: number);
12
+ }
13
+ export declare class MessageQuery extends MessageCEBase {
14
+ constructor(device_protocol_version: number);
15
+ get _body(): Buffer;
16
+ }
17
+ export declare class MessageSet extends MessageCEBase {
18
+ [key: string]: any;
19
+ power: boolean;
20
+ mode: number;
21
+ auto_set_mode: boolean;
22
+ silent_mode: boolean;
23
+ silent_mode_level: number;
24
+ target_temperature: number;
25
+ constructor(device_protocol_version: number);
26
+ get _body(): Buffer;
27
+ }
28
+ export declare class CEGeneralMessageBody extends MessageBody {
29
+ power: boolean;
30
+ auto_set_mode: boolean;
31
+ silent_mode: boolean;
32
+ mode: number;
33
+ silent_mode_level: number;
34
+ target_temperature: number;
35
+ current_temperature: number;
36
+ error_code: number;
37
+ run_mode_under_auto_control: number;
38
+ constructor(body: Buffer);
39
+ }
40
+ export declare class MessageCEResponse extends MessageResponse {
41
+ constructor(message: Buffer);
42
+ }
43
+ export {};
@@ -0,0 +1,84 @@
1
+ /***********************************************************************
2
+ * Midea Fresh Air Appliance Device message handler class
3
+ *
4
+ * Copyright (c) 2025 Kovalovszky Patrik, https://github.com/kovapatrik
5
+ *
6
+ * With thanks to https://github.com/georgezhao2010/midea_ac_lan
7
+ *
8
+ */
9
+ import { DeviceType } from '../../core/MideaConstants.js';
10
+ import { MessageBody, MessageRequest, MessageResponse, MessageType } from '../../core/MideaMessage.js';
11
+ class MessageCEBase extends MessageRequest {
12
+ constructor(device_protocol_version, message_type, body_type) {
13
+ super(DeviceType.FRESH_AIR_APPLIANCE, message_type, body_type, device_protocol_version);
14
+ }
15
+ }
16
+ export class MessageQuery extends MessageCEBase {
17
+ constructor(device_protocol_version) {
18
+ super(device_protocol_version, MessageType.QUERY, 0x01);
19
+ }
20
+ get _body() {
21
+ return Buffer.alloc(0);
22
+ }
23
+ }
24
+ export class MessageSet extends MessageCEBase {
25
+ power;
26
+ mode;
27
+ auto_set_mode;
28
+ silent_mode;
29
+ silent_mode_level;
30
+ target_temperature;
31
+ constructor(device_protocol_version) {
32
+ super(device_protocol_version, MessageType.SET, 0x01);
33
+ this.power = false;
34
+ this.mode = 4; // auto
35
+ this.auto_set_mode = false;
36
+ this.silent_mode = false;
37
+ this.silent_mode_level = 0;
38
+ this.target_temperature = 25;
39
+ }
40
+ get _body() {
41
+ const power = this.power ? 0x01 : 0x00;
42
+ const auto_set_mode = this.auto_set_mode ? 0x02 : 0x00;
43
+ const silent_mode = this.silent_mode ? 0x04 : 0x00;
44
+ // biome-ignore format: easier to read
45
+ return Buffer.from([
46
+ power | auto_set_mode | silent_mode,
47
+ this.mode,
48
+ this.silent_mode_level,
49
+ this.target_temperature
50
+ ]);
51
+ }
52
+ }
53
+ export class CEGeneralMessageBody extends MessageBody {
54
+ power;
55
+ auto_set_mode;
56
+ silent_mode;
57
+ mode;
58
+ silent_mode_level;
59
+ target_temperature;
60
+ current_temperature;
61
+ error_code;
62
+ run_mode_under_auto_control;
63
+ constructor(body) {
64
+ super(body);
65
+ this.power = (body[1] & 0x01) > 0;
66
+ this.auto_set_mode = (body[1] & 0x02) > 0;
67
+ this.silent_mode = (body[1] & 0x04) > 0;
68
+ this.mode = body[2];
69
+ this.silent_mode_level = body[3];
70
+ this.target_temperature = body[4];
71
+ this.current_temperature = body[5] >= 128 ? 256 - body[5] : body[5];
72
+ this.error_code = body[6];
73
+ this.run_mode_under_auto_control = body[7];
74
+ }
75
+ }
76
+ export class MessageCEResponse extends MessageResponse {
77
+ constructor(message) {
78
+ super(message);
79
+ if (([MessageType.QUERY, MessageType.SET].includes(this.message_type) && this.body_type === 0x01) || this.message_type === MessageType.NOTIFY1) {
80
+ this.set_body(new CEGeneralMessageBody(this.body));
81
+ }
82
+ }
83
+ }
84
+ //# sourceMappingURL=MideaCEMessage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MideaCEMessage.js","sourceRoot":"","sources":["../../../src/devices/ce/MideaCEMessage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEvG,MAAe,aAAc,SAAQ,cAAc;IACjD,YAAY,uBAA+B,EAAE,YAAyB,EAAE,SAAiB;QACvF,KAAK,CAAC,UAAU,CAAC,mBAAmB,EAAE,YAAY,EAAE,SAAS,EAAE,uBAAuB,CAAC,CAAC;IAC1F,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,uBAA+B;QACzC,KAAK,CAAC,uBAAuB,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,aAAa;IAG3C,KAAK,CAAU;IACf,IAAI,CAAS;IACb,aAAa,CAAU;IACvB,WAAW,CAAU;IACrB,iBAAiB,CAAS;IAC1B,kBAAkB,CAAS;IAE3B,YAAY,uBAA+B;QACzC,KAAK,CAAC,uBAAuB,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO;QACtB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,CAAC;IAED,IAAI,KAAK;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAEnD,sCAAsC;QACtC,OAAO,MAAM,CAAC,IAAI,CAAC;YAChB,KAAK,GAAG,aAAa,GAAG,WAAW;YACnC,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,kBAAkB;SACxB,CAAC,CAAC;IACN,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IACnD,KAAK,CAAU;IACf,aAAa,CAAU;IACvB,WAAW,CAAU;IACrB,IAAI,CAAS;IACb,iBAAiB,CAAS;IAC1B,kBAAkB,CAAS;IAC3B,mBAAmB,CAAS;IAC5B,UAAU,CAAS;IACnB,2BAA2B,CAAS;IAEpC,YAAY,IAAY;QACtB,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAEf,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YAC/I,IAAI,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;CACF"}
@@ -21,6 +21,7 @@ export type DeviceConfig = {
21
21
  AC_options: ACOptions;
22
22
  A1_options: A1Options;
23
23
  C3_options: C3Options;
24
+ CE_options: CEOptions;
24
25
  DB_options: DBOptions;
25
26
  E1_options: E1Options;
26
27
  E2_options: E2Options;
@@ -71,6 +72,7 @@ type ACOptions = {
71
72
  outDoorTemp: boolean;
72
73
  audioFeedback: boolean;
73
74
  screenOff: boolean;
75
+ sleepModeSwitch: boolean;
74
76
  };
75
77
  type A1Options = {
76
78
  temperatureSensor: boolean;
@@ -91,6 +93,13 @@ type C3Options = {
91
93
  silentSwitch: boolean;
92
94
  tbhSwitch: boolean;
93
95
  };
96
+ type CEOptions = {
97
+ silentMode: boolean;
98
+ autoSetModeSwitch: boolean;
99
+ minTemp: number;
100
+ maxTemp: number;
101
+ tempStep: number;
102
+ };
94
103
  type DBOptions = unknown;
95
104
  type E1Options = unknown;
96
105
  type E2Options = {
@@ -62,6 +62,7 @@ export const defaultDeviceConfig = {
62
62
  fahrenheit: false,
63
63
  fanOnlyModeSwitch: false,
64
64
  fanAccessory: false,
65
+ sleepModeSwitch: false,
65
66
  },
66
67
  A1_options: {
67
68
  temperatureSensor: false,
@@ -82,6 +83,13 @@ export const defaultDeviceConfig = {
82
83
  silentSwitch: false,
83
84
  tbhSwitch: false,
84
85
  },
86
+ CE_options: {
87
+ autoSetModeSwitch: false,
88
+ minTemp: 16,
89
+ maxTemp: 30,
90
+ tempStep: 1,
91
+ silentMode: false,
92
+ },
85
93
  DB_options: {},
86
94
  E1_options: {},
87
95
  E2_options: {
@@ -1 +1 @@
1
- {"version":3,"file":"platformUtils.js","sourceRoot":"","sources":["../src/platformUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"platformUtils.js","sourceRoot":"","sources":["../src/platformUtils.ts"],"names":[],"mappings":"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"}
package/docs/ac.md CHANGED
@@ -30,7 +30,9 @@ Providing air conditioner settings is optional and the whole section or individu
30
30
  "tempStep": 1,
31
31
  "fahrenheit": false,
32
32
  "fanOnlyModeSwitch": false,
33
- "fanAccessory": false
33
+ "fanAccessory": false,
34
+ "sleepModeSwitch": false,
35
+ "sleepModeAccessory": false
34
36
  }
35
37
  ```
36
38
  ## Options
@@ -48,7 +50,7 @@ Providing air conditioner settings is optional and the whole section or individu
48
50
  - **breezeAwaySwitch** *(optional)*: Toggles if the breeze away switch is created with the accessory. Default is `false`.
49
51
  - **displaySwitch**:
50
52
  - **flag** *(optional)*: Toggles if a switch, which can turn the display on or off will be created or not. Default is `true`.
51
- - **command** *(optional)*: Use this if the switch display command does not work. If it doesn't work either way then you unit does not support this feature. Default is `false`.
53
+ - **command** *(optional)*: Use this if the switch display command does not work. If it doesn't work either way then you unit does not support this feature. Default is `false`.
52
54
  - **auxHeatingSwitches** *(optional)*: Toggles if the aux heating switches are created with the accessory. Default is `false`.
53
55
  - **selfCleanSwitch** *(optional)*: Toggles if the self-cleaning switch is created with the accessory. Default is `false`.
54
56
  - **ionSwitch** *(optional)*: Toggles if the ION switch is created with the accessory. Default is `false`.
@@ -58,4 +60,5 @@ Providing air conditioner settings is optional and the whole section or individu
58
60
  - **tempStep** *(optional)*: Increment in which the temperature setting can be changed, may be set to either 0.5 or 1 degree celsius. The default is `1 degree`.
59
61
  - **fahrenheit** *(optional)*: Toggles if the temperature on the unit is displayed in Fahrenheit or Celsius. Default is `false` (displays in Celsius).
60
62
  - **fanOnlyModeSwitch** *(optional)*: Toggles if the fan only mode switch is created with the accessory. Default is `false`.
61
- - **fanAccessory** *(optional)*: Toggles if the fan accessory is created with the accessory. Default is `false`.
63
+ - **fanAccessory** *(optional)*: Toggles if the fan accessory is created with the accessory. Default is `false`.
64
+ - **sleepModeSwitch** *(optional)*: Toggles if the sleep mode switch is created with the accessory. Default is `false`.
package/docs/ce.md ADDED
@@ -0,0 +1,19 @@
1
+ # Fresh Air Appliance
2
+
3
+ Providing Fresh Air Appliance settings is optional and the whole section or individual options may be ommitted and default values (noted below) will be used. Within the *devices.config* object the following air conditioner specific options.
4
+
5
+ ```json
6
+ "CE_options": {
7
+ "autoSetModeSwitch": false,
8
+ "minTemp": 16,
9
+ "maxTemp": 30,
10
+ "tempStep": 1,
11
+ "silentMode": false,
12
+ }
13
+ ```
14
+ ## Options
15
+ - **autoSetModeSwitch** *(optional)*: Toggles if the auto set mode switch is created with the accessory. Default is `false`
16
+ - **minTemp** *(optional)*: The minimum temperature that the unit can be set for. Default is `16 celsius`
17
+ - **maxTemp** *(optional)*: The maximum temperature that the unit can be set for. Default is `30 celsius`
18
+ - **tempStep** *(optional)*: Increment in which the temperature setting can be changed, may be set to either 0.5 or 1 degree celsius. The default is `1 degree`.
19
+ - **silentMode** *(optional)*: Toggles if the silent mode switch alongside the level slider is created with the accessory. Default is `false`
@@ -14,12 +14,12 @@ import {
14
14
  import Discover from "../dist/core/MideaDiscover.js";
15
15
  import CloudFactory from "../dist/core/MideaCloud.js";
16
16
  import {
17
- DeviceType,
17
+ DeviceTypeToName,
18
18
  TCPMessageType,
19
19
  ProtocolVersion,
20
20
  Endianness,
21
21
  } from "../dist/core/MideaConstants.js";
22
- import { LocalSecurity, ProxiedSecurity } from "../dist/core/MideaSecurity.js";
22
+ import { LocalSecurity } from "../dist/core/MideaSecurity.js";
23
23
  import { PromiseSocket } from "../dist/core/MideaUtils.js";
24
24
  import { defaultConfig, defaultDeviceConfig } from "../dist/platformUtils.js";
25
25
  import { createRequire } from "node:module";
@@ -316,38 +316,7 @@ class UiServer extends HomebridgePluginUiServer {
316
316
  discover.startDiscover();
317
317
 
318
318
  discover.on("device", async (device) => {
319
- switch (device.type) {
320
- case DeviceType.AIR_CONDITIONER:
321
- device.displayName = "Air Conditioner";
322
- break;
323
- case DeviceType.DEHUMIDIFIER:
324
- device.displayName = "Dehumidifier";
325
- break;
326
- case DeviceType.HEAT_PUMP_WIFI_CONTROLLER:
327
- device.displayName = "Heat Pump WiFi Controller";
328
- case DeviceType.FRONT_LOAD_WASHER:
329
- device.displayName = "Front Load Washer";
330
- break;
331
- case DeviceType.DISHWASHER:
332
- device.displayName = "Dishwasher";
333
- break;
334
- case DeviceType.ELECTRIC_WATER_HEATER:
335
- device.displayName = "Electric Water Heater";
336
- break;
337
- case DeviceType.GAS_WATER_HEATER:
338
- device.displayName = "Gas Water Heater";
339
- break;
340
- case DeviceType.FAN:
341
- device.displayName = "Fan";
342
- break;
343
- case DeviceType.HUMIDIFIER:
344
- device.displayName = "Humidifier";
345
- break;
346
- case DeviceType.UNKNOWN:
347
- default:
348
- device.displayName = "Unknown";
349
- break;
350
- }
319
+ device.displayName = DeviceTypeToName[device.type] ?? "Unknown";
351
320
  devices.push(device);
352
321
  // too verbose to post every device as found...
353
322
  // this.pushEvent('showToast', { success: true, msg: `Discovered ${device.name} at ${device.ip}`, device: device });
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "displayName": "Homebridge Midea Platform",
3
3
  "name": "homebridge-midea-platform",
4
4
  "type": "module",
5
- "version": "1.2.5",
5
+ "version": "1.2.6-beta.2",
6
6
  "description": "Homebridge plugin for Midea devices",
7
7
  "license": "Apache-2.0",
8
8
  "repository": {