예제 #1
0
class NilmMetaUpdate:
    def __init__(self, logger, jobId, jobType):
        self._logger = logger
        self._jobId = jobId
        self._jobType = jobType
        self._dataManager = DataServiceManager(logger)

    def doProcess(self, hz, sid, did, lfid, feederDataFilePath, dailyBasedTS = None):
        self._logger.info("# [%s] Do nilm meta update, sid : %d, did : %d, lfid : %d, data : %s, freq : %d hz" %(self._jobId, sid, did, lfid, feederDataFilePath, hz))

        oldMetaInfo = self._dataManager.getNilmMetaInfo(sid, did, lfid)

        hasMiscValue = False
        metaDetector = AppDetectR(self._logger)

        try:
            metaDetector.set_data(feederDataFilePath, hz)
            isDetected = metaDetector.detect_apps()
            self._logger.info("- [%s] meta detected : %s, freq : %d hz" %(self._jobId, str(isDetected), hz))

            newAppMeta = json.loads(metaDetector.getAppInfo())
            # self._dataManager.setUsageRouteDataService(sid)

            if not newAppMeta:
                self._dataManager.setNilmVirtualFeederInfo(sid, did, lfid, 999)
                return

            if isDetected:
                existingMetaInfo = self._dataManager.getNilmMetaInfo(sid, did, lfid)

                if not existingMetaInfo:
                    for nfid in [int(nfid) for nfid in newAppMeta.keys()]:
                        vfidMeta = newAppMeta[str(nfid)]
                        applianceType = self._getApplianceType(vfidMeta)

                        vfid = self._dataManager.setNilmVirtualFeederInfo(sid, did, lfid, nfid, applianceType)
                        self._dataManager.setNilmMetaInfo(vfid, vfidMeta)
                        if not hasMiscValue:
                            self._dataManager.setNilmVirtualFeederInfo(sid, did, lfid, 999)
                            hasMiscValue = True
            else:
                if newAppMeta:
                    for nfid in [int(nfid) for nfid in newAppMeta.keys()]:
                        vfidMeta = newAppMeta[str(nfid)]
                        applianceType = self._getApplianceType(vfidMeta)
                        vfid = self._dataManager.setNilmVirtualFeederInfo(sid, did, lfid, nfid, applianceType)
                        if vfid:
                            self._dataManager.setNilmMetaInfo(vfid, newAppMeta[str(nfid)])
                if not hasMiscValue:
                    self._dataManager.setNilmVirtualFeederInfo(sid, did, lfid, 999)
                    hasMiscValue = True
        except Exception, e:
            self._logger.exception(e)
        finally:
예제 #2
0
class NilmAppUsage:
    def __init__(self, logger, jobId, jobType):
        self._dataManager = DataServiceManager(logger)
        self._logger = logger
        self._jobId = jobId
        self._jobType = jobType

    def doProcess(self,
                  hz,
                  sid,
                  did,
                  lfid,
                  feederDataFilePath,
                  dailyBasedTS=None):
        self._logger.info(
            "# [%s] Do nilm usages, sid : %d, did : %d, lfid : %d, based date : %s, freq : %d hz"
            % (self._jobId, sid, did, lfid, convertTS2Date(dailyBasedTS), hz))
        self._logger.info(" - file path : %s" % feederDataFilePath)
        appUsage = AppDailyLoadR(self._logger)
        resultMap = {}

        try:
            metaInfo = self._dataManager.getNilmMetaInfo(sid, did, lfid)
            appUsage.set_data(feederDataFilePath, hz)
            appUsage.set_app_info(metaInfo)
            appUsage.do_compute()
            appUsageMap = appUsage.get_usage()

            if not appUsageMap:
                self._logger.warn(
                    '- [%s] empty appUsageMap! sid : %d, file path : %s' %
                    (self._jobId, sid, feederDataFilePath))
                return None

            if appUsageMap:
                hourlyUsage, dailyUsage = self._cvtUsageData(appUsageMap)
                hourlyAppOn = self._checkHourlyAppOnOff(hourlyUsage)
                dailyAppOn = self._checkDailyAppOnOff(dailyUsage)

                resultMap = {
                    'dbTS': dailyBasedTS,
                    'jobType': self._jobType,
                    'sid': sid,
                    'did': did,
                    'lfid': lfid,
                    'hourlyUsage': hourlyUsage,
                    'dailyUsage': dailyUsage,
                    'hourlyAppOn': hourlyAppOn,
                    'dailyAppOn': dailyAppOn
                }
        except Exception, e:
            self._logger.exception(e)
            self._logger.error(appUsageMap)
        finally:
예제 #3
0
class NilmMetaUpdate:
    def __init__(self, logger, jobId, jobType):
        self._logger = logger
        self._jobId = jobId
        self._jobType = jobType
        self._dataManager = DataServiceManager(logger)

    def doProcess(self,
                  hz,
                  sid,
                  did,
                  lfid,
                  feederDataFilePath,
                  dailyBasedTS=None):
        self._logger.info(
            "# [%s] Do nilm meta search, sid : %d, did : %d, lfid : %d, data : %s, freq : %d hz"
            % (self._jobId, sid, did, lfid, feederDataFilePath, hz))

        existedMeta = self._dataManager.getNilmMetaInfo(sid, did, lfid)
        metaDetector = AppDetectR(self._logger)
        if not existedMeta:
            self._logger.warn('# Meta is not be existed. sid : %d' % (sid))
            return self._genResult(dailyBasedTS, sid, did, lfid, hz)
        try:
            metaDetector.setExistedMeta(existedMeta)
            metaDetector.set_data(feederDataFilePath, hz)
            isDetected = metaDetector.detect_apps()
            if isDetected:
                newAppMeta = json.loads(metaDetector.getAppInfo())
                nilmMetaInfo = {
                    'sid': sid,
                    'did': did,
                    'lfid': lfid,
                    'metaSearch': {},
                    'metaUpdate': {}
                }

                # new meta
                insertNewMetaNfds = list(
                    set(newAppMeta.keys()).difference(existedMeta.keys()))
                for nfid in insertNewMetaNfds:
                    vfidMeta = newAppMeta[str(nfid)]
                    appType = self._getApplianceType(vfidMeta)
                    nilmMetaInfo['metaSearch'][int(
                        nfid)] = self._genFidMetaSet(appType, vfidMeta)

                # update meta info
                updateNewMetaNfids = list(
                    set(newAppMeta.keys()).intersection(existedMeta.keys()))
                for nfid in updateNewMetaNfids:
                    vfidMeta = newAppMeta[str(nfid)]
                    isEnabled = 1
                    nilmMetaInfo['metaUpdate'][int(
                        nfid)] = self._genUpdateMetaSet(vfidMeta, isEnabled)

                # not use meta info
                updateDisableNfids = list(
                    set(existedMeta.keys()).difference(newAppMeta.keys()))
                for nfid in updateDisableNfids:
                    vfidMeta = existedMeta[str(nfid)]
                    isEnabled = 0
                    nilmMetaInfo['metaUpdate'][int(
                        nfid)] = self._genUpdateMetaSet(vfidMeta, isEnabled)
                self._dataManager.setNilmMetaUpdateInfo(nilmMetaInfo)
        except Exception, e:
            self._logger.exception(e)
        finally: