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 +10 -0
- package/README.md +3 -0
- package/config.schema.json +7 -1
- package/package.json +2 -2
- package/src/deviceata.js +16 -9
- package/src/deviceatw.js +13 -13
- package/src/deviceerv.js +7 -7
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. |
|
package/config.schema.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
1715
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
2597
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
1513
|
+
if (this.logDebug) this.emit('debug', `Received unknown button mode: ${mode} detected`);
|
|
1514
1514
|
return;
|
|
1515
1515
|
};
|
|
1516
1516
|
|