homebridge-melcloud-control 4.3.0-beta.12 → 4.3.0-beta.14

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/melcloudata.js +20 -21
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "displayName": "MELCloud Control",
3
3
  "name": "homebridge-melcloud-control",
4
- "version": "4.3.0-beta.12",
4
+ "version": "4.3.0-beta.14",
5
5
  "description": "Homebridge plugin to control Mitsubishi Air Conditioner, Heat Pump and Energy Recovery Ventilation.",
6
6
  "license": "MIT",
7
7
  "author": "grzegorz914",
@@ -27,8 +27,8 @@ class MelCloudAta extends EventEmitter {
27
27
  this.deviceData = {};
28
28
  this.headers = {};
29
29
  this.hash = null;
30
- this.start = true;
31
30
  this.socket = null;
31
+ this.socketConnected = false;
32
32
 
33
33
  //lock flag
34
34
  this.locks = false;
@@ -75,18 +75,15 @@ class MelCloudAta extends EventEmitter {
75
75
  const deviceData = devicesData.Devices.find(device => device.DeviceID === this.deviceId);
76
76
  if (this.accountType === 'melcloudhome') {
77
77
  deviceData.Scenes = devicesData.Scenes ?? [];
78
- deviceData.Device.OperationMode = AirConditioner.OperationModeMapStringToEnum[deviceData.Device.OperationMode] ?? deviceData.Device.OperationMode;
79
- deviceData.Device.ActualFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.ActualFanSpeed] ?? deviceData.Device.ActualFanSpeed;
80
- deviceData.Device.SetFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.SetFanSpeed] ?? deviceData.Device.SetFanSpeed;
81
- deviceData.Device.VaneVerticalDirection = AirConditioner.VaneVerticalDirectionMapStringToEnum[deviceData.Device.VaneVerticalDirection] ?? deviceData.Device.VaneVerticalDirection;
82
- deviceData.Device.VaneHorizontalDirection = AirConditioner.VaneHorizontalDirectionMapStringToEnum[deviceData.Device.VaneHorizontalDirection] ?? deviceData.Device.VaneHorizontalDirection;
83
78
 
84
- //read default temps
85
- const temps = await this.functions.readData(this.defaultTempsFile, true);
86
- deviceData.Device.DefaultHeatingSetTemperature = temps?.defaultHeatingSetTemperature ?? 20;
87
- deviceData.Device.DefaultCoolingSetTemperature = temps?.defaultCoolingSetTemperature ?? 24;
88
79
 
89
- if (this.start) {
80
+ if (!this.socketConnected) {
81
+ deviceData.Device.OperationMode = AirConditioner.OperationModeMapStringToEnum[deviceData.Device.OperationMode] ?? deviceData.Device.OperationMode;
82
+ deviceData.Device.ActualFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.ActualFanSpeed] ?? deviceData.Device.ActualFanSpeed;
83
+ deviceData.Device.SetFanSpeed = AirConditioner.FanSpeedMapStringToEnum[deviceData.Device.SetFanSpeed] ?? deviceData.Device.SetFanSpeed;
84
+ deviceData.Device.VaneVerticalDirection = AirConditioner.VaneVerticalDirectionMapStringToEnum[deviceData.Device.VaneVerticalDirection] ?? deviceData.Device.VaneVerticalDirection;
85
+ deviceData.Device.VaneHorizontalDirection = AirConditioner.VaneHorizontalDirectionMapStringToEnum[deviceData.Device.VaneHorizontalDirection] ?? deviceData.Device.VaneHorizontalDirection;
86
+
90
87
  const socket = new WebSocket(`wss://ws.melcloudhome.com/?hash=${devicesData.Hash}`, {
91
88
  headers: {
92
89
  'Origin': 'https://melcloudhome.com',
@@ -103,45 +100,47 @@ class MelCloudAta extends EventEmitter {
103
100
  this.cleanupSocket();
104
101
  })
105
102
  .on('open', () => {
106
- if (this.logDebug) this.emit('debug', `Plugin received heartbeat from TV`);
107
-
108
103
  // connect to device success
109
104
  this.socket = socket;
110
105
  this.socketConnected = true;
111
106
  this.emit('success', `Socket Connect Success`);
112
- this.start = false;
113
107
 
114
108
  // start heartbeat
115
109
  this.heartbeat = setInterval(() => {
116
110
  if (socket.readyState === socket.OPEN) {
117
- if (this.logDebug) this.emit('debug', `Socket send heartbeat`);
111
+ if (!this.logDebug) this.emit('warn', `Socket send heartbeat`);
118
112
  socket.ping();
119
113
  }
120
114
  }, 5000);
121
115
  })
122
116
  .on('pong', () => {
123
- if (this.logDebug) this.emit('debug', `Socket received heartbeat`);
117
+ if (!this.logDebug) this.emit('warn', `Socket received heartbeat`);
124
118
  })
125
119
  .on('message', (message) => {
126
120
  const parsedMessage = JSON.parse(message);
127
121
  const messageType = parsedMessage[0].messageType;
128
122
  const messageData = parsedMessage[0].Data;
123
+ const unitId = messageData.id;
124
+ const unitType = messageData.unitType;
129
125
  const stringifyMessage = JSON.stringify(parsedMessage, null, 2);
130
126
  if (!this.logDebug) this.emit('warn', `Incoming message:', ${stringifyMessage}`);
131
127
 
132
- switch (messageType) {
133
- case 'unitStateChanged':
134
- const unitId = messageData.id;
135
- const unitType = messageData.unitType;
128
+ switch (unitId) {
129
+ case this.deviceId:
136
130
  const settings = messageData.settings[0];
137
131
  const name = settings.name;
138
132
  const value = settings.value;
139
- if (this.deviceId === unitId) deviceData.Device[name] = value;
133
+ deviceData.Device[name] = value;
140
134
  break;
141
135
  }
142
136
  });
143
137
  }
144
138
 
139
+ //read default temps
140
+ const temps = await this.functions.readData(this.defaultTempsFile, true);
141
+ deviceData.Device.DefaultHeatingSetTemperature = temps?.defaultHeatingSetTemperature ?? 20;
142
+ deviceData.Device.DefaultCoolingSetTemperature = temps?.defaultCoolingSetTemperature ?? 24;
143
+
145
144
  }
146
145
  if (this.logDebug) this.emit('debug', `Device Data: ${JSON.stringify(deviceData, null, 2)}`);
147
146