homebridge-melcloud-control 4.2.1-beta.0 → 4.2.1-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/CHANGELOG.md CHANGED
@@ -22,6 +22,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
22
22
 
23
23
  - Do not use Homebridge UI > v5.5.0 because of break config.json
24
24
 
25
+ ## [4.2.1] - (xx.11.2025)
26
+
27
+ ## Changes
28
+
29
+ - RESTFul and MQTT update for MELCloud Home
30
+ - bump dependencies
31
+ - config schema updated
32
+ - readme updated
33
+ - cleanup
34
+
25
35
  ## [4.2.0] - (13.11.2025)
26
36
 
27
37
  ## Changes
package/README.md CHANGED
@@ -27,14 +27,16 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
27
27
 
28
28
  ### About The Plugin
29
29
 
30
- * All devices are detected automatically.
31
- * Control devices over MELCloud and MELCloud Home.
30
+ * Support devices connected to MELCloud or MELCloud Home.
32
31
  * Support multiple accounts, buildings, floors, areas.
33
32
  * Support temperature display units `Celsius/Fahrenheit`.
34
33
  * Support assing inividual operating mode for `Heat/Cool/Auto`.
35
- * Support direct `Presets` control using extra `Buttons`, switch it to `OFF` restore previous device state.
34
+ * Support direct `Presets` control, only MELCloud.
35
+ * Support direct `Schedules` control, only MELCloud Home.
36
+ * Support direct `Frost protection` control, only MELCloud Home.
37
+ * Support direct `Overheat Protection` control, only MELCloud Home.
38
+ * Support direct `Holiday Mode` control.
36
39
  * Support direct `Functions` control using extra `Buttons`, switch it to `OFF` restore previous device state.
37
- * Support detect all device states using extra `Sensors`.
38
40
  * Support automations, shortcuts and Siri.
39
41
  * Support external integrations, [RESTFul](https://github.com/grzegorz914/homebridge-melcloud-control?tab=readme-ov-file#restful-integration), [MQTT](https://github.com/grzegorz914/homebridge-melcloud-control?tab=readme-ov-file#mqtt-integration).
40
42
  * Control devices over local network You need use ESP module and [Tasmota Control](https://github.com/grzegorz914/homebridge-tasmota-control) plugin.
@@ -368,11 +370,14 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
368
370
  | | `http//ip:port` | `SetTemperature` | `0.0` | float | Room temperature. |
369
371
  | | `http//ip:port` | `DefaultCoolingSetTemperature` | `0.0` | float | Default cooling temperature. |
370
372
  | | `http//ip:port` | `DefaultHeatingSetTemperature` | `0.0` | float | Default heating temperature. |
373
+ | | `http//ip:port` | `FrostProtection` | `true`, `false` | boolean | Frost protectin. |
374
+ | | `http//ip:port` | `OverheatProtection` | `true`, `false` | boolean | Overheat protection. |
375
+ | | `http//ip:port` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
376
+ | | `http//ip:port` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
371
377
  | Heat Pump | | | | | |
372
378
  | POST | `http//ip:port` | `Power` | `true`, `false` | boolean | Power state. |
373
379
  | | `http//ip:port` | `ForcedHotWaterMode` | `true`, `false` | boolean | Force hot water. |
374
380
  | | `http//ip:port` | `EcoHotWater` | `true`, `false` | boolean | Eco hot water. |
375
- | | `http//ip:port` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
376
381
  | | `http//ip:port` | `ProhibitZone1` | `true`, `false` | boolean | Lock control zone 1. |
377
382
  | | `http//ip:port` | `ProhibitZone2` | `true`, `false` | boolean | Lock control zone 2. |
378
383
  | | `http//ip:port` | `ProhibitHotWater` | `true`, `false` | boolean | Lock control hot water. |
@@ -386,6 +391,8 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
386
391
  | | `http//ip:port` | `SetCoolFlowTemperatureZone1` | `0.0` | float | Cool flow temperature zone 1. |
387
392
  | | `http//ip:port` | `SetCoolFlowTemperatureZone2` | `0.0` | float | Cool flow temperature zone 2. |
388
393
  | | `http//ip:port` | `SetTankWaterTemperature` | `0.0` | float | Hot water temperature. |
394
+ | | `http//ip:port` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
395
+ | | `http//ip:port` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
389
396
  | Energy Recovery Ventilation | | | | | |
390
397
  | POST | `http//ip:port` | `Power` | `true`, `false` | boolean | Power state. |
391
398
  | | `http//ip:port` | `NightPurgeMode` | `true`, `false` | boolean | Night purge mode. |
@@ -398,6 +405,8 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
398
405
  | | `http//ip:port` | `SetTemperature` | `0.0` | float | Room temperature. |
399
406
  | | `http//ip:port` | `DefaultCoolingSetTemperature` | `0.0` | float | Default cooling temperature. |
400
407
  | | `http//ip:port` | `DefaultHeatingSetTemperature` | `0.0` | float | Default heating temperature. |
408
+ | | `http//ip:port` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
409
+ | | `http//ip:port` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
401
410
 
402
411
  ### MQTT Integration
403
412
 
@@ -423,11 +432,14 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
423
432
  | | `Set` | `SetTemperature` | `0.0` | float | Room temperature. |
424
433
  | | `Set` | `DefaultCoolingSetTemperature` | `23.0` | float | Default cooling temperature. |
425
434
  | | `Set` | `DefaultHeatingSetTemperature` | `21.0` | float | Default heating temperature. |
435
+ | | `Set` | `FrostProtection` | `true`, `false` | boolean | Frost protectin. |
436
+ | | `Set` | `OverheatProtection` | `true`, `false` | boolean | Overheat protection. |
437
+ | | `Set` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
438
+ | | `Set` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
426
439
  | Heat Pump | | | | | |
427
440
  | Subscribe | `Set` | `Power` | `true`, `false` | boolean | Power state. |
428
441
  | | `Set` | `ForcedHotWaterMode` | `true`, `false` | boolean | Force hot water. |
429
442
  | | `Set` | `EcoHotWater` | `true`, `false` | boolean | Eco hot water. |
430
- | | `Set` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
431
443
  | | `Set` | `ProhibitZone1` | `true`, `false` | boolean | Lock control zone 1. |
432
444
  | | `Set` | `ProhibitZone2` | `true`, `false` | boolean | Lock control zone 2. |
433
445
  | | `Set` | `ProhibitHotWater` | `true`, `false` | boolean | Lock control hot water. |
@@ -441,6 +453,8 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
441
453
  | | `Set` | `SetCoolFlowTemperatureZone1` | `0.0` | float | Cool flow temperature zone 1. |
442
454
  | | `Set` | `SetCoolFlowTemperatureZone2` | `0.0` | float | Cool flow temperature zone 2. |
443
455
  | | `Set` | `SetTankWaterTemperature` | `0.0` | float | Hot water temperature. |
456
+ | | `Set` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
457
+ | | `Set` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
444
458
  | Energy Recovery Ventilation | | | | | |
445
459
  | Subscribe | `Set` | `Power` | `true`, `false` | boolean | Power state. |
446
460
  | | `Set` | `NightPurgeMode` | `true`, `false` | boolean | Night purge mode. |
@@ -453,3 +467,5 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
453
467
  | | `Set` | `SetTemperature` | `0.0` | float | Room temperature. |
454
468
  | | `Set` | `DefaultCoolingSetTemperature` | `23.0` | float | Default cooling temperature. |
455
469
  | | `Set` | `DefaultHeatingSetTemperature` | `21.0` | float | Default heating temperature. |
470
+ | | `Set` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
471
+ | | `Set` | `ScheduleEnabled` | `true`, `false` | boolean | Schedules |
@@ -5,7 +5,7 @@
5
5
  "fixArrays": true,
6
6
  "strictValidation": true,
7
7
  "customUi": true,
8
- "headerDisplay": "This plugin works with Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation connected to MELCloud service. Devices are exposed to HomeKit as separate accessories and each needs to be manually [paired](https://github.com/grzegorz914/homebridge-melcloud-control/wiki#adding-to-homekit).",
8
+ "headerDisplay": "This plugin works with Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation connected to MELCloud and MELCloud Home. Devices are exposed to HomeKit as separate accessories and each needs to be manually [paired](https://github.com/grzegorz914/homebridge-melcloud-control/wiki#adding-to-homekit).",
9
9
  "footerDisplay": "For documentation please see [GitHub repository](https://github.com/grzegorz914/homebridge-melcloud-control).",
10
10
  "schema": {
11
11
  "type": "object",
@@ -506,7 +506,7 @@
506
506
  "title": "Prefix",
507
507
  "type": "boolean",
508
508
  "default": false,
509
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
509
+ "description": "Enable/disable the accessory name as a prefix for preset name.",
510
510
  "condition": {
511
511
  "functionBody": "return model.accounts[arrayIndices[0]].ataDevices[arrayIndices[1]].presets[arrayIndices[2]].displayType > 0;"
512
512
  }
@@ -575,7 +575,7 @@
575
575
  "title": "Prefix",
576
576
  "type": "boolean",
577
577
  "default": false,
578
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
578
+ "description": "Enable/disable the accessory name as a prefix for schedule name.",
579
579
  "condition": {
580
580
  "functionBody": "return model.accounts[arrayIndices[0]].ataDevices[arrayIndices[1]].schedules[arrayIndices[2]].displayType > 0;"
581
581
  }
@@ -1200,7 +1200,7 @@
1200
1200
  "title": "Prefix",
1201
1201
  "type": "boolean",
1202
1202
  "default": false,
1203
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
1203
+ "description": "Enable/disable the accessory name as a prefix for preset name.",
1204
1204
  "condition": {
1205
1205
  "functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].presets[arrayIndices[2]].displayType > 0;"
1206
1206
  }
@@ -1269,7 +1269,7 @@
1269
1269
  "title": "Prefix",
1270
1270
  "type": "boolean",
1271
1271
  "default": false,
1272
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
1272
+ "description": "Enable/disable the accessory name as a prefix for schedule name.",
1273
1273
  "condition": {
1274
1274
  "functionBody": "return model.accounts[arrayIndices[0]].atwDevices[arrayIndices[1]].schedules[arrayIndices[2]].displayType > 0;"
1275
1275
  }
@@ -1676,7 +1676,7 @@
1676
1676
  "title": "Prefix",
1677
1677
  "type": "boolean",
1678
1678
  "default": false,
1679
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
1679
+ "description": "Enable/disable the accessory name as a prefix for preset name.",
1680
1680
  "condition": {
1681
1681
  "functionBody": "return model.accounts[arrayIndices[0]].ervDevices[arrayIndices[1]].presets[arrayIndices[2]].displayType > 0;"
1682
1682
  }
@@ -1745,7 +1745,7 @@
1745
1745
  "title": "Prefix",
1746
1746
  "type": "boolean",
1747
1747
  "default": false,
1748
- "description": "Enable/disable the accessory name as a prefix for button/sensor name.",
1748
+ "description": "Enable/disable the accessory name as a prefix for schedule name.",
1749
1749
  "condition": {
1750
1750
  "functionBody": "return model.accounts[arrayIndices[0]].ervDevices[arrayIndices[1]].schedules[arrayIndices[2]].displayType > 0;"
1751
1751
  }
@@ -1953,7 +1953,7 @@
1953
1953
  "title": "Device Info",
1954
1954
  "type": "boolean",
1955
1955
  "default": true,
1956
- "description": "This enable logging device info by every connections device to the network."
1956
+ "description": "This enable logging device info on plugin start."
1957
1957
  },
1958
1958
  "success": {
1959
1959
  "title": "Log Success",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.2.1-beta.0",
4
+ "version": "4.2.1-beta.2",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
package/src/deviceata.js CHANGED
@@ -205,25 +205,59 @@ class DeviceAta extends EventEmitter {
205
205
  effectiveFlags = AirConditioner.EffectiveFlags.VaneVerticalDirection;
206
206
  break;
207
207
  case 'HideVaneControls':
208
+ if (this.accountType === 'melcloudhome') return;
209
+
208
210
  deviceData[key] = value;
209
211
  effectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
210
212
  break;
211
213
  case 'HideDryModeControl':
214
+ if (this.accountType === 'melcloudhome') return;
215
+
212
216
  deviceData[key] = value;
213
217
  effectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
214
218
  break;
215
219
  case 'ProhibitSetTemperature':
220
+ if (this.accountType === 'melcloudhome') return;
221
+
216
222
  deviceData.Device[key] = value;
217
223
  effectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
218
224
  break;
219
225
  case 'ProhibitOperationMode':
226
+ if (this.accountType === 'melcloudhome') return;
227
+
220
228
  deviceData.Device[key] = value;
221
229
  effectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
222
230
  break;
223
231
  case 'ProhibitPower':
232
+ if (this.accountType === 'melcloudhome') return;
233
+
224
234
  deviceData.Device[key] = value;
225
235
  effectiveFlags = AirConditioner.EffectiveFlags.Prohibit;
226
236
  break;
237
+ case 'FrostProtection':
238
+ if (this.accountType === 'melcloud') return;
239
+
240
+ deviceData.Device[key].Enabled = value;
241
+ effectiveFlags = 'frostprotection';
242
+ break;
243
+ case 'OverheatProtection':
244
+ if (this.accountType === 'melcloud') return;
245
+
246
+ deviceData.Device[key].Enabled = value;
247
+ effectiveFlags = 'overheatprotection';
248
+ break;
249
+ case 'ScheduleEnabled':
250
+ if (this.accountType === 'melcloud') return;
251
+
252
+ deviceData.Device[key].Enabled = value;
253
+ effectiveFlags = 'schedule';
254
+ break;
255
+ case 'HolidayMode':
256
+ if (this.accountType === 'melcloud') return;
257
+
258
+ deviceData.Device[key].Enabled = value;
259
+ effectiveFlags = 'holidaymode';
260
+ break;
227
261
  default:
228
262
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
229
263
  break;
package/src/deviceatw.js CHANGED
@@ -224,22 +224,41 @@ class DeviceAtw extends EventEmitter {
224
224
  deviceData.Device[key] = value;
225
225
  effectiveFlags = HeatPump.EffectiveFlags.EcoHotWater;
226
226
  break;
227
- case 'HolidayMode':
228
- deviceData.Device[key] = value;
229
- effectiveFlags = HeatPump.EffectiveFlags.HolidayMode;
230
- break;
231
227
  case 'ProhibitZone1':
228
+ if (this.accountType === 'melcloudhome') return;
229
+
232
230
  deviceData.Device[key] = value;
233
231
  effectiveFlags = HeatPump.EffectiveFlags.ProhibitZone1;
234
232
  break;
235
233
  case 'ProhibitZone2':
234
+ if (this.accountType === 'melcloudhome') return;
235
+
236
236
  deviceData.Device[key] = value;
237
237
  effectiveFlags = HeatPump.EffectiveFlags.ProhibitZone2;
238
238
  break;
239
239
  case 'ProhibitHotWater':
240
+ if (this.accountType === 'melcloudhome') return;
241
+
240
242
  deviceData.Device[key] = value;
241
243
  effectiveFlags = HeatPump.EffectiveFlags.ProhibitHotWater;
242
244
  break;
245
+ case 'ScheduleEnabled':
246
+ if (this.accountType === 'melcloud') return;
247
+
248
+ deviceData.Device[key].Enabled = value;
249
+ effectiveFlags = 'schedule';
250
+ break;
251
+ case 'HolidayMode':
252
+ if (this.accountType === 'melcloud') {
253
+ deviceData.Device[key] = value;
254
+ effectiveFlags = HeatPump.EffectiveFlags.HolidayMode;
255
+ }
256
+
257
+ if (this.accountType === 'melcloudhome') {
258
+ deviceData.Device[key].Enabled = value;
259
+ effectiveFlags = 'holidaymode';
260
+ }
261
+ break;
243
262
  default:
244
263
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
245
264
  break;
package/src/deviceerv.js CHANGED
@@ -190,6 +190,8 @@ class DeviceErv extends EventEmitter {
190
190
  effectiveFlags = Ventilation.EffectiveFlags.SetTemperature;
191
191
  break;
192
192
  case 'NightPurgeMode':
193
+ if (this.accountType === 'melcloudhome') return;
194
+
193
195
  deviceData.Device[key] = value;
194
196
  effectiveFlags = Ventilation.EffectiveFlags.NightPurgeMode;
195
197
  break;
@@ -198,17 +200,35 @@ class DeviceErv extends EventEmitter {
198
200
  effectiveFlags = Ventilation.EffectiveFlags.SetFanSpeed;
199
201
  break;
200
202
  case 'HideRoomTemperature':
203
+ if (this.accountType === 'melcloudhome') return;
204
+
201
205
  deviceData[key] = value;
202
206
  effectiveFlags = Ventilation.EffectiveFlags.Prohibit;
203
207
  break;
204
208
  case 'HideSupplyTemperature':
209
+ if (this.accountType === 'melcloudhome') return;
210
+
205
211
  deviceData[key] = value;
206
212
  effectiveFlags = Ventilation.EffectiveFlags.Prohibit;
207
213
  break;
208
214
  case 'HideOutdoorTemperature':
215
+ if (this.accountType === 'melcloudhome') return;
216
+
209
217
  deviceData[key] = value;
210
218
  effectiveFlags = Ventilation.EffectiveFlags.Prohibit;
211
219
  break;
220
+ case 'ScheduleEnabled':
221
+ if (this.accountType === 'melcloud') return;
222
+
223
+ deviceData.Device[key].Enabled = value;
224
+ effectiveFlags = 'schedule';
225
+ break;
226
+ case 'HolidayMode':
227
+ if (this.accountType === 'melcloud') return;
228
+
229
+ deviceData.Device[key].Enabled = value;
230
+ effectiveFlags = 'holidaymode';
231
+ break;
212
232
  default:
213
233
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
214
234
  break;