def main(argv): cmd = [] port = None driver = None verbose = "1" help = False output_type = "JSON" cloud_plugin = None lg_code = None languages = ["EN", "IT", "DE"] logger = None try: opts, args = getopt.getopt(argv,"hc:p:d:v:o:u:l:g:", ["help", "cmd=", "port=", "driver=", "verbose=", "output_type=", "upload=", "language=", "log="]) except getopt.GetoptError: print('pyHPSU.py -d DRIVER -c COMMAND') print(' ') print(' -d --driver driver name: [ELM327, PYCAN, EMU, HPSUD]') print(' -p --port port (eg COM or /dev/tty*, only for ELM327 driver)') print(' -o --output_type output type: [JSON, CSV, CLOUD] default JSON') print(' -c --cmd command: [see commands domain]') print(' -v --verbose verbosity: [1, 2] default 1') print(' -u --upload upload on cloud: [_PLUGIN_]') print(' -l --language set the language to use [%s]' % " ".join(languages)) print(' -g --log set the log to file [_filename]') sys.exit(2) for opt, arg in opts: if opt in ("-h", "--help"): help = True elif opt in ("-d", "--driver"): driver = arg.upper() elif opt in ("-p", "--port"): port = arg elif opt in ("-c", "--cmd"): cmd.append(arg) elif opt in ("-v", "--verbose"): verbose = arg elif opt in ("-o", "--output_type"): output_type = arg.upper() if output_type not in ["JSON", "CSV", "CLOUD"]: print("Error, please specify a correct output_type [JSON, CSV, CLOUD]") sys.exit(9) elif opt in ("-u", "--upload"): cloud_plugin = arg.upper() if cloud_plugin not in ["EMONCMS"]: print("Error, please specify a correct plugin") sys.exit(9) elif opt in ("-l", "--language"): lg_code = arg.upper() if lg_code not in languages: print("Error, please specify a correct language [%s]" % " ".join(languages)) sys.exit(9) elif opt in ("-g", "--log"): logger = logging.getLogger('domon') hdlr = logging.FileHandler(arg) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') hdlr.setFormatter(formatter) logger.addHandler(hdlr) logger.setLevel(logging.ERROR) if verbose == "2": locale.setlocale(locale.LC_ALL, '') hpsu = HPSU(driver=driver, logger=logger, port=port, cmd=cmd, lg_code=lg_code) if help: if len(cmd) == 0: print("List available commands:") print("%12s - %-10s" % ('COMMAND', 'LABEL')) print("%12s---%-10s" % ('------------', '----------')) for cmd in hpsu.listCommands: print("%12s - %-10s" % (cmd['name'], cmd['label'])) else: print("%12s - %-10s - %s" % ('COMMAND', 'LABEL', 'DESCRIPTION')) print("%12s---%-10s---%s" % ('------------', '----------', '---------------------------------------------------')) for c in hpsu.commands: print("%12s - %-10s - %s" % (c['name'], c['label'], c['desc'])) sys.exit(0) if not driver: print("Error, please specify driver [ELM327 or PYCAN, EMU, HPSUD]") sys.exit(9) arrResponse = [] for c in hpsu.commands: setValue = None for i in cmd: if ":" in i and c["name"] == i.split(":")[0]: setValue = i.split(":")[1] i = 0 while i <= 3: rc = hpsu.sendCommand(c, setValue) if rc != "KO": i = 4 if not setValue: response = hpsu.parseCommand(cmd=c, response=rc, verbose=verbose) resp = hpsu.umConversion(cmd=c, response=response, verbose=verbose) arrResponse.append({"name":c["name"], "resp":resp, "timestamp":response["timestamp"]}) else: i += 1 time.sleep(2.0) hpsu.printd('warning', 'retry %s command %s' % (i, c["name"])) if i == 4: hpsu.printd('error', 'command %s failed' % (c["name"])) if output_type == "JSON": print(arrResponse) elif output_type == "CSV": for r in arrResponse: print("%s\t%s\t%s" % (r["timestamp"], r["name"], r["resp"])) elif output_type == "CLOUD": if not cloud_plugin: print ("Error, please specify a cloud_plugin") sys.exit(9) module = importlib.import_module("plugins.cloud") cloud = module.Cloud(plugin=cloud_plugin, hpsu=hpsu, logger=logger) cloud.pushValues(vars=arrResponse)
def hpsu_handler(self, queue): ''' ''' hpsu = HPSU(driver=self.driver, logger=self.logger, port=self.port, cmd=[], lg_code=self.lg_code) while True: # get command t = queue.get() cmd = t.strip().split(':') paramName = cmd[1] print(cmd) if cmd[0] == 'g': # print("can getter") setValue = None cmd = [cmd[1]] if cmd[0] == 's': # print("can setter") setValue = cmd[2] cmd = [cmd[1], cmd[2]] print('CAN SET') print(cmd) # print(hpsu.commands) for c in hpsu.commands: if c['name'] == cmd[0]: # print(c) if setValue: # v = # v = int(float(setValue) * float(div)) print("Sending") val = cmd[1] div = c['div'] v = int(float(val) * float(div)) cmd[1] = str(v) setValue = cmd[1] # print(v) print('CAN: sending set command {0} {1}'.format(c, setValue)) # print("Receiving") rc = hpsu.sendCommand(c, setValue) if rc != "KO": if not setValue: # print("Current value") response = hpsu.parseCommand(cmd=c, response=rc, verbose=self.verbose) resp = hpsu.umConversion(cmd=c, response=response, verbose=self.verbose) div = c['div'] v = int(float(resp) * float(div)) # print(div) # print(resp) # print(v) # print("GET COMMAND OK") self.params.setValueByName(paramName, float(resp)) print("CAN: GET COMMAND OK") else: self.params.setParamChanged(paramName, 0) print("CAN: SET COMMAND OK") else: hpsu.printd('CAN: error', 'command %s failed' % (c["name"]))