async pause() {
        const statusAttribute = this.robot.state.getFirstMatchingAttributeByConstructor(
            stateAttrs.StatusStateAttribute
        );

        let lastOperation = this.robot.ephemeralState.lastOperationType;
        let lastOperationAdditionalParams = this.robot.ephemeralState.lastOperationAdditionalParams;

        // We can't pause/resume cleaning if the requested position isn't saved
        if ((lastOperation === stateAttrs.StatusStateAttribute.FLAG.SEGMENT || lastOperation === stateAttrs.StatusStateAttribute.FLAG.SPOT) &&
            lastOperationAdditionalParams.length === 0) {

            lastOperation = null;
        }

        // Pausing requires us to remember how we started cleaning. If we don't know it resuming won't work,
        // therefore we just stop. Also, pausing "return to dock" is the same as stopping it
        if (lastOperation === null || statusAttribute && statusAttribute.value === stateAttrs.StatusStateAttribute.VALUE.RETURNING) {
            await this.stop();
            return;
        }

        if (lastOperation === stateAttrs.StatusStateAttribute.FLAG.ZONE) {
            await this.setRectangularZoneMode(attributes.ViomiOperation.PAUSE_RECTANGULAR_ZONE);
        } else {
            await this.setModeWithSegments(attributes.ViomiOperation.PAUSE, lastOperationAdditionalParams);
        }
    }
Pause the current operation in a way that can be later resumed by running start().

@returns {Promise<void>}