homebridge-midea-platform 1.3.0-beta.4 → 1.3.1-beta.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.
package/.luarc.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "diagnostics.globals": [
3
- "bit"
4
- ]
5
- }
2
+ "diagnostics": {
3
+ "enable": false
4
+ }
5
+ }
@@ -435,6 +435,33 @@
435
435
  "title": "Fan Auto Switch",
436
436
  "description": "Toggles if the fan auto switch is created with the accessory.",
437
437
  "type": "boolean"
438
+ },
439
+ "indoor_units": {
440
+ "title": "Indoor Units",
441
+ "type": "array",
442
+ "items": {
443
+ "type": "object",
444
+ "properties": {
445
+ "addr": {
446
+ "title": "Address",
447
+ "type": "number"
448
+ },
449
+ "name": {
450
+ "title": "Name",
451
+ "type": "string"
452
+ },
453
+ "fanAccessory": {
454
+ "title": "Fan Accessory",
455
+ "description": "Create a separate Fan accessory for this indoor unit.",
456
+ "type": "boolean"
457
+ },
458
+ "swingAccessory": {
459
+ "title": "Swing Accessory",
460
+ "description": "Create a separate swing angle accessory for this indoor unit.",
461
+ "type": "boolean"
462
+ }
463
+ }
464
+ }
438
465
  }
439
466
  }
440
467
  },
@@ -765,7 +792,8 @@
765
792
  "devices[].CC_options.nightLightSwitch",
766
793
  "devices[].CC_options.sleepModeSwitch",
767
794
  "devices[].CC_options.fanSpeedMode",
768
- "devices[].CC_options.fanAutoSwitch"
795
+ "devices[].CC_options.fanAutoSwitch",
796
+ "devices[].CC_options.indoor_units"
769
797
  ]
770
798
  },
771
799
  {
@@ -14,7 +14,7 @@ import { type DeviceInfo, type DeviceType, ParseMessageResult, ProtocolVersion }
14
14
  import { type MessageRequest, MessageType } from './MideaMessage.js';
15
15
  import { type KeyToken, LocalSecurity } from './MideaSecurity.js';
16
16
  export type DeviceAttributeBase = {
17
- [key: string]: number | number[] | string | boolean | boolean[] | Buffer | undefined;
17
+ [key: string]: number | number[] | string | boolean | boolean[] | Buffer | object | undefined;
18
18
  };
19
19
  export default abstract class MideaDevice extends EventEmitter {
20
20
  protected readonly logger: Logger;
@@ -11,7 +11,7 @@ import type { DeviceInfo } from '../../core/MideaConstants.js';
11
11
  import MideaDevice, { type DeviceAttributeBase } from '../../core/MideaDevice.js';
12
12
  import type { MessageRequest } from '../../core/MideaMessage.js';
13
13
  import type { Config, DeviceConfig } from '../../platformUtils.js';
14
- import { FanSpeed, HeatStatus, MessageSet, Mode, PurifierMode, SwingAngle } from './MideaCCMessage.js';
14
+ import { FanSpeed, HeatStatus, type IndoorUnitStatus, MessageSet, Mode, PurifierMode, SwingAngle } from './MideaCCMessage.js';
15
15
  export interface CCAttributes extends DeviceAttributeBase {
16
16
  POWER: boolean;
17
17
  MODE: Mode;
@@ -35,11 +35,14 @@ export interface CCAttributes extends DeviceAttributeBase {
35
35
  export default class MideaCCDevice extends MideaDevice {
36
36
  attributes: CCAttributes;
37
37
  private _is_fe_format;
38
+ get is_fe_format(): boolean;
39
+ indoor_units: IndoorUnitStatus[];
38
40
  constructor(logger: Logger, device_info: DeviceInfo, config: Config, deviceConfig: DeviceConfig);
39
41
  build_query(): MessageRequest[];
40
42
  process_message(msg: Buffer): void;
41
43
  set_subtype(): void;
42
44
  make_message_set(): MessageSet;
43
45
  private _make_fe_controls;
46
+ set_unit_attribute(addr: number, attributes: Partial<Omit<IndoorUnitStatus, 'addr' | 'room_temperature'>>): Promise<void>;
44
47
  set_attribute(attributes: Partial<CCAttributes>): Promise<void>;
45
48
  }
@@ -7,11 +7,16 @@
7
7
  *
8
8
  */
9
9
  import MideaDevice from '../../core/MideaDevice.js';
10
- import { ControlId, FanSpeed, FE_FAN_TO_BYTE, FE_MODE_TO_BYTE, HeatStatus, MessageCCResponse, MessageFEControl, MessageQuery, MessageSet, Mode, PurifierMode, SwingAngle, } from './MideaCCMessage.js';
10
+ import { FanSpeed, HeatStatus, MessageCCResponse, MessageFEControl, MessageQuery, MessageSet, Mode, PurifierMode, SwingAngle, } from './MideaCCMessage.js';
11
11
  export default class MideaCCDevice extends MideaDevice {
12
12
  attributes;
13
13
  // Set once a TLV/FE-format response is received; selects the VRF control path.
14
14
  _is_fe_format = false;
15
+ get is_fe_format() {
16
+ return this._is_fe_format;
17
+ }
18
+ // Per-indoor-unit status, populated from FE branch responses.
19
+ indoor_units = [];
15
20
  constructor(logger, device_info, config, deviceConfig) {
16
21
  super(logger, device_info, config, deviceConfig);
17
22
  this.attributes = {
@@ -59,6 +64,12 @@ export default class MideaCCDevice extends MideaDevice {
59
64
  this.attributes[status] = value;
60
65
  }
61
66
  }
67
+ // Update per-unit status from FE branch responses.
68
+ const mcsUnits = message.get_body_attribute('mcs_units');
69
+ if (mcsUnits !== undefined) {
70
+ this.indoor_units = mcsUnits;
71
+ changed.mcs_units = mcsUnits;
72
+ }
62
73
  if (Object.keys(changed).length > 0) {
63
74
  this.update(changed);
64
75
  }
@@ -86,48 +97,48 @@ export default class MideaCCDevice extends MideaDevice {
86
97
  _make_fe_controls(attributes) {
87
98
  const controls = [];
88
99
  for (const [k, v] of Object.entries(attributes)) {
89
- switch (k) {
90
- case 'POWER':
91
- controls.push([ControlId.POWER, v ? 1 : 0]);
92
- break;
93
- case 'MODE':
94
- controls.push([ControlId.MODE, FE_MODE_TO_BYTE[v] ?? 0x05]);
95
- break;
96
- case 'TARGET_TEMPERATURE':
97
- controls.push([ControlId.TARGET_TEMPERATURE, Math.round(v * 2) + 80]);
98
- break;
99
- case 'FAN_SPEED':
100
- controls.push([ControlId.FAN_SPEED, FE_FAN_TO_BYTE[v] ?? 0x08]);
101
- break;
102
- case 'VERTICAL_SWING_ANGLE':
103
- controls.push([ControlId.SWING_VERTICAL, v]);
104
- break;
105
- case 'HORIZONTAL_SWING_ANGLE':
106
- controls.push([ControlId.SWING_HORIZONTAL, v]);
107
- break;
108
- case 'ECO_MODE':
109
- controls.push([ControlId.ECO_MODE, v ? 1 : 0]);
110
- break;
111
- case 'SILENT_MODE':
112
- controls.push([ControlId.SILENT_MODE, v ? 1 : 0]);
113
- break;
114
- case 'SLEEP_MODE':
115
- controls.push([ControlId.SLEEP_MODE, v ? 1 : 0]);
116
- break;
117
- case 'NIGHT_LIGHT':
118
- controls.push([ControlId.NIGHT_LIGHT, v ? 1 : 0]);
119
- break;
120
- case 'AUX_HEAT_MODE': {
121
- const byte = v === HeatStatus.On ? 1 : v === HeatStatus.Off ? 2 : 0;
122
- controls.push([ControlId.AUX_HEAT_MODE, byte]);
123
- break;
100
+ controls.push({ kind: k, value: v });
101
+ }
102
+ return controls;
103
+ }
104
+ async set_unit_attribute(addr, attributes) {
105
+ if (!this._is_fe_format) {
106
+ this.logger.warn(`[${this.name}] Per-unit control requires FE format device`);
107
+ return;
108
+ }
109
+ try {
110
+ const controls = [];
111
+ for (const [k, v] of Object.entries(attributes)) {
112
+ switch (k) {
113
+ case 'power':
114
+ controls.push({ kind: 'CTRL_POWER', addr, value: v });
115
+ break;
116
+ case 'mode':
117
+ controls.push({ kind: 'CTRL_MODE', addr, value: v });
118
+ break;
119
+ case 'fan_speed':
120
+ controls.push({ kind: 'CTRL_WIND_SPEED', addr, value: v });
121
+ break;
122
+ case 'target_temperature':
123
+ controls.push({ kind: 'CTRL_TEMP', addr, value: v });
124
+ break;
125
+ case 'vertical_swing_angle':
126
+ controls.push({ kind: 'CTRL_LOUVER_VERTICAL', addr, value: v });
127
+ break;
128
+ case 'horizontal_swing_angle':
129
+ controls.push({ kind: 'CTRL_LOUVER_HORIZONTAL', addr, value: v });
130
+ break;
124
131
  }
125
- case 'PURIFIER_MODE':
126
- controls.push([ControlId.PURIFIER_MODE, v]);
127
- break;
128
132
  }
133
+ if (controls.length <= 1)
134
+ return; // only CTRL_ADDR, no actual controls
135
+ this.logger.debug(`[${this.name}] Unit ${addr} FE controls: ${JSON.stringify(controls)}`);
136
+ await this.build_send(new MessageFEControl(this.device_protocol_version, controls));
137
+ }
138
+ catch (err) {
139
+ const msg = err instanceof Error ? err.stack : err;
140
+ this.logger.debug(`[${this.name}] Error in set_unit_attribute (${this.ip}:${this.port}):\n${msg}`);
129
141
  }
130
- return controls;
131
142
  }
132
143
  async set_attribute(attributes) {
133
144
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"MideaCCDevice.js","sourceRoot":"","sources":["../../../src/devices/cc/MideaCCDevice.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MideaCCDevice.js","sourceRoot":"","sources":["../../../src/devices/cc/MideaCCDevice.ts"],"names":[],"mappings":"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"}
@@ -45,21 +45,103 @@ export declare enum PurifierMode {
45
45
  On = 1,
46
46
  Off = 2
47
47
  }
48
- export declare enum ControlId {
49
- POWER = 0,// power
50
- TARGET_TEMPERATURE = 3,// temperature_current
51
- MODE = 18,// mode_current
52
- FAN_SPEED = 21,// wind_speed_level
53
- SWING_VERTICAL = 28,// swing_louver_vertical_level
54
- SWING_HORIZONTAL = 30,// swing_louver_horizontal_level
55
- ECO_MODE = 40,// eco_status
56
- SILENT_MODE = 42,// idu_silent_status
57
- SLEEP_MODE = 44,// idu_sleep_status
58
- PURIFIER_MODE = 58,// sterilize_status
59
- NIGHT_LIGHT = 64,// idu_light
60
- AUX_HEAT_RUNNING = 65,// ptc_enable
61
- AUX_HEAT_MODE = 67
48
+ export interface IndoorUnitStatus {
49
+ addr: number;
50
+ power: boolean;
51
+ mode: Mode;
52
+ fan_speed: FanSpeed;
53
+ target_temperature: number;
54
+ room_temperature?: number;
55
+ vertical_swing_angle: SwingAngle;
56
+ horizontal_swing_angle: SwingAngle;
62
57
  }
58
+ /**
59
+ * Each variant carries a correctly-typed value. buildTLVSection() handles the
60
+ * wire encoding centrally, so call sites never deal with raw byte math.
61
+ *
62
+ * Per-unit (CTRL_*) variants embed the target unit address — both in the
63
+ * wire value bytes (need_addr fields) and in the variant itself so the caller
64
+ * doesn't need to track it separately. Always precede CTRL_* fields with a
65
+ * CTRL_ADDR field for the same addr.
66
+ */
67
+ export type ControlField = {
68
+ kind: 'POWER';
69
+ value: boolean;
70
+ } | {
71
+ kind: 'TARGET_TEMPERATURE';
72
+ value: number;
73
+ } | {
74
+ kind: 'MODE';
75
+ value: Mode;
76
+ } | {
77
+ kind: 'FAN_SPEED';
78
+ value: FanSpeed;
79
+ } | {
80
+ kind: 'VERTICAL_SWING_ANGLE';
81
+ value: SwingAngle;
82
+ } | {
83
+ kind: 'HORIZONTAL_SWING_ANGLE';
84
+ value: SwingAngle;
85
+ } | {
86
+ kind: 'ECO_MODE';
87
+ value: boolean;
88
+ } | {
89
+ kind: 'SILENT_MODE';
90
+ value: boolean;
91
+ } | {
92
+ kind: 'SLEEP_MODE';
93
+ value: boolean;
94
+ } | {
95
+ kind: 'PURIFIER_MODE';
96
+ value: PurifierMode;
97
+ } | {
98
+ kind: 'NIGHT_LIGHT';
99
+ value: boolean;
100
+ } | {
101
+ kind: 'AUX_HEAT_RUNNING';
102
+ value: boolean;
103
+ } | {
104
+ kind: 'AUX_HEAT_MODE';
105
+ value: HeatStatus;
106
+ } | {
107
+ kind: 'TEMP_FAHRENHEIT';
108
+ value: boolean;
109
+ } | {
110
+ kind: 'TEMPERATURE_PRECISION';
111
+ value: 1 | 0.5;
112
+ } | {
113
+ kind: 'CTRL_ADDR';
114
+ addr: number;
115
+ } | {
116
+ kind: 'CTRL_POWER';
117
+ addr: number;
118
+ value: boolean;
119
+ } | {
120
+ kind: 'CTRL_MODE';
121
+ addr: number;
122
+ value: Mode;
123
+ } | {
124
+ kind: 'CTRL_WIND_SPEED';
125
+ addr: number;
126
+ value: FanSpeed;
127
+ } | {
128
+ kind: 'CTRL_TEMP';
129
+ addr: number;
130
+ value: number;
131
+ } | {
132
+ kind: 'CTRL_LOUVER_VERTICAL';
133
+ addr: number;
134
+ value: SwingAngle;
135
+ } | {
136
+ kind: 'CTRL_LOUVER_HORIZONTAL';
137
+ addr: number;
138
+ value: SwingAngle;
139
+ };
140
+ /**
141
+ * Encode a ControlField into a single TLV section buffer.
142
+ * Field IDs are the key_maps indices from T_0000_CC_10011006_2025033001.lua.
143
+ */
144
+ export declare function buildTLVSection(field: ControlField): Buffer;
63
145
  declare abstract class MessageCCBase extends MessageRequest {
64
146
  constructor(device_protocol_version: number, message_type: MessageType, body_type: number);
65
147
  }
@@ -83,31 +165,26 @@ export declare class MessageSet extends MessageCCBase {
83
165
  constructor(device_protocol_version: number);
84
166
  get _body(): Buffer;
85
167
  }
86
- export declare const FE_MODE_TO_BYTE: Partial<Record<Mode, number>>;
87
- export declare const FE_FAN_TO_BYTE: Partial<Record<FanSpeed, number>>;
88
168
  /**
89
169
  * Control message for 0xFE VRF panel controllers (86X Controller).
90
170
  *
91
- * Sends a list of (CCControlId, value) pairs as TLV key-value sections,
92
- * followed by an incrementing message id and CRC8-854. Protocol reverse-
93
- * engineered by the msmart-ng project (https://github.com/mill1000/midea-ac-py).
171
+ * Each ControlField is encoded into a TLV section by buildTLVSection(), then
172
+ * the sections are concatenated with an incrementing message id and CRC8.
94
173
  */
95
174
  export declare class MessageFEControl extends MessageRequest {
96
175
  private static _message_id;
97
176
  private readonly _controls;
98
- constructor(device_protocol_version: number, controls: [ControlId, number][]);
177
+ constructor(device_protocol_version: number, controls: ControlField[]);
99
178
  private _next_message_id;
100
179
  get _body(): Buffer;
101
180
  }
102
181
  /**
103
- * Response body for both legacy binary and TLV/FE-format CC devices.
182
+ * Response body for both legacy binary and FE-format CC devices.
104
183
  *
105
184
  * When body[1] === 0xFE the response comes from a 86X Controller (VRF panel)
106
- * using the TLV compact-range format. Fixed byte offsets are derived from the
107
- * 8-byte Format-A header plus contiguous field data starting at idx=0; all
108
- * multi-byte field sizes are sourced from T_0000_CC_10011006_2025033001.lua.
109
- * This approach mirrors midea-local's _parse_fe_body (fixed offsets instead of
110
- * a runtime TLV map).
185
+ * using the compact-range format parsed by parseFEBranch(). The same field-size
186
+ * registry covers both the main controller attributes and the per-unit mcs_idxN
187
+ * blocks, so no hardcoded byte offsets are needed.
111
188
  */
112
189
  export declare class CCGeneralMessageBody extends MessageBody {
113
190
  readonly is_fe_format: boolean;
@@ -129,6 +206,8 @@ export declare class CCGeneralMessageBody extends MessageBody {
129
206
  horizontal_swing_angle: SwingAngle;
130
207
  error_code: number;
131
208
  temp_fahrenheit: boolean;
209
+ mcs_num: number;
210
+ mcs_units: IndoorUnitStatus[];
132
211
  constructor(body: Buffer);
133
212
  private _parse_legacy_body;
134
213
  private _parse_fe_body;