Skip to content

Commit 6a8c5ef

Browse files
committed
feat(vendor.viomi): IntensiveMoppingPathControlCapability
1 parent 63a761e commit 6a8c5ef

5 files changed

Lines changed: 51 additions & 43 deletions

File tree

backend/lib/robots/viomi/ViomiQuirkFactory.js

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -54,46 +54,6 @@ class ViomiQuirkFactory {
5454
return this.robot.sendCommand("set_light", [val], {});
5555
}
5656
});
57-
case ViomiQuirkFactory.KNOWN_QUIRKS.MOP_PATTERN:
58-
return new Quirk({
59-
id: id,
60-
title: "Mop Pattern",
61-
description: "This robot can either mop in straight lines or in a Y-pattern",
62-
options: ["normal", "y_pattern"],
63-
getter: async () => {
64-
const res = await this.robot.sendCommand("get_prop", ["mop_route"], {});
65-
66-
if (!(Array.isArray(res) && res.length === 1)) {
67-
throw new Error(`Received invalid response: ${res}`);
68-
} else {
69-
switch (res[0]) {
70-
case 1:
71-
return "y_pattern";
72-
case 0:
73-
return "normal";
74-
default:
75-
throw new Error(`Received invalid value ${res}`);
76-
}
77-
}
78-
79-
},
80-
setter: async (value) => {
81-
let val;
82-
83-
switch (value) {
84-
case "y_pattern":
85-
val = 1;
86-
break;
87-
case "normal":
88-
val = 0;
89-
break;
90-
default:
91-
throw new Error(`Received invalid value ${value}`);
92-
}
93-
94-
return this.robot.sendCommand("set_moproute", [val], {});
95-
}
96-
});
9757
case ViomiQuirkFactory.KNOWN_QUIRKS.OUTLINE_MODE:
9858
return new Quirk({
9959
id: id,
@@ -147,7 +107,6 @@ class ViomiQuirkFactory {
147107

148108
ViomiQuirkFactory.KNOWN_QUIRKS = {
149109
BUTTON_LEDS: "977c5972-1f12-4ef1-9622-ce71fd085193",
150-
MOP_PATTERN: "0ae06cb4-8cc7-429f-95fb-f3d0bbfc06de",
151110
OUTLINE_MODE: "061b826c-417c-46a0-b6ad-807260cd4f70",
152111
};
153112

backend/lib/robots/viomi/ViomiV6ValetudoRobot.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,17 @@ class ViomiV6ValetudoRobot extends ViomiValetudoRobot {
2020
robot: this
2121
}));
2222

23+
this.registerCapability(new capabilities.ViomiIntensiveMoppingPathControlCapability({
24+
robot: this
25+
}));
26+
2327
const quirkFactory = new ViomiQuirkFactory({
2428
robot: this
2529
});
2630
this.registerCapability(new QuirksCapability({
2731
robot: this,
2832
quirks: [
2933
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.BUTTON_LEDS),
30-
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.MOP_PATTERN),
3134
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.OUTLINE_MODE),
3235
]
3336
}));

backend/lib/robots/viomi/ViomiV7ValetudoRobot.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const capabilities = require("./capabilities");
12
const MiioValetudoRobot = require("../MiioValetudoRobot");
23
const QuirksCapability = require("../../core/capabilities/QuirksCapability");
34
const ViomiQuirkFactory = require("./ViomiQuirkFactory");
@@ -15,14 +16,17 @@ class ViomiV7ValetudoRobot extends ViomiValetudoRobot {
1516
constructor(options) {
1617
super(options);
1718

19+
this.registerCapability(new capabilities.ViomiIntensiveMoppingPathControlCapability({
20+
robot: this
21+
}));
22+
1823
const quirkFactory = new ViomiQuirkFactory({
1924
robot: this
2025
});
2126
this.registerCapability(new QuirksCapability({
2227
robot: this,
2328
quirks: [
2429
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.BUTTON_LEDS),
25-
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.MOP_PATTERN),
2630
quirkFactory.getQuirk(ViomiQuirkFactory.KNOWN_QUIRKS.OUTLINE_MODE),
2731
]
2832
}));
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
const IntensiveMoppingPathControlCapability = require("../../../core/capabilities/IntensiveMoppingPathControlCapability");
2+
const {sleep} = require("../../../utils/misc");
3+
4+
/**
5+
* @extends IntensiveMoppingPathControlCapability<import("../ViomiValetudoRobot")>
6+
*/
7+
class ViomiIntensiveMoppingPathControlCapability extends IntensiveMoppingPathControlCapability {
8+
9+
/**
10+
* @returns {Promise<boolean>}
11+
*/
12+
async isEnabled() {
13+
const res = await this.robot.sendCommand("get_prop", ["mop_route"], {});
14+
15+
if (!(Array.isArray(res) && res.length === 1)) {
16+
throw new Error(`Received invalid response: ${res}`);
17+
}
18+
19+
return res[0] === 1;
20+
}
21+
22+
/**
23+
* @returns {Promise<void>}
24+
*/
25+
async enable() {
26+
await this.robot.sendCommand("set_moproute", [1], {});
27+
28+
await sleep(3_000); // Give the firmware a lot of time to think
29+
}
30+
31+
/**
32+
* @returns {Promise<void>}
33+
*/
34+
async disable() {
35+
await this.robot.sendCommand("set_moproute", [0], {});
36+
37+
await sleep(3_000); // Give the firmware a lot of time to think
38+
}
39+
}
40+
41+
module.exports = ViomiIntensiveMoppingPathControlCapability;

backend/lib/robots/viomi/capabilities/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ module.exports = {
66
ViomiCurrentStatisticsCapability: require("./ViomiCurrentStatisticsCapability"),
77
ViomiDoNotDisturbCapability: require("./ViomiDoNotDisturbCapability"),
88
ViomiFanSpeedControlCapability: require("./ViomiFanSpeedControlCapability"),
9+
ViomiIntensiveMoppingPathControlCapability: require("./ViomiIntensiveMoppingPathControlCapability"),
910
ViomiLocateCapability: require("./ViomiLocateCapability"),
1011
ViomiManualControlCapability: require("./ViomiManualControlCapability"),
1112
ViomiMapResetCapability: require("./ViomiMapResetCapability"),

0 commit comments

Comments
 (0)