Example #1
0
def rmc_status_update():
    """
    Calculate BoM_Data_Point related RMC Status. RMC based status are calculated by kraken
    """
    logger.debug("Getting rmc status")
    sites = Sesh_Site.objects.all()
    for site in sites:
        # TODO get latest DP from influx
        latest_dp = get_latest_point_site(site, 'status')
        logger.debug("getting status from site %s with dp %s" %
                     (site, latest_dp))
        if latest_dp:
            #localize to time of site
            dp_time = time_utils.convert_influx_time_string(latest_dp['time'],
                                                            tz=site.time_zone)
            last_contact = time_utils.get_timesince_seconds(dp_time,
                                                            tz=site.time_zone)
            tn = timezone.localtime(timezone.now())
            last_contact_min = last_contact / 60

            # Get RMC account
            rmc_status = RMC_status(site=site,
                                    minutes_last_contact=last_contact_min,
                                    time=tn)
            logger.debug("rmc status logger now: %s last_contact: %s " %
                         (tn, dp_time))
            logger.debug("saving status %s " % rmc_status)
            rmc_status.save()
        else:
            logger.warning("RMC STATUS: No DP found for site")
Example #2
0
def rmc_status_update():
    """
    Calculate BoM_Data_Point related RMC Status. RMC based status are calculated by kraken
    """
    logger.debug("Getting rmc status")
    sites = Sesh_Site.objects.all()
    for site in sites:
        # TODO get latest DP from influx
        latest_dp = get_latest_point_site(site,'status')
        logger.debug("getting status from site %s with dp %s"%(site,latest_dp))
        if latest_dp:
            #localize to time of site
            dp_time = time_utils.convert_influx_time_string(latest_dp['time'],tz=site.time_zone)
            last_contact = time_utils.get_timesince_seconds(dp_time, tz=site.time_zone)
            tn = timezone.localtime(timezone.now())
            last_contact_min = last_contact / 60

            # Get RMC account
            rmc_status = RMC_status(site = site,
                                    minutes_last_contact = last_contact_min,
                                    time = tn)
            logger.debug("rmc status logger now: %s last_contact: %s "%(tn,dp_time))
            logger.debug("saving status %s "%rmc_status)
            rmc_status.save()
        else:
            logger.warning("RMC STATUS: No DP found for site")
Example #3
0
def get_quick_status(user_sites):
    """
    returns battery state and future forecast
    """
    #battery rules limits
    battery_limit = Status_Rule.battery_rules.keys()
    battery_limit.sort()

    #weather rules limits
    weather_limit = Status_Rule.weather_rules.keys()
    weather_limit.sort()
    # current time
    now = timezone.now()

    results = []

    #getting latest_points
    for site in user_sites:
        site_dict = {}
        site_dict['site'] = site

        battery_latest_dict = get_latest_point_site(site, 'soc')
        if battery_latest_dict is not None:
            battery_latest_point = battery_latest_dict['value']
            #finding battery_voltage color
            if battery_latest_point < battery_limit[0]:
                color = Status_Rule.battery_rules[battery_limit[0]]
                site_dict['battery'] = color

            elif battery_latest_point > battery_limit[
                    0] and battery_latest_point < battery_limit[1]:
                color = Status_Rule.battery_rules[battery_limit[1]]
                site_dict['battery'] = color

            else:
                color = Status_Rule.battery_rules[battery_limit[2]]
                site_dict['battery'] = color

        #site weather_data
        site_weather_data = Site_Weather_Data.objects.filter(site=site)
        cloud_cover = []
        for weather_data in site_weather_data:
            cloud_cover.append(weather_data.cloud_cover)
        if len(cloud_cover) is not 0:
            average_cloud_cover = sum(cloud_cover) / len(cloud_cover)

            #finding weather_data color
            if average_cloud_cover < weather_limit[0]:
                color = Status_Rule.weather_rules[weather_limit[0]]
                site_dict['weather'] = color
            else:
                color = Status_Rule.weather_rules[weather_limit[1]]
                site_dict['weather'] = color
        #appending to results list
        results.append(site_dict)

    return results
Example #4
0
def get_latest_point_influx(site, rule):
    latest_data_point = influx.get_latest_point_site(site, rule.check_field,
                                                     settings.INFLUX_DB)
    return latest_data_point
Example #5
0
def get_latest_point_influx(site, rule):
    latest_data_point = influx.get_latest_point_site(site, rule.check_field, settings.INFLUX_DB)
    return latest_data_point