diff --git a/lib/core/ValetudoRobotFactory.js b/lib/core/ValetudoRobotFactory.js index c98bfe764fc..18989fbcda4 100644 --- a/lib/core/ValetudoRobotFactory.js +++ b/lib/core/ValetudoRobotFactory.js @@ -65,7 +65,8 @@ const Robots = { "RoborockS6MaxVValetudoRobot": require("../robots/roborock/RoborockS6MaxVValetudoRobot"), "Dreame1CValetudoRobot": require("../robots/dreame/Dreame1CValetudoRobot"), "DreameD9ValetudoRobot": require("../robots/dreame/DreameD9ValetudoRobot"), - "ViomiV7ValetudoRobot": require("../robots/viomi/ViomiV7ValetudoRobot") + "ViomiV7ValetudoRobot": require("../robots/viomi/ViomiV7ValetudoRobot"), + "MockRobot": require("../robots/mock/MockRobot") }; //This is only exported so that we can autogenerate the supported robots overview for the docs diff --git a/lib/robots/mock/MockRobot.js b/lib/robots/mock/MockRobot.js new file mode 100644 index 00000000000..44f5b3ad7e4 --- /dev/null +++ b/lib/robots/mock/MockRobot.js @@ -0,0 +1,17 @@ +const ValetudoRobot = require("../../core/ValetudoRobot"); +const capabilities = require("./capabilities"); + +class MockRobot extends ValetudoRobot { + /** + * + * @param {object} options + * @param {import("../../Configuration")} options.config + */ + constructor(options) { + super(options); + + this.registerCapability(new capabilities.MockBasicControlCapability({robot: this})); + } +} + +module.exports = MockRobot; \ No newline at end of file diff --git a/lib/robots/mock/capabilities/MockBasicControlCapability.js b/lib/robots/mock/capabilities/MockBasicControlCapability.js new file mode 100644 index 00000000000..2af610c3269 --- /dev/null +++ b/lib/robots/mock/capabilities/MockBasicControlCapability.js @@ -0,0 +1,34 @@ +const BasicControlCapability = require("../../../core/capabilities/BasicControlCapability"); +const entities = require("../../../entities"); +const stateAttrs = entities.state.attributes; + +class MockBasicControlCapability extends BasicControlCapability { + constructor(options) { + super(options); + + this.StateAttr = new stateAttrs.StatusStateAttribute({ + value: stateAttrs.StatusStateAttribute.VALUE.DOCKED, + flag: stateAttrs.StatusStateAttribute.FLAG.NONE + }); + + this.robot.state.upsertFirstMatchingAttribute(this.StateAttr); + } + + async start() { + this.StateAttr.value = stateAttrs.StatusStateAttribute.VALUE.CLEANING; + } + + async stop() { + this.StateAttr.value = stateAttrs.StatusStateAttribute.VALUE.IDLE; + } + + async pause() { + this.StateAttr.value = stateAttrs.StatusStateAttribute.VALUE.PAUSED; + } + + async home() { + this.StateAttr.value = stateAttrs.StatusStateAttribute.VALUE.DOCKED; + } +} + +module.exports = MockBasicControlCapability; \ No newline at end of file diff --git a/lib/robots/mock/capabilities/index.js b/lib/robots/mock/capabilities/index.js new file mode 100644 index 00000000000..03045486cab --- /dev/null +++ b/lib/robots/mock/capabilities/index.js @@ -0,0 +1,3 @@ +module.exports = { + MockBasicControlCapability: require("./MockBasicControlCapability") +}; \ No newline at end of file