feat(vendor.dreame): MopExtensionFurnitureLegHandlingControlCapability

This commit is contained in:
Sören Beye 2025-09-13 09:52:58 +02:00
parent e6615d266c
commit 92cd7f6475
8 changed files with 68 additions and 51 deletions

View File

@ -176,6 +176,7 @@ class DreameL10SProUltraHeatValetudoRobot extends DreameGen4ValetudoRobot {
capabilities.DreameMopExtensionControlCapabilityV1,
capabilities.DreameMopDockMopWashTemperatureControlCapabilityV1,
capabilities.DreameMopTwistControlCapabilityV2,
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
].forEach(capability => {
this.registerCapability(new capability({robot: this}));
});
@ -191,7 +192,6 @@ class DreameL10SProUltraHeatValetudoRobot extends DreameGen4ValetudoRobot {
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_DRYING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CARPET_DETECTION_AUTO_DEEP_CLEANING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_WATER_USAGE),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_CLEANING_PROCESS_TRIGGER),

View File

@ -182,6 +182,7 @@ class DreameL40UltraValetudoRobot extends DreameGen4ValetudoRobot {
capabilities.DreameCameraLightControlCapability,
capabilities.DreameMopDockMopWashTemperatureControlCapabilityV2,
capabilities.DreameMopTwistControlCapabilityV2,
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
].forEach(capability => {
this.registerCapability(new capability({robot: this}));
});
@ -197,7 +198,6 @@ class DreameL40UltraValetudoRobot extends DreameGen4ValetudoRobot {
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_DRYING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CARPET_DETECTION_AUTO_DEEP_CLEANING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_WATER_USAGE),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_EXTEND),

View File

@ -182,6 +182,7 @@ class DreameMovaP10ProUltraValetudoRobot extends DreameGen4ValetudoRobot {
capabilities.DreameCameraLightControlCapability,
capabilities.DreameMopDockMopWashTemperatureControlCapabilityV2,
capabilities.DreameMopTwistControlCapabilityV2,
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
].forEach(capability => {
this.registerCapability(new capability({robot: this}));
});
@ -197,7 +198,6 @@ class DreameMovaP10ProUltraValetudoRobot extends DreameGen4ValetudoRobot {
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_DRYING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CARPET_DETECTION_AUTO_DEEP_CLEANING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_WATER_USAGE),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_EXTEND),

View File

@ -537,51 +537,6 @@ class DreameQuirkFactory {
}
}
});
case DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS:
return new Quirk({
id: id,
title: "Edge Extension: Mop for furniture legs",
description: "When \"Edge Extension: Mop\" is enabled, also use it to better clean around small pillars like table legs.",
options: ["on", "off"],
getter: async () => {
const res = await this.helper.readProperty(
DreameMiotServices["GEN2"].VACUUM_2.SIID,
DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID
);
const deserializedResponse = DreameUtils.DESERIALIZE_MISC_TUNABLES(res);
switch (deserializedResponse.MopScalable2) {
case 1:
return "on";
case 0:
return "off";
default:
throw new Error(`Received invalid value ${deserializedResponse.MopScalable2}`);
}
},
setter: async (value) => {
let val;
switch (value) {
case "on":
val = 1;
break;
case "off":
val = 0;
break;
default:
throw new Error(`Received invalid value ${value}`);
}
return this.helper.writeProperty(
DreameMiotServices["GEN2"].VACUUM_2.SIID,
DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID,
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
MopScalable2: val
})
);
}
});
case DreameQuirkFactory.KNOWN_QUIRKS.EDGE_EXTENSION_FREQUENCY:
return new Quirk({
id: id,
@ -1014,7 +969,6 @@ DreameQuirkFactory.KNOWN_QUIRKS = {
MOP_DOCK_AUTO_REPAIR_TRIGGER: "ae753798-aa4f-4b35-a60c-91e7e5ae76f3",
MOP_DOCK_AUTO_DRYING: "6efc4d62-b5a4-474e-b353-5746a99ee8f9",
DRAIN_INTERNAL_WATER_TANK: "3e1b0851-3a5a-4943-bea6-dea3d7284bff",
MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS: "08658d53-5d7b-4bfd-a179-25ceb3c70fe2",
CARPET_DETECTION_AUTO_DEEP_CLEANING: "9450a668-88d7-4ff3-9455-a78b485fb33b",
MOP_DOCK_WATER_USAGE: "2d4ce805-ebf7-4dcf-b919-c5fe4d4f2de3",
SIDE_BRUSH_EXTEND: "e560d60c-76de-4ccc-8c01-8ccbcece850e",

View File

@ -182,6 +182,7 @@ class DreameX40MasterValetudoRobot extends DreameGen4ValetudoRobot {
capabilities.DreameCameraLightControlCapability,
capabilities.DreameMopDockMopWashTemperatureControlCapabilityV2,
capabilities.DreameMopTwistControlCapabilityV2,
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
].forEach(capability => {
this.registerCapability(new capability({robot: this}));
});
@ -197,7 +198,6 @@ class DreameX40MasterValetudoRobot extends DreameGen4ValetudoRobot {
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_DRYING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CARPET_DETECTION_AUTO_DEEP_CLEANING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_WATER_USAGE),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_EXTEND),

View File

@ -182,6 +182,7 @@ class DreameX40UltraValetudoRobot extends DreameGen4ValetudoRobot {
capabilities.DreameCameraLightControlCapability,
capabilities.DreameMopDockMopWashTemperatureControlCapabilityV2,
capabilities.DreameMopTwistControlCapabilityV2,
capabilities.DreameMopExtensionFurnitureLegHandlingControlCapability,
].forEach(capability => {
this.registerCapability(new capability({robot: this}));
});
@ -197,7 +198,6 @@ class DreameX40UltraValetudoRobot extends DreameGen4ValetudoRobot {
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_REPAIR_TRIGGER),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_AUTO_DRYING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.DRAIN_INTERNAL_WATER_TANK),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_EXTEND_EDGE_MOPPING_FURNITURE_LEGS),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.CARPET_DETECTION_AUTO_DEEP_CLEANING),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.MOP_DOCK_WATER_USAGE),
quirkFactory.getQuirk(DreameQuirkFactory.KNOWN_QUIRKS.SIDE_BRUSH_EXTEND),

View File

@ -0,0 +1,62 @@
const DreameMiotHelper = require("../DreameMiotHelper");
const DreameMiotServices = require("../DreameMiotServices");
const DreameUtils = require("../DreameUtils");
const MopExtensionFurnitureLegHandlingControlCapability = require("../../../core/capabilities/MopExtensionFurnitureLegHandlingControlCapability");
/**
* @extends MopExtensionFurnitureLegHandlingControlCapability<import("../DreameValetudoRobot")>
*/
class DreameMopExtensionFurnitureLegHandlingControlCapability extends MopExtensionFurnitureLegHandlingControlCapability {
/**
* @param {object} options
* @param {import("../DreameValetudoRobot")} options.robot
*/
constructor(options) {
super(options);
this.siid = DreameMiotServices["GEN2"].VACUUM_2.SIID;
this.piid = DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MISC_TUNABLES.PIID;
this.helper = new DreameMiotHelper({robot: this.robot});
}
/**
*
* @returns {Promise<boolean>}
*/
async isEnabled() {
const res = await this.helper.readProperty(this.siid, this.piid);
const deserializedResponse = DreameUtils.DESERIALIZE_MISC_TUNABLES(res);
return deserializedResponse.MopScalable2 === 1;
}
/**
* @returns {Promise<void>}
*/
async enable() {
await this.helper.writeProperty(
this.siid,
this.piid,
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
MopScalable2: 1
})
);
}
/**
* @returns {Promise<void>}
*/
async disable() {
await this.helper.writeProperty(
this.siid,
this.piid,
DreameUtils.SERIALIZE_MISC_TUNABLES_SINGLE_TUNABLE({
MopScalable2: 0
})
);
}
}
module.exports = DreameMopExtensionFurnitureLegHandlingControlCapability;

View File

@ -37,6 +37,7 @@ module.exports = {
DreameMopDockWaterUsageControlCapability: require("./DreameMopDockWaterUsageControlCapability"),
DreameMopExtensionControlCapabilityV1: require("./DreameMopExtensionControlCapabilityV1"),
DreameMopExtensionControlCapabilityV2: require("./DreameMopExtensionControlCapabilityV2"),
DreameMopExtensionFurnitureLegHandlingControlCapability: require("./DreameMopExtensionFurnitureLegHandlingControlCapability"),
DreameMopMappingPassCapability: require("./DreameMopMappingPassCapability"),
DreameMopTwistControlCapabilityV1: require("./DreameMopTwistControlCapabilityV1"),
DreameMopTwistControlCapabilityV2: require("./DreameMopTwistControlCapabilityV2"),