Skip to content

Commit 2c4717f

Browse files
committed
feat(vendor.dreame): FloorMaterialDirectionAwareNavigationControlCapability
1 parent 5c257a5 commit 2c4717f

10 files changed

Lines changed: 75 additions & 53 deletions

backend/lib/robots/dreame/DreameL10SProUltraHeatValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ class DreameL10SProUltraHeatValetudoRobot extends DreameGen4ValetudoRobot {
202202
capabilities.DreameMopTwistControlCapabilityV2,
203203
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
204204
capabilities.DreameMopDockMopAutoDryingControlCapability,
205+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
205206
].forEach(capability => {
206207
this.registerCapability(new capability({robot: this}));
207208
});
@@ -222,7 +223,6 @@ class DreameL10SProUltraHeatValetudoRobot extends DreameGen4ValetudoRobot {
222223
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
223224
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE_WITH_QUICK),
224225
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.EDGE_EXTENSION_FREQUENCY),
225-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
226226
]
227227
}));
228228

backend/lib/robots/dreame/DreameL10SUltraValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ class DreameL10SUltraValetudoRobot extends DreameGen2LidarValetudoRobot {
207207
capabilities.DreameAutoEmptyDockAutoEmptyIntervalControlCapabilityV1,
208208
capabilities.DreameMopTwistControlCapabilityV1,
209209
capabilities.DreameMopDockMopAutoDryingControlCapability,
210+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
210211
].forEach(capability => {
211212
this.registerCapability(new capability({robot: this}));
212213
});
@@ -223,7 +224,6 @@ class DreameL10SUltraValetudoRobot extends DreameGen2LidarValetudoRobot {
223224
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
224225
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
225226
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
226-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
227227
]
228228
}));
229229

backend/lib/robots/dreame/DreameL40UltraValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class DreameL40UltraValetudoRobot extends DreameGen4ValetudoRobot {
208208
capabilities.DreameMopTwistControlCapabilityV2,
209209
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
210210
capabilities.DreameMopDockMopAutoDryingControlCapability,
211+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
211212
].forEach(capability => {
212213
this.registerCapability(new capability({robot: this}));
213214
});
@@ -231,7 +232,6 @@ class DreameL40UltraValetudoRobot extends DreameGen4ValetudoRobot {
231232
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
232233
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE_WITH_QUICK),
233234
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_ON_CARPET),
234-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
235235
]
236236
}));
237237

backend/lib/robots/dreame/DreameMovaP10ProUltraValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class DreameMovaP10ProUltraValetudoRobot extends DreameGen4ValetudoRobot {
208208
capabilities.DreameMopTwistControlCapabilityV2,
209209
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
210210
capabilities.DreameMopDockMopAutoDryingControlCapability,
211+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
211212
].forEach(capability => {
212213
this.registerCapability(new capability({robot: this}));
213214
});
@@ -230,7 +231,6 @@ class DreameMovaP10ProUltraValetudoRobot extends DreameGen4ValetudoRobot {
230231
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
231232
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE_WITH_QUICK),
232233
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_ON_CARPET),
233-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
234234
]
235235
}));
236236

backend/lib/robots/dreame/DreameMovaS20UltraValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ class DreameMovaS20UltraValetudoRobot extends DreameGen4ValetudoRobot {
205205
capabilities.DreameCameraLightControlCapability,
206206
capabilities.DreameMopTwistControlCapabilityV1,
207207
capabilities.DreameMopDockMopAutoDryingControlCapability,
208+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
208209
].forEach(capability => {
209210
this.registerCapability(new capability({robot: this}));
210211
});
@@ -224,7 +225,6 @@ class DreameMovaS20UltraValetudoRobot extends DreameGen4ValetudoRobot {
224225
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_CLEANING_PROCESS_TRIGGER),
225226
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
226227
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE),
227-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
228228
]
229229
}));
230230

backend/lib/robots/dreame/DreameQuirkFactory.js

Lines changed: 0 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -906,51 +906,6 @@ class DreameQuirkFactory {
906906
);
907907
}
908908
});
909-
case DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING:
910-
return new Quirk({
911-
id: id,
912-
title: "Clean Along Floor Direction",
913-
description: "Clean in the direction of the configured/detected floor material (if applicable).",
914-
options: ["on", "off"],
915-
getter: async () => {
916-
const res = await this.helper.readProperty(
917-
DreameMiotServices["GEN2"].VACUUM_2.SIID,
918-
DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID
919-
);
920-
921-
const deserializedResponse = DreameUtils.DESERIALIZE_MISC_TUNABLES(res);
922-
switch (deserializedResponse.MaterialDirectionClean) {
923-
case 1:
924-
return "on";
925-
case 0:
926-
return "off";
927-
default:
928-
throw new Error(`Received invalid value ${deserializedResponse.MaterialDirectionClean}`);
929-
}
930-
},
931-
setter: async (value) => {
932-
let val;
933-
934-
switch (value) {
935-
case "on":
936-
val = 1;
937-
break;
938-
case "off":
939-
val = 0;
940-
break;
941-
default:
942-
throw new Error(`Received invalid value ${value}`);
943-
}
944-
945-
return this.helper.writeProperty(
946-
DreameMiotServices["GEN2"].VACUUM_2.SIID,
947-
DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID,
948-
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
949-
MaterialDirectionClean: val
950-
})
951-
);
952-
}
953-
});
954909
default:
955910
throw new Error(`There's no quirk with id ${id}`);
956911
}
@@ -978,7 +933,6 @@ DreameQuirkFactory.KNOWN_QUIRKS = {
978933
CLEAN_ROUTE: "ce44b688-f8bc-43a4-b44d-6db0d003c859",
979934
CLEAN_ROUTE_WITH_QUICK: "924c82a8-1c3f-4363-9303-e6158e0ca41c",
980935
SIDE_BRUSH_ON_CARPET: "d23d7e7e-ef74-42a6-8a0a-4163742e437b",
981-
MATERIAL_DIRECTION_CLEANING: "2bb060c6-b8fb-41e6-962c-f42036d4ca54",
982936
};
983937

984938
module.exports = DreameQuirkFactory;

backend/lib/robots/dreame/DreameX40MasterValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class DreameX40MasterValetudoRobot extends DreameGen4ValetudoRobot {
208208
capabilities.DreameMopTwistControlCapabilityV2,
209209
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
210210
capabilities.DreameMopDockMopAutoDryingControlCapability,
211+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
211212
].forEach(capability => {
212213
this.registerCapability(new capability({robot: this}));
213214
});
@@ -231,7 +232,6 @@ class DreameX40MasterValetudoRobot extends DreameGen4ValetudoRobot {
231232
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
232233
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE_WITH_QUICK),
233234
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_ON_CARPET),
234-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
235235
]
236236
}));
237237

backend/lib/robots/dreame/DreameX40UltraValetudoRobot.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,7 @@ class DreameX40UltraValetudoRobot extends DreameGen4ValetudoRobot {
208208
capabilities.DreameMopTwistControlCapabilityV2,
209209
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
210210
capabilities.DreameMopDockMopAutoDryingControlCapability,
211+
capabilities.DreameFloorMaterialDirectionAwareNavigationControlCapability,
211212
].forEach(capability => {
212213
this.registerCapability(new capability({robot: this}));
213214
});
@@ -231,7 +232,6 @@ class DreameX40UltraValetudoRobot extends DreameGen4ValetudoRobot {
231232
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.WATER_HOOKUP_TEST_TRIGGER),
232233
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CLEAN_ROUTE_WITH_QUICK),
233234
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_ON_CARPET),
234-
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MATERIAL_DIRECTION_CLEANING),
235235
]
236236
}));
237237

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
const DreameMiotHelper = require("../DreameMiotHelper");
2+
const DreameMiotServices = require("../DreameMiotServices");
3+
const DreameUtils = require("../DreameUtils");
4+
const FloorMaterialDirectionAwareNavigationControlCapability = require("../../../core/capabilities/FloorMaterialDirectionAwareNavigationControlCapability");
5+
const {sleep} = require("../../../utils/misc");
6+
7+
/**
8+
* @extends FloorMaterialDirectionAwareNavigationControlCapability<import("../DreameValetudoRobot")>
9+
*/
10+
class DreameFloorMaterialDirectionAwareNavigationControlCapability extends FloorMaterialDirectionAwareNavigationControlCapability {
11+
12+
/**
13+
* @param {object} options
14+
* @param {import("../DreameValetudoRobot")} options.robot
15+
*/
16+
constructor(options) {
17+
super(options);
18+
19+
this.siid = DreameMiotServices["GEN2"].VACUUM_2.SIID;
20+
this.piid = DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID;
21+
22+
this.helper = new DreameMiotHelper({robot: this.robot});
23+
}
24+
25+
/**
26+
*
27+
* @returns {Promise<boolean>}
28+
*/
29+
async isEnabled() {
30+
const res = await this.helper.readProperty(this.siid, this.piid);
31+
const deserializedResponse = DreameUtils.DESERIALIZE_MISC_TUNABLES(res);
32+
33+
return deserializedResponse.MaterialDirectionClean === 1;
34+
}
35+
36+
/**
37+
* @returns {Promise<void>}
38+
*/
39+
async enable() {
40+
await this.helper.writeProperty(
41+
this.siid,
42+
this.piid,
43+
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
44+
MaterialDirectionClean: 1
45+
})
46+
);
47+
48+
await sleep(100); // Give the robot some time to think
49+
}
50+
51+
/**
52+
* @returns {Promise<void>}
53+
*/
54+
async disable() {
55+
await this.helper.writeProperty(
56+
this.siid,
57+
this.piid,
58+
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
59+
MaterialDirectionClean: 0
60+
})
61+
);
62+
63+
await sleep(100); // Give the robot some time to think
64+
}
65+
}
66+
67+
module.exports = DreameFloorMaterialDirectionAwareNavigationControlCapability;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ module.exports = {
2020
DreameCurrentStatisticsCapability: require("./DreameCurrentStatisticsCapability"),
2121
DreameDoNotDisturbCapability: require("./DreameDoNotDisturbCapability"),
2222
DreameFanSpeedControlCapability: require("./DreameFanSpeedControlCapability"),
23+
DreameFloorMaterialDirectionAwareNavigationControlCapability: require("./DreameFloorMaterialDirectionAwareNavigationControlCapability"),
2324
DreameHighResolutionManualControlCapability: require("./DreameHighResolutionManualControlCapability"),
2425
DreameKeyLockCapability: require("./DreameKeyLockCapability"),
2526
DreameLineLaserObstacleAvoidanceControlCapability: require("./DreameLineLaserObstacleAvoidanceControlCapability"),

0 commit comments

Comments
 (0)