matterbridge-roborock-vacuum-plugin 1.0.5 → 1.0.6

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.
@@ -28,6 +28,15 @@ export var MopWaterFlowA187;
28
28
  MopWaterFlowA187[MopWaterFlowA187["Custom"] = 204] = "Custom";
29
29
  MopWaterFlowA187[MopWaterFlowA187["Smart"] = 209] = "Smart";
30
30
  })(MopWaterFlowA187 || (MopWaterFlowA187 = {}));
31
+ export var MopRouteA187;
32
+ (function (MopRouteA187) {
33
+ MopRouteA187[MopRouteA187["Fast"] = 304] = "Fast";
34
+ MopRouteA187[MopRouteA187["Standard"] = 300] = "Standard";
35
+ MopRouteA187[MopRouteA187["Deep"] = 301] = "Deep";
36
+ MopRouteA187[MopRouteA187["Custom"] = 302] = "Custom";
37
+ MopRouteA187[MopRouteA187["DeepPlus"] = 303] = "DeepPlus";
38
+ MopRouteA187[MopRouteA187["Smart"] = 306] = "Smart";
39
+ })(MopRouteA187 || (MopRouteA187 = {}));
31
40
  const RvcRunMode = {
32
41
  [1]: 'Idle',
33
42
  [2]: 'Cleaning',
@@ -41,11 +50,11 @@ const RvcCleanMode = {
41
50
  [8]: 'Custom',
42
51
  };
43
52
  const CleanSetting = {
44
- [4]: { suctionPower: VacuumSuctionPowerA187.Smart, waterFlow: MopWaterFlowA187.Smart },
45
- [5]: { suctionPower: VacuumSuctionPowerA187.Off, waterFlow: MopWaterFlowA187.Medium },
46
- [6]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Off },
47
- [7]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Medium },
48
- [8]: { suctionPower: VacuumSuctionPowerA187.Custom, waterFlow: MopWaterFlowA187.Custom },
53
+ [4]: { suctionPower: 0, waterFlow: 0, mopRoute: MopRouteA187.Smart },
54
+ [5]: { suctionPower: VacuumSuctionPowerA187.Off, waterFlow: MopWaterFlowA187.Medium, mopRoute: MopRouteA187.Custom },
55
+ [6]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Off, mopRoute: MopRouteA187.Custom },
56
+ [7]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Medium, mopRoute: MopRouteA187.Custom },
57
+ [8]: { suctionPower: VacuumSuctionPowerA187.Custom, waterFlow: MopWaterFlowA187.Custom, mopRoute: MopRouteA187.Custom },
49
58
  };
50
59
  export function setCommandHandlerA187(duid, handler, logger, roborockService) {
51
60
  handler.setCommandHandler('changeToMode', async (newMode) => {
@@ -59,7 +68,7 @@ export function setCommandHandlerA187(duid, handler, logger, roborockService) {
59
68
  case 'Smart Plan':
60
69
  case 'Mop':
61
70
  case 'Vacuum':
62
- case 'Mop & Vacuum':
71
+ case 'Vac & Mop':
63
72
  case 'Custom': {
64
73
  const setting = CleanSetting[newMode];
65
74
  logger.notice(`BehaviorA187-ChangeCleanMode to: ${activity}, code: ${JSON.stringify(setting)}`);
@@ -15,7 +15,7 @@ export var OperationStatusCode;
15
15
  OperationStatusCode[OperationStatusCode["InError"] = 12] = "InError";
16
16
  OperationStatusCode[OperationStatusCode["ShuttingDown"] = 13] = "ShuttingDown";
17
17
  OperationStatusCode[OperationStatusCode["Updating"] = 14] = "Updating";
18
- OperationStatusCode[OperationStatusCode["Docking"] = 15] = "Docking";
18
+ OperationStatusCode[OperationStatusCode["ReturnToDock"] = 15] = "ReturnToDock";
19
19
  OperationStatusCode[OperationStatusCode["GoTo"] = 16] = "GoTo";
20
20
  OperationStatusCode[OperationStatusCode["ZoneClean"] = 17] = "ZoneClean";
21
21
  OperationStatusCode[OperationStatusCode["RoomClean"] = 18] = "RoomClean";
@@ -38,7 +38,7 @@ export class LocalNetworkClient extends AbstractClient {
38
38
  }
39
39
  async send(duid, request) {
40
40
  if (!this.socket || !this.connected) {
41
- this.logger.error(`failed to send request to ${duid}, socket is not online, ${JSON.stringify(request)}`);
41
+ this.logger.error(`${duid}: socket is not online, ${JSON.stringify(request)}`);
42
42
  return;
43
43
  }
44
44
  const localRequest = request.toLocalRequest();
@@ -45,6 +45,7 @@ export class MQTTClient extends AbstractClient {
45
45
  }
46
46
  async send(duid, request) {
47
47
  if (!this.client || !this.connected) {
48
+ this.logger.error(`${duid}: mqtt is not available, ${JSON.stringify(request)}`);
48
49
  return;
49
50
  }
50
51
  const mqttRequest = request.toMqttRequest();
@@ -71,9 +71,16 @@ export class MessageProcessor {
71
71
  const request = new RequestMessage({ method: 'find_me' });
72
72
  return this.client.send(duid, request);
73
73
  }
74
- async changeCleanMode(duid, suctionPower, waterFlow) {
74
+ async changeCleanMode(duid, suctionPower, waterFlow, mopRoute) {
75
75
  this.logger?.notice(`Change clean mode for ${duid} to suctionPower: ${suctionPower}, waterFlow: ${waterFlow}`);
76
- await this.client.send(duid, new RequestMessage({ method: 'set_custom_mode', params: [suctionPower] }));
77
- await this.client.send(duid, new RequestMessage({ method: 'set_water_box_custom_mode', params: [waterFlow] }));
76
+ if (mopRoute && mopRoute != 0) {
77
+ await this.client.send(duid, new RequestMessage({ method: 'set_mop_mode', params: [mopRoute] }));
78
+ }
79
+ if (suctionPower && suctionPower != 0) {
80
+ await this.client.send(duid, new RequestMessage({ method: 'set_custom_mode', params: [suctionPower] }));
81
+ }
82
+ if (waterFlow && waterFlow != 0) {
83
+ await this.client.send(duid, new RequestMessage({ method: 'set_water_box_custom_mode', params: [waterFlow] }));
84
+ }
78
85
  }
79
86
  }
@@ -47,9 +47,9 @@ export default class RoborockService {
47
47
  getSupportedAreas(duid) {
48
48
  return this.supportedAreas.get(duid);
49
49
  }
50
- async changeCleanMode(duid, { suctionPower, waterFlow }) {
50
+ async changeCleanMode(duid, { suctionPower, waterFlow, mopRoute }) {
51
51
  this.logger.notice('changeCleanMode');
52
- return this.messageProcessor?.changeCleanMode(duid, suctionPower, waterFlow);
52
+ return this.messageProcessor?.changeCleanMode(duid, suctionPower, waterFlow, mopRoute);
53
53
  }
54
54
  async startClean(duid) {
55
55
  const areas = this.supportedAreas.get(duid);
@@ -10,7 +10,7 @@ export function state_to_matter_state(state) {
10
10
  case OperationStatusCode.ReturningDock:
11
11
  case OperationStatusCode.ManualMode:
12
12
  case OperationStatusCode.SpotCleaning:
13
- case OperationStatusCode.Docking:
13
+ case OperationStatusCode.ReturnToDock:
14
14
  case OperationStatusCode.GoTo:
15
15
  case OperationStatusCode.ZoneClean:
16
16
  case OperationStatusCode.RoomClean:
@@ -34,7 +34,6 @@ export function state_to_matter_state(state) {
34
34
  return RvcRunMode.ModeTag.Mapping;
35
35
  case OperationStatusCode.Idle:
36
36
  case OperationStatusCode.Sleeping:
37
- case OperationStatusCode.Docking:
38
37
  case OperationStatusCode.Charging:
39
38
  case OperationStatusCode.FullyCharged:
40
39
  default:
@@ -66,7 +65,7 @@ export function state_to_matter_operational_status(state) {
66
65
  case OperationStatusCode.RobotStatusMopping:
67
66
  case OperationStatusCode.WashingTheMop:
68
67
  case OperationStatusCode.WashingTheMop2:
69
- case OperationStatusCode.Docking:
68
+ case OperationStatusCode.ReturnToDock:
70
69
  case OperationStatusCode.GoingToWashTheMop:
71
70
  case OperationStatusCode.BackToDockWashingDuster:
72
71
  case OperationStatusCode.EmptyingDustContainer:
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "matterbridge-roborock-vacuum-plugin",
3
3
  "type": "DynamicPlatform",
4
- "version": "1.0.5",
4
+ "version": "1.0.6",
5
5
  "whiteList": [],
6
6
  "blackList": [],
7
7
  "useInterval": true,
8
8
  "debug": true,
9
9
  "unregisterOnShutdown": false,
10
10
  "enableExperimentalFeature": false
11
- }
11
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "title": "Matterbridge Roborock Vacuum Plugin",
3
- "description": "matterbridge-roborock-vacuum-plugin v. 1.0.0 by https://github.com/RinDevJunior",
3
+ "description": "matterbridge-roborock-vacuum-plugin v. 1.0.6 by https://github.com/RinDevJunior",
4
4
  "type": "object",
5
5
  "required": [],
6
6
  "properties": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "matterbridge-roborock-vacuum-plugin",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "Matterbridge Roborock Vacuum Plugin",
5
5
  "author": "https://github.com/RinDevJunior",
6
6
  "license": "MIT",
@@ -44,6 +44,16 @@ export enum MopWaterFlowA187 {
44
44
  Smart = 209,
45
45
  }
46
46
 
47
+ //set_mop_mode
48
+ export enum MopRouteA187 {
49
+ Fast = 304,
50
+ Standard = 300,
51
+ Deep = 301,
52
+ Custom = 302,
53
+ DeepPlus = 303,
54
+ Smart = 306,
55
+ }
56
+
47
57
  const RvcRunMode: Record<number, string> = {
48
58
  [1]: 'Idle', //DO NOT HANDLE HERE,
49
59
  [2]: 'Cleaning',
@@ -57,12 +67,12 @@ const RvcCleanMode: Record<number, string> = {
57
67
  [8]: 'Custom',
58
68
  };
59
69
 
60
- const CleanSetting: Record<number, { suctionPower: VacuumSuctionPowerA187; waterFlow: MopWaterFlowA187 }> = {
61
- [4]: { suctionPower: VacuumSuctionPowerA187.Smart, waterFlow: MopWaterFlowA187.Smart },
62
- [5]: { suctionPower: VacuumSuctionPowerA187.Off, waterFlow: MopWaterFlowA187.Medium },
63
- [6]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Off },
64
- [7]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Medium },
65
- [8]: { suctionPower: VacuumSuctionPowerA187.Custom, waterFlow: MopWaterFlowA187.Custom },
70
+ const CleanSetting: Record<number, { suctionPower: number; waterFlow: number; mopRoute: number }> = {
71
+ [4]: { suctionPower: 0, waterFlow: 0, mopRoute: MopRouteA187.Smart }, //'Smart Plan'
72
+ [5]: { suctionPower: VacuumSuctionPowerA187.Off, waterFlow: MopWaterFlowA187.Medium, mopRoute: MopRouteA187.Custom }, //'Mop'
73
+ [6]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Off, mopRoute: MopRouteA187.Custom }, //'Vacuum'
74
+ [7]: { suctionPower: VacuumSuctionPowerA187.Balanced, waterFlow: MopWaterFlowA187.Medium, mopRoute: MopRouteA187.Custom }, //'Vac & Mop'
75
+ [8]: { suctionPower: VacuumSuctionPowerA187.Custom, waterFlow: MopWaterFlowA187.Custom, mopRoute: MopRouteA187.Custom }, // 'Custom'
66
76
  };
67
77
 
68
78
  export function setCommandHandlerA187(duid: string, handler: BehaviorDeviceGeneric<DeviceCommands>, logger: AnsiLogger, roborockService: RoborockService): void {
@@ -77,7 +87,7 @@ export function setCommandHandlerA187(duid: string, handler: BehaviorDeviceGener
77
87
  case 'Smart Plan':
78
88
  case 'Mop':
79
89
  case 'Vacuum':
80
- case 'Mop & Vacuum':
90
+ case 'Vac & Mop':
81
91
  case 'Custom': {
82
92
  const setting = CleanSetting[newMode];
83
93
  logger.notice(`BehaviorA187-ChangeCleanMode to: ${activity}, code: ${JSON.stringify(setting)}`);
@@ -14,7 +14,7 @@ export enum OperationStatusCode {
14
14
  InError = 12,
15
15
  ShuttingDown = 13,
16
16
  Updating = 14,
17
- Docking = 15,
17
+ ReturnToDock = 15,
18
18
  GoTo = 16,
19
19
  ZoneClean = 17,
20
20
  RoomClean = 18,
@@ -46,7 +46,7 @@ export class LocalNetworkClient extends AbstractClient {
46
46
 
47
47
  public async send(duid: string, request: RequestMessage): Promise<void> {
48
48
  if (!this.socket || !this.connected) {
49
- this.logger.error(`failed to send request to ${duid}, socket is not online, ${JSON.stringify(request)}`);
49
+ this.logger.error(`${duid}: socket is not online, ${JSON.stringify(request)}`);
50
50
  return;
51
51
  }
52
52
 
@@ -59,6 +59,7 @@ export class MQTTClient extends AbstractClient {
59
59
 
60
60
  public async send(duid: string, request: RequestMessage): Promise<void> {
61
61
  if (!this.client || !this.connected) {
62
+ this.logger.error(`${duid}: mqtt is not available, ${JSON.stringify(request)}`);
62
63
  return;
63
64
  }
64
65
 
@@ -102,9 +102,19 @@ export class MessageProcessor {
102
102
  return this.client.send(duid, request);
103
103
  }
104
104
 
105
- public async changeCleanMode(duid: string, suctionPower: number, waterFlow: number): Promise<void> {
105
+ public async changeCleanMode(duid: string, suctionPower: number, waterFlow: number, mopRoute: number): Promise<void> {
106
106
  this.logger?.notice(`Change clean mode for ${duid} to suctionPower: ${suctionPower}, waterFlow: ${waterFlow}`);
107
- await this.client.send(duid, new RequestMessage({ method: 'set_custom_mode', params: [suctionPower] }));
108
- await this.client.send(duid, new RequestMessage({ method: 'set_water_box_custom_mode', params: [waterFlow] }));
107
+
108
+ if (mopRoute && mopRoute != 0) {
109
+ await this.client.send(duid, new RequestMessage({ method: 'set_mop_mode', params: [mopRoute] }));
110
+ }
111
+
112
+ if (suctionPower && suctionPower != 0) {
113
+ await this.client.send(duid, new RequestMessage({ method: 'set_custom_mode', params: [suctionPower] }));
114
+ }
115
+
116
+ if (waterFlow && waterFlow != 0) {
117
+ await this.client.send(duid, new RequestMessage({ method: 'set_water_box_custom_mode', params: [waterFlow] }));
118
+ }
109
119
  }
110
120
  }
@@ -84,9 +84,9 @@ export default class RoborockService {
84
84
  return this.supportedAreas.get(duid);
85
85
  }
86
86
 
87
- public async changeCleanMode(duid: string, { suctionPower, waterFlow }: { suctionPower: number; waterFlow: number }): Promise<void> {
87
+ public async changeCleanMode(duid: string, { suctionPower, waterFlow, mopRoute }: { suctionPower: number; waterFlow: number; mopRoute: number }): Promise<void> {
88
88
  this.logger.notice('changeCleanMode');
89
- return this.messageProcessor?.changeCleanMode(duid, suctionPower, waterFlow);
89
+ return this.messageProcessor?.changeCleanMode(duid, suctionPower, waterFlow, mopRoute);
90
90
  }
91
91
 
92
92
  public async startClean(duid: string): Promise<void> {
@@ -12,7 +12,7 @@ export function state_to_matter_state(state: number | undefined): RvcRunMode.Mod
12
12
  case OperationStatusCode.ReturningDock:
13
13
  case OperationStatusCode.ManualMode:
14
14
  case OperationStatusCode.SpotCleaning:
15
- case OperationStatusCode.Docking:
15
+ case OperationStatusCode.ReturnToDock:
16
16
  case OperationStatusCode.GoTo:
17
17
  case OperationStatusCode.ZoneClean:
18
18
  case OperationStatusCode.RoomClean:
@@ -38,7 +38,6 @@ export function state_to_matter_state(state: number | undefined): RvcRunMode.Mod
38
38
 
39
39
  case OperationStatusCode.Idle:
40
40
  case OperationStatusCode.Sleeping:
41
- case OperationStatusCode.Docking:
42
41
  case OperationStatusCode.Charging:
43
42
  case OperationStatusCode.FullyCharged:
44
43
  default:
@@ -71,7 +70,7 @@ export function state_to_matter_operational_status(state: number | undefined): R
71
70
  case OperationStatusCode.RobotStatusMopping:
72
71
  case OperationStatusCode.WashingTheMop:
73
72
  case OperationStatusCode.WashingTheMop2:
74
- case OperationStatusCode.Docking:
73
+ case OperationStatusCode.ReturnToDock:
75
74
  case OperationStatusCode.GoingToWashTheMop:
76
75
  case OperationStatusCode.BackToDockWashingDuster:
77
76
  case OperationStatusCode.EmptyingDustContainer: