diff --git a/fakedata.py b/fakedata.py index abc3d2c..f370dde 100644 --- a/fakedata.py +++ b/fakedata.py @@ -74,6 +74,14 @@ def linramp(start, end, wtarget, minsize): #print(repr((x, i))) yield (i, x / ndates * wtarget) +def makeconsumption(s, mean, sig, interval): + s = s.replace(hour=0, minute=0, second=0) + e = (s + timedelta(days=1)) - interval + + ret = [ (i, rand.gauss(mean, sig)) for i in drange(s, e, interval) ] + + return ret + def distribute(s, e, prod, minsize): onehour = timedelta(hours=1) totaltime = e - s @@ -101,7 +109,8 @@ def distribute(s, e, prod, minsize): #print('start') -points = [] +prodpoints = [] +conspoints = [] index = [] def serializearrowasmili(obj): @@ -117,7 +126,24 @@ for i in arrow.Arrow.range('day', startdate, enddate): index.append((noon, whprod)) #print(repr(i), whprod) - dist = distribute(s, e, whprod, timedelta(seconds=20)) + + dist = [] + + conspoints.extend(makeconsumption(s, rand.uniform(400,800), 100, timedelta(minutes=1))) + + # zero points for non-production + import sys + print(repr((i, s)), file=sys.stderr) + dist.extend(distribute(i, s, 0, timedelta(minutes=5))) + + # production + print(repr((s, e)), file=sys.stderr) + dist.extend(distribute(s, e, whprod, timedelta(seconds=20))) + + # zero points for non-production + eod = i.replace(hour=23, minute=55) + print(repr((e, eod)), file=sys.stderr) + dist.extend(distribute(e, eod, 0, timedelta(minutes=5))) # print timestamps as miliseconds if False: @@ -128,6 +154,6 @@ for i in arrow.Arrow.range('day', startdate, enddate): print('\n'.join('%s %s' % (a, b) for a, b in dist)) else: #print(json.dumps(tuple(dist), indent=2)) - points.extend(dist) + prodpoints.extend(dist) -print('fakedata =', json.dumps(dict(production=points, index=index), default=serializearrowasmili)) +print('fakedata =', json.dumps(dict(production=prodpoints, consumption=conspoints, index=index), default=serializearrowasmili))