Informando o UTC local em uma consulta no EPM Processor/Python.

Descrição:

Como posso informar ao EPM o UTC da região ao realizar uma consulta Python pelo EPM Processor?

Solução:

O UTC (Tempo Universal Coordenado) é o fuso horário de referência a partir do qual se calculam todas as zonas horárias do mundo. O fuso UTC+0 é feito a partir do meridiano de Greenwich, na Inglaterra. O fuso de cidades como São Paulo e Brasília, por exemplo, que é vigente em boa parte do território brasileiro, é o UTC-3.

EPM Processor é o módulo do Elipse Plant Manager responsável pela execução de códigos/algoritmos em linguagem Python baseados em eventos simulados ou de tempo real. Portanto, quando se deseja implementar um algoritmo para ser utilizado no EPM Processor, seja em produção ou simulação, este algoritmo deve ser codificado dentro de uma função em linguagem Python.

Sabemos que o Elipse Plant Manager realiza o armazenamento de todos os dados em formato UTC; sendo assim, quando queremos realizar uma pesquisa de dados em sua base através de Python, precisamos informar qual é o valor do fuso UTC da região de onde queremos apresentar a informação. Para isso, é possível utilizar a biblioteca Python pytz (https://pypi.org/project/pytz/). Abaixo, vemos um exemplo de código do EPM Processor de consulta de valores à base do EPM que utiliza a biblioteca pytz:

#mandatory import
import epmprocessor as epr
import epmwebapi as epm
import pytz
import datetime

@epr.applicationMethod('getFloorMaxPower')
def getFloorMaxPower(session, Building):
  ecData = []
  for objsB in Building.values():
    for objF in objsB.enumObjects().values():
      if objF.type == 'xfDCIMFloor':
        for cobjs in objF.enumObjects().values():
          coProps = cobjs.enumProperties()
          if cobjs.name == 'Measures':
            for cobjsM in cobjs.enumObjects().values():
              if cobjsM.name == 'EnergyConsumption':
                EN_Props = cobjsM.enumProperties()
                tz_sp = pytz.timezone('America/Sao_Paulo')
                endtime = datetime.datetime.now(tz_sp)
                initime = endtime - datetime.timedelta(hours=1) 
                queryperiod = epm.QueryPeriod(initime, endtime)
                processInterval = datetime.timedelta(seconds=0)
                aggregationdetails = epm.AggregateDetails(processInterval, epm.AggregateType.Total)
                nData = EN_Props['Value'].historyReadAggregate(aggregationdetails, queryperiod)
                
                ecData.append((objF.name, nData[0]['Value']))

  print(sorted(ecData, key=lambda en: en[1]))
  return epr.ScopeResult(True)

Observe que antes de realizar a consulta das informações pelo EPM Processor, informamos o valor UTC da região. Utiliza-se este valor no intervalo de tempo da data inicial e final da pesquisa, conforme destacado aqui:

tz_sp = pytz.timezone('America/Sao_Paulo')
endtime = datetime.datetime.now(tz_sp)
initime = endtime - datetime.timedelta(hours=1)

Desta forma, teremos o retorno dos valores da base do EPM de forma correta. Neste exemplo, consideramos a zona horária de São Paulo.

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Leave a Reply

Your email address will not be published.Required fields are marked *