diff options
Diffstat (limited to 'aneatocli.py')
-rw-r--r-- | aneatocli.py | 211 |
1 files changed, 126 insertions, 85 deletions
diff --git a/aneatocli.py b/aneatocli.py index f6cac4f..1137828 100644 --- a/aneatocli.py +++ b/aneatocli.py @@ -1,15 +1,16 @@ +#!/usr/bin/env python """ aneatocli : a Neato Robot command and state querying cli. Usage: - aneatocli.py --go | --start-cleaning - aneatocli.py --stp | --stop-cleaning - aneatocli.py --pse | --pause-cleaning - aneatocli.py --res | --resume-cleaning - aneatocli.py --base |--send-to-base - aneatocli.py --gc | --get-commands - aneatocli.py --lsec | --load-secrets - aneatocli.py --acc | -account + aneatocli.py (--gc | --get-commands) <robotname> + aneatocli.py [--go | --start-cleaning ] <robotname> + aneatocli.py [--stp | --stop-cleaning ] <robotname> + aneatocli.py [--pse | --pause-cleaning ] <robotname> + aneatocli.py [--res | --resume-cleaning] <robotname> + aneatocli.py [--base | --send-to-base ] <robotname> + aneatocli.py [--gi |--get-infos ] <robotname> + aneatocli.py (--lgsc | --log-secrets) <mail> aneatocli.py -h | --help aneatocli.py -v | --version @@ -18,109 +19,149 @@ Options: -v , --version Show version. --go , --start-cleaning Tell the robot to start cleaning. --stp , --stop-cleaning Tell the robot to stop cleaning. - --pse , --pause-cleaning Tell the robot to pause cleaning. - --res , --resume-cleaning Tell the robot to resume cleaning. - --base ,--sendtobase Tell the robot to go back to its dock. + --pse , --pause-cleaning Tell the robot to pause cleaning. + --res , --resume-cleaning Tell the robot to resume cleaning. + --base ,--send-to-base Tell the robot to go back to its dock. --gc , --get-commands Get the available commands. - --lsec , --load-secrets Get the Serial Number and the secret. You will be prompted for login. + --lgsc , --log-secrets Log the credentials into the json file. """ from sys import exit from os.path import exists as chkf from pprint import pprint +from getpass import getpass as getp import json -global robot -def loadCreds() +try: + from pybotvac import Robot + from pybotvac import Account +except: + print("pybotvac package is not installed.\n\nPlease run 'pip install pybotvac' from your command prompt\n") + exit() + +try: + from docopt import docopt +except: + print("docopt package is not installed.\n\nPlease run 'pip install docopt==0.6.2' from your command prompt\n") + exit() + + +def logCreds(): try: - with open("robotCreds.json","r") as json_file: - creds=json.load(json_file) - print("Your serial number is "+creds["serialID"] - +". \n Your secret is "+creds["secretID"] - +".\n Your robot "+creds["name"]+" have the following traits"+creds["traits"]) - robot = Robot(creds["serialID"],creds["secretID"],creds["traits"],creds["name"]) + mail=arguments["<mail>"] + passwd=getp("Password:") + acc=Account(mail,passwd) except: - print("Cannot log your robot(s) with the provided infos.") + print("Cannot login. Please try again.") + raise + + try: + for robot in acc.robots: + json_data="{\"serialID\": \""+robot.serial+"\" ,\"secretID\": \""+robot.secret+"\" ,\"traits\": \""+robot.traits[0]+"\" ,\"name\": \""+robot.name+"\"}" + json_filename=robot.name+".json" + with open(json_filename,"w") as json_file: + json_file.write(json_data) + json_file.close() + except: + print("Cannot write robot creds.") + raise + +def initRobot(): + json_filename=arguments["<robotname>"]+".json" + try: + with open(json_filename,"r") as json_file: + creds=json.load(json_file) + except: + print("File doesn't exist.") + exit() + + try: + robot = Robot(creds["serialID"],creds["secretID"],creds["traits"],creds["name"]) + return robot + except: + print("Cannot init the robot "+arguments["<robotname>"]) + raise + def getCmds(): - cmds=robot.state["availableCommands"] + rob=initRobot() + getInfos() + # get the available commands try: - with open("robotstate.json", "w") as json_file: - json.dump(cmds, json_file) - print("File robotstate.json created") + cmds = rob.state["availableCommands"] except: + print("HTTP Error or Network failure.") raise exit() - -def startC(): - if robot.state["availableCommands"]["start"]: -d robot.start_cleaning() - else: - print("Cannot start the robot.") - -def stopC(): - if robot.state["availableCommands"]["stop"]: - robot.stop_cleaning() - else: - print("Cannot stop the robot.") - - -def pauseC(): - if robot.state["availableCommands"]["pause"]: - robot.pause_cleaning() - else: - print("Cannot pause the robot.") - -def resumeC(): - if robot.state["availableCommands"]["resume"]: - robot.resume_cleaning() - else: - print("Cannot resume the robot.") - -def go2B(): - if robot.state["availableCommands"]["goToBase"]: - robot.send_to_base() - else: - print("Cannot send the robot to base.") - + # write available cmds to file + try: + json_state_file=arguments["<robotname>"]+"-robotcommands.json" + with open(json_state_file, "w") as json_file: + json.dump(cmds, json_file) + print("File "+json_state_file+" created") + except: + raise + exit() - -def funCall(simpleArg, verboseArg, func, *args): + +def getInfos(): + rob=initRobot() + try: + json_info_file=arguments["<robotname>"]+"-robotinfos.json" + with open(json_info_file, "w") as info_file: + json.dump(rob.state,info_file, indent=4) + json.dump(rob.get_general_info().json(),info_file, indent=4) + json.dump(rob.get_robot_info().json(),info_file, indent=4) + print("File "+json_info_file+" created") + except: + print("Cannot retrieve infos.") + raise + exit() + + + +def funCallFromArgs(simpleArg, verboseArg, func, *args): if arguments[simpleArg] or arguments[verboseArg]: func( *args ) - - -getSecrets() - -try: - from pybotvac import Robot -except: - print("pybotvac package is not installed.\n\nPlease run 'pip install pybotvac' from your command prompt\n") - exit() - -try: - from docopt import docopt +def actC(act): + rob=initRobot() + + def checkActRun(robofunc): + + try: + if rob.state["availableCommands"][act]: + robofunc() + except: + print("Cannot "+act+" the robot.") + + if "start" in act: + checkActRun(rob.start_cleaning) + elif "stop" in act: + checkActRun(rob.stop_cleaning) + elif "pause" in act: + checkActRun(rob.pause_cleaning) + elif "resume" in act: + checkActRun(rob.resume_cleaning) + elif "goToBase" in act: + checkActRun(rob.send_to_base) -except: - print("docopt package is not installed.\n\nPlease run 'pip install docopt==0.6.2' from your command prompt\n") - exit() - if __name__ == '__main__': arguments = docopt(__doc__, version='aneatocli 0.1') #nts:useful pour debugging - pprint(arguments) - + #pprint(arguments) + + +funCallFromArgs("--go","--start-cleaning",actC,"start") +funCallFromArgs("--stp","--stop-cleaning",actC,"stop") +funCallFromArgs("--pse","--pause-cleaning",actC,"pause") +funCallFromArgs("--res","--resume-cleaning",actC,"resume") +funCallFromArgs("--base","--send-to-base",actC,"goToBase") +funCallFromArgs("--gc","--get-commands",getCmds) +funCallFromArgs("--gi","--get-infos",getInfos) +funCallFromArgs("--lgsc","--log-secrets",logCreds) - -funCall("--go","--start-cleaning",startC) -funCall("--stp","--stop-cleaning",stopC) -funCall("--pse","--pause-cleaning",pauseC) -funCall("--res","--resume-cleaning",resumeC) -funCall("--base","--send-to-base",go2B) -funCall("--gc","--get-commands",getCmds) -funCall("--lsec","--load-secrets",loadCreds) |