def do_zcl(self, line): """ To send ZCL message to device: zcl <cluster> <command> <nodeid> <endpoint> <groupid> [key=value]... To get a list of clusters: zcl ? To get a list of commands in cluster: zcl ? <cluster> Send ZCL command to device nodeid """ try: args = shlex.split(line) all_commands = self.devCtrl.ZCLCommandList() if len(args) == 1 and args[0] == '?': print('\n'.join(all_commands.keys())) elif len(args) == 2 and args[0] == '?': if args[1] not in all_commands: raise exceptions.UnknownCluster(args[1]) for commands in all_commands.get(args[1]).items(): args = ", ".join([ "{}: {}".format(argName, argType) for argName, argType in commands[1].items() ]) print(commands[0]) if commands[1]: print(" ", args) else: print(" <no arguments>") elif len(args) > 4: if args[0] not in all_commands: raise exceptions.UnknownCluster(args[0]) command = all_commands.get(args[0]).get(args[1], None) # When command takes no arguments, (not command) is True if command is None: raise exceptions.UnknownCommand(args[0], args[1]) err, res = self.devCtrl.ZCLSend(args[0], args[1], int(args[2]), int(args[3]), int(args[4]), FormatZCLArguments( args[5:], command), blocking=True) if err != 0: print("Failed to receive command response: {}".format(res)) elif res != None: print("Received command status response:") print(res) else: print("Success, no status code is attached with response.") else: self.do_help("zcl") except exceptions.ChipStackException as ex: print("An exception occurred during process ZCL command:") print(str(ex)) except Exception as ex: print("An exception occurred during processing input:") traceback.print_exc() print(str(ex))
def do_zcl(self, line): """ To send ZCL message to device: zcl <cluster> <command> <nodeid> <endpoint> <groupid> [key=value]... To get a list of clusters: zcl ? To get a list of commands in cluster: zcl ? <cluster> Send ZCL command to device nodeid """ try: args = shlex.split(line) if len(args) == 1 and args[0] == '?': print(self.devCtrl.ZCLList().keys()) elif len(args) == 2 and args[0] == '?': cluster = self.devCtrl.ZCLList().get(args[1], None) if not cluster: raise exceptions.UnknownCluster(args[1]) for commands in cluster.items(): args = ", ".join([ "{}: {}".format(argName, argType) for argName, argType in commands[1].items() ]) print(commands[0]) if commands[1]: print(" ", args) else: print(" <no arguments>") elif len(args) > 4: cluster = self.devCtrl.ZCLList().get(args[0], None) if not cluster: raise exceptions.UnknownCluster(args[0]) command = cluster.get(args[1], None) # When command takes no arguments, (not command) is True if command == None: raise exceptions.UnknownCommand(args[0], args[1]) self.devCtrl.ZCLSend(args[0], args[1], int(args[2]), int(args[3]), int(args[4]), FormatZCLArguments(args[5:], command)) else: self.do_help("zcl") except exceptions.ChipStackException as ex: print("An exception occurred during process ZCL command:") print(str(ex)) except Exception as ex: print("An exception occurred during processing input:") print(str(ex))
def send_zcl_command(devCtrl, line): """ Send ZCL message to device: <cluster> <command> <nodeid> <endpoint> <groupid> [key=value]... :param devCtrl: device controller instance :param line: command line :return: error code and command responde """ res = None err = 0 try: args = shlex.split(line) all_commands = devCtrl.ZCLCommandList() if len(args) < 5: raise exceptions.InvalidArgumentCount(5, len(args)) if args[0] not in all_commands: raise exceptions.UnknownCluster(args[0]) command = all_commands.get(args[0]).get(args[1], None) # When command takes no arguments, (not command) is True if command == None: raise exceptions.UnknownCommand(args[0], args[1]) err, res = devCtrl.ZCLSend(args[0], args[1], int(args[2]), int(args[3]), int(args[4]), FormatZCLArguments(args[5:], command), blocking=True) if err != 0: log.error("Failed to send ZCL command [{}] {}.".format(err, res)) elif res != None: log.info("Success, received command response:") log.info(res) else: log.info("Success, no command response.") except exceptions.ChipStackException as ex: log.error("An exception occurred during processing ZCL command:") log.error(str(ex)) err = -1 except Exception as ex: log.error("An exception occurred during processing input:") log.error(str(ex)) err = -1 return (err, res)