homebridge-melcloud-control 4.4.1-beta.20 → 4.4.1-beta.21
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/README.md +5 -5
- package/package.json +1 -1
- package/src/constants.js +7 -7
- package/src/functions.js +12 -9
- package/src/melcloudhome.js +1 -2
package/CHANGELOG.md
CHANGED
|
@@ -22,6 +22,15 @@ 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.4.1] - (xx.12.2025)
|
|
26
|
+
|
|
27
|
+
## Changes
|
|
28
|
+
|
|
29
|
+
- bump dependencies
|
|
30
|
+
- config schema updated
|
|
31
|
+
- redme updated
|
|
32
|
+
- cleanup
|
|
33
|
+
|
|
25
34
|
# [4.4.0] - (10.12.2025)
|
|
26
35
|
|
|
27
36
|
## Changes
|
package/README.md
CHANGED
|
@@ -36,7 +36,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
36
36
|
* Support direct `Scenes`, only MELCloud Home.
|
|
37
37
|
* Support direct `Frost protection`, only MELCloud Home.
|
|
38
38
|
* Support direct `Overheat Protection`, only MELCloud Home.
|
|
39
|
-
* Support direct `Holiday Mode
|
|
39
|
+
* Support direct `Holiday Mode`, only MELCloud Home.
|
|
40
40
|
* Support direct `Functions`, using extra `Buttons`, switch it to `OFF` restore previous device state.
|
|
41
41
|
* Support automations, shortcuts and Siri.
|
|
42
42
|
* 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).
|
|
@@ -68,8 +68,8 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
68
68
|
* Vane V mode `AUTO/1/2/3/4/5/SWING`.
|
|
69
69
|
* Fan speed mode `AUTO/1/2/3/4/5`.
|
|
70
70
|
* Presets `SET/UNSET`.
|
|
71
|
-
* Frost protection `ON/OFF`.
|
|
72
|
-
* Overheat protection `ON/OFF`.
|
|
71
|
+
* Frost protection `ON/OFF/MINTEMP/MAXTEMP`.
|
|
72
|
+
* Overheat protection `ON/OFF/MINTEMP/MAXTEMP`.
|
|
73
73
|
* Holiday mode `ON/OFF`.
|
|
74
74
|
* Schedules `ON/OFF`.
|
|
75
75
|
* Scene `ON/OFF`.
|
|
@@ -129,7 +129,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
129
129
|
* Operating mode `HEAT/COOL/CURVE/HOLIDAY/AUTO HOT WATER/ECO HOT WATER/FORCE HOT WATER`.
|
|
130
130
|
* Physical lock controls `LOCK/UNLOCK`.
|
|
131
131
|
* Presets `SET/UNSET`.
|
|
132
|
-
* Frost protection `ON/OFF`.
|
|
132
|
+
* Frost protection `ON/OFF/MINTEMP/MAXTEMP`.
|
|
133
133
|
* Holiday mode `ON/OFF`.
|
|
134
134
|
* Schedules `ON/OFF`.
|
|
135
135
|
* Scene `ON/OFF`.
|
|
@@ -210,7 +210,7 @@ Homebridge plugin for Air Conditioner, Heat Pump and Energy Recovery Ventilation
|
|
|
210
210
|
* Target temperature is calculated as a middle value between `LO` and `HI` and the rest is calculated internally.
|
|
211
211
|
* Thermostat
|
|
212
212
|
* In this mode we can set only target temperature:
|
|
213
|
-
* Target temperature
|
|
213
|
+
* Target temperature is send to device and calculated internally:
|
|
214
214
|
* Calculation method in device internally:
|
|
215
215
|
* If the room temperature `<` Heating Setpoint, the unit will be set to HEAT with a setpoint of 23°C.
|
|
216
216
|
* In HEAT, if the room temperature `>` Heating Setpoint `+` 1°C, the unit will be set to FAN.
|
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.1-beta.
|
|
4
|
+
"version": "4.4.1-beta.21",
|
|
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/constants.js
CHANGED
|
@@ -29,17 +29,17 @@ export const ApiUrls = {
|
|
|
29
29
|
Scenes: "/api/user/scenes",
|
|
30
30
|
},
|
|
31
31
|
Post: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
Scene: "/api/scene", //
|
|
32
|
+
ProtectionFrost: "/api/protection/frost", //{"enabled":true,"min":13,"max":16,"units":{"ATA":["deviceid"]}}
|
|
33
|
+
ProtectionOverheat: "/api/protection/overheat", //{"enabled":true,"min":32,"max":35,"units":{"ATA":["deviceid"]}}
|
|
34
|
+
HolidayMode: "/api/holidaymode", //{"enabled":true,"startDate":"2025-11-11T17:42:24.913","endDate":"2026-06-01T09:18:00","units":{"ATA":["deviceid"]}}
|
|
35
|
+
Schedule: "/api/cloudschedule/deviceid", //{"days":[2],"time":"17:59:00","enabled":true,"id":"scheduleid","power":false,"operationMode":null,"setPoint":null,"vaneVerticalDirection":null,"vaneHorizontalDirection":null,"setFanSpeed":null}
|
|
36
|
+
Scene: "/api/scene", //{"id": "sceneid", "userId": "userid","name": "Poza domem","enabled": false,"icon": "AwayIcon","ataSceneSettings": [{"unitId": "deviceid","ataSettings": { "power": false, "operationMode": "heat","setFanSpeed": "auto","vaneHorizontalDirection": "auto", "vaneVerticalDirection": "auto", "setTemperature": 21,"temperatureIncrementOverride": null,"inStandbyMode": null},"previousSettings": null}],"atwSceneSettings": []}
|
|
37
37
|
},
|
|
38
38
|
Put: {
|
|
39
|
-
Ata: "/api/ataunit/deviceid",
|
|
39
|
+
Ata: "/api/ataunit/deviceid", //{ power: true,setTemperature: 22, setFanSpeed: "auto", operationMode: "heat", vaneHorizontalDirection: "auto",vaneVerticalDirection: "auto", temperatureIncrementOverride: null, inStandbyMode: null}
|
|
40
40
|
Atw: "/api/atwunit/deviceid",
|
|
41
41
|
Erv: "/api/ervunit/deviceid",
|
|
42
|
-
ScheduleEnableDisable: "/api/cloudschedule/deviceid/enabled", //
|
|
42
|
+
ScheduleEnableDisable: "/api/cloudschedule/deviceid/enabled", // {"enabled": true}
|
|
43
43
|
SceneEnableDisable: "/api/scene/sceneid/enabledisable",
|
|
44
44
|
},
|
|
45
45
|
Delete: {
|
package/src/functions.js
CHANGED
|
@@ -109,7 +109,7 @@ class Functions extends EventEmitter {
|
|
|
109
109
|
try {
|
|
110
110
|
await access(path, fs.constants.X_OK);
|
|
111
111
|
result.path = path;
|
|
112
|
-
result.system = '
|
|
112
|
+
result.system = 'Qnap';
|
|
113
113
|
return result;
|
|
114
114
|
} catch { }
|
|
115
115
|
}
|
|
@@ -119,7 +119,9 @@ class Functions extends EventEmitter {
|
|
|
119
119
|
await execPromise('/opt/bin/opkg update');
|
|
120
120
|
await execPromise('opkg install chromium nspr nss libx11 libxcomposite libxdamage libxrandr atk libcups libdrm libgbm alsa-lib');
|
|
121
121
|
process.env.LD_LIBRARY_PATH = `/opt/lib:${process.env.LD_LIBRARY_PATH || ''}`;
|
|
122
|
-
} catch {
|
|
122
|
+
} catch (error) {
|
|
123
|
+
if (this.logError) this.emit('error', `Install package for Qnap error: ${error}`);
|
|
124
|
+
}
|
|
123
125
|
|
|
124
126
|
for (const path of qnapCandidates) {
|
|
125
127
|
try {
|
|
@@ -147,12 +149,11 @@ class Functions extends EventEmitter {
|
|
|
147
149
|
|
|
148
150
|
if (!isDocker) {
|
|
149
151
|
try {
|
|
150
|
-
this.emit('debug', `Try install chromium`);
|
|
151
152
|
await execPromise('sudo apt update -y');
|
|
152
|
-
await execPromise('sudo apt install -y chromium chromium-browser chromium-codecs-ffmpeg
|
|
153
|
-
await execPromise('sudo apt install -y libnspr4 libnss3 libx11-6 libxcomposite1 libxdamage1 libxrandr2 libatk1.0-0 libcups2 libdrm2 libgbm1 libasound2
|
|
153
|
+
await execPromise('sudo apt install -y chromium chromium-browser chromium-codecs-ffmpeg');
|
|
154
|
+
await execPromise('sudo apt install -y libnspr4 libnss3 libx11-6 libxcomposite1 libxdamage1 libxrandr2 libatk1.0-0 libcups2 libdrm2 libgbm1 libasound2');
|
|
154
155
|
} catch (error) {
|
|
155
|
-
this.emit('
|
|
156
|
+
if (this.logError) this.emit('error', `Install package for Linux ARM error: ${error}`);
|
|
156
157
|
}
|
|
157
158
|
}
|
|
158
159
|
|
|
@@ -171,7 +172,7 @@ class Functions extends EventEmitter {
|
|
|
171
172
|
if (isLinux) {
|
|
172
173
|
const linuxCandidates = ['/usr/bin/chromium', '/usr/bin/chromium-browser', '/usr/bin/google-chrome', '/snap/bin/chromium', '/usr/local/bin/chromium'];
|
|
173
174
|
try {
|
|
174
|
-
const { stdout } = await execPromise('which chromium || which chromium-browser || which google-chrome
|
|
175
|
+
const { stdout } = await execPromise('which chromium || which chromium-browser || which google-chrome');
|
|
175
176
|
if (stdout.trim()) {
|
|
176
177
|
result.path = stdout.trim();
|
|
177
178
|
return result;
|
|
@@ -189,12 +190,14 @@ class Functions extends EventEmitter {
|
|
|
189
190
|
|
|
190
191
|
if (isDocker) {
|
|
191
192
|
try {
|
|
192
|
-
await execPromise('apt update -y && apt install -y chromium
|
|
193
|
+
await execPromise('apt update -y && apt install -y chromium');
|
|
193
194
|
await access('/usr/bin/chromium', fs.constants.X_OK);
|
|
194
195
|
result.path = '/usr/bin/chromium';
|
|
195
196
|
result.system = 'Linux Docker';
|
|
196
197
|
return result;
|
|
197
|
-
} catch {
|
|
198
|
+
} catch (error) {
|
|
199
|
+
if (this.logError) this.emit('error', `Install package for Linux Docker error: ${error}`);
|
|
200
|
+
}
|
|
198
201
|
}
|
|
199
202
|
}
|
|
200
203
|
|
package/src/melcloudhome.js
CHANGED
|
@@ -231,7 +231,7 @@ class MelCloudHome extends EventEmitter {
|
|
|
231
231
|
|
|
232
232
|
// If path is found, use it
|
|
233
233
|
if (chromiumPath) {
|
|
234
|
-
if (!this.logDebug) this.emit('debug', `Using Chromium ${system} (${arch}) at ${chromiumPath}`);
|
|
234
|
+
if (!this.logDebug) this.emit('debug', `Using Chromium for ${system} (${arch}) at ${chromiumPath}`);
|
|
235
235
|
} else {
|
|
236
236
|
if (arch === 'arm') {
|
|
237
237
|
accountInfo.Info = `No Chromium found for ${system} (${arch}). Please install it manually and try again.`;
|
|
@@ -247,7 +247,6 @@ class MelCloudHome extends EventEmitter {
|
|
|
247
247
|
}
|
|
248
248
|
}
|
|
249
249
|
|
|
250
|
-
|
|
251
250
|
// Verify Chromium executable
|
|
252
251
|
try {
|
|
253
252
|
const { stdout } = await execPromise(`"${chromiumPath}" --version`);
|