コード例 #1
0
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"}))
コード例 #2
0
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"}))
コード例 #3
0
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"}))
コード例 #4
0
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"}))
コード例 #5
0
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}))
コード例 #6
0
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"}))
コード例 #7
0
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"}))
コード例 #8
0
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"}))