mirror of
https://github.com/Hypfer/Valetudo.git
synced 2025-10-26 11:27:27 +00:00
feat(vendor.roborock): RoborockHighResolutionManualControlCapability
This commit is contained in:
parent
d500b3f0cb
commit
f261bce8a9
@ -103,7 +103,8 @@ class RoborockGen4ValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMultiMapMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -21,7 +21,8 @@ class RoborockM1SValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMapResetCapability,
|
||||
capabilities.RoborockMapSegmentSimpleCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -22,7 +22,8 @@ class RoborockS4ValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMultiMapMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -49,6 +49,7 @@ class RoborockS5MaxValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockMappingPassCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -23,7 +23,8 @@ class RoborockS5ValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -48,7 +48,8 @@ class RoborockS6MaxVValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMultiMapMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -21,7 +21,8 @@ class RoborockS6PureValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMultiMapMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -29,7 +29,8 @@ class RoborockS6ValetudoRobot extends RoborockValetudoRobot {
|
||||
capabilities.RoborockMultiMapMapResetCapability,
|
||||
capabilities.RoborockMapSegmentationCapability,
|
||||
capabilities.RoborockMapSegmentEditCapability,
|
||||
capabilities.RoborockMapSegmentRenameCapability
|
||||
capabilities.RoborockMapSegmentRenameCapability,
|
||||
capabilities.RoborockHighResolutionManualControlCapability
|
||||
].forEach(capability => {
|
||||
this.registerCapability(new capability({robot: this}));
|
||||
});
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
const capabilities = require("./capabilities");
|
||||
const entities = require("../../entities");
|
||||
const MiioValetudoRobot = require("../MiioValetudoRobot");
|
||||
const RoborockValetudoRobot = require("./RoborockValetudoRobot");
|
||||
@ -13,6 +14,11 @@ class RoborockV1ValetudoRobot extends RoborockValetudoRobot {
|
||||
*/
|
||||
constructor(options) {
|
||||
super(Object.assign({}, options, {fanSpeeds: FAN_SPEEDS}));
|
||||
|
||||
this.registerCapability(new capabilities.RoborockHighResolutionManualControlCapability({
|
||||
robot: this,
|
||||
velocityLimit: 0.29
|
||||
}));
|
||||
}
|
||||
|
||||
getModelName() {
|
||||
|
||||
@ -68,7 +68,6 @@ class RoborockValetudoRobot extends MiioValetudoRobot {
|
||||
capabilities.RoborockSpeakerVolumeControlCapability,
|
||||
capabilities.RoborockSpeakerTestCapability,
|
||||
capabilities.RoborockVoicePackManagementCapability,
|
||||
capabilities.RoborockManualControlCapability,
|
||||
capabilities.RoborockTotalStatisticsCapability,
|
||||
capabilities.RoborockCurrentStatisticsCapability,
|
||||
].forEach(capability => {
|
||||
|
||||
@ -0,0 +1,74 @@
|
||||
const HighResolutionManualControlCapability = require("../../../core/capabilities/HighResolutionManualControlCapability");
|
||||
|
||||
/**
|
||||
* @extends HighResolutionManualControlCapability<import("../RoborockValetudoRobot")>
|
||||
*/
|
||||
class RoborockHighResolutionManualControlCapability extends HighResolutionManualControlCapability {
|
||||
/**
|
||||
*
|
||||
* @param {object} options
|
||||
* @param {number} [options.velocityLimit]
|
||||
* @param {import("../RoborockValetudoRobot")} options.robot
|
||||
* @class
|
||||
*/
|
||||
constructor(options) {
|
||||
super(options);
|
||||
|
||||
this.sequenceId = 0;
|
||||
this.active = false;
|
||||
|
||||
/**
|
||||
* According to user reports, the Roborock V1 doesn't like velocities >= (-)0.3
|
||||
* They work fine with the S5 and newer(?) but get ignored by the V1 firmware
|
||||
* causing it to not move at all.
|
||||
*/
|
||||
this.velocityLimitPos = options.velocityLimit ?? 1;
|
||||
this.velocityLimitNeg = this.velocityLimitPos * -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async enableManualControl() {
|
||||
this.sequenceId = 0;
|
||||
this.active = true;
|
||||
|
||||
return this.robot.sendCommand("app_rc_start", [], {});
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async disableManualControl() {
|
||||
this.sequenceId = 0;
|
||||
this.active = false;
|
||||
|
||||
return this.robot.sendCommand("app_rc_end", [], {});
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<boolean>}
|
||||
*/
|
||||
async manualControlActive() {
|
||||
return this.active;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {import("../../../entities/core/ValetudoManualMovementVector")} vector
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async manualControl(vector) {
|
||||
const omega = (vector.angle * (Math.PI / 180) * -1);
|
||||
let velocity = vector.velocity / 2.5; // -0.4 to 0.4
|
||||
velocity = Math.max(this.velocityLimitNeg, velocity);
|
||||
velocity = Math.min(this.velocityLimitPos, velocity);
|
||||
|
||||
return this.robot.sendCommand("app_rc_move", [{
|
||||
omega: omega,
|
||||
velocity: velocity,
|
||||
seqnum: ++this.sequenceId
|
||||
}], {});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RoborockHighResolutionManualControlCapability;
|
||||
@ -11,6 +11,7 @@ module.exports = {
|
||||
RoborockDoNotDisturbCapability: require("./RoborockDoNotDisturbCapability"),
|
||||
RoborockFanSpeedControlCapability: require("./RoborockFanSpeedControlCapability"),
|
||||
RoborockGoToLocationCapability: require("./RoborockGoToLocationCapability"),
|
||||
RoborockHighResolutionManualControlCapability: require("./RoborockHighResolutionManualControlCapability"),
|
||||
RoborockKeyLockCapability: require("./RoborockKeyLockCapability"),
|
||||
RoborockLocateCapability: require("./RoborockLocateCapability"),
|
||||
RoborockManualControlCapability: require("./RoborockManualControlCapability"),
|
||||
@ -34,5 +35,5 @@ module.exports = {
|
||||
RoborockVoicePackManagementCapability: require("./RoborockVoicePackManagementCapability"),
|
||||
RoborockWaterUsageControlCapability: require("./RoborockWaterUsageControlCapability"),
|
||||
RoborockWifiConfigurationCapability: require("./RoborockWifiConfigurationCapability"),
|
||||
RoborockZoneCleaningCapability: require("./RoborockZoneCleaningCapability")
|
||||
RoborockZoneCleaningCapability: require("./RoborockZoneCleaningCapability"),
|
||||
};
|
||||
|
||||
Loading…
Reference in New Issue
Block a user