コード例 #1
0
def get_historical_BoM(site_pk, start_at):
    """
        Get Historical Data from VRM to backfill any days
        """
    i = Influx()
    count = 0
    site = Sesh_Site.objects.get(pk=site_pk)
    site_id = site.vrm_site_id
    if not site_id:
        logger.info("skipping site %s has not vrm_site_id" % site)
        return 0
    vh_client = VictronHistoricalAPI(site.vrm_account.vrm_user_id,
                                     site.vrm_account.vrm_password)
    #site_id is a tuple
    #print "getting data for siteid %s starting at %s"%(site.vrm_site_id,start_at)
    data = vh_client.get_data(site_id, start_at)
    logger.debug("Importing data for site:%s" % site)
    for row in data:
        try:
            parsed_date = datetime.strptime(row.get('Date Time'),
                                            '%Y-%m-%d %X')
            date = time_utils.localize(parsed_date, tz=site.time_zone)
            data_point = BoM_Data_Point(
                site=site,
                time=date,
                soc=row.get('Battery State of Charge (System)', 0),
                battery_voltage=row.get('Battery voltage', 0),
                AC_input=row.get('Input power 1', 0),
                AC_output=row.get('Output power 1', 0),
                AC_Load_in=row.get('Input current phase 1', 0),
                AC_Load_out=row.get('Output current phase 1', 0),
                inverter_state=row.get('VE.Bus Error', ''),
                pv_production=row.get('PV - AC-coupled on input L1',
                                      0),  # IF null need to put in 0
                #TODO these need to be activated
                genset_state=0,
                relay_state=0,
            )
            date = row.get('Date Time')

            with transaction.atomic():
                data_point.save()
            send_to_influx(data_point,
                           site,
                           date,
                           to_exclude=['time', 'inverter_state', 'id'],
                           client=i,
                           send_status=False)

            count = count + 1
            if count % 100:
                logger.debug("imported  %s points" % count)
            #print "saved %s BoM data points"%count
        except IntegrityError, e:
            logger.warning("data point already exist %s" % e)
            pass
        except ValueError, e:
            logger.warning("Invalid values in data point dropping  %s" % (e))
            pass
コード例 #2
0
def get_historical_BoM(site_pk,start_at):
        """
        Get Historical Data from VRM to backfill any days
        """
        i = Influx()
        count = 0
        site = Sesh_Site.objects.get(pk=site_pk)
        site_id = site.vrm_site_id
        if not site_id:
            logger.info("skipping site %s has not vrm_site_id"%site)
            return 0
        vh_client = VictronHistoricalAPI(site.vrm_account.vrm_user_id,site.vrm_account.vrm_password)
        #site_id is a tuple
        #print "getting data for siteid %s starting at %s"%(site.vrm_site_id,start_at)
        data = vh_client.get_data(site_id,start_at)
        logger.debug("Importing data for site:%s"%site)
        for row in data:
            try:
                parsed_date = datetime.strptime(row.get('Date Time'),'%Y-%m-%d %X')
                date = time_utils.localize(parsed_date, tz=site.time_zone)
                data_point = BoM_Data_Point(
                    site = site,
                    time = date,
                    soc = row.get('Battery State of Charge (System)', 0),
                    battery_voltage = row.get('Battery voltage', 0),
                    AC_input = row.get('Input power 1', 0),
                    AC_output =  row.get('Output power 1', 0),
                    AC_Load_in =  row.get('Input current phase 1', 0),
                    AC_Load_out =  row.get('Output current phase 1', 0),
                    inverter_state = row.get('VE.Bus Error', ''),
                    pv_production = row.get('PV - AC-coupled on input L1', 0), # IF null need to put in 0
                    #TODO these need to be activated
                    genset_state =  0,
                    relay_state = 0,
                    )
                date =  row.get('Date Time')

                with transaction.atomic():
                    data_point.save()
                send_to_influx(data_point, site, date, to_exclude=['time','inverter_state','id'],client=i, send_status=False)

                count = count +1
                if count % 100:
                    logger.debug("imported  %s points"%count)
                #print "saved %s BoM data points"%count
            except IntegrityError, e:
                    logger.warning("data point already exist %s"%e)
                    pass
            except ValueError,e:
                    logger.warning("Invalid values in data point dropping  %s"%(e))
                    pass
コード例 #3
0
ファイル: tasks.py プロジェクト: mugijanvier/sesh-dash-beta
def get_historical_BoM(date_range=5):
        """
        Get Historical Data from VRM to backfill any days
        """
        datetime_now = datetime.now()
        datetime_start = datetime_now - timedelta(date_range)

        datetime_now_epoch = time_utils.get_epoch_from_datetime(datetime_now)
        datetime_start_epoch = time_utils.get_epoch_from_datetime(datetime_start)

        sites = Sesh_Site.objects.all()
        count = 0
        for site in sites:
            v_client = VictronAPI(site.vrm_user_id,site.vrm_password)
            vh_client = VictronHistoricalAPI(site.vrm_user_id,site.vrm_password)
            site_id = site.vrm_site_id
            for site_id in v_client.SYSTEMS_IDS:
                #site_id is a tuple
                data = vh_client.get_data(site_id[0],datetime_start_epoch,datetime_now_epoch)
                for row in data:
                    data_point = BoM_Data_Point(
                        site = site,
                        time = row['Date Time'],
                        soc = row['Battery State of Charge (System)'],
                        battery_voltage = row['Battery voltage'],
                        AC_input = row['Input power 1'],
                        AC_output =  row['Output power 1'],
                        AC_Load_in =  row['Input current phase 1'],
                        AC_Load_out =  row['Output current phase 1'],
                        inverter_state = row['VE.Bus Error'],
                        #TODO these need to be activated
                        genset_state =  "off",
                        relay_state = "off",
                        )
                    data_point.save()
                    count = count +1
            print "saved %s BoM data points"%count