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.
- package/dist/behaviors/roborock.vacuum/QREVO_EDGE_5V1/a187.js +15 -6
- package/dist/roborockCommunication/Zenum/operationStatusCode.js +1 -1
- package/dist/roborockCommunication/broadcast/client/LocalNetworkClient.js +1 -1
- package/dist/roborockCommunication/broadcast/client/MQTTClient.js +1 -0
- package/dist/roborockCommunication/broadcast/messageProcessor.js +10 -3
- package/dist/roborockService.js +2 -2
- package/dist/share/function.js +2 -3
- package/matterbridge-roborock-vacuum-plugin.config.json +2 -2
- package/matterbridge-roborock-vacuum-plugin.schema.json +1 -1
- package/package.json +1 -1
- package/src/behaviors/roborock.vacuum/QREVO_EDGE_5V1/a187.ts +17 -7
- package/src/roborockCommunication/Zenum/operationStatusCode.ts +1 -1
- package/src/roborockCommunication/broadcast/client/LocalNetworkClient.ts +1 -1
- package/src/roborockCommunication/broadcast/client/MQTTClient.ts +1 -0
- package/src/roborockCommunication/broadcast/messageProcessor.ts +13 -3
- package/src/roborockService.ts +2 -2
- package/src/share/function.ts +2 -3
|
@@ -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:
|
|
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 '
|
|
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["
|
|
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(
|
|
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
|
-
|
|
77
|
-
|
|
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
|
}
|
package/dist/roborockService.js
CHANGED
|
@@ -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);
|
package/dist/share/function.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
@@ -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:
|
|
61
|
-
[4]: { suctionPower:
|
|
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 '
|
|
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)}`);
|
|
@@ -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(
|
|
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
|
-
|
|
108
|
-
|
|
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
|
}
|
package/src/roborockService.ts
CHANGED
|
@@ -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> {
|
package/src/share/function.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
73
|
+
case OperationStatusCode.ReturnToDock:
|
|
75
74
|
case OperationStatusCode.GoingToWashTheMop:
|
|
76
75
|
case OperationStatusCode.BackToDockWashingDuster:
|
|
77
76
|
case OperationStatusCode.EmptyingDustContainer:
|