from random import Random gmt7 = ('GMT+7', '-0700', lambda x: x - 7 * 60 * 60) gmt8 = ('GMT+8', '-0800', lambda x: x - 8 * 60 * 60) def maketz(utc, tzinfo): tza, tzb, fun = tzinfo lcl = fun(utc) return '\t'.join(('z', tza, str(lcl), str(utc), tzb)) def makem(utc, tzinfo): reqdel = random.uniform(.5, 2.5) demand = random.uniform(.1, .5) return '\t'.join(('m', str(utc + reqdel), str(tzinfo[2](utc)), 'Connected', '%0.4f' % demand, '1.483000', 'kW', '1.000', '1.000', 'kWh')) def gen(start, step, cnt, tzinfoseq): '''Generate data starting from start, ending at stop. Each entry is step seconds advanced. There will be cnt entries between tzinfo, and cnt entries following the final tzinfo.''' utc = start ret = [] num = 1 prevtz = None for tz in tzinfoseq: if prevtz is None: prevtz = tz for j in xrange(num): ret.append(makem(utc, prevtz)) utc += step if prevtz != tz and j > num / 2: prevtz = tz ret.append(maketz(utc - 1, tz)) num = cnt for j in xrange(num): ret.append(makem(utc, tz)) utc += step return utc, ret if __name__ == '__main__': global random random = Random() random.seed(5) tzs = [ gmt7 ] * 6 + [ gmt8 ] * 3 nextutc, data = gen(1577952662, 10, 10, tzs) print >>open('data.0.log', 'w'), '\n'.join(data) # simulate a restart nextutc += 100 tzs = [ gmt8 ] * 6 + [ gmt7 ] * 3 nextutc, data = gen(nextutc, 10, 10, tzs) print >>open('data.1.log', 'w'), '\n'.join(data)