@golemio/energetics 1.8.3 → 1.9.0-dev.2567800850

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/db/migrations/postgresql/20250213141826-add-device-serial-id.js +53 -0
  2. package/db/migrations/postgresql/20260427093000-enapo-porsenna.js +53 -0
  3. package/db/migrations/postgresql/sqls/20250213141826-add-device-serial-id-down.sql +1 -0
  4. package/db/migrations/postgresql/sqls/20250213141826-add-device-serial-id-up.sql +1 -0
  5. package/db/migrations/postgresql/sqls/20260427093000-enapo-porsenna-down.sql +3 -0
  6. package/db/migrations/postgresql/sqls/20260427093000-enapo-porsenna-up.sql +85 -0
  7. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.d.ts +4 -4
  8. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js +5 -5
  9. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js.map +1 -1
  10. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.d.ts +1 -1
  11. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.js +16 -13
  12. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.js.map +1 -1
  13. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.d.ts +6 -0
  14. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.js +26 -0
  15. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.js.map +1 -0
  16. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.d.ts +4 -23
  17. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.js +3 -67
  18. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.js.map +1 -1
  19. package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/interfaces/IAveApiDeviceDataParams.d.ts +3 -5
  20. package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.d.ts +6 -2
  21. package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.js +3 -2
  22. package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.js.map +1 -1
  23. package/dist/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.d.ts +2 -0
  24. package/dist/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.js +1 -0
  25. package/dist/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.js.map +1 -1
  26. package/dist/integration-engine/commodity-providers/transformations/PreElectroTransformation.js +1 -0
  27. package/dist/integration-engine/commodity-providers/transformations/PreElectroTransformation.js.map +1 -1
  28. package/dist/integration-engine/commodity-providers/transformations/PreMeasurementTransformation.js +1 -0
  29. package/dist/integration-engine/commodity-providers/transformations/PreMeasurementTransformation.js.map +1 -1
  30. package/dist/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.js +1 -0
  31. package/dist/integration-engine/commodity-providers/transformations/PtasWebMeasurementTransformation.js.map +1 -1
  32. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js +11 -10
  33. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js.map +1 -1
  34. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.d.ts +4 -7
  35. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js +20 -23
  36. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js.map +1 -1
  37. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPreMeasurementDataTask.js +1 -1
  38. package/dist/integration-engine/commodity-providers/workers/tasks/FetchPreMeasurementDataTask.js.map +1 -1
  39. package/dist/integration-engine/commodity-providers/workers/tasks/FetchVeoliaMeasurementsTask.js +3 -1
  40. package/dist/integration-engine/commodity-providers/workers/tasks/FetchVeoliaMeasurementsTask.js.map +1 -1
  41. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSource.d.ts +15 -0
  42. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSource.js +67 -0
  43. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSource.js.map +1 -0
  44. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSourceProvider.d.ts +10 -0
  45. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSourceProvider.js +52 -0
  46. package/dist/integration-engine/enapo/datasources/porsenna/PorsennaDataSourceProvider.js.map +1 -0
  47. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IConsumptionApiEntry.d.ts +7 -0
  48. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IConsumptionApiEntry.js +3 -0
  49. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IConsumptionApiEntry.js.map +1 -0
  50. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IGaugeApiDto.d.ts +5 -0
  51. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IGaugeApiDto.js +3 -0
  52. package/dist/integration-engine/enapo/datasources/porsenna/interfaces/IGaugeApiDto.js.map +1 -0
  53. package/dist/integration-engine/enapo/helpers/IntervalGenerator.d.ts +1 -0
  54. package/dist/integration-engine/enapo/helpers/IntervalGenerator.js +6 -0
  55. package/dist/integration-engine/enapo/helpers/IntervalGenerator.js.map +1 -1
  56. package/dist/integration-engine/enapo/interfaces/IPPasPlaces.d.ts +3 -46
  57. package/dist/integration-engine/enapo/ioc/Di.js +24 -8
  58. package/dist/integration-engine/enapo/ioc/Di.js.map +1 -1
  59. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.d.ts +8 -0
  60. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js +8 -0
  61. package/dist/integration-engine/enapo/ioc/EnapoWorkerContainerToken.js.map +1 -1
  62. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaBuildingsRepository.d.ts +5 -0
  63. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaBuildingsRepository.js +32 -0
  64. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaBuildingsRepository.js.map +1 -0
  65. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaConsumptionRepository.d.ts +5 -0
  66. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaConsumptionRepository.js +32 -0
  67. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaConsumptionRepository.js.map +1 -0
  68. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaDevicesRepository.d.ts +5 -0
  69. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaDevicesRepository.js +32 -0
  70. package/dist/integration-engine/enapo/repositories/porsenna/PorsennaDevicesRepository.js.map +1 -0
  71. package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.d.ts +1 -0
  72. package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.js +4 -4
  73. package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.js.map +1 -1
  74. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaConsumptionTransformation.d.ts +8 -0
  75. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaConsumptionTransformation.js +47 -0
  76. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaConsumptionTransformation.js.map +1 -0
  77. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaGaugeTransformation.d.ts +15 -0
  78. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaGaugeTransformation.js +62 -0
  79. package/dist/integration-engine/enapo/transformations/porsenna/PorsennaGaugeTransformation.js.map +1 -0
  80. package/dist/integration-engine/enapo/workers/EnapoWorker.js +1 -0
  81. package/dist/integration-engine/enapo/workers/EnapoWorker.js.map +1 -1
  82. package/dist/integration-engine/enapo/workers/interfaces/IEnapoPorsennaDistributionParams.d.ts +5 -0
  83. package/dist/integration-engine/enapo/workers/interfaces/IEnapoPorsennaDistributionParams.js +3 -0
  84. package/dist/integration-engine/enapo/workers/interfaces/IEnapoPorsennaDistributionParams.js.map +1 -0
  85. package/dist/integration-engine/enapo/workers/schema/EnapoPorsennaDistributionParamsSchema.d.ts +6 -0
  86. package/dist/integration-engine/enapo/workers/schema/EnapoPorsennaDistributionParamsSchema.js +34 -0
  87. package/dist/integration-engine/enapo/workers/schema/EnapoPorsennaDistributionParamsSchema.js.map +1 -0
  88. package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.d.ts +2 -5
  89. package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.js +21 -24
  90. package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.js.map +1 -1
  91. package/dist/integration-engine/enapo/workers/task/PorsennaDistributionTask.d.ts +27 -0
  92. package/dist/integration-engine/enapo/workers/task/PorsennaDistributionTask.js +125 -0
  93. package/dist/integration-engine/enapo/workers/task/PorsennaDistributionTask.js.map +1 -0
  94. package/dist/output-gateway/controllers/v2/AbstractController.js +4 -1
  95. package/dist/output-gateway/controllers/v2/AbstractController.js.map +1 -1
  96. package/dist/output-gateway/controllers/v2/BuildingsController.js +2 -1
  97. package/dist/output-gateway/controllers/v2/BuildingsController.js.map +1 -1
  98. package/dist/output-gateway/controllers/v2/V2DevicesController.js +1 -1
  99. package/dist/output-gateway/controllers/v2/V2DevicesController.js.map +1 -1
  100. package/dist/output-gateway/controllers/v2/V2OrganizationsController.js +1 -1
  101. package/dist/output-gateway/controllers/v2/V2OrganizationsController.js.map +1 -1
  102. package/dist/output-gateway/repositories/MeasurementRepository.js +5 -1
  103. package/dist/output-gateway/repositories/MeasurementRepository.js.map +1 -1
  104. package/dist/schema-definitions/datasources/StaticMeterSettingsJsonSchema.js +4 -3
  105. package/dist/schema-definitions/datasources/StaticMeterSettingsJsonSchema.js.map +1 -1
  106. package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.d.ts +3 -0
  107. package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.js +37 -0
  108. package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.js.map +1 -0
  109. package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js +2 -2
  110. package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js.map +1 -1
  111. package/dist/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.js +5 -4
  112. package/dist/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.js.map +1 -1
  113. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.d.ts +5 -0
  114. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.js +3 -0
  115. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.js.map +1 -0
  116. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.d.ts +10 -0
  117. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.js +3 -0
  118. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.js.map +1 -0
  119. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiDeviceDataDto.d.ts +1 -1
  120. package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiPlaceDto.d.ts +4 -3
  121. package/dist/schema-definitions/datasources/enapo/porsenna/PorsennaJsonSchema.d.ts +5 -0
  122. package/dist/schema-definitions/datasources/enapo/porsenna/PorsennaJsonSchema.js +92 -0
  123. package/dist/schema-definitions/datasources/enapo/porsenna/PorsennaJsonSchema.js.map +1 -0
  124. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IConsumptionApiEntry.d.ts +15 -0
  125. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IConsumptionApiEntry.js +3 -0
  126. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IConsumptionApiEntry.js.map +1 -0
  127. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IGaugeApiDto.d.ts +41 -0
  128. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IGaugeApiDto.js +3 -0
  129. package/dist/schema-definitions/datasources/enapo/porsenna/interfaces/IGaugeApiDto.js.map +1 -0
  130. package/dist/schema-definitions/datasources/interfaces/IStaticMeterSettings.d.ts +3 -2
  131. package/dist/schema-definitions/models/MeasurementsModel.d.ts +1 -0
  132. package/dist/schema-definitions/models/MeasurementsModel.js +15 -1
  133. package/dist/schema-definitions/models/MeasurementsModel.js.map +1 -1
  134. package/dist/schema-definitions/models/interfaces/IMeasurementDto.d.ts +1 -0
  135. package/dist/schema-definitions/models/porsenna/PorsennaBuildingsModel.d.ts +21 -0
  136. package/dist/schema-definitions/models/porsenna/PorsennaBuildingsModel.js +77 -0
  137. package/dist/schema-definitions/models/porsenna/PorsennaBuildingsModel.js.map +1 -0
  138. package/dist/schema-definitions/models/porsenna/PorsennaConsumptionModel.d.ts +20 -0
  139. package/dist/schema-definitions/models/porsenna/PorsennaConsumptionModel.js +72 -0
  140. package/dist/schema-definitions/models/porsenna/PorsennaConsumptionModel.js.map +1 -0
  141. package/dist/schema-definitions/models/porsenna/PorsennaDevicesModel.d.ts +27 -0
  142. package/dist/schema-definitions/models/porsenna/PorsennaDevicesModel.js +107 -0
  143. package/dist/schema-definitions/models/porsenna/PorsennaDevicesModel.js.map +1 -0
  144. package/dist/schema-definitions/models/porsenna/index.d.ts +3 -0
  145. package/dist/schema-definitions/models/porsenna/index.js +20 -0
  146. package/dist/schema-definitions/models/porsenna/index.js.map +1 -0
  147. package/dist/schema-definitions/models/porsenna/interfaces/IBuildings.d.ts +11 -0
  148. package/dist/schema-definitions/models/porsenna/interfaces/IBuildings.js +3 -0
  149. package/dist/schema-definitions/models/porsenna/interfaces/IBuildings.js.map +1 -0
  150. package/dist/schema-definitions/models/porsenna/interfaces/IConsumption.d.ts +10 -0
  151. package/dist/schema-definitions/models/porsenna/interfaces/IConsumption.js +3 -0
  152. package/dist/schema-definitions/models/porsenna/interfaces/IConsumption.js.map +1 -0
  153. package/dist/schema-definitions/models/porsenna/interfaces/IDevices.d.ts +17 -0
  154. package/dist/schema-definitions/models/porsenna/interfaces/IDevices.js +3 -0
  155. package/dist/schema-definitions/models/porsenna/interfaces/IDevices.js.map +1 -0
  156. package/docs/implementation_documentation.md +44 -3
  157. package/package.json +12 -8
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var dbm;
4
+ var type;
5
+ var seed;
6
+ var fs = require('fs');
7
+ var path = require('path');
8
+ var Promise;
9
+
10
+ /**
11
+ * We receive the dbmigrate dependency from dbmigrate initially.
12
+ * This enables us to not have to rely on NODE_PATH.
13
+ */
14
+ exports.setup = function(options, seedLink) {
15
+ dbm = options.dbmigrate;
16
+ type = dbm.dataType;
17
+ seed = seedLink;
18
+ Promise = options.Promise;
19
+ };
20
+
21
+ exports.up = function(db) {
22
+ var filePath = path.join(__dirname, 'sqls', '20250213141826-add-device-serial-id-up.sql');
23
+ return new Promise( function( resolve, reject ) {
24
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
25
+ if (err) return reject(err);
26
+ console.log('received data: ' + data);
27
+
28
+ resolve(data);
29
+ });
30
+ })
31
+ .then(function(data) {
32
+ return db.runSql(data);
33
+ });
34
+ };
35
+
36
+ exports.down = function(db) {
37
+ var filePath = path.join(__dirname, 'sqls', '20250213141826-add-device-serial-id-down.sql');
38
+ return new Promise( function( resolve, reject ) {
39
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
40
+ if (err) return reject(err);
41
+ console.log('received data: ' + data);
42
+
43
+ resolve(data);
44
+ });
45
+ })
46
+ .then(function(data) {
47
+ return db.runSql(data);
48
+ });
49
+ };
50
+
51
+ exports._meta = {
52
+ "version": 1
53
+ };
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ var dbm;
4
+ var type;
5
+ var seed;
6
+ var fs = require('fs');
7
+ var path = require('path');
8
+ var Promise;
9
+
10
+ /**
11
+ * We receive the dbmigrate dependency from dbmigrate initially.
12
+ * This enables us to not have to rely on NODE_PATH.
13
+ */
14
+ exports.setup = function(options, seedLink) {
15
+ dbm = options.dbmigrate;
16
+ type = dbm.dataType;
17
+ seed = seedLink;
18
+ Promise = options.Promise;
19
+ };
20
+
21
+ exports.up = function(db) {
22
+ var filePath = path.join(__dirname, 'sqls', '20260427093000-enapo-porsenna-up.sql');
23
+ return new Promise( function( resolve, reject ) {
24
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
25
+ if (err) return reject(err);
26
+ console.log('received data: ' + data);
27
+
28
+ resolve(data);
29
+ });
30
+ })
31
+ .then(function(data) {
32
+ return db.runSql(data);
33
+ });
34
+ };
35
+
36
+ exports.down = function(db) {
37
+ var filePath = path.join(__dirname, 'sqls', '20260427093000-enapo-porsenna-down.sql');
38
+ return new Promise( function( resolve, reject ) {
39
+ fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
40
+ if (err) return reject(err);
41
+ console.log('received data: ' + data);
42
+
43
+ resolve(data);
44
+ });
45
+ })
46
+ .then(function(data) {
47
+ return db.runSql(data);
48
+ });
49
+ };
50
+
51
+ exports._meta = {
52
+ "version": 1
53
+ };
@@ -0,0 +1 @@
1
+ ALTER TABLE consumption_energy_measurements DROP COLUMN device_serial_number;
@@ -0,0 +1 @@
1
+ ALTER TABLE consumption_energy_measurements ADD COLUMN device_serial_number varchar(50);
@@ -0,0 +1,3 @@
1
+ drop table enapo_porsenna_consumption;
2
+ drop table enapo_porsenna_devices;
3
+ drop table enapo_porsenna_buildings;
@@ -0,0 +1,85 @@
1
+ -- Buildings registry sourced from Porsenna (e-manažer)
2
+ -- Populated from the embedded `building` object in /gauges/{id} responses.
3
+ -- The (source, id) PK reflects that Porsenna building ids are integers local to each tenant instance.
4
+ CREATE TABLE enapo_porsenna_buildings (
5
+ source varchar(50) NOT NULL,
6
+ id int4 NOT NULL,
7
+ name varchar NULL,
8
+ street varchar NULL,
9
+ house_number varchar NULL,
10
+ street_number varchar NULL,
11
+ city varchar NULL,
12
+ postcode varchar NULL,
13
+ gid varchar NULL,
14
+ created_at timestamptz DEFAULT now() NULL,
15
+ updated_at timestamptz NULL,
16
+ CONSTRAINT enapo_porsenna_buildings_pk PRIMARY KEY (source, id)
17
+ );
18
+
19
+ COMMENT ON COLUMN enapo_porsenna_buildings.source IS 'Tenant identifier, e.g. porsenna_p7. Matches ProviderType enum.';
20
+ COMMENT ON COLUMN enapo_porsenna_buildings.gid IS 'gid string as supplied by Porsenna. Suspected RUIAN building identifier based on format (8-digit numeric in sample payload) but not confirmed with the source system. If confirmed, becomes a soft link to eno_budova.gid (no FK).';
21
+
22
+ CREATE INDEX enapo_porsenna_buildings_gid_idx ON enapo_porsenna_buildings (gid);
23
+
24
+
25
+ -- Devices sourced from Porsenna Gauges. Identification fields flattened onto the device.
26
+ -- DisableReason endpoint is not accessible to us; we keep only the numeric id parsed from the IRI.
27
+ CREATE TABLE enapo_porsenna_devices (
28
+ source varchar(50) NOT NULL,
29
+ id uuid NOT NULL,
30
+ building_id int4 NULL,
31
+ parent_device_id uuid NULL,
32
+ "level" varchar NULL,
33
+ "type" varchar NULL,
34
+ name varchar NULL,
35
+ measurement_target varchar NULL,
36
+ disabled_at timestamptz NULL,
37
+ disable_reason_id int4 NULL,
38
+ show_in_output bool NULL,
39
+ -- flattened Identification
40
+ identifier varchar NULL,
41
+ supply_point_number varchar NULL,
42
+ meter_number varchar NULL,
43
+ identification_gid varchar NULL,
44
+ created_at timestamptz DEFAULT now() NULL,
45
+ updated_at timestamptz NULL,
46
+ CONSTRAINT enapo_porsenna_devices_pk PRIMARY KEY (source, id)
47
+ );
48
+
49
+ COMMENT ON COLUMN enapo_porsenna_devices.source IS 'Tenant identifier, e.g. porsenna_p7. Matches ProviderType enum.';
50
+ COMMENT ON COLUMN enapo_porsenna_devices.building_id IS 'Soft ref to enapo_porsenna_buildings (source, id); no FK.';
51
+ COMMENT ON COLUMN enapo_porsenna_devices.parent_device_id IS 'Soft self-ref to enapo_porsenna_devices (source, id); no FK. Used for sub-meter hierarchy.';
52
+ COMMENT ON COLUMN enapo_porsenna_devices."level" IS 'main / sub';
53
+ COMMENT ON COLUMN enapo_porsenna_devices."type" IS 'gasometer / electrometer / heatmeter / watermeter / ...';
54
+ COMMENT ON COLUMN enapo_porsenna_devices.disable_reason_id IS 'Numeric id parsed from the /disable_reasons/{n} IRI. The lookup endpoint is not accessible to us, so the human-readable name is not retrievable.';
55
+ COMMENT ON COLUMN enapo_porsenna_devices.identifier IS 'Primary identifier from Porsenna Identification. Can be an EAN (prefix 859182400, typically electricity_meter), an EIC code (prefix 27ZG100Z, typically gasometer), or a numerical OM identifier (heat_meter, water_meter).';
56
+
57
+ CREATE INDEX enapo_porsenna_devices_identifier_idx ON enapo_porsenna_devices (identifier);
58
+ CREATE INDEX enapo_porsenna_devices_building_idx ON enapo_porsenna_devices (source, building_id);
59
+
60
+
61
+ -- Yearly consumption aggregates per device per period.
62
+ -- 'var' is the period kind (yearly today; monthly/daily reserved for future use).
63
+ -- @type from the Hydra payload is always "Consumption" and is implicit in this table.
64
+ CREATE TABLE enapo_porsenna_consumption (
65
+ source varchar(50) NOT NULL,
66
+ device_id uuid NOT NULL,
67
+ "var" varchar(20) NOT NULL,
68
+ "period" varchar(20) NOT NULL,
69
+ value numeric(30, 15) NOT NULL,
70
+ unit varchar(20) NOT NULL,
71
+ commodity varchar(20) NULL,
72
+ "count" int4 NULL,
73
+ created_at timestamptz DEFAULT now() NULL,
74
+ updated_at timestamptz NULL,
75
+ CONSTRAINT enapo_porsenna_consumption_pk PRIMARY KEY (source, device_id, "var", "period")
76
+ );
77
+
78
+ COMMENT ON COLUMN enapo_porsenna_consumption.source IS 'Tenant identifier, e.g. porsenna_p7. Matches ProviderType enum.';
79
+ COMMENT ON COLUMN enapo_porsenna_consumption.device_id IS 'Soft ref to enapo_porsenna_devices (source, id); no FK.';
80
+ COMMENT ON COLUMN enapo_porsenna_consumption."var" IS 'Period kind: yearly | monthly | daily. Currently only yearly is ingested.';
81
+ COMMENT ON COLUMN enapo_porsenna_consumption."period" IS 'Period identifier as supplied by the API (e.g. "2023" for yearly aggregates).';
82
+ COMMENT ON COLUMN enapo_porsenna_consumption.commodity IS 'Denormalised from enapo_porsenna_devices.type for fast filtered reads.';
83
+ COMMENT ON COLUMN enapo_porsenna_consumption."count" IS 'Days covered by the period; useful for partial periods (e.g. current year).';
84
+
85
+ CREATE INDEX enapo_porsenna_consumption_period_idx ON enapo_porsenna_consumption ("period");
@@ -1,6 +1,6 @@
1
1
  export declare enum AveDataType {
2
- RawData = 0,
3
- HourlyData = 1,
4
- DailyData = 2,
5
- MonthlyData = 3
2
+ RawData = "RawData",
3
+ HourlyData = "HourlyData",
4
+ DailyData = "DailyData",
5
+ MonthlyData = "MonthlyData"
6
6
  }
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AveDataType = void 0;
4
- // takeover from original C# scraper [OIct.ECG.AveDataGrabber](https://gitlab.com/operator-ict/oddeleni-vyvoje/energetika/spotreby-energii-mestskych-budov/stahovani-dat-meridel/-/blob/main/src/OIct.ECG.AveDataGrabber/Models/DataType.cs?ref_type=heads)
4
+ // String values match the `dataType` query parameter of the new PPAS AVE REST API V1.
5
5
  var AveDataType;
6
6
  (function (AveDataType) {
7
- AveDataType[AveDataType["RawData"] = 0] = "RawData";
8
- AveDataType[AveDataType["HourlyData"] = 1] = "HourlyData";
9
- AveDataType[AveDataType["DailyData"] = 2] = "DailyData";
10
- AveDataType[AveDataType["MonthlyData"] = 3] = "MonthlyData";
7
+ AveDataType["RawData"] = "RawData";
8
+ AveDataType["HourlyData"] = "HourlyData";
9
+ AveDataType["DailyData"] = "DailyData";
10
+ AveDataType["MonthlyData"] = "MonthlyData";
11
11
  })(AveDataType || (exports.AveDataType = AveDataType = {}));
12
12
  //# sourceMappingURL=AveDataTypeEnum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AveDataTypeEnum.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.ts"],"names":[],"mappings":";;;AAAA,2PAA2P;AAC3P,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,mDAAW,CAAA;IACX,yDAAc,CAAA;IACd,uDAAa,CAAA;IACb,2DAAe,CAAA;AACnB,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB"}
1
+ {"version":3,"file":"AveDataTypeEnum.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.ts"],"names":[],"mappings":";;;AAAA,sFAAsF;AACtF,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,kCAAmB,CAAA;IACnB,wCAAyB,CAAA;IACzB,sCAAuB,CAAA;IACvB,0CAA2B,CAAA;AAC/B,CAAC,EALW,WAAW,2BAAX,WAAW,QAKtB"}
@@ -8,7 +8,7 @@ export declare class PpasAveApiDataSourceProvider implements IDataSourceProvider
8
8
  private static readonly DATASOURCE_NAME;
9
9
  private static readonly MAX_RESULTS;
10
10
  constructor(config: ISimpleConfig);
11
- getDataSource(resourceType: string, sessionId: string, params?: IAveApiDeviceDataParams): IDataSource<CemApiDtoUnion[]>;
11
+ getDataSource(resourceType: string, apiKey: string, params?: IAveApiDeviceDataParams): IDataSource<CemApiDtoUnion[]>;
12
12
  private getProtocolStrategy;
13
13
  private getDataTypeStrategy;
14
14
  private getJsonSchemaValidator;
@@ -22,31 +22,34 @@ const HTTPFetchProtocolStrategy_1 = require("@golemio/core/dist/integration-engi
22
22
  const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
23
23
  const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
24
24
  const tsyringe_1 = require("@golemio/core/dist/shared/tsyringe");
25
+ const ArchiveDataTypeStrategy_1 = require("./helpers/ArchiveDataTypeStrategy");
25
26
  const PpasAveApiHelper_1 = require("./helpers/PpasAveApiHelper");
26
27
  let PpasAveApiDataSourceProvider = exports.PpasAveApiDataSourceProvider = PpasAveApiDataSourceProvider_1 = class PpasAveApiDataSourceProvider {
27
28
  constructor(config) {
28
29
  this.config = config;
29
30
  }
30
- getDataSource(resourceType, sessionId, params) {
31
+ getDataSource(resourceType, apiKey, params) {
31
32
  const baseUrl = this.config.getValue("module.energetics.commodityProviders.ppas_ave_api.baseUrl");
32
33
  const url = new URL(baseUrl);
33
- url.pathname += "/" + resourceType;
34
- url.searchParams.append("sessionId", sessionId);
35
- url.searchParams.append("limit", PpasAveApiDataSourceProvider_1.MAX_RESULTS.toString());
36
- if (params) {
37
- url.searchParams.append("placeId", params.placeId.toString());
38
- url.searchParams.append("dateFrom", params.dateFrom);
39
- url.searchParams.append("dateTo", params.dateTo);
40
- url.searchParams.append("isoDate", params.isoDate);
34
+ if (resourceType === PpasAveApiHelper_1.PpasAveApiHelper.resourceType.Places) {
35
+ url.pathname += "/devices";
36
+ url.searchParams.append("parameters.limit", PpasAveApiDataSourceProvider_1.MAX_RESULTS.toString());
37
+ }
38
+ else if (resourceType === PpasAveApiHelper_1.PpasAveApiHelper.resourceType.DeviceData && params) {
39
+ url.pathname += `/devices/${params.deviceId}/data/archive`;
41
40
  url.searchParams.append("dataType", params.dataType);
41
+ url.searchParams.append("from", params.from);
42
+ url.searchParams.append("to", params.to);
43
+ url.searchParams.append("dstAware", "false");
42
44
  }
43
- return new integration_engine_1.DataSource(PpasAveApiDataSourceProvider_1.DATASOURCE_NAME, this.getProtocolStrategy(url, sessionId), this.getDataTypeStrategy(resourceType), this.getJsonSchemaValidator(resourceType));
45
+ return new integration_engine_1.DataSource(PpasAveApiDataSourceProvider_1.DATASOURCE_NAME, this.getProtocolStrategy(url, apiKey), this.getDataTypeStrategy(resourceType), this.getJsonSchemaValidator(resourceType));
44
46
  }
45
- getProtocolStrategy(url, sessionId) {
47
+ getProtocolStrategy(url, apiKey) {
46
48
  return new HTTPFetchProtocolStrategy_1.HTTPFetchProtocolStrategy({
47
49
  method: "GET",
48
50
  headers: {
49
51
  Accept: "application/json",
52
+ [PpasAveApiHelper_1.PpasAveApiHelper.API_KEY_HEADER]: apiKey,
50
53
  },
51
54
  timeoutInSeconds: 20,
52
55
  url: url.toString(),
@@ -55,9 +58,9 @@ let PpasAveApiDataSourceProvider = exports.PpasAveApiDataSourceProvider = PpasAv
55
58
  getDataTypeStrategy(resourceType) {
56
59
  switch (resourceType) {
57
60
  case PpasAveApiHelper_1.PpasAveApiHelper.resourceType.Places:
58
- return new integration_engine_1.JSONDataTypeStrategy({ resultsPath: "PageItems" });
61
+ return new integration_engine_1.JSONDataTypeStrategy({ resultsPath: "pageItems" });
59
62
  case PpasAveApiHelper_1.PpasAveApiHelper.resourceType.DeviceData:
60
- return new integration_engine_1.JSONDataTypeStrategy({ resultsPath: "" });
63
+ return new ArchiveDataTypeStrategy_1.ArchiveDataTypeStrategy({ resultsPath: "" });
61
64
  default:
62
65
  throw new golemio_errors_1.GeneralError(`Unknown resource type: ${resourceType}`, PpasAveApiDataSourceProvider_1.name);
63
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PpasAveApiDataSourceProvider.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PpasAveApiDataSourceProvider.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { IAveApiDeviceDataDto } from "../../../../../schema-definitions/datasources/commodity-providers/interfaces/IAveApiDeviceDataDto";
2
+ import { JSONDataTypeStrategy } from "@golemio/core/dist/integration-engine";
3
+ export declare class ArchiveDataTypeStrategy extends JSONDataTypeStrategy {
4
+ private readonly archiveResponseValidator;
5
+ parseData(data: unknown): Promise<IAveApiDeviceDataDto[]>;
6
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ArchiveDataTypeStrategy = void 0;
4
+ const AveApiArchiveResponseJsonSchema_1 = require("../../../../../schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema");
5
+ const integration_engine_1 = require("@golemio/core/dist/integration-engine");
6
+ const golemio_validator_1 = require("@golemio/core/dist/shared/golemio-validator");
7
+ // Api response has column names in the array headers: []
8
+ // and values are in a separate array called rows: []
9
+ // test\integration-engine\data\aveapi-ppas-data-archive.json
10
+ class ArchiveDataTypeStrategy extends integration_engine_1.JSONDataTypeStrategy {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.archiveResponseValidator = new golemio_validator_1.JSONSchemaValidator("PpasAveApiArchiveResponse", AveApiArchiveResponseJsonSchema_1.aveApiArchiveResponseJsonSchema);
14
+ }
15
+ async parseData(data) {
16
+ const response = (await super.parseData(data));
17
+ if (!response || !Array.isArray(response.rows) || !Array.isArray(response.headers)) {
18
+ return [];
19
+ }
20
+ await this.archiveResponseValidator.Validate(response);
21
+ const { headers, rows } = response;
22
+ return rows.map((row) => Object.fromEntries(headers.map((header, i) => [header.key, row[i]])));
23
+ }
24
+ }
25
+ exports.ArchiveDataTypeStrategy = ArchiveDataTypeStrategy;
26
+ //# sourceMappingURL=ArchiveDataTypeStrategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArchiveDataTypeStrategy.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.ts"],"names":[],"mappings":";;;AAAA,uJAAuH;AAMvH,8EAA6E;AAC7E,mFAAkF;AAElF,yDAAyD;AACzD,qDAAqD;AACrD,6DAA6D;AAC7D,MAAa,uBAAwB,SAAQ,yCAAoB;IAAjE;;QACqB,6BAAwB,GAAG,IAAI,uCAAmB,CAC/D,2BAA2B,EAC3B,iEAA+B,CAClC,CAAC;IAmBN,CAAC;IAjBmB,KAAK,CAAC,SAAS,CAAC,IAAa;QACzC,MAAM,QAAQ,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAuC,CAAC;QACrF,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAChF,OAAO,EAAE,CAAC;SACb;QAED,MAAM,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEvD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACnC,OAAO,IAAI,CAAC,GAAG,CACX,CAAC,GAAG,EAAE,EAAE,CACJ,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAG1C,CAChC,CAAC;IACN,CAAC;CACJ;AAvBD,0DAuBC"}
@@ -1,32 +1,13 @@
1
1
  export interface IAveConfig {
2
- user: string;
3
- pass: string;
2
+ apikey: string;
4
3
  excludelist: string[] | null;
5
4
  }
6
- /**
7
- * Helper class for requesting additional data from PPAS InternetAVE API
8
- */
9
5
  declare class PpasAveApiHelper {
10
- private baseUrl;
11
- private config;
12
6
  static API_DATE_TZ: string;
13
- constructor(baseUrl: string, config: IAveConfig);
14
- /**
15
- * Create API session and return session ID
16
- */
17
- createSession: () => Promise<string>;
18
- /**
19
- * Terminate current session/invalidate session ID
20
- */
21
- terminateSession: (sessionId: string) => Promise<void>;
22
- /**
23
- * Return resource types/identifiers
24
- */
7
+ static API_KEY_HEADER: string;
25
8
  static get resourceType(): {
26
- readonly Logon: "logon.rails";
27
- readonly LogOff: "LogOff.rails";
28
- readonly Places: "GetPlaces.rails";
29
- readonly DeviceData: "GetDeviceData.rails";
9
+ readonly Places: "Places";
10
+ readonly DeviceData: "DeviceData";
30
11
  };
31
12
  }
32
13
  export { PpasAveApiHelper };
@@ -1,79 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PpasAveApiHelper = void 0;
4
- const golemio_errors_1 = require("@golemio/core/dist/shared/golemio-errors");
5
- /**
6
- * Helper class for requesting additional data from PPAS InternetAVE API
7
- */
8
4
  class PpasAveApiHelper {
9
- constructor(baseUrl, config) {
10
- this.baseUrl = baseUrl;
11
- this.config = config;
12
- /**
13
- * Create API session and return session ID
14
- */
15
- this.createSession = async () => {
16
- const { user, pass } = this.config;
17
- try {
18
- const url = new URL(this.baseUrl);
19
- url.pathname += "/" + PpasAveApiHelper.resourceType.Logon;
20
- const result = await fetch(url.toString(), {
21
- method: "post",
22
- headers: new Headers({
23
- Accept: "application/json",
24
- "Content-Type": "application/x-www-form-urlencoded",
25
- }),
26
- body: new URLSearchParams({
27
- name: user,
28
- password: pass,
29
- }),
30
- signal: AbortSignal.timeout(10000),
31
- });
32
- const data = await result.json();
33
- if (data?.success && typeof data?.sessionId === "string") {
34
- return data.sessionId;
35
- }
36
- throw new golemio_errors_1.GeneralError("Cannot parse PPAS AVE Session ID from the server response", PpasAveApiHelper.name, new Error(data?.message));
37
- }
38
- catch (err) {
39
- if (err instanceof golemio_errors_1.AbstractGolemioError) {
40
- throw err;
41
- }
42
- throw new golemio_errors_1.GeneralError("Cannot retrieve PPAS AVE Session ID " + err.message, PpasAveApiHelper.name, err);
43
- }
44
- };
45
- /**
46
- * Terminate current session/invalidate session ID
47
- */
48
- this.terminateSession = async (sessionId) => {
49
- try {
50
- const url = new URL(this.baseUrl);
51
- url.pathname += "/" + PpasAveApiHelper.resourceType.LogOff;
52
- url.searchParams.append("sessionId", sessionId);
53
- await fetch(url.toString(), {
54
- method: "get",
55
- signal: AbortSignal.timeout(10000),
56
- });
57
- }
58
- catch (err) {
59
- throw new golemio_errors_1.GeneralError("Cannot terminate PPAS AVE API session", PpasAveApiHelper.name, err);
60
- }
61
- };
62
- }
63
- /**
64
- * Return resource types/identifiers
65
- */
66
5
  static get resourceType() {
67
6
  return {
68
- Logon: "logon.rails",
69
- LogOff: "LogOff.rails",
70
- Places: "GetPlaces.rails",
71
- DeviceData: "GetDeviceData.rails",
7
+ Places: "Places",
8
+ DeviceData: "DeviceData",
72
9
  };
73
10
  }
74
11
  }
75
12
  exports.PpasAveApiHelper = PpasAveApiHelper;
76
- // based on analysis it seems API PPAS is handling timezones incorrectly, we deciced to follow PPAS UI approach to timezones.
77
- // https://gitlab.com/operator-ict/golemio/projekty/energetika/p0262.prevzeti-energeticke-databaze/-/issues/37#note_2010344938
78
13
  PpasAveApiHelper.API_DATE_TZ = "UTC+1";
14
+ PpasAveApiHelper.API_KEY_HEADER = "X-API-Key";
79
15
  //# sourceMappingURL=PpasAveApiHelper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PpasAveApiHelper.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.ts"],"names":[],"mappings":";;;AAAA,6EAA8F;AAO9F;;GAEG;AACH,MAAM,gBAAgB;IAKlB,YAAoB,OAAe,EAAU,MAAkB;QAA3C,YAAO,GAAP,OAAO,CAAQ;QAAU,WAAM,GAAN,MAAM,CAAY;QAC/D;;WAEG;QACI,kBAAa,GAAG,KAAK,IAAqB,EAAE;YAC/C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;YAEnC,IAAI;gBACA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,CAAC,QAAQ,IAAI,GAAG,GAAG,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC;gBAE1D,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;oBACvC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,IAAI,OAAO,CAAC;wBACjB,MAAM,EAAE,kBAAkB;wBAC1B,cAAc,EAAE,mCAAmC;qBACtD,CAAC;oBACF,IAAI,EAAE,IAAI,eAAe,CAAC;wBACtB,IAAI,EAAE,IAAI;wBACV,QAAQ,EAAE,IAAI;qBACjB,CAAC;oBACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;iBACrC,CAAC,CAAC;gBAEH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEjC,IAAI,IAAI,EAAE,OAAO,IAAI,OAAO,IAAI,EAAE,SAAS,KAAK,QAAQ,EAAE;oBACtD,OAAO,IAAI,CAAC,SAAS,CAAC;iBACzB;gBAED,MAAM,IAAI,6BAAY,CAClB,2DAA2D,EAC3D,gBAAgB,CAAC,IAAI,EACrB,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAC3B,CAAC;aACL;YAAC,OAAO,GAAG,EAAE;gBACV,IAAI,GAAG,YAAY,qCAAoB,EAAE;oBACrC,MAAM,GAAG,CAAC;iBACb;gBAED,MAAM,IAAI,6BAAY,CAAC,sCAAsC,GAAG,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAC5G;QACL,CAAC,CAAC;QAEF;;WAEG;QACI,qBAAgB,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;YACjE,IAAI;gBACA,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,CAAC,QAAQ,IAAI,GAAG,GAAG,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC3D,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBAEhD,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;oBACxB,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;iBACrC,CAAC,CAAC;aACN;YAAC,OAAO,GAAG,EAAE;gBACV,MAAM,IAAI,6BAAY,CAAC,uCAAuC,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAC/F;QACL,CAAC,CAAC;IA5DgE,CAAC;IA8DnE;;OAEG;IACI,MAAM,KAAK,YAAY;QAC1B,OAAO;YACH,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,iBAAiB;YACzB,UAAU,EAAE,qBAAqB;SAC3B,CAAC;IACf,CAAC;;AAGI,4CAAgB;AA/ErB,6HAA6H;AAC7H,8HAA8H;AAChH,4BAAW,GAAG,OAAO,AAAV,CAAW"}
1
+ {"version":3,"file":"PpasAveApiHelper.js","sourceRoot":"","sources":["../../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.ts"],"names":[],"mappings":";;;AAKA,MAAM,gBAAgB;IAIX,MAAM,KAAK,YAAY;QAC1B,OAAO;YACH,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,YAAY;SAClB,CAAC;IACf,CAAC;;AAGI,4CAAgB;AAXP,4BAAW,GAAG,OAAO,CAAC;AACtB,+BAAc,GAAG,WAAW,CAAC"}
@@ -1,8 +1,6 @@
1
1
  export interface IAveApiDeviceDataParams {
2
- placeId: number;
3
- dateFrom: string;
4
- dateTo: string;
5
- isoDate: string;
2
+ deviceId: string;
3
+ from: string;
4
+ to: string;
6
5
  dataType: string;
7
- truncateData?: string;
8
6
  }
@@ -2,8 +2,12 @@ import { IAveApiDeviceDataDto } from "../../../schema-definitions/datasources/co
2
2
  import { IMeasurementOption } from "../../../schema-definitions/datasources/interfaces/IStaticMeterSettings";
3
3
  import { IMeasurementDto } from "../../../schema-definitions/models/interfaces/IMeasurementDto";
4
4
  import { AbstractTransformation } from "@golemio/core/dist/helpers/transformation/AbstractTransformation";
5
- export declare class AveMeasurementTransformation extends AbstractTransformation<IMeasurementOption & IAveApiDeviceDataDto, IMeasurementDto> {
5
+ export declare class AveMeasurementTransformation extends AbstractTransformation<IMeasurementOption & IAveApiDeviceDataDto & {
6
+ serialNumber?: number;
7
+ }, IMeasurementDto> {
6
8
  name: string;
7
- protected transformInternal: (data: IMeasurementOption & IAveApiDeviceDataDto) => IMeasurementDto;
9
+ protected transformInternal: (data: IMeasurementOption & IAveApiDeviceDataDto & {
10
+ serialNumber?: number;
11
+ }) => IMeasurementDto;
8
12
  private getValue;
9
13
  }
@@ -22,13 +22,14 @@ let AveMeasurementTransformation = exports.AveMeasurementTransformation = class
22
22
  source: CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi,
23
23
  measurement_category: data.Name,
24
24
  addr: data.Addr,
25
- meter: data.Meter,
26
- timestamp: luxon_1.DateTime.fromISO(data.StandardTime, {
25
+ meter: data.EIC ?? data.Meter ?? "",
26
+ timestamp: luxon_1.DateTime.fromISO(data.Timestamp, {
27
27
  zone: PpasAveApiHelper_1.PpasAveApiHelper.API_DATE_TZ,
28
28
  }).toJSDate(),
29
29
  variable: data.Var,
30
30
  type: data.Type,
31
31
  value: this.getValue(data, data.Var),
32
+ device_serial_number: data.serialNumber !== undefined ? String(data.serialNumber) : null,
32
33
  };
33
34
  };
34
35
  this.getValue = (data, variable) => {
@@ -1 +1 @@
1
- {"version":3,"file":"AveMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAGA,6GAA0G;AAC1G,2DAA2D;AAC3D,iEAAgE;AAChE,wFAAiF;AACjF,2FAAwF;AACxF,qHAAuF;AAGhF,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAAC,IAA+C,EAAmB,EAAE;YAC/F,OAAO;gBACH,MAAM,EAAE,yCAAiB,CAAC,kBAAkB;gBAC5C,oBAAoB,EAAE,IAAI,CAAC,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE;oBAC3C,IAAI,EAAE,mCAAgB,CAAC,WAAW;iBACrC,CAAC,CAAC,QAAQ,EAAE;gBACb,QAAQ,EAAE,IAAI,CAAC,GAAG;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAA0B,CAAC;aAC9D,CAAC;QACN,CAAC,CAAC;QAEM,aAAQ,GAAG,CAAC,IAA0B,EAAE,QAA6B,EAAU,EAAE;YACrF,QAAQ,QAAQ,EAAE;gBACd,KAAK,6CAAmB,CAAC,IAAI,CAAC;gBAC9B;oBACI,OAAO,IAAI,CAAC,eAAe,CAAC;gBAChC,KAAK,6CAAmB,CAAC,KAAK;oBAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC;aACrC;QACL,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCA9BY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CA8BxC"}
1
+ {"version":3,"file":"AveMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAGA,6GAA0G;AAC1G,2DAA2D;AAC3D,iEAAgE;AAChE,wFAAiF;AACjF,2FAAwF;AACxF,qHAAuF;AAGhF,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAC1B,IAA2E,EAC5D,EAAE;YACjB,OAAO;gBACH,MAAM,EAAE,yCAAiB,CAAC,kBAAkB;gBAC5C,oBAAoB,EAAE,IAAI,CAAC,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE;gBACnC,SAAS,EAAE,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;oBACxC,IAAI,EAAE,mCAAgB,CAAC,WAAW;iBACrC,CAAC,CAAC,QAAQ,EAAE;gBACb,QAAQ,EAAE,IAAI,CAAC,GAAG;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,GAA0B,CAAC;gBAC3D,oBAAoB,EAAE,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;aAC3F,CAAC;QACN,CAAC,CAAC;QAEM,aAAQ,GAAG,CAAC,IAA0B,EAAE,QAA6B,EAAU,EAAE;YACrF,QAAQ,QAAQ,EAAE;gBACd,KAAK,6CAAmB,CAAC,IAAI,CAAC;gBAC9B;oBACI,OAAO,IAAI,CAAC,eAAe,CAAC;gBAChC,KAAK,6CAAmB,CAAC,KAAK;oBAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAC;aACrC;QACL,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCAjCY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CAiCxC"}
@@ -4,10 +4,12 @@ import { IMeasurementDto } from "../../../schema-definitions/models/interfaces/I
4
4
  import { AbstractTransformation } from "@golemio/core/dist/helpers/transformation/AbstractTransformation";
5
5
  export declare class CemMeasurementTransformation extends AbstractTransformation<IMeasurementOption & ICemApiMeasurementDto & {
6
6
  counterTypeId: number;
7
+ meSerial: string;
7
8
  }, IMeasurementDto> {
8
9
  name: string;
9
10
  protected transformInternal: (data: IMeasurementOption & ICemApiMeasurementDto & {
10
11
  counterTypeId: number;
12
+ meSerial: string;
11
13
  }) => IMeasurementDto;
12
14
  private getVariable;
13
15
  }
@@ -25,6 +25,7 @@ let CemMeasurementTransformation = exports.CemMeasurementTransformation = class
25
25
  variable: this.getVariable(data.Var, data.counterTypeId),
26
26
  type: data.Type,
27
27
  value: data.value,
28
+ device_serial_number: data.meSerial,
28
29
  };
29
30
  };
30
31
  this.getVariable = (variable, counterTypeId) => {
@@ -1 +1 @@
1
- {"version":3,"file":"CemMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAGA,6GAA0G;AAC1G,iEAAgE;AAChE,wFAAiF;AAEjF,wFAAmF;AAG5E,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAC1B,IAA4E,EAC7D,EAAE;YACjB,OAAO;gBACH,MAAM,EAAE,yCAAiB,CAAC,gBAAgB;gBAC1C,oBAAoB,EAAE,IAAI,CAAC,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;gBACxD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;aACpB,CAAC;QACN,CAAC,CAAC;QAEM,gBAAW,GAAG,CAAC,QAAgB,EAAE,aAAqB,EAAU,EAAE;YACtE,IAAI,aAAa,KAAK,+CAAsB,CAAC,WAAW,CAAC,YAAY,EAAE;gBACnE,OAAO,IAAI,CAAC,CAAC,eAAe;aAC/B;iBAAM,IAAI,aAAa,KAAK,+CAAsB,CAAC,WAAW,CAAC,WAAW,EAAE;gBACzE,OAAO,IAAI,CAAC,CAAC,cAAc;aAC9B;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCA9BY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CA8BxC"}
1
+ {"version":3,"file":"CemMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/CemMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAGA,6GAA0G;AAC1G,iEAAgE;AAChE,wFAAiF;AAEjF,wFAAmF;AAG5E,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAC1B,IAA8F,EAC/E,EAAE;YACjB,OAAO;gBACH,MAAM,EAAE,yCAAiB,CAAC,gBAAgB;gBAC1C,oBAAoB,EAAE,IAAI,CAAC,IAAI;gBAC/B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAM;gBAClB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBACnC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC;gBACxD,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,oBAAoB,EAAE,IAAI,CAAC,QAAQ;aACtC,CAAC;QACN,CAAC,CAAC;QAEM,gBAAW,GAAG,CAAC,QAAgB,EAAE,aAAqB,EAAU,EAAE;YACtE,IAAI,aAAa,KAAK,+CAAsB,CAAC,WAAW,CAAC,YAAY,EAAE;gBACnE,OAAO,IAAI,CAAC,CAAC,eAAe;aAC/B;iBAAM,IAAI,aAAa,KAAK,+CAAsB,CAAC,WAAW,CAAC,WAAW,EAAE;gBACzE,OAAO,IAAI,CAAC,CAAC,cAAc;aAC9B;YAED,OAAO,QAAQ,CAAC;QACpB,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCA/BY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CA+BxC"}
@@ -24,6 +24,7 @@ let PreElectroTransformation = exports.PreElectroTransformation = class PreElect
24
24
  value: Number(data.measurement["Stav [kWh]"]),
25
25
  source: CommodityProviderTypeEnum_1.CommodityProviderType.PreOptions,
26
26
  measurement_category: data.option.Name,
27
+ device_serial_number: data.measurement.ELM,
27
28
  };
28
29
  };
29
30
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PreElectroTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/PreElectroTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAEA,oHAAsF;AAEtF,6GAA0G;AAC1G,iEAAgE;AAGzD,IAAM,wBAAwB,sCAA9B,MAAM,wBAAyB,SAAQ,+CAG7C;IAHM;;QAII,SAAI,GAAG,0BAA0B,CAAC;QAE/B,sBAAiB,GAAG,CAC1B,IAAoF,EACrE,EAAE;YACjB,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBAC5D,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,EAAE,iDAAqB,CAAC,UAAU;gBACxC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;aACzC,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;mCApBY,wBAAwB;IADpC,IAAA,qBAAU,GAAE;GACA,wBAAwB,CAoBpC"}
1
+ {"version":3,"file":"PreElectroTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/PreElectroTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAEA,oHAAsF;AAEtF,6GAA0G;AAC1G,iEAAgE;AAGzD,IAAM,wBAAwB,sCAA9B,MAAM,wBAAyB,SAAQ,+CAG7C;IAHM;;QAII,SAAI,GAAG,0BAA0B,CAAC;QAE/B,sBAAiB,GAAG,CAC1B,IAAoF,EACrE,EAAE;YACjB,OAAO;gBACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAM;gBACzB,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC;gBAC5D,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtB,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBAC7C,MAAM,EAAE,iDAAqB,CAAC,UAAU;gBACxC,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACtC,oBAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG;aAC7C,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;mCArBY,wBAAwB;IADpC,IAAA,qBAAU,GAAE;GACA,wBAAwB,CAqBpC"}
@@ -27,6 +27,7 @@ let PreMeasurementTransformation = exports.PreMeasurementTransformation = class
27
27
  value: Number(measurement[1]),
28
28
  source: CommodityProviderTypeEnum_1.CommodityProviderType.PreInputOptions,
29
29
  measurement_category: data.option.Name,
30
+ device_serial_number: null,
30
31
  });
31
32
  }
32
33
  return output;
@@ -1 +1 @@
1
- {"version":3,"file":"PreMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/PreMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AACA,6GAA0G;AAC1G,iEAAgE;AAChE,oHAAsF;AAEtF,wDAAsD;AAI/C,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAC1B,IAA+E,EAC9D,EAAE;YACnB,MAAM,MAAM,GAAsB,EAAE,CAAC;YACrC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG;oBAChC,SAAS,EAAE,kBAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;oBAC5F,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;oBACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,EAAE,iDAAqB,CAAC,eAAe;oBAC7C,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;iBACzC,CAAC,CAAC;aACN;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCAxBY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CAwBxC"}
1
+ {"version":3,"file":"PreMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/commodity-providers/transformations/PreMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AACA,6GAA0G;AAC1G,iEAAgE;AAChE,oHAAsF;AAEtF,wDAAsD;AAI/C,IAAM,4BAA4B,0CAAlC,MAAM,4BAA6B,SAAQ,+CAGjD;IAHM;;QAII,SAAI,GAAG,8BAA8B,CAAC;QAEnC,sBAAiB,GAAG,CAC1B,IAA+E,EAC9D,EAAE;YACnB,MAAM,MAAM,GAAsB,EAAE,CAAC;YACrC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE;gBAC5D,MAAM,CAAC,IAAI,CAAC;oBACR,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG;oBAChC,SAAS,EAAE,kBAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;oBAC5F,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;oBACzB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtB,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC7B,MAAM,EAAE,iDAAqB,CAAC,eAAe;oBAC7C,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;oBACtC,oBAAoB,EAAE,IAAI;iBAC7B,CAAC,CAAC;aACN;YACD,OAAO,MAAM,CAAC;QAClB,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;uCAzBY,4BAA4B;IADxC,IAAA,qBAAU,GAAE;GACA,4BAA4B,CAyBxC"}