Implementação de Amostra
As amostras a seguir ilustram como os campos adicionais podem ser mapeados para o formato XML enviado para o Smart Grid Gateway. Nesse caso, a unidade de medida para dados de medição de entrada é definida por um <externalUOM>, que deve ser mapeado para o elemento <UDM> padrão.
Scripts de Amostra
O Script Groovy abaixo percorrerá uma lista de nós "D1-IMDSeeder" e verificará "externalUom" para um valor (GD_KWH neste exemplo) e, se for igual, o elemento <UOM> será criado com os valores <externalUOM> e o elemento <externalUOM> será removido.
Tipo de Script: Script de Biblioteca do Groovy
Etapa 10: Importações Groovy
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import com.splwg.d1.domain.sgg.processing.PayloadProcessingCMHandler;
import com.splwg.shared.logging.Logger;
import com.splwg.shared.logging.LoggerFactory;
import com.splwg.base.support.scripting.XMLUtils;
Etapa 20: Interface da Biblioteca do Groovy
PayloadProcessingCMHandler getHandler()
Etapa 30: Membros do Groovy
public PayloadProcessingCMHandler getHandler() {
return new CMhandler();
}
public class CMhandler implements PayloadProcessingCMHandler{
org.w3c.dom.Document onList(org.w3c.dom.Document resultList, org.w3c.dom.Document plainXML) {
NodeList imdList=resultList.getDocumentElement().getElementsByTagName("D1-IMDSeeder");
for(int i=0;i<imdList.getLength();i++){
Element imdEl = (Element) imdList.item(i);
//check if msrs element exists
NodeList msrsList = imdEl.getElementsByTagName("msrs");
if (msrsList.length > 0) {
//get preVEE
NodeList preVEENodeList = imdEl.getElementsByTagName("preVEE");
Element preVEENode = (Element) preVEENodeList.item(0);
//get externaluom
NodeList uomList = preVEENode.getElementsByTagName("externalUOM");
Element uomElm = uomList.length>0 ? uomList.item(0) : null;
String uom = uomElm!=null ? uomElm.getTextContent() : "";
//get mcIdN
NodeList mcIdNList = preVEENode.getElementsByTagName("dvcIdN");
if ( uom.compareTo("GD_KWH")==0 && mcIdNList.length>0 ) {
Element externalUOMElm = resultList.createElement("uom");
externalUOMElm.setTextContent(uom);
//replace uom with externalUOM
preVEENode.replaceChild(externalUOMElm, uomElm);
}
}
}
return resultList;
}
}
Arquivo de Amostra
Abaixo está um arquivo de uso Landis+Gyr de amostra. Observe que este arquivo tem um valor "Units" de "GD_KWH".
Record Type~Record Version~Time Stamp~Premise ID~ESIID~Provisioned~Meter ID~Purpose~Commodity~Units~Calculation Constant~Interval~Count~FirstIntervalDateTime~Data MEPMD01~20080519~11092010012000AM~~~~GD_LL_SN100~OK~E~GD_KWH~~000100~24~10062010010000AM~~0.2316~~0.1416~~0.2904~~0.2628~~0.240~~0.2796~~0.2232~~0.1692~~0.0552~~0.24096~~0.276~~0.1572~~0.0612~~0.3168~~0.132~~0.1092~~0.2532~~0.2844~~0.198~~0.0756~~0.3084~~0.15240~~0.1788~~0.1716~~
Saída XML Simples
Abaixo está a saída XML Simples para o arquivo de uso Landis+Gyr acima. Observe que este arquivo tem um elemento <Units> com um valor de "GD_KWH".
<MeterReads
xmlns="http://xmlns.oracle.com/LandisGyrUsage">
<MeterRead>
<Origin>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</Origin
>
<ServProvExtRefId>L+G</ServProvExtRefId>
<RecordType>MEPMD01</RecordType>
<RecordVersion>20080519</RecordVersion>
<TimeStamp>11092010012000AM</TimeStamp>
<MeterID>GD_LL_SN100</MeterID>
<Purpose>OK</Purpose>
<Comodity>E</Comodity>
<Units>GD_KWH</Units>
<Interval>000100</Interval>
<Count>24</Count>
<FirstIntervalDateTime>10062010010000AM</FirstIntervalDateTime>
<Data>
<Row v="0.2316"/>
<Row v="0.1416"/>
<Row v="0.2904"/>
<Row v="0.2628"/>
<Row v="0.240"/>
<Row v="0.2796"/>
<Row v="0.2232"/>
<Row v="0.1692"/>
<Row v="0.0552"/>
<Row v="0.24096"/>
<Row v="0.276"/>
<Row v="0.1572"/>
<Row v="0.0612"/>
<Row v="0.3168"/>
<Row v="0.132"/>
<Row v="0.1092"/>
<Row v="0.2532"/>
<Row v="0.2844"/>
<Row v="0.198"/>
<Row v="0.0756"/>
<Row v="0.3084"/>
<Row v="0.15240"/>
<Row v="0.1788"/>
<Row v="0.1716"/>
</Data>
<RawData>MEPMD01~20080519~11092010012000AM~~~~GD_LL_SN100~OK~E~GD_KWH~~000100~24~10062010010000AM~~0.2316~~0.1416~~0.2904~~0.2628~~0.240~~0.2796~~0.2232~~0.1692~~0.0552~~0.24096~~0.276~~0.1572~~0.0612~~0.3168~~0.132~~0.1092~~0.2532~~0.2844~~0.198~~0.0756~~0.3084~~0.15240~~0.1788~~0.1716~~</RawData>
</MeterRead>
</MeterReads>
Entrada da Lista de Resultados
Abaixo está a entrada Lista de Resultados enviada para o script do handler. Observe que esse arquivo tem um elemento <externalUOM> com um valor de "GD_KWH".
<?xml version="1.0" encoding="UTF-8"?>
<ResultList>
<D1-IMDSeeder>
<fromDateTime>2010-10-06-00.00.00</fromDateTime>
<preVEE>
<dvcIdN>GD_LL_SN100</dvcIdN>
<externalId>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</externalId>
<externalUOM>GD_KWH</externalUOM>
<stDt>2010-10-06-00.00.00</stDt>
<spi>3600</spi>
<imdType>D1IL</imdType>
<msrs>
<mL>
<s>1</s><q>0.2316</q>
</mL>
<mL>
<s>2</s><q>0.1416</q>
</mL>
<mL>
<s>3</s><q>0.2904</q>
</mL>
<mL>
<s>4</s><q>0.2628</q>
</mL>
<mL>
<s>5</s><q>0.240</q>
</mL>
<mL>
<s>6</s><q>0.2796</q>
</mL>
<mL>
<s>7</s><q>0.2232</q>
</mL>
<mL>
<s>8</s><q>0.1692</q>
</mL>
<mL>
<s>9</s><q>0.0552</q>
</mL>
<mL>
<s>10</s><q>0.24096</q>
</mL>
<mL>
<s>11</s><q>0.276</q>
</mL>
<mL>
<s>12</s><q>0.1572</q>
</mL>
<mL>
<s>13</s><q>0.0612</q>
</mL>
<mL>
<s>14</s><q>0.3168</q>
</mL>
<mL>
<s>15</s><q>0.132</q>
</mL>
<mL>
<s>16</s><q>0.1092</q>
</mL>
<mL>
<s>17</s><q>0.2532</q>
</mL>
<mL>
<s>18</s><q>0.2844</q>
</mL>
<mL>
<s>19</s><q>0.198</q>
</mL>
<mL>
<s>20</s><q>0.0756</q>
</mL>
<mL>
<s>21</s><q>0.3084</q>
</mL>
<mL>
<s>22</s><q>0.15240</q>
</mL>
<mL>
<s>23</s><q>0.1788</q>
</mL>
<mL>
<s>24</s><q>0.1716</q>
</mL>
</msrs>
</preVEE>
<serviceProviderExternalId>L+G</serviceProviderExternalId>
</D1-IMDSeeder>
</ResultList>
Saída da Lista de Resultados
Abaixo está a saída da Lista de Resultados enviada retornada pelo script do handler. Observe que o elemento <externalUOM> foi substituído por um elemento <UOM> com um valor "GD_KWH".
<?xml version="1.0" encoding="UTF-8"?>
<ResultList>
<D1-IMDSeeder>
<fromDateTime>2010-10-06-00.00.00</fromDateTime>
<preVEE>
<dvcIdN>GD_LL_SN100</dvcIdN>
<externalId>IMD_INT_GD_LL_SN100_good1.lg-2020-04-13-07-42-36-092</externalId>
<uom>GD_KWH</uom>
<stDt>2010-10-06-00.00.00</stDt>
<spi>3600</spi>
<imdType>D1IL</imdType>
<msrs>
<mL>
<s>1</s><q>0.2316</q>
</mL>
<mL>
<s>2</s><q>0.1416</q>
</mL>
<mL>
<s>3</s><q>0.2904</q>
</mL>
<mL>
<s>4</s><q>0.2628</q>
</mL>
<mL>
<s>5</s><q>0.240</q>
</mL>
<mL>
<s>6</s><q>0.2796</q>
</mL>
<mL>
<s>7</s><q>0.2232</q>
</mL>
<mL>
<s>8</s><q>0.1692</q>
</mL>
<mL>
<s>9</s><q>0.0552</q>
</mL>
<mL>
<s>10</s><q>0.24096</q>
</mL>
<mL>
<s>11</s><q>0.276</q>
</mL>
<mL>
<s>12</s><q>0.1572</q>
</mL>
<mL>
<s>13</s><q>0.0612</q>
</mL>
<mL>
<s>14</s><q>0.3168</q>
</mL>
<mL>
<s>15</s><q>0.132</q>
</mL>
<mL>
<s>16</s><q>0.1092</q>
</mL>
<mL>
<s>17</s><q>0.2532</q>
</mL>
<mL>
<s>18</s><q>0.2844</q>
</mL>
<mL>
<s>19</s><q>0.198</q>
</mL>
<mL>
<s>20</s><q>0.0756</q>
</mL>
<mL>
<s>21</s><q>0.3084</q>
</mL>
<mL>
<s>22</s><q>0.15240</q>
</mL>
<mL>
<s>23</s><q>0.1788</q>
</mL>
<mL>
<s>24</s><q>0.1716</q>
</mL>
</msrs>
</preVEE>
<serviceProviderExternalId>L+G</serviceProviderExternalId>
</D1-IMDSeeder>
</ResultList>