def fetch_vals_period_per_device(request): #THIS IS SIMILAR TO THE (fetch_vals_period) FUNCTION ONLY THAT THIS FUNCTION ONLY FETCHES FOR ALL THE DEVICES I.E GETS VALUE FOR JUST ONE DEVICE OF A CUSTOMER ALTHOUGH IT STILL HAS THE ABILITY TO FETCH OVERALL TOTAL. user = User.objects.get(pk = request.user.id) if request.method == "POST": device_id = request.POST.get("device", "") devices = Device.objects.filter(id = device_id) start_date, end_date = request.POST.get("period", "").split("-")#SPLIT VALUES TO INDIVIDUAL DATES #####REPLACE SLASHES WITH DASHES###### start_date = format_date(start_date.replace("/","-")) end_date = format_date(end_date.replace("/","-")) try: peak_kw, min_kw, avg_kw = js_get_reading_stats(user.id, start_date, end_date, device_id = device_id) energy_used = js_total_energy(user.id, start_date, end_date, device_id = device_id) utility_times, gen1_times, gen2_times = utility_vs_gen(devices, start_date, end_date) daily_device_usage = daily_utility_vs_gen_kwh(devices, start_date, end_date) return HttpResponse(json.dumps({"response": "success", "data": {"peak_kw": peak_kw, "min_kw": min_kw, "avg_kw":avg_kw, "energy_used": energy_used, "gen1_times":gen1_times,"gen2_times":gen2_times, "utility_times":utility_times, "daily_device_usage" : daily_device_usage}})) except: return HttpResponse(json.dumps({"response": "failure"}))
def get_line_readings_log(request): #READINGS FOR LINE CHARTS IN READINGS PAGE #THIS IS SIMILAR TO THE (get_line_readings) FUNCTION ONLY THAT THIS FUNCTION ONLY FETCHES FOR LOG TABLE user = User.objects.get(pk = request.user.id) if request.method == "POST": device_id = request.POST.get("device", "") devices = Device.objects.filter(id = device_id) date, end_date = request.POST.get("period", "").split("-") #####REPLACE SLASHES WITH DASHES###### date = format_date(date.replace("/","-")) end_date = format_date(end_date.replace("/","-")) raw_data = list(Reading.objects.filter(device = devices[0], post_datetime__range = (date, end_date)).defer('post_datetime','post_date').order_by('post_datetime').values()) data = raw_data for i in range(len(data)): data[i]["post_datetime"] = (data[i]["post_datetime"] + datetime.timedelta(hours = 1)).strftime("%b. %d, %Y, %I:%M %p.") # print(data[i]["post_datetime"]) try: return HttpResponse(json.dumps({"response": "success", "data": data}, sort_keys=True, indent=1, cls=DjangoJSONEncoder)) except: return HttpResponse(json.dumps({"response": "failure"}))
def get_stats(request): if request.method == "POST": data = json.loads(request.body) device_ids = data.get("device", "") start_date, end_date = data.get("period", "").split("-")#SPLIT VALUES TO INDIVIDUAL DATES #####REPLACE SLASHES WITH DASHES###### start_date = format_date(start_date.replace("/","-")) end_date = format_date(end_date.replace("/","-")) min_vals, max_vals, avg_vals = [], [], [] try: for device_id in device_ids: device = Device.objects.get(id = int(device_id)) raw_usage_dict = device.get_min_max_power(start_date, end_date)[2] avg_read, max_read, min_read = raw_usage_dict["avg_read"], raw_usage_dict["max_read"], raw_usage_dict["min_read"] min_vals.append(min_read) max_vals.append(max_read) avg_vals.append(avg_read) min_vals, max_vals, avg_vals = min(min_vals), max(max_vals), (sum(avg_vals)/len(avg_vals)) data = dict(min = min_vals, max = max_vals, avg = avg_vals) return HttpResponse(json.dumps({"response": "success", "data": data})) except: return HttpResponse(json.dumps({"response": "failure"})) else: return HttpResponse(json.dumps({"response": "failure"}))
def get_total_energy(request): if request.method == "POST": data = json.loads(request.body) device_ids = data.get("device", "") start_date, end_date = data.get("period", "").split("-")#SPLIT VALUES TO INDIVIDUAL DATES #####REPLACE SLASHES WITH DASHES###### start_date = format_date(start_date.replace("/","-")) end_date = format_date(end_date.replace("/","-")) data = 0 try: for device_id in device_ids: device = Device.objects.get(id = int(device_id)) raw_usage_dict = device.get_energy_this_month(start_date, end_date) data += raw_usage_dict["kwh_usage_so_far"] return HttpResponse(json.dumps({"response": "success", "data": data})) except: return HttpResponse(json.dumps({"response": "failure"})) else: return HttpResponse(json.dumps({"response": "failure", "message": "Bad Request"}))
def fetch_vals_period(request): #THIS IS SIMILAR TO THE (fetch_vals_period_per_device) FUNCTION ONLY THAT THIS FUNCTION ONLY FETCHES FOR ALL THE DEVICES I.E GETS OVERALL TOTAL FOR ALL DEVICES OF A CUSTOMER user = User.objects.get(pk = request.user.id) if request.method == "POST": data = json.loads(request.body) device_ids = data.get("device", "") devices = list(map(lambda id: Device.objects.get(id = id).device_id, device_ids)) start_date, end_date = data.get("period", "").split("-")#SPLIT VALUES TO INDIVIDUAL DATES #####REPLACE SLASHES WITH DASHES###### start_date = format_date(start_date.replace("/","-")) end_date = format_date(end_date.replace("/","-")) user_cache = cache.get(user, False) if 0==7 and user_cache and (datetime.datetime.now() - user_cache["lastlog"]).seconds < settings.CACHE_EXPIRY: data = user_cache["data"] else: utility_times, gen1_times, gen2_times = utility_vs_gen(devices, start_date, end_date) daily_device_usage = daily_utility_vs_gen_kwh(devices, start_date, end_date) data = {"gen1_times":gen1_times,"gen2_times":gen2_times, "utility_times":utility_times, "daily_device_usage":daily_device_usage} cache[user] = {"lastlog":datetime.datetime.now(), "data":data} return HttpResponse(json.dumps({"response": "success", "data": data}))
def get_energy_readings(request): #THIS ENDPOINT GIVES READINGS FOR ENERGY CONSUMPTION CHART IN RESOLUTIONS OF DAILY, HOURLY OR MONTHLY. user = User.objects.get(pk=request.user.id) if request.method == "POST": device_id = request.POST.get("device", "") frequency = request.POST.get("frequency", "") devices = Device.objects.filter(id=device_id) if devices: device = devices[0] else: return HttpResponse( json.dumps({ "response": "failure", "message": "No device with such ID" })) start_date, end_date = request.POST.get("period", "").split( "-") #SPLIT VALUES TO INDIVIDUAL DATES #####REPLACE SLASHES WITH DASHES###### start_date = format_date(start_date.replace("/", "-")) end_date = format_date(end_date.replace("/", "-")) device.fetch_energy_per_device(frequency, start_date, end_date) try: usage = device.fetch_energy_per_device(frequency, start_date, end_date) return HttpResponse( json.dumps({ "response": "success", "data": { "usage": usage } })) except: return HttpResponse(json.dumps({"response": "failure"}))
def get_energy_consumption_readings(request): user = User.objects.get(pk = request.user.id) if request.method == "POST": device_id = request.POST.get("device", "") device = Device.objects.get(id = device_id) period = request.POST.get("date", "").split("-") resolution = request.POST.get("resolution", "") #####REPLACE SLASHES WITH DASHES###### start_date = format_date(period[0].replace("/","-")) end_date = format_date(period[1].replace("/","-")) + datetime.timedelta(days = 1) #ADD ONE DAY TO DAY TO ENABLE FILTERING BY DURATION AS YOU CANNOT FILTER BY ONE DAY. data = device.get_energy_in_resolution(start_date, end_date, resolution) try: return HttpResponse(json.dumps({"response": "success", "data": data}, sort_keys=True, indent=1, cls=DjangoJSONEncoder)) except: return HttpResponse(json.dumps({"response": "failure"}))
def get_line_readings(request): user = User.objects.get(pk = request.user.id) if request.method == "POST": device_id = request.POST.get("device", "") devices = Device.objects.filter(id = device_id) date = request.POST.get("date", "") #####REPLACE SLASHES WITH DASHES###### date = format_date(date.replace("/","-")) end_date = date + datetime.timedelta(days = 1) #ADD ONE DAY TO DAY TO ENABLE FILTERING BY DURATION AS YOU CANNOT FILTER BY ONE DAY. raw_data = list(Reading.objects.filter(device = devices[0], post_datetime__range = (date, end_date)).defer('post_datetime','post_date').order_by('post_datetime').values()) data = raw_data # map(lambda __date: __date.strftime("%I:%M %p")) try: return HttpResponse(json.dumps({"response": "success", "data": data}, sort_keys=True, indent=1, cls=DjangoJSONEncoder)) except: return HttpResponse(json.dumps({"response": "failure"}))