Beste tweakers graag hulp bij het volgende probleem:
Mijn vraag
Ik heb een eigen PV-logger gemaakt. Hierbij log ik de opbrengsten van de omvormer elke 10min.
In de data zitten de volgende velden:
Timestamp
Huidige wattage (w)
totale opbrengst (kwh) (sinds installatie PV pannelen.)
Het totale opbrengst veld is dus een steeds oplopende waarde.
Nu wil ik graag een grafiek maken waar ik de dag opbrengsten van bepaalde dagen of maanden in weergeef. Dus bijv van een grafiek van een maand met alle dag opbrengsten en van een jaar met alle maand opbrengsten.
Als ik van een bepaalde dag de opbrengst wil weten, moet ik dus de laatste entry van de vorige dag aftrekken van de laatste entry van die betreffende dag.
Als ik dat voor een maand wil, moet ik dit dus 30 keer doen. Ik heb dit nu gebeund met een for loops, maar dit blijkt erg langzaam te zijn.
Mijn vraag is dus of er een query te bedenken is waarmee ik dit beter/ sneller kan doen?
Een paar pointers waar ik op moet googlen (django/sql termen) zou al erg helpen.Ik zit nu een beetje vast en kom niet verder.
Relevante software en hardware die ik gebruik:
Django 1.11.x
Python 3.7
...
Wat ik al gevonden of geprobeerd heb
mijn huidige oplossing is als volgt:
dateS is hier de selected datum.
het model is: Inverter_log, met de velden 'Totaal' en 'Timestamp'
Mijn vraag
Ik heb een eigen PV-logger gemaakt. Hierbij log ik de opbrengsten van de omvormer elke 10min.
In de data zitten de volgende velden:
Timestamp
Huidige wattage (w)
totale opbrengst (kwh) (sinds installatie PV pannelen.)
Het totale opbrengst veld is dus een steeds oplopende waarde.
Nu wil ik graag een grafiek maken waar ik de dag opbrengsten van bepaalde dagen of maanden in weergeef. Dus bijv van een grafiek van een maand met alle dag opbrengsten en van een jaar met alle maand opbrengsten.
Als ik van een bepaalde dag de opbrengst wil weten, moet ik dus de laatste entry van de vorige dag aftrekken van de laatste entry van die betreffende dag.
Als ik dat voor een maand wil, moet ik dit dus 30 keer doen. Ik heb dit nu gebeund met een for loops, maar dit blijkt erg langzaam te zijn.
Mijn vraag is dus of er een query te bedenken is waarmee ik dit beter/ sneller kan doen?
Een paar pointers waar ik op moet googlen (django/sql termen) zou al erg helpen.Ik zit nu een beetje vast en kom niet verder.
Relevante software en hardware die ik gebruik:
Django 1.11.x
Python 3.7
...
Wat ik al gevonden of geprobeerd heb
mijn huidige oplossing is als volgt:
Python:
1
2
3
4
5
6
7
8
9
10
11
| data = [] if dateS.month == datetime.now().month: einddag = datetime.now().day else: einddag = monthrange(dateS.year, dateS.month)[1] for day in range(1,einddag+1): date = datetime(dateS.year,dateS.month,day) date2= date + relativedelta(days=-1) diff = noneToFloat(Inverter_log.objects.filter(timestamp__day=day,timestamp__month=dateS.month,timestamp__year=dateS.year).aggregate(Max('totaal'))['totaal__max'])-noneToFloat(Inverter_log.objects.filter(timestamp__day=date2.day,timestamp__month=date2.month,timestamp__year=date2.year).aggregate(Max('totaal'))['totaal__max']) data.append(diff) return JsonResponse(data, safe=False) |
dateS is hier de selected datum.
het model is: Inverter_log, met de velden 'Totaal' en 'Timestamp'