align actions with cleaning robot interface & use settings when cleaning

master
loosrob 2021-04-11 16:03:05 +02:00 committed by Michael Zanetti
parent a5bf3238c3
commit 6e6c32bc13
2 changed files with 71 additions and 25 deletions

View File

@ -16,6 +16,9 @@
"createMethods": ["User"],
"interfaces": ["account"],
"setupMethod": "oauth",
"settingsTypes": [
],
"stateTypes":[
{
"id": "e8f47781-e3fd-416f-a9ac-51ef942d0573",
@ -36,11 +39,7 @@
}
],
"actionTypes": [
{
"id": "a4b5f07f-e71a-4c3a-8d6b-50162a455159",
"name": "getMaps",
"displayName": "Get available maps"
}
]
},
{
@ -99,13 +98,21 @@
},
{
"id": "dce4f7f3-a0a6-46bb-9216-c9089d9e9b0d",
"name": "state",
"name": "robotState",
"displayName": "Cleaning state",
"displayNameEvent": "Cleaning state changed",
"type": "QString",
"possibleValues": ["docked", "cleaning", "paused", "traveling", "stopped", "error"],
"defaultValue": "docked"
},
{
"id": "cb22b48c-1c21-4d52-bde6-847287435685",
"name": "errorMessage",
"displayName": "Error message",
"displayNameEvent": "Error message changes",
"type": "QString",
"defaultValue": "no error"
},
{
"id": "1b8abd35-8276-44ba-8c75-a647877b2e11",
"name": "charging",
@ -170,6 +177,3 @@
}
]
}

View File

@ -139,16 +139,27 @@ def refreshRobot(thing):
rbtStartAv = rbtStateCommands['start']
rbtPauseAv = rbtStateCommands['pause']
rbtResumeAv = rbtStateCommands['resume']
if rbtStateDetails['isDocked'] == True:
thing.setStateValue(robotStateStateTypeId, "docked")
elif rbtPauseAv == True:
thing.setStateValue(robotStateStateTypeId, "cleaning")
elif rbtResumeAv == True:
thing.setStateValue(robotStateStateTypeId, "paused")
elif rbtStartAv == True:
thing.setStateValue(robotStateStateTypeId, "stopped")
if rbtStateJson['error'] == None:
rbtError = "no error"
else:
thing.setStateValue(robotStateStateTypeId, "error")
rbtError = rbtStateJson['error']
# alert state hasn't been implemented yet (not sure what would trigger an alert, haven't seen one yet)
if rbtStateJson['alert'] == None:
rbtAlert = "no alert"
else:
rbtAlert = rbtStateJson['alert']
logger.log("error: %s: -- alert: %s" % (rbtError, rbtAlert))
if rbtStateDetails['isDocked'] == True:
thing.setStateValue(robotRobotStateStateTypeId, "docked")
elif rbtPauseAv == True:
thing.setStateValue(robotRobotStateStateTypeId, "cleaning")
elif rbtResumeAv == True:
thing.setStateValue(robotRobotStateStateTypeId, "paused")
elif rbtStartAv == True:
thing.setStateValue(robotRobotStateStateTypeId, "stopped")
else:
thing.setStateValue(robotRobotStateStateTypeId, "error")
thing.setStateValue(robotErrorMessageStateTypeId, rbtError)
def pollService():
@ -159,7 +170,6 @@ def pollService():
refreshRobot(thing)
except:
logger.warn("Error refreshing robot state")
# restart the timer for next poll
global pollTimer
pollTimer = threading.Timer(60, pollService)
@ -167,17 +177,25 @@ def pollService():
def executeAction(info):
return; # Temporary, to not accidentally start it
# return; # Temporary, to not accidentally start it
if info.actionTypeId == robotStartCleaningActionTypeId:
# To do: add a parameter to the start action which takes a zone id
thingsAndRobots[info.thing].start_cleaning()
refreshRobot(info.thing)
if info.thing.stateValue(robotRobotStateStateTypeId) == "paused":
thingsAndRobots[info.thing].resume_cleaning()
else:
# To do: add a parameter to the start action which takes a zone id
cleanWithRobot(info.thing, None, None)
refreshRobot(info.thing)
info.finish(nymea.ThingErrorNoError)
return
if info.actionTypeId == robotPauseCleaningActionTypeId:
thingsAndRobots[info.thing].pause_cleaning()
refreshRobot(info.thing)
if info.thing.stateValue(robotRobotStateStateTypeId) == "paused":
thingsAndRobots[info.thing].resume_cleaning()
else:
thingsAndRobots[info.thing].pause_cleaning()
refreshRobot(info.thing)
info.finish(nymea.ThingErrorNoError)
return
@ -194,6 +212,28 @@ def executeAction(info):
info.finish(nymea.ThingErrorNoError)
return
def cleanWithRobot(robotThing, mapID, boundaryID):
# To do: add a parameter to the start action which takes a zone id --> this should now be represented by mapID & boundaryID
robot = thingsAndRobots[robotThing]
logger.log("Cleaning with robot:", robot, robotThing)
boolEco = robotThing.setting(robotSettingsEcoParamTypeId)
boolCare = robotThing.setting(robotSettingsCareParamTypeId)
boolNogo = robotThing.setting(robotSettingsNoGoLinesParamTypeId)
if boolEco == False:
intEco = 2
else:
intEco = 1
if boolCare == False:
intCare = 1
else:
intCare = 2
if boolNogo == False:
intNogo = 2
else:
intNogo = 4
logger.log("Settings: Eco:", boolEco, "Care:", boolCare, "Enable nogo:", boolNogo, "mapID:", mapID, "boundaryID:", boundaryID)
thingsAndRobots[robotThing].start_cleaning(mode=intEco, navigation_mode=intCare, category=intNogo, boundary_id=boundaryID, map_id=mapID)
refreshRobot(robotThing)
def browseThing(browseResult):
robotThing = browseResult.thing
@ -241,6 +281,8 @@ def browseThing(browseResult):
def executeBrowserItem(info):
# TODO: An item in the browser has been clicked.
logger.log("Browser item clicked:", info.itemId)
logger.log("Parent item:", )
# cleanWithRobot(info.thing, mapID, boundaryID)
info.finish(nymea.ThingErrorNoError)
@ -248,4 +290,4 @@ def deinit():
global pollTimer
# If we started a poll timer, cancel it on shutdown.
if pollTimer is not None:
pollTimer.cancel()
pollTimer.cancel()