{"id":3676,"date":"2019-03-25T17:45:26","date_gmt":"2019-03-25T20:45:26","guid":{"rendered":"http:\/\/xexeu.elipse.com.br\/pt\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/"},"modified":"2019-05-07T13:18:29","modified_gmt":"2019-05-07T16:18:29","slug":"utilizando-epm-sdk-em-linguagem-python-um-exemplo","status":"publish","type":"post","link":"https:\/\/kb.elipse.com.br\/en\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/","title":{"rendered":"Utilizando EPM SDK em linguagem Python: um exemplo."},"content":{"rendered":"<div align=\"left\">\n<p><u><b>INTRODU\u00c7\u00c3O<\/b><\/u><\/p>\n<div align=\"justify\">O EPM SDK em linguagem Python \u00e9 um m\u00f3dulo (biblioteca) que possibilita a conex\u00e3o com um EPM Server (servidor OPC UA) e a execu\u00e7\u00e3o de uma s\u00e9rie de opera\u00e7\u00f5es sobre ele. Alguns exemplos s\u00e3o leituras e escritas em Basic Variables (vari\u00e1veis do sistema EPM).<\/p>\n<p>Clique <a href=\"https:\/\/anaconda.org\/mauricioposser\/epm-sdk-python-opc-ua-exemplo\/notebook\" target=\"_blank\" rel=\"noopener noreferrer\">aqui<\/a> para visualizar este artigo no seu formato original, utilizando o Jupyter (IPython Notebook).<\/div>\n<div align=\"justify\">\n<p><b>NOTA<\/b>: A vers\u00e3o de demonstra\u00e7\u00e3o do EPM tem as seguintes caracter\u00edsticas:<\/p>\n<ul>\n<li>Limite de 20 vari\u00e1veis (<i>Basic Variables<\/i> e\/ou <i>Expressing Variables<\/i>)<\/li>\n<li>Interface de comunica\u00e7\u00e3o com servidores <b>OPC DA Classic<\/b><\/li>\n<li>Interface de comunica\u00e7\u00e3o com servidores de <b>Bancos de Dados Relacionais<\/b> (suporte OLEDB)<\/li>\n<li>Interface de comunica\u00e7\u00e3o <b>WMI <\/b>(leitura de indicadores de desempenho do computador e sistema operacional Windows &#8211; <a href=\"https:\/\/msdn.microsoft.com\/en-us\/library\/aa394582%28v=vs.85%29.aspx\" target=\"_blank\" rel=\"noopener noreferrer\">WMI<\/a>)<\/li>\n<li>Interface de comunica\u00e7\u00e3o nativa com o Elipse E3 e Elipse Power<\/li>\n<li>Interface de geradora de dados aleat\u00f3rios<\/li>\n<li>Sem restri\u00e7\u00f5es ao n\u00famero de usu\u00e1rios conectados simultaneamente<\/li>\n<\/ul>\n<\/div>\n<p><b><u><br \/>\nPasso 1<\/u>: Carregando m\u00f3dulos para an\u00e1lises e visualiza\u00e7\u00e3o dos resultados<\/b><\/p>\n<p><span style=\"font-family: Courier New;\">%<span style=\"color: #009900;\"><span style=\"color: #339966;\">matplotlib<\/span> <\/span>inline<br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">numpy <\/span><span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">np<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">pandas <\/span><span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">pd<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">matplotlib.pyplot<\/span> <span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">plt<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">datetime <\/span><span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">dt<\/span><br \/>\n<span style=\"color: #339966;\">from <\/span><span style=\"color: #0000ff;\">scipy <\/span><span style=\"color: #339966;\">import <\/span>stats<\/p>\n<p># EPM SDK emlinguagem Python<br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">epmsdk<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">epmsdk.communication<\/span> <span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">epmcomm<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">epmsdk.dataaccess<\/span> <span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">epmda<\/span><br \/>\n<span style=\"color: #339966;\">import <\/span><span style=\"color: #0000ff;\">epmsdk.historicaldata<\/span> <span style=\"color: #339966;\">as <\/span><span style=\"color: #0000ff;\">epmhda<\/span><\/span><\/p>\n<p><b><u><br \/>\nPasso 2<\/u>: Estabelecendo conex\u00e3o com um EPM Server<\/b><\/p>\n<p><span style=\"font-family: Courier New;\">SrvEntryName = &#8216;machine_01&#8217;\u00a0\u00a0 # nome da m\u00e1quina onde est\u00e1 instalado o EPM Server<br \/>\nUserAuthName = &#8216;user_01&#8217;\u00a0\u00a0\u00a0\u00a0 # nome do usu\u00e1rio para a conex\u00e3o<br \/>\nUserAuthPass = &#8216;MyPass_01&#8217;\u00a0 # senha do usu\u00e1rio para a conex\u00e3o<br \/>\nConnectionArgs = (None, None, SrvEntryName, UserAuthName, UserAuthPass,)<br \/>\n<span style=\"color: #339966;\">try<\/span>:<br \/>\ndiliSrv = epmcomm.epmConnect(*ConnectionArgs)<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Succeeded!&#8217;<br \/>\n<span style=\"color: #339966;\">except <\/span>epmsdk.EpmException <span style=\"color: #339966;\">as <\/span>ex:<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Connection error: {}&#8217;.format(epmsdk.EpmExceptionCode[ex.Code])<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Details: {!r}&#8217;.format(ex)<br \/>\n<span style=\"color: #339966;\">raw_input<\/span>(&#8216;Program should stop now!&#8217;)<br \/>\n<span style=\"color: #339966;\">exit<\/span>(1)<\/span><\/p>\n<p><b>Output: <\/b><span style=\"font-family: Courier New;\">Succeeded!<\/span><\/p>\n<p><b><u><br \/>\nPasso 3<\/u>: Definindo um per\u00edodo de consulta e os nomes das vari\u00e1veis de interesse<\/b><\/p>\n<p><span style=\"font-family: Courier New;\"># Defini\u00e7\u00e3o de um per\u00edodo para consulta<br \/>\niniTime = dt.datetime(2014, 12, 1)<br \/>\nendTime = dt.datetime(2015, 1, 1)<br \/>\nqueryPeriod = epmhda.TimePeriod(iniTime, endTime)<br \/>\n# Defini\u00e7\u00e3o dos nomes vari\u00e1veis no ambiente Python relacionadas \u00e0s Basic Varibales do EPM Server<br \/>\ndo10Adm = &#8216;ADMTemperature&#8217;<br \/>\ndo10TI = &#8216;TI_Temperature&#8217;<br \/>\ndo10Meeting = &#8216;MeetingRoom10th_Temperature&#8217;<br \/>\ndo10Epm = &#8216;EPMDevTemperature&#8217;<br \/>\ndo11Power = &#8216;PowerDev_Temperature&#8217;<br \/>\ndo11TiSrv = &#8216;TIServidores_Temperature&#8217;<br \/>\ndo11Meeting = &#8216;MeetingRoom11th_Temperature&#8217;<br \/>\ndo11E3 = &#8216;E3DevTemperature&#8217;<br \/>\ndo12Audit = &#8216;Auditorio_Temperature&#8217;<br \/>\ndo12Trein = &#8216;Treinamento_Temperature&#8217;<br \/>\ndo12Meeting = &#8216;MeetingRoom12th_Temperature&#8217;<br \/>\ndo12Dev = &#8216;Dev12th_Temperature&#8217;<br \/>\ndoTempPoa = &#8216;TempRS&#8217;<br \/>\n# Defini\u00e7\u00e3o dos par\u00e2metros para consulta com agrega\u00e7\u00e3o<br \/>\nprocessInterval = dt.timedelta(minutes=30)<br \/>\ntimeAverageAggreg = epmhda.AggregateDetails(interval=processInterval, <span style=\"color: #339966;\">type<\/span>=epmhda.AggregateType.TimeAverage)<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Definitions OK!&#8217;<\/span><\/p>\n<p><b>Output:<\/b> <span style=\"font-family: Courier New;\">Definitions OK!<\/span><\/p>\n<p><b><u><br \/>\nPasso 4<\/u>: Criando objetos (vari\u00e1veis do EPM) no Python e executando consultas do tipo <i>Aggregation <\/i>para o per\u00edodo solicitado e com o intervalo de processamento previamente definido<\/b><\/p>\n<p><span style=\"font-family: Courier New;\"># Composi\u00e7\u00e3o dos objetos: T_XX_Y &#8211; XX andar e Y \u00e9 a posi\u00e7\u00e3o da sala (frente para tr\u00e1s) (1.adm|2.TI|3.Meet|4.epm)<br \/>\n<span style=\"color: #339966;\">try<\/span>:<br \/>\n# andar: 10<br \/>\nT10_1 = epmda.epmGetDataObject(diliSrv, do10Adm)<br \/>\nT10_2 = epmda.epmGetDataObject(diliSrv, do10TI)<br \/>\nT10_3 = epmda.epmGetDataObject(diliSrv, do10Meeting)<br \/>\nT10_4 = epmda.epmGetDataObject(diliSrv, do10Epm)<br \/>\n# andar: 11<br \/>\nT11_1 = epmda.epmGetDataObject(diliSrv, do11Power)<br \/>\nT11_2 = epmda.epmGetDataObject(diliSrv, do11TiSrv)<br \/>\nT11_3 = epmda.epmGetDataObject(diliSrv, do11Meeting)<br \/>\nT11_4 = epmda.epmGetDataObject(diliSrv, do11E3)<br \/>\n# andar: 12<br \/>\nT12_1 = epmda.epmGetDataObject(diliSrv, do12Audit)<br \/>\nT12_2 = epmda.epmGetDataObject(diliSrv, do12Trein)<br \/>\nT12_3 = epmda.epmGetDataObject(diliSrv, do12Meeting)<br \/>\nT12_4 = epmda.epmGetDataObject(diliSrv, do12Dev)<br \/>\n# Temp Porto Alegre<br \/>\nTPoa = epmda.epmGetDataObject(diliSrv, doTempPoa)<br \/>\n# Consultas<br \/>\nh01 = epmhda.epmTagHistoryReadAggregate(T10_1, timeAverageAggreg, queryPeriod)<br \/>\nh02 = epmhda.epmTagHistoryReadAggregate(T10_2, timeAverageAggreg, queryPeriod)<br \/>\nh03 = epmhda.epmTagHistoryReadAggregate(T10_3, timeAverageAggreg, queryPeriod)<br \/>\nh04 = epmhda.epmTagHistoryReadAggregate(T10_4, timeAverageAggreg, queryPeriod)<br \/>\nh05 = epmhda.epmTagHistoryReadAggregate(T11_1, timeAverageAggreg, queryPeriod)<br \/>\nh06 = epmhda.epmTagHistoryReadAggregate(T11_2, timeAverageAggreg, queryPeriod)<br \/>\nh07 = epmhda.epmTagHistoryReadAggregate(T11_3, timeAverageAggreg, queryPeriod)<br \/>\nh08 = epmhda.epmTagHistoryReadAggregate(T11_4, timeAverageAggreg, queryPeriod)<br \/>\nh09 = epmhda.epmTagHistoryReadAggregate(T12_1, timeAverageAggreg, queryPeriod)<br \/>\nh10 = epmhda.epmTagHistoryReadAggregate(T12_2, timeAverageAggreg, queryPeriod)<br \/>\nh11 = epmhda.epmTagHistoryReadAggregate(T12_3, timeAverageAggreg, queryPeriod)<br \/>\nh12 = epmhda.epmTagHistoryReadAggregate(T12_4, timeAverageAggreg, queryPeriod)<br \/>\nhpoa = epmhda.epmTagHistoryReadAggregate(TPoa, timeAverageAggreg, queryPeriod)<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Succeeded!&#8217;<br \/>\n<span style=\"color: #339966;\">except <\/span>epmsdk.EpmException <span style=\"color: #339966;\">as <\/span>ex:<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Sample failed with error: {}&#8217;.format(epmsdk.EpmExceptionCode[ex.Code])<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Details: {!r}&#8217;.format(ex)<br \/>\n<span style=\"color: #339966;\">raw_input<\/span>(&#8216;Program should stop now!&#8217;)<br \/>\n<span style=\"color: #339966;\">exit<\/span>(1)<\/span><\/p>\n<p><b>Output<\/b>: <span style=\"font-family: Courier New;\">Succeeded!<\/span><\/p>\n<p><span style=\"font-family: Courier New;\"># Imprimindo alguns resultados para verifica\u00e7\u00e3o<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Numero de pontos: {}&#8217;.format(<span style=\"color: #339966;\">len<\/span>(hpoa))<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Primeiro ponto: {0:2.2f} {1:} {2:}&#8217;.format(hpoa[&#8216;Value&#8217;][0], hpoa[&#8216;Timestamp&#8217;][0], hpoa[&#8216;Quality&#8217;][0])<br \/>\n# Vetor com os indices das datas<br \/>\ndates = pd.date_range(<span style=\"color: #339966;\">str<\/span>(hpoa[&#8216;Timestamp&#8217;][0]), periods=<span style=\"color: #339966;\">len<\/span>(hpoa), freq=&#8217;30min&#8217;)<br \/>\n<span style=\"color: #339966;\">print <\/span>dates<\/span><\/p>\n<p><b>Output:\u00a0<\/b><span style=\"font-family: Courier New;\"> Numero de pontos: 1488<br \/>\nPrimeiro ponto: 27.01 2014-12-01 00:00:00 Good<br \/>\nDatetimeIndex([&#8216;2014-12-01 00:00:00&#8217;, &#8216;2014-12-01 00:30:00&#8217;,<br \/>\n&#8216;2014-12-01 01:00:00&#8217;, &#8216;2014-12-01 01:30:00&#8217;,<br \/>\n&#8216;2014-12-01 02:00:00&#8217;, &#8216;2014-12-01 02:30:00&#8217;,<br \/>\n&#8216;2014-12-01 03:00:00&#8217;, &#8216;2014-12-01 03:30:00&#8217;,<br \/>\n&#8216;2014-12-01 04:00:00&#8217;, &#8216;2014-12-01 04:30:00&#8217;,<br \/>\n&#8230;<br \/>\n&#8216;2014-12-31 19:00:00&#8217;, &#8216;2014-12-31 19:30:00&#8217;,<br \/>\n&#8216;2014-12-31 20:00:00&#8217;, &#8216;2014-12-31 20:30:00&#8217;,<br \/>\n&#8216;2014-12-31 21:00:00&#8217;, &#8216;2014-12-31 21:30:00&#8217;,<br \/>\n&#8216;2014-12-31 22:00:00&#8217;, &#8216;2014-12-31 22:30:00&#8217;,<br \/>\n&#8216;2014-12-31 23:00:00&#8217;, &#8216;2014-12-31 23:30:00&#8242;],<br \/>\ndtype=&#8217;datetime64[ns]&#8217;, length=1488, freq=&#8217;30T&#8217;)<\/span><\/p>\n<p><b><u><br \/>\nPasso 5<\/u>: Criando um <i>DataFrame <\/i>do m\u00f3dulo Pandas para facilitar an\u00e1lises<\/b><\/p>\n<p><span style=\"font-family: Courier New;\"># Constru\u00e7\u00e3o do DataFrame &#8211; s\u00e9rie temporal<br \/>\ndata = {&#8216;TPoa&#8217;: hpoa[&#8216;Value&#8217;].tolist(),<br \/>\n&#8216;T10_1&#8217;: h01[&#8216;Value&#8217;].tolist(), &#8216;T10_2&#8217;: h02[&#8216;Value&#8217;].tolist(), &#8216;T10_3&#8217;: h03[&#8216;Value&#8217;].tolist(), &#8216;T10_4&#8217;: h04[&#8216;Value&#8217;].tolist(),<br \/>\n&#8216;T11_1&#8217;: h05[&#8216;Value&#8217;].tolist(), &#8216;T11_2&#8217;: h06[&#8216;Value&#8217;].tolist(), &#8216;T11_3&#8217;: h07[&#8216;Value&#8217;].tolist(), &#8216;T11_4&#8217;: h04[&#8216;Value&#8217;].tolist(),<br \/>\n&#8216;T12_1&#8217;: h09[&#8216;Value&#8217;].tolist(), &#8216;T12_2&#8217;: h10[&#8216;Value&#8217;].tolist(), &#8216;T12_3&#8217;: h11[&#8216;Value&#8217;].tolist(), &#8216;T12_4&#8217;: h12[&#8216;Value&#8217;].tolist(),<br \/>\n}<br \/>\ndfRaw = pd.DataFrame(data, index=dates)<br \/>\n# Remove Nan&#8217;s<br \/>\ndf = dfRaw.dropna()<br \/>\ndf.describe()<\/span><\/p>\n<p><b>Output:<\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/1a.png\" alt=\"\" width=\"500\" height=\"209\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><b><u>Passo 6<\/u>: Visualizando graficamente alguns resultados<\/b><\/p>\n<p><span style=\"font-family: Courier New;\"># Gr\u00e1fico com as tend\u00eancias<br \/>\ndf.plot()<br \/>\nplt.gcf().set_size_inches(18,8)<br \/>\nplt.legend(loc=&#8217;best&#8217;)<\/span><\/p>\n<p><b>Output: <\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/2.png\" alt=\"\" width=\"500\" height=\"246\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Gr\u00e1fico das m\u00e9dias mensais<br \/>\ndfm = df.mean()<br \/>\ndfm.plot(kind=&#8217;bar&#8217;, colormap=&#8217;coolwarm&#8217;)<br \/>\nplt.gcf().set_size_inches(18,8)<\/span><\/p>\n<p><b>Output: <\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/3.png\" alt=\"\" width=\"500\" height=\"238\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Fazer um boxplot<br \/>\ndf.boxplot()<br \/>\nplt.gcf().set_size_inches(18,8)<\/span><\/p>\n<p><b>Output:<\/b> <span style=\"font-family: Courier New;\">C:\\Anaconda2\\lib\\site-packages\\ipykernel\\__main__.py:2: FutureWarning:<br \/>\nThe default value for &#8216;return_type&#8217; will change to &#8216;axes&#8217; in a future release.<br \/>\nTo use the future behavior now, set return_type=&#8217;axes&#8217;.<br \/>\nTo keep the previous behavior and silence this warning, set return_type=&#8217;dict&#8217;.<br \/>\nfrom ipykernel import kernelapp as app<\/span><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/4.png\" alt=\"\" width=\"500\" height=\"231\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Para salvar em um arquivo CSV<br \/>\ndf.to_csv(r&#8217;C:\\Users\\mauricio\\Desktop\\ElipseTemps.csv&#8217;, sep=&#8217;;&#8217;, float_format=&#8217;<span style=\"color: #990000;\">%.3f<\/span>&#8216;)<br \/>\n<span style=\"color: #339966;\">print <\/span>&#8216;Arquivo ElipseTemps.csv salvo no desktop!&#8217;<\/span><\/p>\n<p><b>Output:\u00a0<\/b> <span style=\"font-family: Courier New;\">Arquivo ElipseTemps.csv salvo no desktop!<\/span><\/p>\n<p><span style=\"font-family: Courier New;\"># Contagem de todos valores com temperaturas entre 22 e 24 \u00b0C<br \/>\nCrit1 = df >= 22.0<br \/>\nCrit2 = df <=24.0\nallCrit = AllCrit = Crit1 &#038; Crit2\ndf[allCrit].count()<\/span><\/p>\n<p><b>Output:<\/b>\u00a0 <span style=\"font-family: Courier New;\">T10_1\u00a0\u00a0\u00a0\u00a0\u00a0 1<br \/>\nT10_2\u00a0\u00a0\u00a0\u00a0 10<br \/>\nT10_3\u00a0\u00a0\u00a0\u00a0\u00a0 6<br \/>\nT10_4\u00a0\u00a0\u00a0\u00a0\u00a0 1<br \/>\nT11_1\u00a0\u00a0\u00a0 165<br \/>\nT11_2\u00a0\u00a0\u00a0 180<br \/>\nT11_3\u00a0\u00a0\u00a0\u00a0 87<br \/>\nT11_4\u00a0\u00a0\u00a0\u00a0\u00a0 1<br \/>\nT12_1\u00a0\u00a0\u00a0\u00a0\u00a0 6<br \/>\nT12_2\u00a0\u00a0\u00a0\u00a0 86<br \/>\nT12_3\u00a0\u00a0\u00a0\u00a0\u00a0 8<br \/>\nT12_4\u00a0\u00a0\u00a0 283<br \/>\nTPoa\u00a0\u00a0\u00a0\u00a0 464<br \/>\ndtype: int64<\/span><\/p>\n<p><span style=\"font-family: Courier New;\"># C\u00e1lculo da m\u00e9dia m\u00f3vel e gr\u00e1fico<br \/>\nmAvgPoa = pd.rolling_mean(df[&#8216;TPoa&#8217;], 50)<br \/>\ndf.TPoa.plot(label=&#8217;TPoa&#8217;)<br \/>\nmAvgPoa.plot(label=&#8217;MovAvgPoa&#8217;)<br \/>\nplt.legend()<br \/>\nplt.gcf().set_size_inches(15,8)<\/span><\/p>\n<p><b>Output:\u00a0 <\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/5.png\" alt=\"\" width=\"500\" height=\"294\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Grafico temperatura media diaria de Porto Alegre, da sua media a cada 2 dias e banda baseada em 2 desvios padr\u00e3o<br \/>\nma = pd.rolling_mean(df.TPoa, 2)<br \/>\nmstd = pd.rolling_std(df.TPoa, 2)<br \/>\nplt.figure(figsize=(20,6), dpi=300)<br \/>\nplt.plot(df.index, df.TPoa, &#8216;k&#8217;)<br \/>\nplt.plot(ma.index, ma, &#8216;b&#8217;)<br \/>\nplt.fill_between(mstd.index, ma-2*mstd, ma+2*mstd, color=&#8217;b&#8217;, alpha=0.2)<\/span><\/p>\n<p><b>Output: <\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/6.png\" alt=\"\" width=\"500\" height=\"162\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><b><u>Passo 7<\/u>: An\u00e1lises em per\u00edodos espec\u00edficos &#8211; consultas a intervalos de tempo definidos em tempo de consulta<\/b><\/p>\n<p><span style=\"font-family: Courier New;\"># Condi\u00e7\u00f5es nos dias 10 a 15<br \/>\ndf.ix[&#8216;2014-12-10&#8242;:&#8217;2014-12-15&#8217;].plot(figsize = (15, 8))<\/span><\/p>\n<p><b>Output:<\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/7.png\" alt=\"\" width=\"500\" height=\"286\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Reamostrando os dados em base di\u00e1ria<br \/>\ndf.resample(&#8216;D&#8217;, how=&#8217;mean&#8217;).plot()<\/span><\/p>\n<p><b>Output: <\/b><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/8.png\" alt=\"\" width=\"363\" height=\"283\" align=\"Baseline\" border=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Pegando dados de dias espec\u00edficos<br \/>\ngetDates = [dt.datetime(2014, 12, 1), dt.datetime(2014, 12, 7), dt.datetime(2014, 12, 9)]<br \/>\nindex = pd.DatetimeIndex(getDates)<br \/>\n<span style=\"color: #339966;\">print <\/span>index<br \/>\ndf.ix[index]<\/span><\/p>\n<p><b>Output:<\/b> <span style=\"font-family: Courier New;\">DatetimeIndex([&#8216;2014-12-01&#8217;, &#8216;2014-12-07&#8217;, &#8216;2014-12-09&#8242;], dtype=&#8217;datetime64[ns]&#8217;, freq=None)<\/span><\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/9.png\" alt=\"\" width=\"500\" height=\"76\" align=\"Baseline\" border=\"0\" hspace=\"0\" vspace=\"0\" \/><\/div>\n<p><span style=\"font-family: Courier New;\"># Pegando os dados apenas dentro do per\u00edodo das 8:30 \u00e0s 18:00 dos dias \u00fateis<br \/>\nspanB = pd.period_range(df.index[0], df.index[-1], freq=&#8217;B&#8217;) # apenas dias \u00fateis<br \/>\niniT = spanB[0].to_timestamp() + dt.timedelta(hours=8, minutes=30)<br \/>\nendT = spanB[0].to_timestamp() + dt.timedelta(hours=18)<br \/>\ndfW = df.ix[iniT:endT]<br \/>\n<span style=\"color: #339966;\">for <\/span>day <span style=\"color: #ff00ff;\">in <\/span>spanB:<br \/>\niniT = day.to_timestamp() + dt.timedelta(hours=8, minutes=30)<br \/>\nendT = day.to_timestamp() + dt.timedelta(hours=18)<br \/>\ndfW = dfW.append(df.ix[iniT:endT])<br \/>\n<span style=\"color: #339966;\">print <\/span>dfW.describe()<\/span><\/p>\n<p><b>Output:<\/b><\/p>\n<\/div>\n<p>&nbsp;<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/10.png\" alt=\"\" width=\"500\" height=\"462\" align=\"Baseline\" border=\"0\" \/><\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>INTRODU\u00c7\u00c3O O EPM SDK em linguagem Python \u00e9 um m\u00f3dulo (biblioteca) que possibilita a conex\u00e3o com um EPM Server (servidor OPC UA) e a execu\u00e7\u00e3o de uma s\u00e9rie de opera\u00e7\u00f5es&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0},"categories":[676],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Utilizando EPM SDK em linguagem Python: um exemplo. - Elipse Knowledgebase<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Utilizando EPM SDK em linguagem Python: um exemplo.\" \/>\n<meta property=\"og:description\" content=\"INTRODU\u00c7\u00c3O O EPM SDK em linguagem Python \u00e9 um m\u00f3dulo (biblioteca) que possibilita a conex\u00e3o com um EPM Server (servidor OPC UA) e a execu\u00e7\u00e3o de uma s\u00e9rie de opera\u00e7\u00f5es&hellip;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\" \/>\n<meta property=\"og:site_name\" content=\"Elipse Knowledgebase\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/elipsesoftware\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-25T20:45:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-07T16:18:29+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/1a.png\" \/>\n<meta name=\"author\" content=\"Elipse Software\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elipse Software\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\"},\"author\":{\"name\":\"Elipse Software\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87\"},\"headline\":\"Utilizando EPM SDK em linguagem Python: um exemplo.\",\"datePublished\":\"2019-03-25T20:45:26+00:00\",\"dateModified\":\"2019-05-07T16:18:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\"},\"wordCount\":1390,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"articleSection\":[\"Elipse Plant Manager\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\",\"url\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\",\"name\":\"[:pt]Utilizando EPM SDK em linguagem Python: um exemplo.[:] - Elipse Knowledgebase\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#website\"},\"datePublished\":\"2019-03-25T20:45:26+00:00\",\"dateModified\":\"2019-05-07T16:18:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/kb.elipse.com.br\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Utilizando EPM SDK em linguagem Python: um exemplo.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kb.elipse.com.br\/#website\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"name\":\"Elipse Knowledgebase\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kb.elipse.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\",\"name\":\"Elipse Software\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/elipsesoftware\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"contentUrl\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"width\":161,\"height\":58,\"caption\":\"Elipse Software\"},\"image\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87\",\"name\":\"Elipse Software\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g\",\"caption\":\"Elipse Software\"},\"url\":\"https:\/\/kb.elipse.com.br\/en\/author\/webmasterelipse-com-br\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Utilizando EPM SDK em linguagem Python: um exemplo. - Elipse Knowledgebase","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/","og_locale":"en_US","og_type":"article","og_title":"[:pt]Utilizando EPM SDK em linguagem Python: um exemplo.[:] - Elipse Knowledgebase","og_description":"INTRODU\u00c7\u00c3O O EPM SDK em linguagem Python \u00e9 um m\u00f3dulo (biblioteca) que possibilita a conex\u00e3o com um EPM Server (servidor OPC UA) e a execu\u00e7\u00e3o de uma s\u00e9rie de opera\u00e7\u00f5es&hellip;","og_url":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/","og_site_name":"Elipse Knowledgebase","article_publisher":"http:\/\/www.facebook.com\/elipsesoftware","article_published_time":"2019-03-25T20:45:26+00:00","article_modified_time":"2019-05-07T16:18:29+00:00","og_image":[{"url":"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID5379\/1a.png"}],"author":"Elipse Software","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Elipse Software","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#article","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/"},"author":{"name":"Elipse Software","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87"},"headline":"Utilizando EPM SDK em linguagem Python: um exemplo.","datePublished":"2019-03-25T20:45:26+00:00","dateModified":"2019-05-07T16:18:29+00:00","mainEntityOfPage":{"@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/"},"wordCount":1390,"commentCount":0,"publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"articleSection":["Elipse Plant Manager"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/","url":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/","name":"[:pt]Utilizando EPM SDK em linguagem Python: um exemplo.[:] - Elipse Knowledgebase","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/#website"},"datePublished":"2019-03-25T20:45:26+00:00","dateModified":"2019-05-07T16:18:29+00:00","breadcrumb":{"@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kb.elipse.com.br\/utilizando-epm-sdk-em-linguagem-python-um-exemplo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/kb.elipse.com.br\/en\/"},{"@type":"ListItem","position":2,"name":"Utilizando EPM SDK em linguagem Python: um exemplo."}]},{"@type":"WebSite","@id":"https:\/\/kb.elipse.com.br\/#website","url":"https:\/\/kb.elipse.com.br\/","name":"Elipse Knowledgebase","description":"","publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kb.elipse.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/kb.elipse.com.br\/#organization","name":"Elipse Software","url":"https:\/\/kb.elipse.com.br\/","sameAs":["http:\/\/www.facebook.com\/elipsesoftware"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","contentUrl":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","width":161,"height":58,"caption":"Elipse Software"},"image":{"@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87","name":"Elipse Software","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g","caption":"Elipse Software"},"url":"https:\/\/kb.elipse.com.br\/en\/author\/webmasterelipse-com-br\/"}]}},"_links":{"self":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/3676"}],"collection":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/comments?post=3676"}],"version-history":[{"count":2,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/3676\/revisions"}],"predecessor-version":[{"id":6172,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/3676\/revisions\/6172"}],"wp:attachment":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/media?parent=3676"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/categories?post=3676"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/tags?post=3676"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}