Beispiel #1
0
 def __init__(self,bd):
     self.__bd = bd
     self.__valoresDao = ValoresDao(self.__bd)
     self.__snapshotDao = SnapshotDao(self.__bd)
     self.__tagDao = TagDao(self.__bd)
Beispiel #2
0
class NodeSync(object):
    '''
    classdocs
    '''
    __bd = ''
    __valoresDao = ''
    __snapshotDao = ''
    __tagDao = ''
    __lastValueTag={}

    def __init__(self,bd):
        self.__bd = bd
        self.__valoresDao = ValoresDao(self.__bd)
        self.__snapshotDao = SnapshotDao(self.__bd)
        self.__tagDao = TagDao(self.__bd)
        
        #TODO: Buscar valores gravados
        #self.__valorGravado = self.__valoresDao.retrieve(1)
    
    def lerDados(self,mensagem):
        flag=0
        mensagem = mensagem.split("&")
        id = mensagem[0]
        valor = mensagem[1]
        data_Hora = mensagem[2]
        valorRecente = Valores(valor, data_Hora, int(id))
        
        try:
            valorGravado=self.__lastValueTag[valorRecente.getIdTag()]
        except Exception:
            try:
                valorGravado = self.__valoresDao.last(valorRecente.getIdTag())
                self.__lastValueTag.update({valorRecente.getIdTag():valorGravado})
                #print "last"
            except Exception:
                self.__valoresDao.add(valorRecente)
                self.__lastValueTag.update({valorRecente.getIdTag():valorRecente})
                flag=1
                #print "valoresAdd"
        if (flag==0):
            try:
                valorAtual= self.__snapshotDao.retrieve(valorRecente.getIdTag())
                #print "retrieve"
            except Exception:
                flag=1
                self.__snapshotDao.add(Snapshot(float(valorRecente.getValor()), valorRecente.getDataHora(), int(valorRecente.getIdTag())))    
                #print "add"
                    
        if (flag==0):
            tag = self.__tagDao.retrieve(int(id))
            if not (self.testeParalelogramo(valorGravado, valorAtual, valorRecente, tag.getDesvio(), tag.getTempoMax())):
                self.__valoresDao.add(valorAtual)
                self.__lastValueTag[tag.getIdTag()]=valorAtual
            self.__snapshotDao.update(Snapshot(valorRecente.getValor(), valorRecente.getDataHora(), valorRecente.getIdTag(), valorRecente.getIdValores()))
    
    def testeParalelogramo(self,valorGravado,valorAtual,valorRecente,desv,tempo):
        if(valorGravado.getValor() <= valorRecente.getValor()):
            valorEsperado =((((valorRecente.getValor()-valorGravado.getValor())*(self.timeToMili(valorAtual.getDataHora())-self.timeToMili(valorGravado.getDataHora())))/(self.timeToMili(valorRecente.getDataHora())-self.timeToMili(valorGravado.getDataHora())))+valorGravado.getValor())
        else:
            valorEsperado = ((((valorGravado.getValor()-valorRecente.getValor())*(self.timeToMili(valorRecente.getDataHora())-self.timeToMili(valorAtual.getDataHora())))/(self.timeToMili(valorRecente.getDataHora())-self.timeToMili(valorGravado.getDataHora())))+valorRecente.getValor())
        print "Atual: %f"%valorAtual.getValor()+"esperado: %f"%valorEsperado+"Desv: %f"%desv+"recente: %f"%valorRecente.getValor()+"gravado: %f"%valorGravado.getValor()
        print "T-Atual: "+str(valorAtual.getDataHora())+"recente: "+str(valorRecente.getDataHora())+"gravado: "+str(valorGravado.getDataHora())
        if((self.timeToMili(valorRecente.getDataHora())-self.timeToMili(valorGravado.getDataHora())) <tempo):
            if(((valorAtual.getValor()>=valorEsperado+(valorEsperado*desv)))or(valorAtual.getValor()<valorEsperado-(valorEsperado*desv))):
                print "salva valor"
                return False 
            else:
                print "n salva"
                return True
        else:
            print "salva tempo- %f"%(self.timeToMili(valorRecente.getDataHora())-self.timeToMili(valorGravado.getDataHora()))
            return False
    def timeToMili(self,stringTime):
        a = str(stringTime)
        temp = a.split(" ")
        dateString=temp[0].split("-")
        timeString=temp[1].split(":")
        dateTime = datetime.datetime(int(dateString[0]),int(dateString[1]),int(dateString[2]),int(timeString[0]),int(timeString[1]),int(timeString[2]))
        miliseg = time.mktime(dateTime.timetuple())*1000
        return float(miliseg)