コード例 #1
0
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)
コード例 #2
0
ファイル: can.py プロジェクト: wlodarz/modbus2can
    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"]))