constructor(options) {
        super(options);

        this.miot_properties = {
            manual_control: {
                siid: DreameMiotServices["GEN2"].VACUUM_2.SIID,
                piid: DreameMiotServices["GEN2"].VACUUM_2.PROPERTIES.MANUAL_CONTROL.PIID
            }
        };

        this.keepAliveTimeout = undefined;

        this.robot.state.subscribe(
            new CallbackAttributeSubscriber((eventType, status, prevStatus) => {
                if (
                    eventType === AttributeSubscriber.EVENT_TYPE.CHANGE &&
                    //@ts-ignore
                    status.value !== StatusStateAttribute.VALUE.MANUAL_CONTROL &&
                    prevStatus &&
                    //@ts-ignore
                    prevStatus.value === StatusStateAttribute.VALUE.MANUAL_CONTROL
                ) {
                    this.disableManualControl().then(() => {
                        /* intentional as there is nowhere to send feedback to */
                    }).catch(() => {
                        /* intentional as there is nowhere to send feedback to */
                    });
                }
            }),
            {attributeClass: StatusStateAttribute.name}
        );

        this.lastCommand = new Date(0).getTime();
        this.active = false;

        this.helper = new DreameMiotHelper({robot: this.robot});
    }
@param {object} options
@param {import("../DreameGen2ValetudoRobot")} options.robot