homebridge-gree-ac 1.0.2 → 2.0.1

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 (46) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +176 -21
  3. package/README.md +189 -42
  4. package/config.schema.json +277 -0
  5. package/dist/commands.d.ts +121 -0
  6. package/dist/commands.d.ts.map +1 -0
  7. package/dist/commands.js +123 -0
  8. package/dist/commands.js.map +1 -0
  9. package/dist/crypto.d.ts +6 -0
  10. package/dist/crypto.d.ts.map +1 -0
  11. package/dist/crypto.js +19 -0
  12. package/dist/crypto.js.map +1 -0
  13. package/dist/index.d.ts +7 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +7 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/platform.d.ts +35 -0
  18. package/dist/platform.d.ts.map +1 -0
  19. package/dist/platform.js +205 -0
  20. package/dist/platform.js.map +1 -0
  21. package/dist/platformAccessory.d.ts +90 -0
  22. package/dist/platformAccessory.d.ts.map +1 -0
  23. package/dist/platformAccessory.js +912 -0
  24. package/dist/platformAccessory.js.map +1 -0
  25. package/dist/settings.d.ts +52 -0
  26. package/dist/settings.d.ts.map +1 -0
  27. package/dist/settings.js +51 -0
  28. package/dist/settings.js.map +1 -0
  29. package/dist/tsAccessory.d.ts +36 -0
  30. package/dist/tsAccessory.d.ts.map +1 -0
  31. package/dist/tsAccessory.js +65 -0
  32. package/dist/tsAccessory.js.map +1 -0
  33. package/greedevice.jpg +0 -0
  34. package/greemac.jpg +0 -0
  35. package/package.json +51 -23
  36. package/uiconfig.jpg +0 -0
  37. package/.idea/homebridge-gree-ac.iml +0 -12
  38. package/.idea/misc.xml +0 -6
  39. package/.idea/modules.xml +0 -8
  40. package/.idea/vcs.xml +0 -6
  41. package/.idea/workspace.xml +0 -208
  42. package/app/commandEnums.js +0 -135
  43. package/app/deviceFactory.js +0 -306
  44. package/app/encryptionService.js +0 -39
  45. package/example.config.json +0 -28
  46. package/index.js +0 -373
@@ -0,0 +1,205 @@
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.GreeACPlatform = void 0;
7
+ const dgram_1 = __importDefault(require("dgram"));
8
+ const crypto_1 = __importDefault(require("./crypto"));
9
+ const settings_1 = require("./settings");
10
+ const platformAccessory_1 = require("./platformAccessory");
11
+ const tsAccessory_1 = require("./tsAccessory");
12
+ /**
13
+ * HomebridgePlatform
14
+ * This class is the main constructor for your plugin, this is where you should
15
+ * parse the user config and discover/register accessories with Homebridge.
16
+ */
17
+ class GreeACPlatform {
18
+ constructor(log, config, api) {
19
+ this.log = log;
20
+ this.config = config;
21
+ this.api = api;
22
+ this.Service = this.api.hap.Service;
23
+ this.Characteristic = this.api.hap.Characteristic;
24
+ this.handleMessage = (msg, rinfo) => {
25
+ this.log.debug('handleMessage', msg.toString());
26
+ try {
27
+ const message = JSON.parse(msg.toString());
28
+ if (message.i !== 1 || message.t !== 'pack') {
29
+ this.log.debug('handleMessage - unknown response');
30
+ return;
31
+ }
32
+ const pack = crypto_1.default.decrypt(message.pack);
33
+ this.log.debug('handleMessage - Package -> %j', pack);
34
+ if (pack.t === 'dev') {
35
+ this.registerDevice({
36
+ ...pack,
37
+ address: rinfo.address,
38
+ port: rinfo.port,
39
+ });
40
+ }
41
+ }
42
+ catch (err) {
43
+ this.log.error('handleMessage', err);
44
+ }
45
+ };
46
+ this.registerDevice = (deviceInfo) => {
47
+ var _a, _b;
48
+ const devcfg = this.config.devices.find((item) => item.mac === deviceInfo.mac) || {};
49
+ const deviceConfig = {
50
+ ...devcfg,
51
+ ...((devcfg.speedSteps && devcfg.speedSteps !== 3 && devcfg.speedSteps !== 5) || devcfg.speedSteps === 0 ?
52
+ { speedSteps: 5 } : {}),
53
+ ...((devcfg.temperatureSensor && ['disabled', 'child', 'separate'].includes(devcfg.temperatureSensor.toLowerCase())) ?
54
+ { temperatureSensor: devcfg.temperatureSensor.toLowerCase() } : { temperatureSensor: 'disabled' }),
55
+ ...(devcfg.minimumTargetTemperature && (devcfg.minimumTargetTemperature < settings_1.DEFAULT_DEVICE_CONFIG.minimumTargetTemperature ||
56
+ devcfg.minimumTargetTemperature > settings_1.DEFAULT_DEVICE_CONFIG.maximumTargetTemperature) ?
57
+ { minimumTargetTemperature: settings_1.DEFAULT_DEVICE_CONFIG.minimumTargetTemperature } : {}),
58
+ ...(devcfg.maximumTargetTemperature && (devcfg.maximumTargetTemperature < settings_1.DEFAULT_DEVICE_CONFIG.minimumTargetTemperature ||
59
+ devcfg.maximumTargetTemperature > settings_1.DEFAULT_DEVICE_CONFIG.maximumTargetTemperature) ?
60
+ { maximumTargetTemperature: settings_1.DEFAULT_DEVICE_CONFIG.maximumTargetTemperature } : {}),
61
+ };
62
+ Object.entries(settings_1.DEFAULT_DEVICE_CONFIG).forEach(([key, value]) => {
63
+ if (deviceConfig[key] === undefined) {
64
+ deviceConfig[key] = value;
65
+ }
66
+ });
67
+ let accessory = this.devices[deviceInfo.mac];
68
+ let accessory_ts = this.devices[deviceInfo.mac + '_ts'];
69
+ if ((deviceConfig === null || deviceConfig === void 0 ? void 0 : deviceConfig.disabled) || !/^[a-f0-9]{12}$/.test(deviceConfig.mac)) {
70
+ if (!this.skippedDevices[deviceInfo.mac]) {
71
+ this.log.info(`accessory ${deviceInfo.mac} skipped`);
72
+ this.skippedDevices[deviceInfo.mac] = true;
73
+ }
74
+ if (accessory) {
75
+ this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
76
+ delete this.devices[deviceConfig.mac];
77
+ }
78
+ if (accessory_ts) {
79
+ this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory_ts]);
80
+ delete this.devices[deviceConfig.mac + '_ts'];
81
+ }
82
+ return;
83
+ }
84
+ if (accessory && this.initializedDevices[accessory.UUID]) {
85
+ // already initalized
86
+ return;
87
+ }
88
+ if (!accessory) {
89
+ const deviceName = (_a = deviceConfig === null || deviceConfig === void 0 ? void 0 : deviceConfig.name) !== null && _a !== void 0 ? _a : (deviceInfo.name || deviceInfo.mac);
90
+ this.log.debug(`Initializing new accessory ${deviceInfo.mac} with name ${deviceName}...`);
91
+ const uuid = this.api.hap.uuid.generate(deviceInfo.mac);
92
+ accessory = new this.api.platformAccessory(deviceName, uuid, 21 /* Categories.AIR_CONDITIONER */);
93
+ this.devices[deviceInfo.mac] = accessory;
94
+ this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory]);
95
+ }
96
+ if (!accessory_ts && deviceConfig.temperatureSensor === 'separate') {
97
+ const deviceName_ts = 'Temperature Sensor - ' + ((_b = deviceConfig === null || deviceConfig === void 0 ? void 0 : deviceConfig.name) !== null && _b !== void 0 ? _b : (deviceInfo.name || deviceInfo.mac));
98
+ this.log.debug(`Initializing new accessory ${deviceInfo.mac} with name ${deviceName_ts}...`);
99
+ const uuid = this.api.hap.uuid.generate(deviceInfo.mac + '_ts');
100
+ accessory_ts = new this.api.platformAccessory(deviceName_ts, uuid, 10 /* Categories.SENSOR */);
101
+ this.devices[deviceInfo.mac + '_ts'] = accessory_ts;
102
+ this.api.registerPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory_ts]);
103
+ }
104
+ if (accessory_ts && deviceConfig.temperatureSensor !== 'separate') {
105
+ this.api.unregisterPlatformAccessories(settings_1.PLUGIN_NAME, settings_1.PLATFORM_NAME, [accessory_ts]);
106
+ delete this.devices[deviceConfig.mac + '_ts'];
107
+ }
108
+ let tsService;
109
+ if (accessory_ts && deviceConfig.temperatureSensor === 'separate') {
110
+ // mark temperature sensor devices as initialized
111
+ accessory_ts.context.device = deviceInfo;
112
+ accessory_ts.context.deviceType = 'TemperatureSensor';
113
+ this.initializedDevices[accessory_ts.UUID] = true;
114
+ tsService = new tsAccessory_1.GreeAirConditionerTS(this, accessory_ts, deviceConfig);
115
+ }
116
+ if (accessory) {
117
+ // mark devices as initialized
118
+ accessory.context.device = deviceInfo;
119
+ accessory.context.deviceType = 'HeaterCooler';
120
+ this.initializedDevices[accessory.UUID] = true;
121
+ return new platformAccessory_1.GreeAirConditioner(this, accessory, deviceConfig, this.config.port, tsService);
122
+ }
123
+ };
124
+ this.socket = dgram_1.default.createSocket({ type: 'udp4', reuseAddr: true });
125
+ this.devices = {};
126
+ this.initializedDevices = {};
127
+ this.skippedDevices = {};
128
+ this.scanCount = 0;
129
+ this.log.debug('Finished initializing platform:', this.config.name);
130
+ // When this event is fired it means Homebridge has restored all cached accessories from disk.
131
+ // Dynamic Platform plugins should only register new accessories after this event was fired,
132
+ // in order to ensure they weren't added to homebridge already. This event can also be used
133
+ // to start discovery of new accessories.
134
+ this.api.on('didFinishLaunching', () => {
135
+ log.debug('Executed didFinishLaunching callback');
136
+ this.socket.on('message', this.handleMessage);
137
+ // run the method to discover / register your devices as accessories
138
+ this.discoverDevices();
139
+ });
140
+ }
141
+ /**
142
+ * This function is invoked when homebridge restores cached accessories from disk at startup.
143
+ * It should be used to setup event handlers for characteristics and update respective values.
144
+ */
145
+ configureAccessory(accessory) {
146
+ var _a;
147
+ this.log.debug('Loading accessory from cache: ', accessory.displayName, accessory.context.device);
148
+ // add the restored accessory to the accessories cache so we can track if it has already been registered
149
+ if ((_a = accessory.context.device) === null || _a === void 0 ? void 0 : _a.mac) {
150
+ if (accessory.context.deviceType === undefined || accessory.context.deviceType === 'HeaterCooler') {
151
+ // this is the main accessory
152
+ this.devices[accessory.context.device.mac] = accessory;
153
+ }
154
+ if (accessory.context.deviceType === 'TemperatureSensor') {
155
+ // this is the temperature sensor
156
+ this.devices[accessory.context.device.mac + '_ts'] = accessory;
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * Accessories must only be registered once, previously created accessories
162
+ * must not be registered again to prevent "duplicate UUID" errors.
163
+ */
164
+ discoverDevices() {
165
+ if (this.config.port !== undefined && typeof this.config.port === 'number' && this.config.port === this.config.port &&
166
+ this.config.port >= 0 && this.config.port <= 65535) {
167
+ this.socket.bind(this.config.port, () => {
168
+ this.log.info(`UDP server bind to port ${this.config.port}`);
169
+ this.socket.setBroadcast(true);
170
+ this.timer = setInterval(() => {
171
+ this.scanCount += 1;
172
+ if (this.scanCount > this.config.scanCount && this.timer) {
173
+ this.log.info('Scan finished.');
174
+ clearInterval(this.timer);
175
+ this.socket.close();
176
+ // remove accessories not found on network
177
+ Object.entries(this.devices).forEach(([key, value]) => {
178
+ if (!this.initializedDevices[value.UUID]) {
179
+ this.log.debug('Cleanup -> Remove', value.displayName, key, value.UUID);
180
+ delete this.config.devices[key];
181
+ }
182
+ });
183
+ }
184
+ else {
185
+ this.broadcastScan();
186
+ }
187
+ }, this.config.scanTimeout * 1000); // scanTimeout in seconds
188
+ });
189
+ }
190
+ else {
191
+ this.log.warn('Warning: Port is missing or misconfigured');
192
+ }
193
+ }
194
+ broadcastScan() {
195
+ const message = Buffer.from(JSON.stringify({ t: 'scan' }));
196
+ this.socket.send(message, 0, message.length, settings_1.UDP_SCAN_PORT, this.config.scanAddress, (error) => {
197
+ this.log.debug(`Broadcast '${message}' ${this.config.scanAddress}:${settings_1.UDP_SCAN_PORT}`);
198
+ if (error) {
199
+ this.log.error('broadcastScan', error.message);
200
+ }
201
+ });
202
+ }
203
+ }
204
+ exports.GreeACPlatform = GreeACPlatform;
205
+ //# 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,90 @@
1
+ import { PlatformAccessory, CharacteristicValue } from 'homebridge';
2
+ import { GreeACPlatform } from './platform';
3
+ import { DeviceConfig } from './settings';
4
+ import { GreeAirConditionerTS } from './tsAccessory';
5
+ /**
6
+ * Platform Accessory
7
+ * An instance of this class is created for each accessory your platform registers
8
+ * Each accessory may expose multiple services of different service types.
9
+ */
10
+ export declare class GreeAirConditioner {
11
+ private readonly platform;
12
+ private readonly accessory;
13
+ private readonly deviceConfig;
14
+ private readonly port;
15
+ private readonly platform_ts;
16
+ private HeaterCooler;
17
+ private TemperatureSensor;
18
+ private socket;
19
+ private key;
20
+ private cols;
21
+ private bound;
22
+ private status;
23
+ private updateTimer;
24
+ constructor(platform: GreeACPlatform, accessory: PlatformAccessory, deviceConfig: DeviceConfig, port: number, platform_ts: GreeAirConditionerTS);
25
+ /**
26
+ * Handle "SET" requests from HomeKit
27
+ * These are sent when the user changes the state of an accessory
28
+ */
29
+ setActive(value: CharacteristicValue): Promise<void>;
30
+ setTargetHeaterCoolerState(value: CharacteristicValue): Promise<void>;
31
+ setTargetTemperature(value: CharacteristicValue): Promise<void>;
32
+ setTemperatureDisplayUnits(value: CharacteristicValue): Promise<void>;
33
+ setSwingMode(value: CharacteristicValue): Promise<void>;
34
+ setRotationSpeed(value: CharacteristicValue): Promise<void>;
35
+ /**
36
+ * Handle the "GET" requests from HomeKit
37
+ * These are sent when HomeKit wants to know the current state of the accessory
38
+ *
39
+ * GET requests should return as fast as possbile. A long delay here will result in
40
+ * HomeKit being unresponsive and a bad user experience in general.
41
+ *
42
+ * If your device takes time to respond you should update the status of your device
43
+ * asynchronously instead using the `updateCharacteristic` method instead.
44
+
45
+ * @example
46
+ * this.service.updateCharacteristic(this.platform.Characteristic.On, true)
47
+
48
+ * if you need to return an error to show the device as "Not Responding" in the Home app:
49
+ * throw new this.platform.api.hap.HapStatusError(this.platform.api.hap.HAPStatus.SERVICE_COMMUNICATION_FAILURE);
50
+ */
51
+ getActive(): Promise<CharacteristicValue>;
52
+ getCurrentHeaterCoolerState(): Promise<CharacteristicValue>;
53
+ getTargetHeaterCoolerState(): Promise<CharacteristicValue>;
54
+ getCurrentTemperature(service: string): Promise<CharacteristicValue>;
55
+ getTargetTemperature(target: string): Promise<CharacteristicValue>;
56
+ getTemperatureDisplayUnits(): Promise<CharacteristicValue>;
57
+ getSwingMode(): Promise<CharacteristicValue>;
58
+ getRotationSpeed(): Promise<CharacteristicValue>;
59
+ initThresholdTemperature(HeaterCoolerState: number): void;
60
+ getDeviceLabel(): string;
61
+ getCols(): string[];
62
+ getKeyName(obj: any, value: any, subkey?: any): string;
63
+ calcDeviceTargetTemp(temp: number): number;
64
+ calcDeviceTargetOffset(temp: number): number;
65
+ getTargetTempFromDevice(temp: any, offset: any): number;
66
+ get power(): boolean;
67
+ set power(value: boolean);
68
+ get mode(): any;
69
+ set mode(value: any);
70
+ get currentTemperature(): number;
71
+ get targetTemperature(): number;
72
+ set targetTemperature(value: number);
73
+ get units(): any;
74
+ set units(value: any);
75
+ get swingMode(): any;
76
+ set swingMode(value: any);
77
+ get speed(): any;
78
+ set speed(value: any);
79
+ get quietMode(): any;
80
+ set quietMode(value: any);
81
+ get powerfulMode(): any;
82
+ set powerfulMode(value: any);
83
+ updateStatus(props: string[]): void;
84
+ handleMessage: (msg: any, rinfo: any) => void;
85
+ sendMessage(message: any): void;
86
+ sendBindRequest(): void;
87
+ sendCommand(cmd: any): void;
88
+ requestDeviceStatus(): void;
89
+ }
90
+ //# sourceMappingURL=platformAccessory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platformAccessory.d.ts","sourceRoot":"","sources":["../src/platformAccessory.ts"],"names":[],"mappings":"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"}