homebridge-midea-platform 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +176 -0
- package/README.md +9 -0
- package/config.schema.json +137 -0
- package/dist/accessory/AccessoryFactory.d.ts +8 -0
- package/dist/accessory/AccessoryFactory.d.ts.map +1 -0
- package/dist/accessory/AccessoryFactory.js +17 -0
- package/dist/accessory/AccessoryFactory.js.map +1 -0
- package/dist/accessory/AirConditionerAccessory.d.ts +25 -0
- package/dist/accessory/AirConditionerAccessory.d.ts.map +1 -0
- package/dist/accessory/AirConditionerAccessory.js +182 -0
- package/dist/accessory/AirConditionerAccessory.js.map +1 -0
- package/dist/accessory/BaseAccessory.d.ts +9 -0
- package/dist/accessory/BaseAccessory.d.ts.map +1 -0
- package/dist/accessory/BaseAccessory.js +29 -0
- package/dist/accessory/BaseAccessory.js.map +1 -0
- package/dist/core/MideaCloud.d.ts +32 -0
- package/dist/core/MideaCloud.d.ts.map +1 -0
- package/dist/core/MideaCloud.js +152 -0
- package/dist/core/MideaCloud.js.map +1 -0
- package/dist/core/MideaConstants.d.ts +41 -0
- package/dist/core/MideaConstants.d.ts.map +1 -0
- package/dist/core/MideaConstants.js +56 -0
- package/dist/core/MideaConstants.js.map +1 -0
- package/dist/core/MideaDevice.d.ts +58 -0
- package/dist/core/MideaDevice.d.ts.map +1 -0
- package/dist/core/MideaDevice.js +263 -0
- package/dist/core/MideaDevice.js.map +1 -0
- package/dist/core/MideaDiscover.d.ts +17 -0
- package/dist/core/MideaDiscover.d.ts.map +1 -0
- package/dist/core/MideaDiscover.js +129 -0
- package/dist/core/MideaDiscover.js.map +1 -0
- package/dist/core/MideaMessage.d.ts +76 -0
- package/dist/core/MideaMessage.d.ts.map +1 -0
- package/dist/core/MideaMessage.js +186 -0
- package/dist/core/MideaMessage.js.map +1 -0
- package/dist/core/MideaPacketBuilder.d.ts +11 -0
- package/dist/core/MideaPacketBuilder.d.ts.map +1 -0
- package/dist/core/MideaPacketBuilder.js +60 -0
- package/dist/core/MideaPacketBuilder.js.map +1 -0
- package/dist/core/MideaSecurity.d.ts +35 -0
- package/dist/core/MideaSecurity.d.ts.map +1 -0
- package/dist/core/MideaSecurity.js +168 -0
- package/dist/core/MideaSecurity.js.map +1 -0
- package/dist/core/MideaUtils.d.ts +18 -0
- package/dist/core/MideaUtils.d.ts.map +1 -0
- package/dist/core/MideaUtils.js +187 -0
- package/dist/core/MideaUtils.js.map +1 -0
- package/dist/devices/DeviceFactory.d.ts +8 -0
- package/dist/devices/DeviceFactory.d.ts.map +1 -0
- package/dist/devices/DeviceFactory.js +17 -0
- package/dist/devices/DeviceFactory.js.map +1 -0
- package/dist/devices/ac/MideaACDevice.d.ts +80 -0
- package/dist/devices/ac/MideaACDevice.d.ts.map +1 -0
- package/dist/devices/ac/MideaACDevice.js +271 -0
- package/dist/devices/ac/MideaACDevice.js.map +1 -0
- package/dist/devices/ac/MideaACMessage.d.ts +90 -0
- package/dist/devices/ac/MideaACMessage.d.ts.map +1 -0
- package/dist/devices/ac/MideaACMessage.js +528 -0
- package/dist/devices/ac/MideaACMessage.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/platform.d.ts +20 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +110 -0
- package/dist/platform.js.map +1 -0
- package/dist/settings.d.ts +9 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +12 -0
- package/dist/settings.js.map +1 -0
- package/package.json +45 -0
package/dist/platform.js
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MideaPlatform = void 0;
|
|
7
|
+
const settings_1 = require("./settings");
|
|
8
|
+
const MideaCloud_1 = __importDefault(require("./core/MideaCloud"));
|
|
9
|
+
const MideaDiscover_1 = __importDefault(require("./core/MideaDiscover"));
|
|
10
|
+
const AccessoryFactory_1 = __importDefault(require("./accessory/AccessoryFactory"));
|
|
11
|
+
const DeviceFactory_1 = __importDefault(require("./devices/DeviceFactory"));
|
|
12
|
+
class MideaPlatform {
|
|
13
|
+
constructor(log, config, api) {
|
|
14
|
+
this.log = log;
|
|
15
|
+
this.config = config;
|
|
16
|
+
this.api = api;
|
|
17
|
+
this.Service = this.api.hap.Service;
|
|
18
|
+
this.Characteristic = this.api.hap.Characteristic;
|
|
19
|
+
this.accessories = [];
|
|
20
|
+
this.log.debug('Finished initializing platform:', settings_1.PLATFORM_NAME);
|
|
21
|
+
this.cloud = new MideaCloud_1.default(this.config['user'], this.config['password'], this.config['useChinaServer'], log);
|
|
22
|
+
this.discover = new MideaDiscover_1.default(log);
|
|
23
|
+
this.discover.on('device', (device_info) => {
|
|
24
|
+
const configDev = this.config['devices'].find((dev) => dev.ip === device_info.ip);
|
|
25
|
+
if (configDev) {
|
|
26
|
+
device_info.name = configDev.name || device_info.name;
|
|
27
|
+
}
|
|
28
|
+
this.addDevice(device_info);
|
|
29
|
+
});
|
|
30
|
+
// When this event is fired it means Homebridge has restored all cached accessories from disk.
|
|
31
|
+
// Dynamic Platform plugins should only register new accessories after this event was fired,
|
|
32
|
+
// in order to ensure they weren't added to homebridge already. This event can also be used
|
|
33
|
+
// to start discovery of new accessories.
|
|
34
|
+
this.api.on('didFinishLaunching', () => {
|
|
35
|
+
log.debug('Executed didFinishLaunching callback');
|
|
36
|
+
// run the method to discover / register your devices as accessories
|
|
37
|
+
this.cloud.login()
|
|
38
|
+
.then(() => {
|
|
39
|
+
this.log.info('Logged in to Midea Cloud.');
|
|
40
|
+
// this.discover.startDiscover();
|
|
41
|
+
if (this.config['devices']) {
|
|
42
|
+
this.config['devices'].forEach((device) => {
|
|
43
|
+
this.discover.discoverDeviceByIP(device.ip);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
})
|
|
47
|
+
.catch((error) => {
|
|
48
|
+
this.log.error(`Error logging in to Midea Cloud: ${error}`);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async addDevice(device_info) {
|
|
53
|
+
const uuid = this.api.hap.uuid.generate(device_info.id.toString());
|
|
54
|
+
const existingAccessory = this.accessories.find(accessory => accessory.UUID === uuid);
|
|
55
|
+
if (existingAccessory) {
|
|
56
|
+
// the accessory already exists
|
|
57
|
+
this.log.info('Restoring existing accessory from cache:', existingAccessory.displayName);
|
|
58
|
+
AccessoryFactory_1.default.createAccessory(this, existingAccessory, existingAccessory.context.device.type);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
this.log.info('Adding new accessory:', device_info.name);
|
|
62
|
+
const accessory = new this.api.platformAccessory(device_info.name, uuid);
|
|
63
|
+
const device = DeviceFactory_1.default.createDevice(this.log, device_info, undefined, undefined);
|
|
64
|
+
if (device) {
|
|
65
|
+
let connected = false;
|
|
66
|
+
let i = 0;
|
|
67
|
+
while (i <= 1 && !connected) {
|
|
68
|
+
const endianess = i === 0 ? 'little' : 'big';
|
|
69
|
+
let token, key = undefined;
|
|
70
|
+
try {
|
|
71
|
+
[token, key] = await this.cloud.getToken(device_info.id, endianess);
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
this.log.debug(`Getting token and key with ${endianess}-endian is not successful: ${e}`);
|
|
75
|
+
}
|
|
76
|
+
device.token = token;
|
|
77
|
+
device.key = key;
|
|
78
|
+
connected = await device.connect();
|
|
79
|
+
i++;
|
|
80
|
+
}
|
|
81
|
+
if (connected) {
|
|
82
|
+
this.log.info(`Connected to device ${device_info.ip}:${device_info.port}`);
|
|
83
|
+
accessory.context.device = device;
|
|
84
|
+
// create the accessory handler for the newly create accessory
|
|
85
|
+
// this is imported from `platformAccessory.ts`
|
|
86
|
+
AccessoryFactory_1.default.createAccessory(this, accessory, device_info.type);
|
|
87
|
+
// link the accessory to your platform
|
|
88
|
+
this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
this.log.error(`Cannot connect to device ${device_info.ip}:${device_info.port}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.log.error(`Device type is unsupported by the plugin: ${device_info.type}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* This function is invoked when homebridge restores cached accessories from disk at startup.
|
|
101
|
+
* It should be used to setup event handlers for characteristics and update respective values.
|
|
102
|
+
*/
|
|
103
|
+
configureAccessory(accessory) {
|
|
104
|
+
this.log.info('Loading accessory from cache:', accessory.displayName);
|
|
105
|
+
// add the restored accessory to the accessories cache so we can track if it has already been registered
|
|
106
|
+
this.accessories.push(accessory);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
exports.MideaPlatform = MideaPlatform;
|
|
110
|
+
//# sourceMappingURL=platform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.js","sourceRoot":"","sources":["../src/platform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This is the name of the platform that users will use to register the plugin in the Homebridge config.json
|
|
3
|
+
*/
|
|
4
|
+
export declare const PLATFORM_NAME = "midea";
|
|
5
|
+
/**
|
|
6
|
+
* This must match the name of your plugin as defined the package.json
|
|
7
|
+
*/
|
|
8
|
+
export declare const PLUGIN_NAME = "homebridge-midea-platform";
|
|
9
|
+
//# sourceMappingURL=settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,WAAW,8BAA8B,CAAC"}
|
package/dist/settings.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PLUGIN_NAME = exports.PLATFORM_NAME = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* This is the name of the platform that users will use to register the plugin in the Homebridge config.json
|
|
6
|
+
*/
|
|
7
|
+
exports.PLATFORM_NAME = 'midea';
|
|
8
|
+
/**
|
|
9
|
+
* This must match the name of your plugin as defined the package.json
|
|
10
|
+
*/
|
|
11
|
+
exports.PLUGIN_NAME = 'homebridge-midea-platform';
|
|
12
|
+
//# sourceMappingURL=settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACU,QAAA,aAAa,GAAG,OAAO,CAAC;AAErC;;GAEG;AACU,QAAA,WAAW,GAAG,2BAA2B,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"displayName": "Homebridge Midea",
|
|
3
|
+
"name": "homebridge-midea-platform",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "Homebridge plugin for Midea devices",
|
|
6
|
+
"license": "Apache-2.0",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/kovapatrik/homebridge-midea.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/kovapatrik/homebridge-midea/issues"
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": "^18.17.0",
|
|
16
|
+
"homebridge": "^1.6.0"
|
|
17
|
+
},
|
|
18
|
+
"main": "dist/index.js",
|
|
19
|
+
"scripts": {
|
|
20
|
+
"lint": "eslint src/**.ts --max-warnings=0",
|
|
21
|
+
"watch": "npm run build && npm link && nodemon",
|
|
22
|
+
"build": "rimraf ./dist && tsc",
|
|
23
|
+
"prepublishOnly": "npm run lint && npm run build"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"homebridge-plugin"
|
|
27
|
+
],
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"axios": "^1.5.0",
|
|
30
|
+
"fast-xml-parser": "^4.2.7",
|
|
31
|
+
"luxon": "^3.4.2"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@types/luxon": "^3.3.1",
|
|
35
|
+
"@types/node": "^18.16.20",
|
|
36
|
+
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
37
|
+
"@typescript-eslint/parser": "^5.62.0",
|
|
38
|
+
"eslint": "^8.45.0",
|
|
39
|
+
"homebridge": "^1.6.0",
|
|
40
|
+
"nodemon": "^2.0.22",
|
|
41
|
+
"rimraf": "^3.0.2",
|
|
42
|
+
"ts-node": "^10.9.1",
|
|
43
|
+
"typescript": "^4.9.5"
|
|
44
|
+
}
|
|
45
|
+
}
|