homebridge-melcloud-control 4.7.10 → 4.8.0-beta.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/CHANGELOG.md CHANGED
@@ -24,11 +24,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
24
24
  - For plugin < v4.6.0 use Homebridge UI <= v5.5.0
25
25
  - For plugin >= v4.6.0 use Homebridge UI >= v5.13.0
26
26
 
27
+ # [4.8.0] - (23.02.2026)
28
+
29
+ ## Changes
30
+
31
+ - add support to update room temperature over MQTT or RESTFul, fix [#238](https://github.com/grzegorz914/homebridge-melcloud-control/issues/238)
32
+
27
33
  # [4.7.10] - (19.02.2026)
28
34
 
29
35
  ## Changes
30
36
 
31
37
  - fix [#237](https://github.com/grzegorz914/homebridge-melcloud-control/issues/237)
38
+ - bump dependencies
39
+ - config schema updated
40
+ - redme update
41
+ - cleanup
32
42
 
33
43
  # [4.7.9] - (18.02.2026)
34
44
 
package/README.md CHANGED
@@ -265,6 +265,7 @@
265
265
  | `ataDevices[].inStandbySensor` | This enable `In Standby Mode` sensor to use with HomeKit automations. |
266
266
  | `ataDevices[].connectSensor` | This enable `Connect State` sensor to use with HomeKit automations. |
267
267
  | `ataDevices[].errorSensor` | This enable `Error` sensor to use with HomeKit automations. |
268
+ | `ataDevices[].remoteRoomTemperatureSupport` | This enable support to update `Room Temperature` with `MQTT` or `RESTFul`. |
268
269
  | `ataDevices[].frostProtectionSupport` | This enable extra `Frost Protection` control and sensors to use with HomeKit automations. |
269
270
  | `ataDevices[].overheatProtectionSupport` | This enable extra `Overheat Protection` control and sensors to use with HomeKit automations. |
270
271
  | `ataDevices[].holidayModeSupport` | This enable extra `Holiday Mode` control and sensors to use with HomeKit automations. |
@@ -399,6 +400,7 @@
399
400
  | | `http//ip:port` | `OverheatProtection` | `true`, `false` | boolean | Overheat protection (Only MELCloud Home). |
400
401
  | | `http//ip:port` | `Schedules` | `true`, `false` | boolean | Schedules (Only MELCloud Home). |
401
402
  | | `http//ip:port` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
403
+ | | `http//ip:port` | `RemoteRoomTemperature` | `23.0` | float | Remote room temperature. |
402
404
  | Heat Pump | | | | | |
403
405
  | POST | `http//ip:port` | `Power` | `true`, `false` | boolean | Power state. |
404
406
  | | `http//ip:port` | `OperationModeZone1` | `0 - Heat Room`, `1 - Heat Flow`, `2 - Heat Curve`, `3 - Cool Room`, `4 - Cool Flow`, `5 - Flor Dry Up` | integer | Operating mode zone 1. |
@@ -456,6 +458,7 @@
456
458
  | | `Set` | `OverheatProtection` | `true`, `false` | boolean | Overheat protection (Only MELCloud Home). |
457
459
  | | `Set` | `Schedules` | `true`, `false` | boolean | Schedules (Only MELCloud Home). |
458
460
  | | `Set` | `HolidayMode` | `true`, `false` | boolean | Holiday mode. |
461
+ | | `Set` | `RemoteRoomTemperature` | `23.0` | float | Remote room temperature. |
459
462
  | Heat Pump | | | | | |
460
463
  | Subscribe | `Set` | `Power` | `true`, `false` | boolean | Power state. |
461
464
  | | `Set` | `OperationModeZone1` | `0 - Heat Room`, `1 - Heat Flow`, `2 - Heat Curve`, `3 - Cool Room`, `4 - Cool Flow`, `5 - Flor Dry Up` | integer | Operating mode zone 1. |
@@ -411,6 +411,11 @@
411
411
  "functionBody": "return model.accounts[arrayIndices[0]].type === 'melcloudhome';"
412
412
  }
413
413
  },
414
+ "remoteRoomTemperatureSupport": {
415
+ "title": "Remote Room Temperature",
416
+ "type": "boolean",
417
+ "description": "This enable support to update room temperature with MQTT or RESTFul."
418
+ },
414
419
  "presets": {
415
420
  "title": "Presets",
416
421
  "type": "array",
@@ -2646,7 +2651,8 @@
2646
2651
  "items": [
2647
2652
  "accounts[].ataDevices[].frostProtectionSupport",
2648
2653
  "accounts[].ataDevices[].overheatProtectionSupport",
2649
- "accounts[].ataDevices[].holidayModeSupport"
2654
+ "accounts[].ataDevices[].holidayModeSupport",
2655
+ "accounts[].ataDevices[].remoteRoomTemperatureSupport"
2650
2656
  ]
2651
2657
  },
2652
2658
  {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.7.10",
4
+ "version": "4.8.0-beta.0",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
@@ -39,7 +39,7 @@
39
39
  "mqtt": "^5.15.0",
40
40
  "axios": "^1.13.5",
41
41
  "express": "^5.2.1",
42
- "puppeteer": "^24.37.3",
42
+ "puppeteer": "^24.37.5",
43
43
  "ws": "^8.19.0"
44
44
  },
45
45
  "keywords": [
package/src/deviceata.js CHANGED
@@ -43,6 +43,7 @@ class DeviceAta extends EventEmitter {
43
43
  this.frostProtectionSupport = device.frostProtectionSupport || false;
44
44
  this.overheatProtectionSupport = device.overheatProtectionSupport || false;
45
45
  this.holidayModeSupport = device.holidayModeSupport || false;
46
+ this.remoteRoomTemperatureSupport = device.remoteRoomTemperatureSupport || false;
46
47
  this.presets = presets;
47
48
  this.schedules = schedules;
48
49
  this.scenes = scenes;
@@ -104,6 +105,7 @@ class DeviceAta extends EventEmitter {
104
105
  this.displayDeviceInfo = true;
105
106
  this.deviceData = {};
106
107
  this.accessory = {};
108
+ this.remoteRoomTemperature = 20;
107
109
  }
108
110
 
109
111
  async externalIntegrations() {
@@ -260,6 +262,9 @@ class DeviceAta extends EventEmitter {
260
262
  payload.enabled = value;
261
263
  flag = 'holidaymode';
262
264
  break;
265
+ case 'RemoteRoomTemperature':
266
+ this.remoteRoomTemperature = value;
267
+ return;
263
268
  default:
264
269
  this.emit('warn', `${integration}, received key: ${key}, value: ${value}`);
265
270
  return;
@@ -1456,6 +1461,7 @@ class DeviceAta extends EventEmitter {
1456
1461
  })
1457
1462
  .on('deviceState', async (deviceData) => {
1458
1463
  this.deviceData = deviceData;
1464
+ if (this.remoteRoomTemperatureSupport) this.deviceData.Device.RoomTemperature = this.remoteRoomTemperature;
1459
1465
 
1460
1466
  //keys
1461
1467
  const accountTypeMelCloud = this.accountTypeMelCloud;
@@ -1630,7 +1636,8 @@ class DeviceAta extends EventEmitter {
1630
1636
  obj.targetOperationMode = 2;
1631
1637
  break;
1632
1638
  default:
1633
- if (this.logWarn) this.emit('warn', `Unknown operating mode: ${operationMode}`);
1639
+ if (this.logDebug) this.emit('debug', `Unknown operating mode: ${operationMode}`);
1640
+ return;
1634
1641
  }
1635
1642
  obj.currentOperationMode = !power ? 0 : (inStandbyMode ? 1 : obj.currentOperationMode);
1636
1643
 
@@ -1711,8 +1718,8 @@ class DeviceAta extends EventEmitter {
1711
1718
  obj.targetOperationMode = 2;
1712
1719
  break;
1713
1720
  default:
1714
- if (this.logWarn) this.emit('warn', `Unknown operating mode: ${operationMode}`);
1715
- break;
1721
+ if (this.logDebug) this.emit('debug', `Unknown operating mode: ${operationMode}`);
1722
+ return;
1716
1723
  }
1717
1724
 
1718
1725
  obj.currentOperationMode = !power ? 0 : obj.currentOperationMode;
@@ -1737,7 +1744,7 @@ class DeviceAta extends EventEmitter {
1737
1744
  );
1738
1745
  break;
1739
1746
  default:
1740
- if (this.logWarn) this.emit('warn', `Received unknown display type: ${this.displayType}`);
1747
+ if (this.logDebug) this.emit('debug', `Received unknown display type: ${this.displayType}`);
1741
1748
  return;
1742
1749
  };
1743
1750
  this.accessory = obj;
@@ -1749,11 +1756,11 @@ class DeviceAta extends EventEmitter {
1749
1756
  }
1750
1757
 
1751
1758
  //other sensors
1752
- this.roomTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature);
1753
- this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
1754
- this.inStandbyService?.updateCharacteristic(Characteristic.ContactSensorState, inStandbyMode);
1755
- this.connectService?.updateCharacteristic(Characteristic.ContactSensorState, isConnected);
1756
- this.errorService?.updateCharacteristic(Characteristic.ContactSensorState, isInError);
1759
+ if (this.roomTemperatureSensorService) this.roomTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature);
1760
+ if (this.outdoorTemperatureSensorService) this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
1761
+ if (this.inStandbySensor) this.inStandbyService?.updateCharacteristic(Characteristic.ContactSensorState, inStandbyMode);
1762
+ if (this.connectSensor) this.connectService?.updateCharacteristic(Characteristic.ContactSensorState, isConnected);
1763
+ if (this.errorService) this.errorService?.updateCharacteristic(Characteristic.ContactSensorState, isInError);
1757
1764
 
1758
1765
  //frost protection
1759
1766
  if (this.frostProtectionSupport && frostProtectionEnabled !== null) {
package/src/deviceatw.js CHANGED
@@ -2020,7 +2020,7 @@ class DeviceAtw extends EventEmitter {
2020
2020
  };
2021
2021
  break;
2022
2022
  default:
2023
- if (this.logWarn) this.emit('warn', `Received unknown account type: ${this.accountType}`);
2023
+ if (this.logDebug) this.emit('debug', `Received unknown account type: ${this.accountType}`);
2024
2024
  return;
2025
2025
  }
2026
2026
 
@@ -2092,7 +2092,7 @@ class DeviceAtw extends EventEmitter {
2092
2092
  };
2093
2093
  break;
2094
2094
  default:
2095
- if (this.logWarn) this.emit('warn', `Received unknown account type: ${this.accountType}`);
2095
+ if (this.logDebug) this.emit('debug', `Received unknown account type: ${this.accountType}`);
2096
2096
  return;
2097
2097
  }
2098
2098
 
@@ -2102,7 +2102,7 @@ class DeviceAtw extends EventEmitter {
2102
2102
  operationModeSetPropsValidValues = [[0, 1, 2], [0, 1, 2], [1, 2], [0]][heatCoolModes];
2103
2103
  break;
2104
2104
  default:
2105
- if (this.logWarn) this.emit('warn', `Received unknown zone: ${i}`);
2105
+ if (this.logDebug) this.emit('debug', `Received unknown zone: ${i}`);
2106
2106
  return;
2107
2107
  };
2108
2108
 
@@ -2183,7 +2183,7 @@ class DeviceAtw extends EventEmitter {
2183
2183
  };
2184
2184
  break;
2185
2185
  default:
2186
- if (this.logWarn) this.emit('warn', `Received unknown account type: ${this.accountType}`);
2186
+ if (this.logDebug) this.emit('debug', `Received unknown account type: ${this.accountType}`);
2187
2187
  return;
2188
2188
  }
2189
2189
 
@@ -2253,7 +2253,7 @@ class DeviceAtw extends EventEmitter {
2253
2253
  };
2254
2254
  break;
2255
2255
  default:
2256
- if (this.logWarn) this.emit('warn', `Received unknown account type: ${this.accountType}`);
2256
+ if (this.logDebug) this.emit('debug', `Received unknown account type: ${this.accountType}`);
2257
2257
  return;
2258
2258
  }
2259
2259
 
@@ -2262,7 +2262,7 @@ class DeviceAtw extends EventEmitter {
2262
2262
  operationModeSetPropsValidValues = [[1, 2, 3], [1, 2, 3], [1, 2], [0]][heatCoolModes];
2263
2263
  break;
2264
2264
  default:
2265
- if (this.logWarn) this.emit('warn', `Received unknown zone: ${i}`);
2265
+ if (this.logDebug) this.emit('debug', `Received unknown zone: ${i}`);
2266
2266
  return;
2267
2267
  };
2268
2268
 
@@ -2276,7 +2276,7 @@ class DeviceAtw extends EventEmitter {
2276
2276
  );
2277
2277
  break;
2278
2278
  default:
2279
- if (this.logWarn) this.emit('warn', `Received unknown display type: ${this.displayType}`);
2279
+ if (this.logDebug) this.emit('debug', `Received unknown display type: ${this.displayType}`);
2280
2280
  return;
2281
2281
  };
2282
2282
 
@@ -2422,10 +2422,10 @@ class DeviceAtw extends EventEmitter {
2422
2422
  this.accessory = obj;
2423
2423
 
2424
2424
  //other sensors
2425
- this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
2426
- this.inStandbyService?.updateCharacteristic(Characteristic.ContactSensorState, inStandbyMode);
2427
- this.connectService?.updateCharacteristic(Characteristic.ContactSensorState, isConnected);
2428
- this.errorService?.updateCharacteristic(Characteristic.ContactSensorState, isInError);
2425
+ if (this.outdoorTemperatureSensorService) this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
2426
+ if (this.inStandbySensor) this.inStandbyService?.updateCharacteristic(Characteristic.ContactSensorState, inStandbyMode);
2427
+ if (this.connectSensor) this.connectService?.updateCharacteristic(Characteristic.ContactSensorState, isConnected);
2428
+ if (this.errorSensor) this.errorService?.updateCharacteristic(Characteristic.ContactSensorState, isInError);
2429
2429
 
2430
2430
  //frost protection
2431
2431
  if (this.frostProtectionSupport && frostProtectionEnabled !== null) {
@@ -2593,8 +2593,8 @@ class DeviceAtw extends EventEmitter {
2593
2593
  button.state = prohibitZone2;
2594
2594
  break;
2595
2595
  default: //Unknown button
2596
- if (this.logWarn) this.emit('warn', `Received unknown button mode: ${mode} detected`);
2597
- break;
2596
+ if (this.logDebug) this.emit('debug', `Received unknown button mode: ${mode} detected`);
2597
+ return;
2598
2598
  };
2599
2599
 
2600
2600
  //control
package/src/deviceerv.js CHANGED
@@ -1265,7 +1265,7 @@ class DeviceErv extends EventEmitter {
1265
1265
  obj.targetOperationMode = 0; // auto
1266
1266
  break;
1267
1267
  default:
1268
- if (this.logWarn) this.emit('warn', `Received unknown ventilation mode: ${ventilationMode}`);
1268
+ if (this.logDebug) this.emit('debug', `Received unknown ventilation mode: ${ventilationMode}`);
1269
1269
  return;
1270
1270
  }
1271
1271
 
@@ -1333,7 +1333,7 @@ class DeviceErv extends EventEmitter {
1333
1333
  obj.targetOperationMode = 3; // AUTO
1334
1334
  break;
1335
1335
  default:
1336
- if (this.logWarn) this.emit('warn', `Received unknown ventilation mode: ${ventilationMode}`);
1336
+ if (this.logDebug) this.emit('debug', `Received unknown ventilation mode: ${ventilationMode}`);
1337
1337
  return;
1338
1338
  }
1339
1339
 
@@ -1362,7 +1362,7 @@ class DeviceErv extends EventEmitter {
1362
1362
  );
1363
1363
  break;
1364
1364
  default:
1365
- if (this.logWarn) this.emit('warn', `Received unknown display type: ${this.displayType}`);
1365
+ if (this.logDebug) this.emit('debug', `Received unknown display type: ${this.displayType}`);
1366
1366
  return;
1367
1367
  };
1368
1368
 
@@ -1375,9 +1375,9 @@ class DeviceErv extends EventEmitter {
1375
1375
  }
1376
1376
 
1377
1377
  //update temperature sensors
1378
- this.roomTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature);
1379
- this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
1380
- this.supplyTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, supplyTemperature);
1378
+ if (this.roomTemperatureSensorService) this.roomTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, roomTemperature);
1379
+ if (this.outdoorTemperatureSensorService) this.outdoorTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, outdoorTemperature);
1380
+ if (this.supplyTemperatureSensorService) this.supplyTemperatureSensorService?.updateCharacteristic(Characteristic.CurrentTemperature, supplyTemperature);
1381
1381
 
1382
1382
  //update core maintenance
1383
1383
  this.coreMaintenanceService?.updateCharacteristic(Characteristic.FilterChangeIndication, coreMaintenanceRequired);
@@ -1510,7 +1510,7 @@ class DeviceErv extends EventEmitter {
1510
1510
  button.state = (obj.lockPhysicalControl === 1);
1511
1511
  break;
1512
1512
  default: //Unknown button
1513
- if (this.logWarn) this.emit('warn', `Received unknown button mode: ${mode} detected`);
1513
+ if (this.logDebug) this.emit('debug', `Received unknown button mode: ${mode} detected`);
1514
1514
  return;
1515
1515
  };
1516
1516