Skip to content

Commit

Permalink
feat(vendor.viomi): ViomiCurrentStatisticsCapability
Browse files Browse the repository at this point in the history
  • Loading branch information
Hypfer committed Nov 8, 2021
1 parent 93aa77b commit 9dd1091
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 12 deletions.
16 changes: 5 additions & 11 deletions backend/lib/robots/viomi/ViomiValetudoRobot.js
Original file line number Diff line number Diff line change
Expand Up @@ -335,18 +335,12 @@ class ViomiValetudoRobot extends MiioValetudoRobot {
}));
}

if (data["s_area"]) { //TODO: actually not an attribute. Use Job
this.state.upsertFirstMatchingAttribute(new stateAttrs.LatestCleanupStatisticsAttribute({
type: stateAttrs.LatestCleanupStatisticsAttribute.TYPE.AREA,
value: data["s_area"] * 10000 //m² to cm²
}));
}

if (data["s_time"]) {
this.state.upsertFirstMatchingAttribute(new stateAttrs.LatestCleanupStatisticsAttribute({
type: stateAttrs.LatestCleanupStatisticsAttribute.TYPE.DURATION,
value: data["s_time"] * 60
}));
if (data["s_area"] !== undefined) {
this.capabilities[capabilities.ViomiCurrentStatisticsCapability.TYPE].currentStatistics.area = parseInt(data["s_area"])* 10000;
}
if (data["s_time"] !== undefined) {
this.capabilities[capabilities.ViomiCurrentStatisticsCapability.TYPE].currentStatistics.time = parseInt(data["s_time"]) * 60;
}

if (data["box_type"] !== undefined) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
const CurrentStatisticsCapability = require("../../../core/capabilities/CurrentStatisticsCapability");
const ValetudoDataPoint = require("../../../entities/core/ValetudoDataPoint");

/**
* @extends CurrentStatisticsCapability<import("../ViomiValetudoRobot")>
*/
class ViomiCurrentStatisticsCapability extends CurrentStatisticsCapability {
/**
* @param {object} options
* @param {import("../ViomiValetudoRobot")} options.robot
*/
constructor(options) {
super(options);

this.currentStatistics = {
time: undefined,
area: undefined
};
}

/**
* @return {Promise<Array<ValetudoDataPoint>>}
*/
async getStatistics() {
if (this.currentStatistics.time === undefined || this.currentStatistics.area === undefined ){
await this.robot.pollState(); //fetching robot state populates the capability's internal state. somewhat spaghetti :(
}

return [
new ValetudoDataPoint({
type: ValetudoDataPoint.TYPES.TIME,
value: this.currentStatistics.time
}),
new ValetudoDataPoint({
type: ValetudoDataPoint.TYPES.AREA,
value: this.currentStatistics.area
})
];
}
}

module.exports = ViomiCurrentStatisticsCapability;
3 changes: 2 additions & 1 deletion backend/lib/robots/viomi/capabilities/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module.exports = {
ViomiCarpetModeControlCapability: require("./ViomiCarpetModeControlCapability"),
ViomiCombinedVirtualRestrictionsCapability: require("./ViomiCombinedVirtualRestrictionsCapability"),
ViomiConsumableMonitoringCapability: require("./ViomiConsumableMonitoringCapability"),
ViomiCurrentStatisticsCapability: require("./ViomiCurrentStatisticsCapability"),
ViomiDebugCapability: require("./ViomiDebugCapability"),
ViomiDoNotDisturbCapability: require("./ViomiDoNotDisturbCapability"),
ViomiFanSpeedControlCapability: require("./ViomiFanSpeedControlCapability"),
Expand All @@ -17,5 +18,5 @@ module.exports = {
ViomiSpeakerVolumeControlCapability: require("./ViomiSpeakerVolumeControlCapability"),
ViomiVoicePackManagementCapability: require("./ViomiVoicePackManagementCapability"),
ViomiWaterUsageControlCapability: require("./ViomiWaterUsageControlCapability"),
ViomiZoneCleaningCapability: require("./ViomiZoneCleaningCapability"),
ViomiZoneCleaningCapability: require("./ViomiZoneCleaningCapability")
};

0 comments on commit 9dd1091

Please sign in to comment.