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.
- package/.zed/settings.json +12 -0
- package/CHANGELOG.md +4 -0
- package/README.md +1 -0
- package/ac.lua +5150 -0
- package/config.schema.json +69 -15
- package/dist/accessory/AccessoryFactory.d.ts +2 -1
- package/dist/accessory/AccessoryFactory.js +3 -0
- package/dist/accessory/AccessoryFactory.js.map +1 -1
- package/dist/accessory/AirConditionerAccessory.d.ts +3 -0
- package/dist/accessory/AirConditionerAccessory.js +24 -0
- package/dist/accessory/AirConditionerAccessory.js.map +1 -1
- package/dist/accessory/FreshAirApplianceAccessory.d.ts +37 -0
- package/dist/accessory/FreshAirApplianceAccessory.js +140 -0
- package/dist/accessory/FreshAirApplianceAccessory.js.map +1 -0
- package/dist/core/MideaConstants.d.ts +4 -0
- package/dist/core/MideaConstants.js +14 -0
- package/dist/core/MideaConstants.js.map +1 -1
- package/dist/devices/DeviceFactory.d.ts +2 -1
- package/dist/devices/DeviceFactory.js +3 -0
- package/dist/devices/DeviceFactory.js.map +1 -1
- package/dist/devices/ce/MideaCEDevice.d.ts +34 -0
- package/dist/devices/ce/MideaCEDevice.js +98 -0
- package/dist/devices/ce/MideaCEDevice.js.map +1 -0
- package/dist/devices/ce/MideaCEMessage.d.ts +43 -0
- package/dist/devices/ce/MideaCEMessage.js +84 -0
- package/dist/devices/ce/MideaCEMessage.js.map +1 -0
- package/dist/platformUtils.d.ts +9 -0
- package/dist/platformUtils.js +8 -0
- package/dist/platformUtils.js.map +1 -1
- package/docs/ac.md +6 -3
- package/docs/ce.md +19 -0
- package/homebridge-ui/server.js +3 -34
- package/package.json +1 -1
|
@@ -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":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,SAAS,CAAC;IAC7C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1J,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1J,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACvH,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,SAAS,CAAC;IAC/C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1J,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC1J,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACvB,CAAC,CAAC;AAEH,MAAM,CAAN,IAAY,
|
|
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":"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"}
|
package/dist/platformUtils.d.ts
CHANGED
|
@@ -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 = {
|
package/dist/platformUtils.js
CHANGED
|
@@ -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":"AAOA,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,eAAe,EAAE,EAAE;IACnB,iBAAiB,EAAE,EAAE;IACrB,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,EAAE;CACZ,CAAC;
|
|
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`
|
package/homebridge-ui/server.js
CHANGED
|
@@ -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
|
-
|
|
17
|
+
DeviceTypeToName,
|
|
18
18
|
TCPMessageType,
|
|
19
19
|
ProtocolVersion,
|
|
20
20
|
Endianness,
|
|
21
21
|
} from "../dist/core/MideaConstants.js";
|
|
22
|
-
import { LocalSecurity
|
|
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
|
-
|
|
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