From 7c0fc3a09416e665a19f79f1a2a936638c3a8111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6ren=20Beye?= Date: Sat, 13 Sep 2025 09:53:38 +0200 Subject: [PATCH] feat(vendor.midea): MopExtensionFurnitureLegHandlingControlCapability --- .../lib/robots/midea/MideaValetudoRobot.js | 1 + ...onFurnitureLegHandlingControlCapability.js | 62 +++++++++++++++++++ .../lib/robots/midea/capabilities/index.js | 1 + 3 files changed, 64 insertions(+) create mode 100644 backend/lib/robots/midea/capabilities/MideaMopExtensionFurnitureLegHandlingControlCapability.js diff --git a/backend/lib/robots/midea/MideaValetudoRobot.js b/backend/lib/robots/midea/MideaValetudoRobot.js index 7d4f942e..826b678f 100644 --- a/backend/lib/robots/midea/MideaValetudoRobot.js +++ b/backend/lib/robots/midea/MideaValetudoRobot.js @@ -150,6 +150,7 @@ class MideaValetudoRobot extends ValetudoRobot { capabilities.MideaCarpetSensorModeControlCapability, capabilities.MideaPetObstacleAvoidanceControlCapability, capabilities.MideaMopTwistControlCapability, + capabilities.MideaMopExtensionFurnitureLegHandlingControlCapability, ].forEach(capability => { this.registerCapability(new capability({robot: this})); }); diff --git a/backend/lib/robots/midea/capabilities/MideaMopExtensionFurnitureLegHandlingControlCapability.js b/backend/lib/robots/midea/capabilities/MideaMopExtensionFurnitureLegHandlingControlCapability.js new file mode 100644 index 00000000..30d8378f --- /dev/null +++ b/backend/lib/robots/midea/capabilities/MideaMopExtensionFurnitureLegHandlingControlCapability.js @@ -0,0 +1,62 @@ +const BEightParser = require("../../../msmart/BEightParser"); +const MopExtensionFurnitureLegHandlingControlCapability = require("../../../core/capabilities/MopExtensionFurnitureLegHandlingControlCapability"); +const MSmartConst = require("../../../msmart/MSmartConst"); +const MSmartPacket = require("../../../msmart/MSmartPacket"); +const MSmartStatusDTO = require("../../../msmart/dtos/MSmartStatusDTO"); + +/** + * @extends MopExtensionFurnitureLegHandlingControlCapability + */ +class MideaMopExtensionFurnitureLegHandlingControlCapability extends MopExtensionFurnitureLegHandlingControlCapability { + + /** + * @returns {Promise} + */ + async isEnabled() { + const response = await this.robot.sendCommand(new MSmartPacket({ + messageType: MSmartPacket.MESSAGE_TYPE.ACTION, + payload: MSmartPacket.buildPayload(MSmartConst.ACTION.GET_STATUS) + }).toHexString()); + const parsedResponse = BEightParser.PARSE(response); + + if (parsedResponse instanceof MSmartStatusDTO) { + return parsedResponse.furniture_legs_cleaning_switch; + } else { + throw new Error("Invalid response from robot"); + } + } + + /** + * @returns {Promise} + */ + async enable() { + await this.robot.sendCommand(new MSmartPacket({ + messageType: MSmartPacket.MESSAGE_TYPE.SETTING, + payload: MSmartPacket.buildPayload( + MSmartConst.SETTING.SET_VARIOUS_TOGGLES, + Buffer.from([ + 0x2f, // furniture legs cleaning + 0x01 // true + ]) + ) + }).toHexString()); + } + + /** + * @returns {Promise} + */ + async disable() { + await this.robot.sendCommand(new MSmartPacket({ + messageType: MSmartPacket.MESSAGE_TYPE.SETTING, + payload: MSmartPacket.buildPayload( + MSmartConst.SETTING.SET_VARIOUS_TOGGLES, + Buffer.from([ + 0x2f, // furniture legs cleaning + 0x00 // false + ]) + ) + }).toHexString()); + } +} + +module.exports = MideaMopExtensionFurnitureLegHandlingControlCapability; diff --git a/backend/lib/robots/midea/capabilities/index.js b/backend/lib/robots/midea/capabilities/index.js index 0ecb7842..2339fb6f 100644 --- a/backend/lib/robots/midea/capabilities/index.js +++ b/backend/lib/robots/midea/capabilities/index.js @@ -21,6 +21,7 @@ module.exports = { MideaMopDockDryManualTriggerCapability: require("./MideaMopDockDryManualTriggerCapability"), MideaMopDockMopWashTemperatureControlCapability: require("./MideaMopDockMopWashTemperatureControlCapability"), MideaMopExtensionControlCapability: require("./MideaMopExtensionControlCapability"), + MideaMopExtensionFurnitureLegHandlingControlCapability: require("./MideaMopExtensionFurnitureLegHandlingControlCapability"), MideaMopTwistControlCapability: require("./MideaMopTwistControlCapability"), MideaObstacleAvoidanceControlCapability: require("./MideaObstacleAvoidanceControlCapability"), MideaObstacleImagesCapability: require("./MideaObstacleImagesCapability"),