コード例 #1
0
def find_datetime_end(date):
    """
    return the datetime of an existing Chaudiere entry close to the given *date* parameter
    """
    last_chaudiere_date = Chaudiere.last(Chaudiere).dt
    entry = Chaudiere.get_by_approx_date(Chaudiere, date)
    while ((entry is None) and (date < last_chaudiere_date)):
        date = date + timedelta(minutes=1)
        entry = Chaudiere.get_by_approx_date(Chaudiere, date)
    logger.debug('Chaudiere.dt end:'+ str(entry.dt))
    return entry.dt
コード例 #2
0
def record_minute(begin):
    """
    Recupere dans la base Logs l'ensemble des objets dont la date est comprise entre 
    les dates begin et (begin + 1 minute)
    Calcule des moyennes et enregistre dans une entry ChaudiereMinute
    """
    logger.debug('Minute '+ str(begin))    
    end = begin + timedelta(minutes=1)
    temp0 = 0.0
    temp1 = 0.0
    watt1 = 0
    watt2 = 0
    watt3 = 0
    # get logs
    logs = Chaudiere.get_between_date(Chaudiere, begin, end)
    nb_logs = len(logs)
    logger.info('minute ' + str(begin)+' logs :'+str(nb_logs))
    if nb_logs > 0:
        for log in logs:
            if (log.temp0 is not None): temp0 += float(log.temp0)
            if (log.temp1 is not None): temp1 += float(log.temp1)
            if (log.watt1 is not None): watt1 += int(log.watt1)
            if (log.watt2 is not None): watt2 += int(log.watt2)
            if (log.watt3 is not None): watt3 += int(log.watt3)
        # calcule des moyennes sur les series
        temp0 = temp0 / nb_logs
        temp1 = temp1 / nb_logs
        watt1 = watt1 / nb_logs
        watt2 = watt2 / nb_logs
        watt3 = watt3 / nb_logs
        # Save to db
        ChaudiereMinute.create(ChaudiereMinute, begin, temp0, temp1, None, None, watt1, watt2, watt3, None, None, None)
    # else if no log to process, we still create an entry with None fields
    else:
        ChaudiereMinute.create(ChaudiereMinute, begin, None, None, None, None, None, None, None, None, None, None)
コード例 #3
0
def process_archive_minute(mode='normal', hours=None, date=None): 
    """ Defini date de debut et de fin 
    begin = (date du dernier record de la base Archive) + 1 minute
    end = (maintenant) - 1 minute
    Appelle la fonction record_minute() autant de fois que nécessaire
    """
    if mode is 'normal':
        # if ChaudiereMinute is empty then we start with the first Chaudiere record (oldest)
        if ChaudiereMinute.last(ChaudiereMinute) == None:
            logger.debug('ChaudiereMinute.last(ChaudiereMinute) == None:')
            begin = Chaudiere.first(Chaudiere).dt

        # else ChaudiereMinute is NOT empty then we start with the last ChaudiereMinute record (newest)
        else:
            logger.debug('ChaudiereMinute.last(ChaudiereMinute) != None:')
            begin = (ChaudiereMinute.last(ChaudiereMinute).dt + timedelta(minutes=1))

        # we finish with the last Chaudiere record (replace second to zero to avoid incomplete current minute)
        end = Chaudiere.last(Chaudiere).dt
    elif mode is 'rework_from_now':
        #begin is last existing Chaudiere - N hours
        dt = Chaudiere.last(Chaudiere).dt 
        begin = dt - timedelta(hours=hours)
        # we finish with the last Chaudiere record (replace second to zero to avoid incomplete current minute)
        end = Chaudiere.last(Chaudiere).dt
    elif mode is 'rework_from_date':
        end = find_datetime_end(date)
        begin = end - timedelta(hours=hours)
    else:
        logger.error('wrong arguments')
        return
    if begin is None:
        logger.info('No records')
        return
    
    begin = begin.replace(second=0, microsecond=0)
    end = end.replace(second=0, microsecond=0)
    
    if ((begin + timedelta(minutes=1)) > end):
        logger.info('Starting From '+ str(begin) + ' ...Waiting more records')
    else:
        logger.info('Archiving From '+ str(begin) +' To ' + str(end))

    # while some old Logs to Archive, call function record_minute()
    while ((begin + timedelta(minutes=1)) <= end):
        record_minute(begin)
        begin = begin + timedelta(minutes=1)
コード例 #4
0
def chaudiere(seconds):
    """Creates fake Chaudiere entries every 20 second from now to a past date defined by a number of second from now (given by argument)    
    """
    now = datetime.now()
    for x in range(0, int(seconds), 20):
        dt = now - timedelta(seconds=x)
        rec = Chaudiere(dt, 70, 0, 0, 0, 0, 0, 0, None, None, None)
        db.session.add(rec)
        print(rec)
    db.session.commit()
コード例 #5
0
ファイル: db_api.py プロジェクト: cheperboy/chaudiere
def createSensorRecord(timestamp, temp0, temp1, temp2, temp3, watt0, watt1, watt2, watt3):
    try:
        entry = Chaudiere(timestamp, temp0, temp1, temp2, temp3, watt0, watt1, watt2, watt3, None, None, None)
        db.session.add(entry)
        db.session.commit()
    except Exception as e:
        logger.error("generic Error" + str(e))
        return False
    else:
        return True
コード例 #6
0
ファイル: db_api.py プロジェクト: csu-anzai/chaudiere
def createSensorRecord(timestamp, temp0, temp1, temp2, watt0, watt1, watt2, watt3):
    try:
        entry = Chaudiere(timestamp, temp0, temp1, temp2, watt0, watt1, watt2, watt3, None, None, None)
        db.session.add(entry)
        db.session.commit()
    except RuntimeError as e:
        print (e.message)
        return False
    else:
        return True