Exemple #1
0
    def setUp(self):

        self.parser = KnxParser("enheter.xml", "groupaddresses.csv", False,
                                False, {
                                    "1/1/14": "onoff",
                                    "1/1/15": "temp",
                                    "1/1/16": "time",
                                    "1/1/17": "%%"
                                })
Exemple #2
0
    def test_init(self):

        p = KnxParser("enheter.xml", "groupaddresses.csv", False, False, {
            "1/1/14": "onoff",
            "1/1/15": "temp",
            "1/1/16": "time",
            "1/1/17": "%%"
        })
        self.assertIsInstance(p, KnxParser)
Exemple #3
0
    def __init__(self,
                 devicesfilename,
                 groupaddrfilename,
                 infiles,
                 dumpGAtable,
                 types,
                 flanksOnly,
                 tail,
                 groupAddressSet=None,
                 hourly_avg=False,
                 start_time=None):

        self.delta = 0
        self.delta2 = 0
        self.pduCount = 0
        self.pduSkipped = 0
        self.h_avg = hourly_avg if hourly_avg != None else False
        self.dbgMsg = "groupAddressSet = %s" % str(groupAddressSet)
        start = time()

        #
        # Read in all the files...
        #
        lines = []
        lines_meta = []
        start = 1
        for infile in infiles:
            cachename, newLines = self._readLinesFromFileOrCache(infile)
            lines.extend(newLines)
            lines_meta.append((infile.name, cachename, start, len(newLines)))
            start += len(newLines)

        print "Creating parser..."
        self.knx = KnxParser(devicesfilename, groupaddrfilename, dumpGAtable,
                             flanksOnly, types)

        if tail != 0:
            if tail < len(lines):
                lines = lines[len(lines) - tail:]

        if start_time != None:
            self.found_start = "Trying to locate start time..."
            print "Trying to locate start time..."
            for i in range(len(lines) - 1, 0, -1):
                try:
                    timestamp, pdu = lines[i].split(":LPDU:")
                except ValueError:
                    timestamp, pdu = lines[i].split("LPDU:")
                ts = mktime(strptime(timestamp, "%a %b %d %H:%M:%S %Y"))
                if ts < start_time:
                    print "Found start time!"
                    self.found_start = "Found start time!"
                    lines = lines[i + 1:]
                    break
        else:
            self.found_start = "not relevant"

        #
        # Parsing the input...
        #
        basetime = 0
        lineNo = 0
        origfilename, cachefilename, startLine, numLines = lines_meta.pop(0)

        for line in lines:
            # Skip empty lines...
            if len(line.strip()) < 1:
                continue

            # If filter specified, skip unwanted GAs
            if groupAddressSet != None:
                ignore = True
                for ga in groupAddressSet:
                    if line.find(ga) != -1:
                        ignore = False
                        break
                if ignore:
                    self.pduSkipped += 1
                    continue

            lineNo += 1

            # Differentiate between parsing new files and loading cached input
            if line[:2] == "@@":
                pass
                #print "loading: %s" %line.strip().decode("utf-8")
            else:
                # Split timestamp from rest...
                try:
                    timestamp, pdu = line.split(":LPDU:")
                except ValueError:
                    timestamp, pdu = line.split("LPDU:")

                try:
                    if basetime == 0:
                        basetime = mktime(
                            strptime(timestamp, "%a %b %d %H:%M:%S %Y"))
                        self.knx.setTimeBase(basetime)
                except ValueError:
                    printVerbose("timestamp error: %s" % timestamp)

                try:
                    self.knx.parseVbusOutput(lineNo, timestamp, pdu)
                    self.pduCount += 1
                except KnxParseException:
                    print "Failed: %s:  %s" % (lineNo, pdu)
                    sys.exit(1)

            # Check if we are into a new file, in which case we should
            # potentially update the cache file for the last file...
            # Note that the --tail option disables creation of cache files
            if (tail == 0) and lineNo == startLine + numLines - 1:
                if cachefilename != None:
                    print "update cache file for %s (%s) at %s" % (
                        origfilename, cachefilename, lineNo)
                    try:
                        of = open(cachefilename, "w")
                    except IOError:
                        print cachefilename
                    else:
                        self.knx.storeCachedInput(of, startLine)
                # Shift meta data to new file...
                try:
                    origfilename, cachefilename, startLine, numLines = lines_meta.pop(
                        0)
                except:
                    print "Last file done, line no (%s)" % lineNo
                    origfilename, cachefilename, startLine, numLines = (None,
                                                                        None,
                                                                        None,
                                                                        None)

            if lineNo % 10000 == 0:
                print "Parsed %d lines..." % lineNo

        print "Parsed %d lines..." % lineNo
        self.dbgMsg += "Parsed %d lines..." % lineNo

        self.delta = time() - start