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")
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")
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
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