diff --git a/index.js b/index.js index 5ea07a4..a8c75d9 100644 --- a/index.js +++ b/index.js @@ -102,6 +102,33 @@ function NeatoVacuumRobotAccessory(robot, platform) { this.vacuumRobotScheduleService = new Service.Switch(this.name + " Schedule", "schedule"); this.vacuumRobotBatteryService = new Service.BatteryService("Battery", "battery"); + this.updatePersistentMaps(() => { + this.vacuumRobotCleanZoneServices = {}; + this.maps.forEach((map) => { + map.boundaries.forEach((boundary) => { + if (boundary.type === "polygone") { + this.vacuumRobotCleanZoneServices[boundary.id] = new Service.Switch(this.name + " Clean the " + boundary.name, "clean"); + this.vacuumRobotCleanZoneServices[boundary.id].getCharacteristic(Characteristic.On).on('set', (on, callback) => { + if(on){ + if(that.robot.canStart) { + this.robot.startCleaningBoundary(this.eco, this.extraCare, boundary.id, (error, result) => { + if (error){ + debug(error+": "+JSON.stringify(result)); + return; + } + callback(); + }) + } else { + debug("Error, robot is already cleaning"); + callback(); + } + } + }) + } + }) + }) + }); + this.updateRobotTimer(); } @@ -371,6 +398,30 @@ NeatoVacuumRobotAccessory.prototype = { } }, + updatePersistentMaps: function(callback) { + this.robot.getPersistentMaps((error, maps) => { + if (error) { + this.log.error(error + ": " + result); + return; + } + this.maps = maps; + let processedMapsCounter = 0 + maps.forEach((map) => { + this.getMapBoundaries(map.id, (error, result) => { + if(error) { + this.log.error(error + ": " + result); + } else { + map.boundaries = result; + } + processedMapsCounter++; + if(processedMapsCounter == this.maps.length) { + callback(); + } + }) + }) + }) + }, + updateRobotTimer: function () { let that = this; this.updateRobot(function (error, result) { @@ -413,4 +464,4 @@ NeatoVacuumRobotAccessory.prototype = { } }); }, -} \ No newline at end of file +}