homebridge-melcloud-control 4.7.4 → 4.7.5-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/package.json +1 -1
- package/src/melcloudata.js +59 -66
- package/src/melcloudatw.js +45 -52
- package/src/melclouderv.js +48 -55
- package/src/melcloudhome.js +4 -3
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.
|
|
4
|
+
"version": "4.7.5-beta.1",
|
|
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/melcloudata.js
CHANGED
|
@@ -42,85 +42,78 @@ class MelCloudAta extends EventEmitter {
|
|
|
42
42
|
} catch (error) {
|
|
43
43
|
if (this.logError) this.emit('error', `Request process message error: ${error}`);
|
|
44
44
|
}
|
|
45
|
-
}).on(
|
|
45
|
+
}).on(this.deviceId, async (parsedMessage) => {
|
|
46
46
|
try {
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
if (!deviceData) return;
|
|
48
|
+
const messageData = parsedMessage[0].Data;
|
|
49
49
|
|
|
50
50
|
let updateState = false;
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
deviceData.HolidayMode.Enabled = value;
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
//update device settings
|
|
70
|
-
if (key in deviceData.Device) {
|
|
71
|
-
deviceData.Device[key] = value;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
51
|
+
const settings = this.functions.parseArrayNameValue(messageData.settings);
|
|
52
|
+
const messageType = parsedMessage[0].messageType;
|
|
53
|
+
switch (messageType) {
|
|
54
|
+
case 'unitStateChanged':
|
|
55
|
+
|
|
56
|
+
//update values
|
|
57
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
58
|
+
if (!this.functions.isValidValue(value)) continue;
|
|
59
|
+
|
|
60
|
+
//update holiday mode
|
|
61
|
+
if (key === 'HolidayMode') {
|
|
62
|
+
deviceData.HolidayMode.Enabled = value;
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
74
65
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
66
|
+
//update device settings
|
|
67
|
+
if (key in deviceData.Device) {
|
|
68
|
+
deviceData.Device[key] = value;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
79
71
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
72
|
+
updateState = true;
|
|
73
|
+
break;
|
|
74
|
+
case 'ataUnitFrostProtectionTriggered':
|
|
75
|
+
deviceData.FrostProtection.Active = messageData.active;
|
|
83
76
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
77
|
+
//update device settings
|
|
78
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
79
|
+
if (!this.functions.isValidValue(value) || key === 'SetTemperature') continue;
|
|
88
80
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
81
|
+
if (key in deviceData.Device) {
|
|
82
|
+
deviceData.Device[key] = value;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
93
85
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
86
|
+
updateState = true;
|
|
87
|
+
break;
|
|
88
|
+
case 'ataUnitOverheatProtectionTriggered':
|
|
89
|
+
deviceData.OverheatProtection.Active = messageData.active;
|
|
97
90
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
91
|
+
//update device settings
|
|
92
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
93
|
+
if (!this.functions.isValidValue(value) || key === 'SetTemperature') continue;
|
|
102
94
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
deviceData.Device.Power = settings.Power;
|
|
107
|
-
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
108
|
-
deviceData.HolidayMode.Active = messageData.active;
|
|
109
|
-
updateState = true;
|
|
110
|
-
break;
|
|
111
|
-
case 'unitWifiSignalChanged':
|
|
112
|
-
deviceData.Rssi = messageData.rssi;
|
|
113
|
-
updateState = true;
|
|
114
|
-
break;
|
|
115
|
-
case 'unitCommunicationRestored':
|
|
116
|
-
deviceData.Device.IsConnected = true;
|
|
117
|
-
break;
|
|
118
|
-
default:
|
|
119
|
-
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
120
|
-
return;
|
|
95
|
+
if (key in deviceData.Device) {
|
|
96
|
+
deviceData.Device[key] = value;
|
|
97
|
+
}
|
|
121
98
|
}
|
|
99
|
+
|
|
100
|
+
updateState = true;
|
|
101
|
+
break;
|
|
102
|
+
case 'unitHolidayModeTriggered':
|
|
103
|
+
deviceData.Device.Power = settings.Power;
|
|
104
|
+
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
105
|
+
deviceData.HolidayMode.Active = messageData.active;
|
|
106
|
+
updateState = true;
|
|
107
|
+
break;
|
|
108
|
+
case 'unitWifiSignalChanged':
|
|
109
|
+
deviceData.Rssi = messageData.rssi;
|
|
110
|
+
updateState = true;
|
|
111
|
+
break;
|
|
112
|
+
case 'unitCommunicationRestored':
|
|
113
|
+
deviceData.Device.IsConnected = true;
|
|
122
114
|
break;
|
|
123
115
|
default:
|
|
116
|
+
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
124
117
|
return;
|
|
125
118
|
}
|
|
126
119
|
|
package/src/melcloudatw.js
CHANGED
|
@@ -41,70 +41,63 @@ class MelCloudAtw extends EventEmitter {
|
|
|
41
41
|
} catch (error) {
|
|
42
42
|
if (this.logError) this.emit('error', `Request process message error: ${error}`);
|
|
43
43
|
}
|
|
44
|
-
}).on(
|
|
44
|
+
}).on(this.deviceId, async (parsedMessage) => {
|
|
45
45
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
if (!deviceData) return;
|
|
47
|
+
const messageData = parsedMessage[0]?.Data;
|
|
48
48
|
|
|
49
49
|
let updateState = false;
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const settings = this.functions.parseArrayNameValue(messageData.settings);
|
|
55
|
-
switch (messageType) {
|
|
56
|
-
case 'unitStateChanged':
|
|
50
|
+
const messageType = parsedMessage[0].messageType;
|
|
51
|
+
const settings = this.functions.parseArrayNameValue(messageData.settings);
|
|
52
|
+
switch (messageType) {
|
|
53
|
+
case 'unitStateChanged':
|
|
57
54
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
55
|
+
//update values
|
|
56
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
57
|
+
if (!this.functions.isValidValue(value)) continue;
|
|
61
58
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
59
|
+
//update holiday mode
|
|
60
|
+
if (key === 'HolidayMode') {
|
|
61
|
+
deviceData.HolidayMode.Enabled = value;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
67
64
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
65
|
+
//update device settings
|
|
66
|
+
if (key in deviceData.Device) {
|
|
67
|
+
deviceData.Device[key] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
updateState = true;
|
|
72
|
+
break;
|
|
73
|
+
case 'atwUnitFrostProtectionTriggered':
|
|
74
|
+
deviceData.FrostProtection.Active = messageData.active;
|
|
78
75
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
//update device settings
|
|
77
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
78
|
+
if (!this.functions.isValidValue(value) || key === 'SetTemperature') continue;
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
updateState = true;
|
|
88
|
-
break;
|
|
89
|
-
case 'unitHolidayModeTriggered':
|
|
90
|
-
deviceData.Device.Power = settings.Power;
|
|
91
|
-
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
92
|
-
deviceData.HolidayMode.Active = messageData.active;
|
|
93
|
-
updateState = true;
|
|
94
|
-
break;
|
|
95
|
-
case 'unitWifiSignalChanged':
|
|
96
|
-
deviceData.Rssi = messageData.rssi;
|
|
97
|
-
updateState = true;
|
|
98
|
-
break;
|
|
99
|
-
case 'unitCommunicationRestored':
|
|
100
|
-
deviceData.Device.IsConnected = true;
|
|
101
|
-
break;
|
|
102
|
-
default:
|
|
103
|
-
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
104
|
-
return;
|
|
80
|
+
if (key in deviceData.Device) {
|
|
81
|
+
deviceData.Device[key] = value;
|
|
82
|
+
}
|
|
105
83
|
}
|
|
84
|
+
updateState = true;
|
|
85
|
+
break;
|
|
86
|
+
case 'unitHolidayModeTriggered':
|
|
87
|
+
deviceData.Device.Power = settings.Power;
|
|
88
|
+
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
89
|
+
deviceData.HolidayMode.Active = messageData.active;
|
|
90
|
+
updateState = true;
|
|
91
|
+
break;
|
|
92
|
+
case 'unitWifiSignalChanged':
|
|
93
|
+
deviceData.Rssi = messageData.rssi;
|
|
94
|
+
updateState = true;
|
|
95
|
+
break;
|
|
96
|
+
case 'unitCommunicationRestored':
|
|
97
|
+
deviceData.Device.IsConnected = true;
|
|
106
98
|
break;
|
|
107
99
|
default:
|
|
100
|
+
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
108
101
|
return;
|
|
109
102
|
}
|
|
110
103
|
|
package/src/melclouderv.js
CHANGED
|
@@ -41,70 +41,63 @@ class MelCloudErv extends EventEmitter {
|
|
|
41
41
|
} catch (error) {
|
|
42
42
|
if (this.logError) this.emit('error', `Request process message error: ${error}`);
|
|
43
43
|
}
|
|
44
|
-
}).on(
|
|
44
|
+
}).on(this.deviceId, async (parsedMessage) => {
|
|
45
45
|
try {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
if (!deviceData) return;
|
|
47
|
+
const messageData = parsedMessage[0]?.Data;
|
|
48
48
|
|
|
49
49
|
let updateState = false;
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
deviceData.Device[key] = value;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
50
|
+
const messageType = parsedMessage[0].messageType;
|
|
51
|
+
const settings = this.functions.parseArrayNameValue(messageData.settings);
|
|
52
|
+
switch (messageType) {
|
|
53
|
+
case 'unitStateChanged':
|
|
54
|
+
|
|
55
|
+
//update values
|
|
56
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
57
|
+
if (!this.functions.isValidValue(value)) continue;
|
|
58
|
+
|
|
59
|
+
//update holiday mode
|
|
60
|
+
if (key === 'HolidayMode') {
|
|
61
|
+
deviceData.HolidayMode.Enabled = value;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
//update device settings
|
|
66
|
+
if (key in deviceData.Device) {
|
|
67
|
+
deviceData.Device[key] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
updateState = true;
|
|
72
|
+
break;
|
|
73
|
+
case 'ervUnitFrostProtectionTriggered':
|
|
74
|
+
deviceData.FrostProtection.Active = messageData.active;
|
|
78
75
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
76
|
+
//update device settings
|
|
77
|
+
for (const [key, value] of Object.entries(settings)) {
|
|
78
|
+
if (!this.functions.isValidValue(value) || key === 'SetTemperature') continue;
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
updateState = true;
|
|
88
|
-
break;
|
|
89
|
-
case 'unitHolidayModeTriggered':
|
|
90
|
-
deviceData.Device.Power = settings.Power;
|
|
91
|
-
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
92
|
-
deviceData.HolidayMode.Active = messageData.active;
|
|
93
|
-
updateState = true;
|
|
94
|
-
break;
|
|
95
|
-
case 'unitWifiSignalChanged':
|
|
96
|
-
deviceData.Rssi = messageData.rssi;
|
|
97
|
-
updateState = true;
|
|
98
|
-
break;
|
|
99
|
-
case 'unitCommunicationRestored':
|
|
100
|
-
deviceData.Device.IsConnected = true;
|
|
101
|
-
break;
|
|
102
|
-
default:
|
|
103
|
-
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
104
|
-
return;
|
|
80
|
+
if (key in deviceData.Device) {
|
|
81
|
+
deviceData.Device[key] = value;
|
|
82
|
+
}
|
|
105
83
|
}
|
|
84
|
+
updateState = true;
|
|
85
|
+
break;
|
|
86
|
+
case 'unitHolidayModeTriggered':
|
|
87
|
+
deviceData.Device.Power = settings.Power;
|
|
88
|
+
deviceData.HolidayMode.Enabled = settings.HolidayMode;
|
|
89
|
+
deviceData.HolidayMode.Active = messageData.active;
|
|
90
|
+
updateState = true;
|
|
91
|
+
break;
|
|
92
|
+
case 'unitWifiSignalChanged':
|
|
93
|
+
deviceData.Rssi = messageData.rssi;
|
|
94
|
+
updateState = true;
|
|
95
|
+
break;
|
|
96
|
+
case 'unitCommunicationRestored':
|
|
97
|
+
deviceData.Device.IsConnected = true;
|
|
106
98
|
break;
|
|
107
99
|
default:
|
|
100
|
+
if (this.logDebug) this.emit('debug', `Unit ${unitId}, received unknown message type: ${parsedMessage}`);
|
|
108
101
|
return;
|
|
109
102
|
}
|
|
110
103
|
|
package/src/melcloudhome.js
CHANGED
|
@@ -330,10 +330,11 @@ class MelCloudHome extends EventEmitter {
|
|
|
330
330
|
})
|
|
331
331
|
.on('message', (message) => {
|
|
332
332
|
const parsedMessage = JSON.parse(message);
|
|
333
|
-
if (this.logDebug) this.emit('debug', `Web socket incoming message: ${JSON.stringify(parsedMessage, null, 2)}`);
|
|
334
|
-
|
|
333
|
+
if (!this.logDebug) this.emit('debug', `Web socket incoming message: ${JSON.stringify(parsedMessage, null, 2)}`);
|
|
334
|
+
const messageData = parsedMessage?.[0]?.Data;
|
|
335
|
+
if (!messageData || parsedMessage.message === 'Forbidden') return;
|
|
335
336
|
|
|
336
|
-
this.emit(
|
|
337
|
+
this.emit(messageData.id, parsedMessage);
|
|
337
338
|
});
|
|
338
339
|
} catch (error) {
|
|
339
340
|
if (this.logError) this.emit('error', `Web socket connection failed: ${error}`);
|