oadr-poll.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. 'use strict';
  2. const { parseXML, childAttr, required } = require('../parser');
  3. const { create } = require('xmlbuilder2');
  4. const oadrPayloadNs = 'http://www.w3.org/2000/09/xmldsig#';
  5. const oadrNs = 'http://openadr.org/oadr-2.0b/2012/07';
  6. const energyInteropNs = 'http://docs.oasis-open.org/ns/energyinterop/201110';
  7. async function parse(input) {
  8. const json = await parseXML(input);
  9. const o =
  10. json['oadrPayload']['$$']['oadrSignedObject'][0]['$$']['oadrPoll'][0]['$$'];
  11. return {
  12. _type: 'oadrPoll',
  13. venId: required(childAttr(o, 'venID'), 'venID'),
  14. };
  15. }
  16. function serialize(obj) {
  17. const doc = create({
  18. namespaceAlias: {
  19. ns: oadrPayloadNs,
  20. oadr2b: oadrNs,
  21. ei: energyInteropNs,
  22. },
  23. })
  24. .ele('@oadr2b', 'oadr2b:oadrPayload')
  25. .ele('oadr2b:oadrSignedObject')
  26. .ele('oadr2b:oadrPoll')
  27. .att(energyInteropNs, 'ei:schemaVersion', '2.0b')
  28. .ele(energyInteropNs, 'ei:venID')
  29. .txt(obj.venId)
  30. .up()
  31. .doc();
  32. return doc.end({ headless: true, prettyPrint: false });
  33. }
  34. async function canParse(input) {
  35. const json = await parseXML(input);
  36. const o = json['oadrPayload']['$$']['oadrSignedObject'][0]['$$'];
  37. return o['oadrPoll'] != null;
  38. }
  39. module.exports = {
  40. parse,
  41. serialize,
  42. canParse,
  43. };