homebridge-melcloud-control 4.6.3 → 4.6.4
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 +9 -0
- package/config.schema.json +32 -12
- package/index.js +2 -2
- package/package.json +3 -3
- package/src/deviceata.js +5 -4
- package/src/deviceatw.js +5 -4
- package/src/deviceerv.js +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -24,6 +24,15 @@ 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.6.4] - (10.01.2026)
|
|
28
|
+
|
|
29
|
+
## Changes
|
|
30
|
+
|
|
31
|
+
- config schema updated
|
|
32
|
+
- fix hide log success and dev info
|
|
33
|
+
- bump dependencies
|
|
34
|
+
- cleanup
|
|
35
|
+
|
|
27
36
|
# [4.6.3] - (01.01.2026)
|
|
28
37
|
|
|
29
38
|
## Changes
|
package/config.schema.json
CHANGED
|
@@ -2341,13 +2341,13 @@
|
|
|
2341
2341
|
"description": "This enable MQTT client."
|
|
2342
2342
|
},
|
|
2343
2343
|
"host": {
|
|
2344
|
-
"title": "IP
|
|
2344
|
+
"title": "IP/Hostname",
|
|
2345
2345
|
"type": "string",
|
|
2346
2346
|
"placeholder": "ip or hostname",
|
|
2347
2347
|
"format": "hostname",
|
|
2348
|
-
"description": "Here set the IP
|
|
2348
|
+
"description": "Here set the IP/Hostname of MQTT Broker.",
|
|
2349
2349
|
"condition": {
|
|
2350
|
-
"functionBody": "return model.
|
|
2350
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
|
|
2351
2351
|
}
|
|
2352
2352
|
},
|
|
2353
2353
|
"port": {
|
|
@@ -2356,16 +2356,16 @@
|
|
|
2356
2356
|
"placeholder": 1883,
|
|
2357
2357
|
"description": "Here set the port of MQTT Broker.",
|
|
2358
2358
|
"condition": {
|
|
2359
|
-
"functionBody": "return model.
|
|
2359
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
|
|
2360
2360
|
}
|
|
2361
2361
|
},
|
|
2362
2362
|
"clientId": {
|
|
2363
|
-
"title": "Client
|
|
2363
|
+
"title": "Client ID",
|
|
2364
2364
|
"type": "string",
|
|
2365
2365
|
"placeholder": "client id",
|
|
2366
|
-
"description": "Here optional set the Client
|
|
2366
|
+
"description": "Here optional set the Client ID of MQTT Broker.",
|
|
2367
2367
|
"condition": {
|
|
2368
|
-
"functionBody": "return model.
|
|
2368
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true"
|
|
2369
2369
|
}
|
|
2370
2370
|
},
|
|
2371
2371
|
"prefix": {
|
|
@@ -2374,7 +2374,7 @@
|
|
|
2374
2374
|
"placeholder": "home",
|
|
2375
2375
|
"description": "Here set the prefix.",
|
|
2376
2376
|
"condition": {
|
|
2377
|
-
"functionBody": "return model.
|
|
2377
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
|
|
2378
2378
|
}
|
|
2379
2379
|
},
|
|
2380
2380
|
"auth": {
|
|
@@ -2392,7 +2392,7 @@
|
|
|
2392
2392
|
"placeholder": "user",
|
|
2393
2393
|
"description": "Here set the user of MQTT Broker.",
|
|
2394
2394
|
"condition": {
|
|
2395
|
-
"functionBody": "return model.
|
|
2395
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.auth.enable === true;"
|
|
2396
2396
|
}
|
|
2397
2397
|
},
|
|
2398
2398
|
"passwd": {
|
|
@@ -2402,13 +2402,33 @@
|
|
|
2402
2402
|
"description": "Here set the password of MQTT Broker.",
|
|
2403
2403
|
"format": "password",
|
|
2404
2404
|
"condition": {
|
|
2405
|
-
"functionBody": "return model.
|
|
2405
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.auth.enable === true;"
|
|
2406
2406
|
}
|
|
2407
2407
|
}
|
|
2408
2408
|
},
|
|
2409
2409
|
"condition": {
|
|
2410
|
-
"functionBody": "return model.
|
|
2411
|
-
}
|
|
2410
|
+
"functionBody": "return model.devices[arrayIndices].mqtt.enable === true;"
|
|
2411
|
+
},
|
|
2412
|
+
"allOf": [
|
|
2413
|
+
{
|
|
2414
|
+
"if": {
|
|
2415
|
+
"required": [
|
|
2416
|
+
"enable"
|
|
2417
|
+
],
|
|
2418
|
+
"properties": {
|
|
2419
|
+
"enable": {
|
|
2420
|
+
"const": true
|
|
2421
|
+
}
|
|
2422
|
+
}
|
|
2423
|
+
},
|
|
2424
|
+
"then": {
|
|
2425
|
+
"required": [
|
|
2426
|
+
"user",
|
|
2427
|
+
"passwd"
|
|
2428
|
+
]
|
|
2429
|
+
}
|
|
2430
|
+
}
|
|
2431
|
+
]
|
|
2412
2432
|
}
|
|
2413
2433
|
}
|
|
2414
2434
|
}
|
package/index.js
CHANGED
|
@@ -89,7 +89,7 @@ class MelCloudPlatform {
|
|
|
89
89
|
if (logLevel.warn) log.warn(`Unknown account type: ${account.type}.`);
|
|
90
90
|
return;
|
|
91
91
|
}
|
|
92
|
-
melcloud.on('success', (msg) => log.success(`${name}, ${msg}`))
|
|
92
|
+
melcloud.on('success', (msg) => logLevel.success && log.success(`${name}, ${msg}`))
|
|
93
93
|
.on('info', (msg) => log.info(`${name}, ${msg}`))
|
|
94
94
|
.on('debug', (msg) => log.info(`${name}, debug: ${msg}`))
|
|
95
95
|
.on('warn', (msg) => log.warn(`${name}, ${msg}`))
|
|
@@ -190,7 +190,7 @@ class MelCloudPlatform {
|
|
|
190
190
|
}
|
|
191
191
|
|
|
192
192
|
configuredDevice.on('devInfo', (info) => logLevel.devInfo && log.info(info))
|
|
193
|
-
.on('success', (msg) => log.success(`${name}, ${deviceTypeString}, ${deviceName}, ${msg}`))
|
|
193
|
+
.on('success', (msg) => logLevel.success && log.success(`${name}, ${deviceTypeString}, ${deviceName}, ${msg}`))
|
|
194
194
|
.on('info', (msg) => log.info(`${name}, ${deviceTypeString}, ${deviceName}, ${msg}`))
|
|
195
195
|
.on('debug', (msg) => log.info(`${name}, ${deviceTypeString}, ${deviceName}, debug: ${msg}`))
|
|
196
196
|
.on('warn', (msg) => log.warn(`${name}, ${deviceTypeString}, ${deviceName}, ${msg}`))
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"displayName": "MELCloud Control",
|
|
3
3
|
"name": "homebridge-melcloud-control",
|
|
4
|
-
"version": "4.6.
|
|
4
|
+
"version": "4.6.4",
|
|
5
5
|
"description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "grzegorz914",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"LICENSE"
|
|
32
32
|
],
|
|
33
33
|
"engines": {
|
|
34
|
-
"homebridge": "^1.8.0 || ^2.0.0 || ^2.0.0-beta.
|
|
34
|
+
"homebridge": "^1.8.0 || ^2.0.0 || ^2.0.0-beta.68 || ^2.0.0-alpha.81",
|
|
35
35
|
"node": "^20 || ^22 || ^24 || ^25"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"axios": "^1.13.2",
|
|
41
41
|
"express": "^5.2.1",
|
|
42
42
|
"puppeteer": "^24.34.0",
|
|
43
|
-
"ws": "^8.
|
|
43
|
+
"ws": "^8.19.0"
|
|
44
44
|
},
|
|
45
45
|
"keywords": [
|
|
46
46
|
"homebridge",
|
package/src/deviceata.js
CHANGED
|
@@ -988,7 +988,6 @@ class DeviceAta extends EventEmitter {
|
|
|
988
988
|
this.presetControlServices = [];
|
|
989
989
|
this.presetControlSensorServices = [];
|
|
990
990
|
this.presets.forEach((preset, i) => {
|
|
991
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
992
991
|
|
|
993
992
|
//get name
|
|
994
993
|
const name = preset.name || `Preset ${i}`;
|
|
@@ -1016,6 +1015,8 @@ class DeviceAta extends EventEmitter {
|
|
|
1016
1015
|
switch (state) {
|
|
1017
1016
|
case true:
|
|
1018
1017
|
preset.previousSettings = deviceData.Device;
|
|
1018
|
+
|
|
1019
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
1019
1020
|
deviceData.Device.Power = presetData.Power;
|
|
1020
1021
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
1021
1022
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
@@ -1065,7 +1066,6 @@ class DeviceAta extends EventEmitter {
|
|
|
1065
1066
|
if (this.logDebug) this.emit('debug', `Prepare schedules services`);
|
|
1066
1067
|
this.scheduleSensorServices = [];
|
|
1067
1068
|
this.schedules.forEach((schedule, i) => {
|
|
1068
|
-
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
1069
1069
|
|
|
1070
1070
|
//get name
|
|
1071
1071
|
const name = schedule.name || `Schedule ${i}`;
|
|
@@ -1092,6 +1092,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1092
1092
|
})
|
|
1093
1093
|
.onSet(async (state) => {
|
|
1094
1094
|
try {
|
|
1095
|
+
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
1095
1096
|
deviceData.ScheduleEnabled = state;
|
|
1096
1097
|
if (this.logInfo) this.emit('info', `Schedules: ${state ? 'Enabled' : 'Disabled'}`);
|
|
1097
1098
|
await this.melCloudAta.send(this.accountType, this.displayType, deviceData, 'schedule', scheduleData);
|
|
@@ -1140,7 +1141,6 @@ class DeviceAta extends EventEmitter {
|
|
|
1140
1141
|
this.sceneControlServices = [];
|
|
1141
1142
|
this.sceneControlSensorServices = [];
|
|
1142
1143
|
this.scenes.forEach((scene, i) => {
|
|
1143
|
-
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
1144
1144
|
|
|
1145
1145
|
//get preset name
|
|
1146
1146
|
const name = scene.name || `Scene ${i}`;
|
|
@@ -1165,6 +1165,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1165
1165
|
})
|
|
1166
1166
|
.onSet(async (state) => {
|
|
1167
1167
|
try {
|
|
1168
|
+
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
1168
1169
|
sceneData.Enabled = state;
|
|
1169
1170
|
if (this.logInfo) this.emit('info', `Scene ${name}: ${state ? 'Set' : 'Unset'}`);
|
|
1170
1171
|
await this.melCloudAta.send(this.accountType, this.displayType, deviceData, 'scene', sceneData);
|
|
@@ -1816,7 +1817,7 @@ class DeviceAta extends EventEmitter {
|
|
|
1816
1817
|
//presets
|
|
1817
1818
|
if (this.presets.length > 0) {
|
|
1818
1819
|
this.presets.forEach((preset, i) => {
|
|
1819
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
1820
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
1820
1821
|
if (!presetData) return;
|
|
1821
1822
|
|
|
1822
1823
|
const characteristicType = preset.characteristicType;
|
package/src/deviceatw.js
CHANGED
|
@@ -1221,7 +1221,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
1221
1221
|
this.presetControlServices = [];
|
|
1222
1222
|
this.presetControlSensorServices = [];
|
|
1223
1223
|
this.presets.forEach((preset, i) => {
|
|
1224
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
1225
1224
|
|
|
1226
1225
|
//get name
|
|
1227
1226
|
const name = preset.name || `Preset ${i}`;
|
|
@@ -1249,6 +1248,8 @@ class DeviceAtw extends EventEmitter {
|
|
|
1249
1248
|
switch (state) {
|
|
1250
1249
|
case true:
|
|
1251
1250
|
preset.previousSettings = deviceData.Device;
|
|
1251
|
+
|
|
1252
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
1252
1253
|
deviceData.Device.Power = presetData.Power;
|
|
1253
1254
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
1254
1255
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
@@ -1298,7 +1299,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
1298
1299
|
if (this.logDebug) this.emit('debug', `Prepare schedules services`);
|
|
1299
1300
|
this.scheduleSensorServices = [];
|
|
1300
1301
|
this.schedules.forEach((schedule, i) => {
|
|
1301
|
-
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
1302
1302
|
|
|
1303
1303
|
//get name
|
|
1304
1304
|
const name = schedule.name || `Schedule ${i}`;
|
|
@@ -1325,6 +1325,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1325
1325
|
})
|
|
1326
1326
|
.onSet(async (state) => {
|
|
1327
1327
|
try {
|
|
1328
|
+
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
1328
1329
|
deviceData.ScheduleEnabled = state;
|
|
1329
1330
|
if (this.logInfo) this.emit('info', `Schedules: ${state ? 'Enabled' : 'Disabled'}`);
|
|
1330
1331
|
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, 'schedule', scheduleData);
|
|
@@ -1373,7 +1374,6 @@ class DeviceAtw extends EventEmitter {
|
|
|
1373
1374
|
this.sceneControlServices = [];
|
|
1374
1375
|
this.sceneControlSensorServices = [];
|
|
1375
1376
|
this.scenes.forEach((scene, i) => {
|
|
1376
|
-
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
1377
1377
|
|
|
1378
1378
|
//get name
|
|
1379
1379
|
const name = scene.name || `Scens ${i}`;
|
|
@@ -1398,6 +1398,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
1398
1398
|
})
|
|
1399
1399
|
.onSet(async (state) => {
|
|
1400
1400
|
try {
|
|
1401
|
+
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
1401
1402
|
sceneData.Enabled = state;
|
|
1402
1403
|
if (this.logInfo) this.emit('info', `Scene ${name}: ${state ? 'Set' : 'Unset'}`);
|
|
1403
1404
|
await this.melCloudAtw.send(this.accountType, this.displayType, deviceData, 'scene', sceneData);
|
|
@@ -2203,7 +2204,7 @@ class DeviceAtw extends EventEmitter {
|
|
|
2203
2204
|
//presets
|
|
2204
2205
|
if (this.presets.length > 0) {
|
|
2205
2206
|
this.presets.forEach((preset, i) => {
|
|
2206
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
2207
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
2207
2208
|
if (!presetData) return;
|
|
2208
2209
|
|
|
2209
2210
|
const characteristicType = preset.characteristicType;
|
package/src/deviceerv.js
CHANGED
|
@@ -761,7 +761,6 @@ class DeviceErv extends EventEmitter {
|
|
|
761
761
|
this.presetControlServices = [];
|
|
762
762
|
this.presetControlSensorServices = [];
|
|
763
763
|
this.presets.forEach((preset, i) => {
|
|
764
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
765
764
|
|
|
766
765
|
//get name
|
|
767
766
|
const name = preset.name || `Preset ${i}`;
|
|
@@ -789,6 +788,8 @@ class DeviceErv extends EventEmitter {
|
|
|
789
788
|
switch (state) {
|
|
790
789
|
case true:
|
|
791
790
|
preset.previousSettings = deviceData.Device;
|
|
791
|
+
|
|
792
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
792
793
|
deviceData.Device.Power = presetData.Power;
|
|
793
794
|
deviceData.Device.OperationMode = presetData.OperationMode;
|
|
794
795
|
deviceData.Device.SetTemperature = presetData.SetTemperature;
|
|
@@ -838,7 +839,6 @@ class DeviceErv extends EventEmitter {
|
|
|
838
839
|
if (this.logDebug) this.emit('debug', `Prepare schedules services`);
|
|
839
840
|
this.scheduleSensorServices = [];
|
|
840
841
|
this.schedules.forEach((schedule, i) => {
|
|
841
|
-
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
842
842
|
|
|
843
843
|
//get name
|
|
844
844
|
const name = schedule.name || `Schedule ${i}`;
|
|
@@ -865,6 +865,7 @@ class DeviceErv extends EventEmitter {
|
|
|
865
865
|
})
|
|
866
866
|
.onSet(async (state) => {
|
|
867
867
|
try {
|
|
868
|
+
const scheduleData = schedulesOnServer.find(s => s.Id === schedule.id);
|
|
868
869
|
deviceData.ScheduleEnabled = state;
|
|
869
870
|
if (this.logInfo) this.emit('info', `Schedules: ${state ? 'Enabled' : 'Disabled'}`);
|
|
870
871
|
await this.melCloudErv.send(this.accountType, this.displayType, deviceData, 'schedule', scheduleData);
|
|
@@ -913,7 +914,6 @@ class DeviceErv extends EventEmitter {
|
|
|
913
914
|
this.sceneControlServices = [];
|
|
914
915
|
this.sceneControlSensorServices = [];
|
|
915
916
|
this.scenes.forEach((scene, i) => {
|
|
916
|
-
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
917
917
|
|
|
918
918
|
//get name
|
|
919
919
|
const name = scene.name || `Scene ${i}`;
|
|
@@ -938,6 +938,7 @@ class DeviceErv extends EventEmitter {
|
|
|
938
938
|
})
|
|
939
939
|
.onSet(async (state) => {
|
|
940
940
|
try {
|
|
941
|
+
const sceneData = scenesOnServer.find(s => s.Id === scene.id);
|
|
941
942
|
sceneData.Enabled = state;
|
|
942
943
|
if (this.logInfo) this.emit('info', `Scene ${name}: ${state ? 'Set' : 'Unset'}`);
|
|
943
944
|
await this.melCloudErv.send(this.accountType, this.displayType, deviceData, 'scene', sceneData);
|
|
@@ -1423,7 +1424,7 @@ class DeviceErv extends EventEmitter {
|
|
|
1423
1424
|
//presets
|
|
1424
1425
|
if (this.presets.length > 0) {
|
|
1425
1426
|
this.presets.forEach((preset, i) => {
|
|
1426
|
-
const presetData = presetsOnServer.find(p => p.ID === preset.id);
|
|
1427
|
+
const presetData = presetsOnServer.find(p => String(p.ID) === preset.id);
|
|
1427
1428
|
if (!presetData) return;
|
|
1428
1429
|
|
|
1429
1430
|
const characteristicType = preset.characteristicType;
|