Skip to content

Commit

Permalink
feat(core): AutoEmptyDockManualTriggerCapability
Browse files Browse the repository at this point in the history
  • Loading branch information
Hypfer committed Sep 15, 2021
1 parent a1fa6d8 commit 5678d4f
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const Capability = require("./Capability");
const NotImplementedError = require("../NotImplementedError");

/**
*
* @template {import("../ValetudoRobot")} T
* @extends Capability<T>
*/
class AutoEmptyDockManualTriggerCapability extends Capability {
/**
* @abstract
* @returns {Promise<void>}
*/
async triggerAutoEmpty() {
throw new NotImplementedError();
}

getType() {
return AutoEmptyDockManualTriggerCapability.TYPE;
}
}

AutoEmptyDockManualTriggerCapability.TYPE = "AutoEmptyDockManualTriggerCapability";

module.exports = AutoEmptyDockManualTriggerCapability;
1 change: 1 addition & 0 deletions backend/lib/core/capabilities/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module.exports = {
AutoEmptyDockAutoEmptyControlCapability: require("./AutoEmptyDockAutoEmptyControlCapability"),
AutoEmptyDockManualTriggerCapability: require("./AutoEmptyDockManualTriggerCapability"),
BasicControlCapability: require("./BasicControlCapability"),
CarpetModeControlCapability: require("./CarpetModeControlCapability"),
CombinedVirtualRestrictionsCapability: require("./CombinedVirtualRestrictionsCapability"),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const CapabilityMqttHandle = require("./CapabilityMqttHandle");
const Command = require("../common/Commands");
const DataType = require("../homie/DataType");
const PropertyMqttHandle = require("../handles/PropertyMqttHandle");

class AutoEmptyDockManualTriggerCapabilityMqttHandle extends CapabilityMqttHandle {
/**
* @param {object} options
* @param {import("../handles/RobotMqttHandle")} options.parent
* @param {import("../MqttController")} options.controller MqttController instance
* @param {import("../../core/ValetudoRobot")} options.robot
* @param {import("../../core/capabilities/AutoEmptyDockManualTriggerCapability")} options.capability
*/
constructor(options) {
super(Object.assign(options, {
friendlyName: "Auto Empty Dock Manual Trigger"
}));
this.capability = options.capability;

this.registerChild(new PropertyMqttHandle({
parent: this,
controller: this.controller,
topicName: "trigger",
friendlyName: "Auto Empty Dock Manual Trigger",
datatype: DataType.ENUM,
format: Command.BASIC.PERFORM,
setter: async (value) => {
await this.capability.triggerAutoEmpty();
}
}));
}
}

module.exports = AutoEmptyDockManualTriggerCapabilityMqttHandle;
3 changes: 2 additions & 1 deletion backend/lib/mqtt/capabilities/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
module.exports = {
AutoEmptyDockManualTriggerCapabilityMqttHandle: require("./AutoEmptyDockManualTriggerCapabilityMqttHandle"),
BasicControlCapabilityMqttHandle: require("./BasicControlCapabilityMqttHandle"),
CapabilityMqttHandle: require("./CapabilityMqttHandle"),
ConsumableMonitoringCapabilityMqttHandle: require("./ConsumableMonitoringCapabilityMqttHandle"),
Expand All @@ -7,5 +8,5 @@ module.exports = {
MapSegmentationCapabilityMqttHandle: require("./MapSegmentationCapabilityMqttHandle"),
PresetSelectionCapabilityMqttHandle: require("./PresetSelectionCapabilityMqttHandle"),
WifiConfigurationCapabilityMqttHandle: require("./WifiConfigurationCapabilityMqttHandle"),
ZoneCleaningCapabilityMqttHandle: require("./ZoneCleaningCapabilityMqttHandle"),
ZoneCleaningCapabilityMqttHandle: require("./ZoneCleaningCapabilityMqttHandle")
};
1 change: 1 addition & 0 deletions backend/lib/mqtt/handles/HandleMappings.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const CAPABILITY_TYPE_TO_HANDLE_MAPPING = {
[capabilities.WaterUsageControlCapability.TYPE]: capabilityHandles.PresetSelectionCapabilityMqttHandle,
[capabilities.WifiConfigurationCapability.TYPE]: capabilityHandles.WifiConfigurationCapabilityMqttHandle,
[capabilities.ZoneCleaningCapability.TYPE]: capabilityHandles.ZoneCleaningCapabilityMqttHandle,
[capabilities.AutoEmptyDockManualTriggerCapability.TYPE]: capabilityHandles.AutoEmptyDockManualTriggerCapabilityMqttHandle
};

const STATUS_ATTR_TO_HANDLE_MAPPING = [
Expand Down
3 changes: 2 additions & 1 deletion backend/lib/webserver/CapabilitiesRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,8 @@ const CAPABILITY_TYPE_TO_ROUTER_MAPPING = {
[capabilities.MappingPassCapability.TYPE]: capabilityRouters.MappingPassCapabilityRouter,
[capabilities.KeyLockCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter,
[capabilities.ObstacleAvoidanceControlCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter,
[capabilities.AutoEmptyDockAutoEmptyControlCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter
[capabilities.AutoEmptyDockAutoEmptyControlCapability.TYPE]: capabilityRouters.SimpleToggleCapabilityRouter,
[capabilities.AutoEmptyDockManualTriggerCapability.TYPE]: capabilityRouters.AutoEmptyDockManualTriggerCapabilityRouter
};

module.exports = CapabilitiesRouter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
const Logger = require("../../Logger");

const CapabilityRouter = require("./CapabilityRouter");

class AutoEmptyDockManualTriggerCapabilityRouter extends CapabilityRouter {

initRoutes() {
this.router.put("/", async (req, res) => {
if (req.body && req.body.action === "trigger") {
try {
await this.capability.triggerAutoEmpty();
res.sendStatus(200);
} catch (e) {
Logger.warn("Error while triggering auto empty", e);
res.status(500).json(e.message);
}
} else {
res.status(400).send("Missing or invalid request body");
}
});
}
}

module.exports = AutoEmptyDockManualTriggerCapabilityRouter;
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
{
"/api/v2/robot/capabilities/AutoEmptyDockManualTriggerCapability": {
"put": {
"tags": [
"AutoEmptyDockManualTriggerCapability"
],
"summary": "Trigger the auto empty function of the auto empty dock",
"requestBody": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"trigger"
]
}
}
}
}
}
},
"responses": {
"200": {
"$ref": "#/components/responses/200"
},
"400": {
"$ref": "#/components/responses/400"
}
}
}
},
"/api/v2/robot/capabilities/AutoEmptyDockManualTriggerCapability/properties": {
"get": {
"tags": [
"AutoEmptyDockManualTriggerCapability"
],
"summary": "Get various capability-related properties",
"responses": {
"200": {
"description": "Ok",
"content": {
"application/json": {
"schema": {
"type": "object"
}
}
}
}
}
}
}
}
1 change: 1 addition & 0 deletions backend/lib/webserver/capabilityRouters/index.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
module.exports = {
AutoEmptyDockManualTriggerCapabilityRouter: require("./AutoEmptyDockManualTriggerCapabilityRouter"),
BasicControlCapabilityRouter: require("./BasicControlCapabilityRouter"),
CombinedVirtualRestrictionsCapabilityRouter: require("./CombinedVirtualRestrictionsCapabilityRouter"),
ConsumableMonitoringCapabilityRouter: require("./ConsumableMonitoringCapabilityRouter"),
Expand Down

0 comments on commit 5678d4f

Please sign in to comment.