예제 #1
0
def get_message_alert(alert):
    """
    Returns an alert mesage represetnation
    """
    measurement = get_measurement_from_rule(alert.alert)
    return "At site %s \n %s is %s %s%s" % (alert.site, get_measurement_verbose_name(measurement),
                                            alert.alert.get_operator_display(), alert.alert.value,
                                            get_measurement_unit(measurement))
예제 #2
0
def get_message_alert(alert):
    """
    Returns an alert mesage represetnation
    """
    measurement = get_measurement_from_rule(alert.alert)
    return "At site %s \n %s is %s %s%s" % (
        alert.site, get_measurement_verbose_name(measurement),
        alert.alert.get_operator_display(), alert.alert.value,
        get_measurement_unit(measurement))
예제 #3
0
def index(request,site_id=0):
    """
    Initial user view user needs to be logged
    Get user related site data initially to display on main-dashboard view
    """
    sites =  _get_user_sites(request)

    context_dict = {}
    # Handle fisrt login if user has no site setup:
    if not sites:
           context_dict['VRM_form'] = _create_vrm_login_form()
           return render(request,'seshdash/initial-login.html',context_dict)

    if not site_id:
        #return first site user has action
        site_id = sites[0].pk
    #Check if user has any sites under their permission
    context_dict, content_json = get_user_data(request.user,site_id,sites)

    context_dict = jsonify_dict(context_dict,content_json)
    #Generate date for dashboard  TODO use victron solar yield data using mock weather data for now
    context_dict['site_id'] = site_id

    #Generating site measurements for a graph
    current_site = Sesh_Site.objects.filter(id = site_id).first()

    #getting site measurements
    site_measurements = get_site_measurements(current_site)
    measurements ={}

    for measurement in site_measurements:
        #getting verbose names
        measurement_verbose_name = get_measurement_verbose_name(measurement)
        measurements[measurement] = measurement_verbose_name
    context_dict['measurements']= measurements

    # status card form
    site = Sesh_Site.objects.filter(id=site_id).first()
    form = StatusCardForm(instance=site.status_card) 
    context_dict['status_form'] = form


    #sites witth weather and battery status
    sites_stats = get_quick_status(sites)
    context_dict['sites_stats'] = sites_stats

    # user permissions
    context_dict['permitted'] = get_org_edit_permissions(request.user)
    context_dict['user'] = request.user

    return render(request,'seshdash/main-dash.html',context_dict)
예제 #4
0
def get_latest_bom_data(request):
    """
    Returns the latest information of a site to be displayed in the status card
    The data is got from the influx db
    """
    # getting current site and latest rmc status object
    site_id = request.POST.get('siteId')
    site = Sesh_Site.objects.filter(id=site_id).first()

    # The measurement list contains attributes to be displayed in the status card,
    measurement_list = get_status_card_items(site)

    if measurement_list != 0:
        latest_points = get_measurements_latest_point(site, measurement_list)

        latest_point_data = []

        # If the points exist and the points returned are equal to the items in measurement list
        for measurement, point in latest_points.items():
            latest_point_data.append({"item":get_measurement_verbose_name(measurement),
                                      "value":str(round(latest_points[measurement]['value'], 2))
                                              + get_measurement_unit(measurement)
                             })

        if 'last_contact' in measurement_list:
            # Adding the last contact from the rmc status
            rmc_latest = RMC_status.objects.filter(site=site).last()
            if rmc_latest:
                last_contact = rmc_latest.minutes_last_contact
                last_contact_seconds = last_contact * 60
                last_contact = time_utils.format_timesince_seconds(last_contact_seconds)
                latest_point_data.append({"item":"Last Contact", "value": last_contact})
            else:
                logger.debug("No rmc_status points for site ")

        return HttpResponse(json.dumps(latest_point_data))