@golemio/energetics 1.9.0-dev.2544690351 → 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.
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.d.ts +4 -4
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js +5 -5
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js.map +1 -1
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.d.ts +1 -1
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.js +16 -13
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/PpasAveApiDataSourceProvider.js.map +1 -1
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.d.ts +6 -0
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.js +26 -0
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.js.map +1 -0
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.d.ts +4 -23
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.js +3 -67
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/PpasAveApiHelper.js.map +1 -1
- package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/interfaces/IAveApiDeviceDataParams.d.ts +3 -5
- package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.d.ts +6 -3
- package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.js +3 -3
- package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.js.map +1 -1
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js +11 -11
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js.map +1 -1
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.d.ts +4 -7
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js +20 -24
- package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js.map +1 -1
- package/dist/integration-engine/enapo/interfaces/IPPasPlaces.d.ts +3 -46
- package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.d.ts +1 -0
- package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.js +4 -4
- package/dist/integration-engine/enapo/transformations/PPasMeasurementTransformation.js.map +1 -1
- package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.d.ts +2 -5
- package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.js +21 -24
- package/dist/integration-engine/enapo/workers/task/EnapoPpasTask.js.map +1 -1
- package/dist/output-gateway/repositories/MeasurementRepository.js +5 -1
- package/dist/output-gateway/repositories/MeasurementRepository.js.map +1 -1
- package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.d.ts +3 -0
- package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.js +37 -0
- package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.js.map +1 -0
- package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js +2 -2
- package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js.map +1 -1
- package/dist/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.js +5 -4
- package/dist/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.js.map +1 -1
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.d.ts +5 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.js +3 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.js.map +1 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.d.ts +10 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.js +3 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.js.map +1 -0
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiDeviceDataDto.d.ts +1 -1
- package/dist/schema-definitions/datasources/commodity-providers/interfaces/IAveApiPlaceDto.d.ts +4 -3
- package/docs/implementation_documentation.md +5 -3
- package/package.json +1 -1
package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AveDataType = void 0;
|
|
4
|
-
//
|
|
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[
|
|
8
|
-
AveDataType[
|
|
9
|
-
AveDataType[
|
|
10
|
-
AveDataType[
|
|
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
|
package/dist/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AveDataTypeEnum.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/datasources/ppas-ave-api/AveDataTypeEnum.ts"],"names":[],"mappings":";;;AAAA,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
url.
|
|
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,
|
|
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,
|
|
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: "
|
|
61
|
+
return new integration_engine_1.JSONDataTypeStrategy({ resultsPath: "pageItems" });
|
|
59
62
|
case PpasAveApiHelper_1.PpasAveApiHelper.resourceType.DeviceData:
|
|
60
|
-
return new
|
|
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":";;;;;;;;;;;;;;;;AAAA,0IAA6G;AAC7G,kIAAqG;AAErG,wEAAqE;AACrE,8EAAsG;AACtG,6IAA0I;AAE1I,6EAAwE;AACxE,mFAAkF;AAClF,iEAAwE;AAGxE,iEAA8D;AAIvD,IAAM,4BAA4B,2EAAlC,MAAM,4BAA4B;IAIrC,YAAoD,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAEtE,aAAa,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
27
|
-
readonly
|
|
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
|
-
|
|
69
|
-
|
|
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":";;;
|
|
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"}
|
|
@@ -2,9 +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
|
-
|
|
6
|
-
|
|
5
|
+
export declare class AveMeasurementTransformation extends AbstractTransformation<IMeasurementOption & IAveApiDeviceDataDto & {
|
|
6
|
+
serialNumber?: number;
|
|
7
|
+
}, IMeasurementDto> {
|
|
7
8
|
name: string;
|
|
8
|
-
protected transformInternal: (data: IMeasurementOption & IAveApiDeviceDataDto &
|
|
9
|
+
protected transformInternal: (data: IMeasurementOption & IAveApiDeviceDataDto & {
|
|
10
|
+
serialNumber?: number;
|
|
11
|
+
}) => IMeasurementDto;
|
|
9
12
|
private getValue;
|
|
10
13
|
}
|
package/dist/integration-engine/commodity-providers/transformations/AveMeasurementTransformation.js
CHANGED
|
@@ -22,14 +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.
|
|
26
|
-
timestamp: luxon_1.DateTime.fromISO(data.
|
|
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.
|
|
32
|
+
device_serial_number: data.serialNumber !== undefined ? String(data.serialNumber) : null,
|
|
33
33
|
};
|
|
34
34
|
};
|
|
35
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;
|
|
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"}
|
package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js
CHANGED
|
@@ -13,7 +13,6 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.FetchPpasEEMeasurementsTask = void 0;
|
|
16
|
-
const PpasAveApiHelper_1 = require("../../datasources/ppas-ave-api/helpers/PpasAveApiHelper");
|
|
17
16
|
const WorkerContainerToken_1 = require("../../ioc/WorkerContainerToken");
|
|
18
17
|
const MeasurementRepository_1 = require("../../repositories/MeasurementRepository");
|
|
19
18
|
const StaticMeterSettingsRepository_1 = require("../../repositories/StaticMeterSettingsRepository");
|
|
@@ -39,25 +38,23 @@ let FetchPpasEEMeasurementsTask = exports.FetchPpasEEMeasurementsTask = class Fe
|
|
|
39
38
|
else {
|
|
40
39
|
measurementOptions = this.splitOptionsByVars(measurementOptions);
|
|
41
40
|
}
|
|
42
|
-
const {
|
|
43
|
-
const aveApiHelper = new PpasAveApiHelper_1.PpasAveApiHelper(baseUrl, config);
|
|
44
|
-
const sessionId = await aveApiHelper.createSession();
|
|
41
|
+
const { apikey: apiKey } = this.getProviderConfig(data);
|
|
45
42
|
try {
|
|
46
|
-
const places = await this.getDataFromDataSource("Places",
|
|
43
|
+
const places = await this.getDataFromDataSource("Places", apiKey);
|
|
47
44
|
let consumptionData = [];
|
|
48
45
|
for (const place of places) {
|
|
49
|
-
const options = measurementOptions.filter((item) => item.EIC === place.
|
|
46
|
+
const options = measurementOptions.filter((item) => item.EIC === place.eic);
|
|
50
47
|
if (options.length === 0) {
|
|
51
48
|
continue;
|
|
52
49
|
}
|
|
53
|
-
this.logger.info(`Fetching data for device ${place.
|
|
54
|
-
const measurementChunkGenerator = this.generateMeasurements({ ...data,
|
|
50
|
+
this.logger.info(`Fetching data for device ${place.serialNumber}`);
|
|
51
|
+
const measurementChunkGenerator = this.generateMeasurements({ ...data, deviceId: place.deviceId }, apiKey);
|
|
55
52
|
for await (const measurements of measurementChunkGenerator) {
|
|
56
53
|
for (const option of options) {
|
|
57
54
|
const consumptionBatch = measurements.map((item) => this.measurementTransformation.transformElement({
|
|
58
55
|
...item,
|
|
59
56
|
...option,
|
|
60
|
-
|
|
57
|
+
serialNumber: place.serialNumber,
|
|
61
58
|
}));
|
|
62
59
|
consumptionData = consumptionData.concat(consumptionBatch);
|
|
63
60
|
}
|
|
@@ -65,8 +62,11 @@ let FetchPpasEEMeasurementsTask = exports.FetchPpasEEMeasurementsTask = class Fe
|
|
|
65
62
|
}
|
|
66
63
|
await this.saveConsumptionData(consumptionData);
|
|
67
64
|
}
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
catch (err) {
|
|
66
|
+
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
67
|
+
throw err;
|
|
68
|
+
}
|
|
69
|
+
throw new golemio_errors_1.GeneralError(`Unable to download ppas ee measurements`, this.constructor.name, err);
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
};
|
package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchPpasEEMeasurementsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,
|
|
1
|
+
{"version":3,"file":"FetchPpasEEMeasurementsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchPpasEEMeasurementsTask.ts"],"names":[],"mappings":"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"}
|
package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.d.ts
CHANGED
|
@@ -23,14 +23,11 @@ export declare class FetchPpasMeasurementsTask extends AbstractFetchMeasurements
|
|
|
23
23
|
schema: typeof PpasMeasurementsValidationSchema;
|
|
24
24
|
constructor(config: ISimpleConfig, logger: ILogger, dataSourceFactory: ICommodityProviderDataSourceFactory, measurementTransformation: AveMeasurementTransformation, measurementRepository: MeasurementRepository, meterSettingsRepository: StaticMeterSettingsRepository);
|
|
25
25
|
execute(data: IPpasMeasurementsParams): Promise<void>;
|
|
26
|
-
protected getProviderConfig(data: IPpasMeasurementsParams):
|
|
27
|
-
baseUrl: string;
|
|
28
|
-
config: IAveConfig;
|
|
29
|
-
};
|
|
26
|
+
protected getProviderConfig(data: IPpasMeasurementsParams): IAveConfig;
|
|
30
27
|
/** Splits the measurement options into individual options (multiple variables) */
|
|
31
28
|
protected splitOptionsByVars(options: IMeasurementOption[]): IMeasurementOption[];
|
|
32
29
|
protected generateMeasurements(data: IPpasMeasurementsParams & {
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
protected getDataFromDataSource<T extends AveApiDtoUnion>(resourceTypeKey: keyof typeof PpasAveApiHelper.resourceType,
|
|
30
|
+
deviceId: string;
|
|
31
|
+
}, apiKey: string): AsyncGenerator<IAveApiDeviceDataDto[]>;
|
|
32
|
+
protected getDataFromDataSource<T extends AveApiDtoUnion>(resourceTypeKey: keyof typeof PpasAveApiHelper.resourceType, apiKey: string, params?: IAveApiDeviceDataParams): Promise<T[]>;
|
|
36
33
|
}
|
package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js
CHANGED
|
@@ -48,25 +48,23 @@ let FetchPpasMeasurementsTask = exports.FetchPpasMeasurementsTask = class FetchP
|
|
|
48
48
|
else {
|
|
49
49
|
measurementOptions = this.splitOptionsByVars(measurementOptions);
|
|
50
50
|
}
|
|
51
|
-
const {
|
|
52
|
-
const aveApiHelper = new PpasAveApiHelper_1.PpasAveApiHelper(baseUrl, config);
|
|
53
|
-
const sessionId = await aveApiHelper.createSession();
|
|
51
|
+
const { apikey: apiKey } = this.getProviderConfig(data);
|
|
54
52
|
try {
|
|
55
|
-
const places = await this.getDataFromDataSource("Places",
|
|
53
|
+
const places = await this.getDataFromDataSource("Places", apiKey);
|
|
56
54
|
let consumptionData = [];
|
|
57
55
|
for (const place of places) {
|
|
58
|
-
const options = measurementOptions.filter((item) => item.EIC === place.
|
|
56
|
+
const options = measurementOptions.filter((item) => item.EIC === place.eic);
|
|
59
57
|
if (options.length === 0) {
|
|
60
58
|
continue;
|
|
61
59
|
}
|
|
62
|
-
this.logger.info(`Fetching data for device ${place.
|
|
63
|
-
const measurementChunkGenerator = this.generateMeasurements({ ...data,
|
|
60
|
+
this.logger.info(`Fetching data for device ${place.serialNumber}`);
|
|
61
|
+
const measurementChunkGenerator = this.generateMeasurements({ ...data, deviceId: place.deviceId }, apiKey);
|
|
64
62
|
for await (const measurements of measurementChunkGenerator) {
|
|
65
63
|
for (const option of options) {
|
|
66
64
|
const consumptionBatch = measurements.map((item) => this.measurementTransformation.transformElement({
|
|
67
65
|
...item,
|
|
68
66
|
...option,
|
|
69
|
-
|
|
67
|
+
serialNumber: place.serialNumber,
|
|
70
68
|
}));
|
|
71
69
|
consumptionData = consumptionData.concat(consumptionBatch);
|
|
72
70
|
}
|
|
@@ -74,15 +72,15 @@ let FetchPpasMeasurementsTask = exports.FetchPpasMeasurementsTask = class FetchP
|
|
|
74
72
|
}
|
|
75
73
|
await this.saveConsumptionData(consumptionData);
|
|
76
74
|
}
|
|
77
|
-
|
|
78
|
-
|
|
75
|
+
catch (err) {
|
|
76
|
+
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
77
|
+
throw err;
|
|
78
|
+
}
|
|
79
|
+
throw new golemio_errors_1.GeneralError(`Unable to download ppas measurements`, this.constructor.name, err);
|
|
79
80
|
}
|
|
80
81
|
}
|
|
81
82
|
getProviderConfig(data) {
|
|
82
|
-
return {
|
|
83
|
-
baseUrl: this.config.getValue("module.energetics.commodityProviders.ppas_ave_api.baseUrl"),
|
|
84
|
-
config: this.config.getValue(`module.energetics.commodityProviders.${data.providerType}`),
|
|
85
|
-
};
|
|
83
|
+
return this.config.getValue(`module.energetics.commodityProviders.${data.providerType}`);
|
|
86
84
|
}
|
|
87
85
|
/** Splits the measurement options into individual options (multiple variables) */
|
|
88
86
|
splitOptionsByVars(options) {
|
|
@@ -93,25 +91,23 @@ let FetchPpasMeasurementsTask = exports.FetchPpasMeasurementsTask = class FetchP
|
|
|
93
91
|
}
|
|
94
92
|
return result;
|
|
95
93
|
}
|
|
96
|
-
async *generateMeasurements(data,
|
|
94
|
+
async *generateMeasurements(data, apiKey) {
|
|
97
95
|
const dateFrom = luxon_1.DateTime.fromISO(data.dateFrom).startOf("day");
|
|
98
96
|
const dateTo = luxon_1.DateTime.fromISO(data.dateTo).startOf("day");
|
|
99
97
|
const intervals = luxon_1.Interval.fromDateTimes(dateFrom, dateTo).splitBy({ days: 5 });
|
|
100
98
|
for (const interval of intervals) {
|
|
101
99
|
const start = interval.start.startOf("day");
|
|
102
100
|
const end = interval.end.startOf("day");
|
|
103
|
-
yield this.getDataFromDataSource("DeviceData",
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
// fill all measurement values (we need the OperatingAmount and ConvertDifference values)
|
|
109
|
-
dataType: AveDataTypeEnum_1.AveDataType.RawData.toString(),
|
|
101
|
+
yield this.getDataFromDataSource("DeviceData", apiKey, {
|
|
102
|
+
deviceId: data.deviceId,
|
|
103
|
+
from: start.toUTC().toISO({ suppressMilliseconds: true }),
|
|
104
|
+
to: end.toUTC().toISO({ suppressMilliseconds: true }),
|
|
105
|
+
dataType: AveDataTypeEnum_1.AveDataType.HourlyData,
|
|
110
106
|
});
|
|
111
107
|
}
|
|
112
108
|
}
|
|
113
|
-
getDataFromDataSource(resourceTypeKey,
|
|
114
|
-
const dataSource = this.dataSourceFactory.getDataSource(CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi, PpasAveApiHelper_1.PpasAveApiHelper.resourceType[resourceTypeKey],
|
|
109
|
+
getDataFromDataSource(resourceTypeKey, apiKey, params) {
|
|
110
|
+
const dataSource = this.dataSourceFactory.getDataSource(CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi, PpasAveApiHelper_1.PpasAveApiHelper.resourceType[resourceTypeKey], apiKey, params);
|
|
115
111
|
return dataSource.getAll();
|
|
116
112
|
}
|
|
117
113
|
};
|
package/dist/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FetchPpasMeasurementsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2FAAsG;AAKtG,oFAA+F;AAC/F,8FAAyH;AAEzH,yEAAwF;AACxF,oFAAmG;AACnG,oGAAmH;AACnH,qGAAoH;AAIpH,yHAAwF;AAIxF,wEAAqE;AACrE,
|
|
1
|
+
{"version":3,"file":"FetchPpasMeasurementsTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/commodity-providers/workers/tasks/FetchPpasMeasurementsTask.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +1,5 @@
|
|
|
1
1
|
export interface IPPasPlaces {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
PlaceName: string;
|
|
6
|
-
PayerName: string;
|
|
7
|
-
PayerId: string;
|
|
8
|
-
CustomerId: string;
|
|
9
|
-
PlaceId: string;
|
|
10
|
-
DeviceLocation: string;
|
|
11
|
-
Terminated: boolean;
|
|
12
|
-
Region: string;
|
|
13
|
-
RegionId: number;
|
|
14
|
-
ConnectionMethod: string;
|
|
15
|
-
PurchaseCategory: string;
|
|
16
|
-
ConvertCoefficient: number;
|
|
17
|
-
DeviceType: string;
|
|
18
|
-
IdentificationNumber: string;
|
|
19
|
-
LastData: string;
|
|
20
|
-
DeviceSerialNumber: string;
|
|
21
|
-
PlaceStreet: string;
|
|
22
|
-
PayerStreet: string;
|
|
23
|
-
PlaceCity: string;
|
|
24
|
-
PayerCity: string;
|
|
25
|
-
PlaceZipCode: string;
|
|
26
|
-
PayerZipCode: string;
|
|
27
|
-
Dealer: string;
|
|
28
|
-
ReadingCategory: string;
|
|
29
|
-
ValidatedBy: string;
|
|
30
|
-
ValidatedTill: string;
|
|
31
|
-
IsDataValidated: boolean;
|
|
32
|
-
ValidationNote: string;
|
|
33
|
-
Gps: string;
|
|
34
|
-
Device: number;
|
|
35
|
-
ReadRequestStatus: number;
|
|
36
|
-
ReadDescription: string;
|
|
37
|
-
Note: string;
|
|
38
|
-
Group: string;
|
|
39
|
-
Workplace: string;
|
|
40
|
-
HasTimeWindows: boolean;
|
|
41
|
-
HasBattery: boolean;
|
|
42
|
-
HasGasComposition: boolean;
|
|
43
|
-
BatteryCapacity: number;
|
|
44
|
-
BatteryVoltage: number;
|
|
45
|
-
DailyData: boolean;
|
|
46
|
-
ScadaId: string;
|
|
47
|
-
ParentDevice: string;
|
|
2
|
+
eic: string;
|
|
3
|
+
placeId: number;
|
|
4
|
+
serialNumber: number;
|
|
48
5
|
}
|
|
@@ -5,6 +5,7 @@ import { IPPasPlaces } from "../interfaces/IPPasPlaces";
|
|
|
5
5
|
export declare class PPasMeasurementTransformation extends AbstractTransformation<IAveApiDeviceDataDto & IPPasPlaces, {
|
|
6
6
|
operatingAmount: IEnapoMeasurementsDto;
|
|
7
7
|
convertDifference: IEnapoMeasurementsDto;
|
|
8
|
+
operatingDifference: IEnapoMeasurementsDto;
|
|
8
9
|
}> {
|
|
9
10
|
name: string;
|
|
10
11
|
protected transformInternal: (data: IAveApiDeviceDataDto & IPPasPlaces) => {
|
|
@@ -19,14 +19,14 @@ let PPasMeasurementTransformation = exports.PPasMeasurementTransformation = clas
|
|
|
19
19
|
this.name = "PPasMeasurementTransformation";
|
|
20
20
|
this.transformInternal = (data) => {
|
|
21
21
|
const baseData = {
|
|
22
|
-
id: data.
|
|
22
|
+
id: data.eic,
|
|
23
23
|
id_type: "eic",
|
|
24
|
-
timestamp: luxon_1.DateTime.fromISO(data.
|
|
24
|
+
timestamp: luxon_1.DateTime.fromISO(data.Timestamp, {
|
|
25
25
|
zone: PpasAveApiHelper_1.PpasAveApiHelper.API_DATE_TZ,
|
|
26
26
|
}).toJSDate(),
|
|
27
27
|
source: ProviderTypeEnum_1.ProviderType.PpasInternetAveApi,
|
|
28
|
-
place_id: data.
|
|
29
|
-
device_serial_number: data.
|
|
28
|
+
place_id: String(data.placeId),
|
|
29
|
+
device_serial_number: String(data.serialNumber),
|
|
30
30
|
};
|
|
31
31
|
return {
|
|
32
32
|
operatingAmount: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PPasMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/enapo/transformations/PPasMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,kHAA6G;AAE7G,qHAAuF;AACvF,wGAA0E;AAE1E,6GAA0G;AAC1G,2DAA2D;AAC3D,iEAAgE;AAIzD,IAAM,6BAA6B,2CAAnC,MAAM,6BAA8B,SAAQ,+
|
|
1
|
+
{"version":3,"file":"PPasMeasurementTransformation.js","sourceRoot":"","sources":["../../../../src/integration-engine/enapo/transformations/PPasMeasurementTransformation.ts"],"names":[],"mappings":";;;;;;;;;AAAA,kHAA6G;AAE7G,qHAAuF;AACvF,wGAA0E;AAE1E,6GAA0G;AAC1G,2DAA2D;AAC3D,iEAAgE;AAIzD,IAAM,6BAA6B,2CAAnC,MAAM,6BAA8B,SAAQ,+CAOlD;IAPM;;QAQI,SAAI,GAAG,+BAA+B,CAAC;QAEpC,sBAAiB,GAAG,CAC1B,IAAwC,EAK1C,EAAE;YACA,MAAM,QAAQ,GAAG;gBACb,EAAE,EAAE,IAAI,CAAC,GAAG;gBACZ,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;oBACxC,IAAI,EAAE,mCAAgB,CAAC,WAAW;iBACrC,CAAC,CAAC,QAAQ,EAAE;gBACb,MAAM,EAAE,+BAAY,CAAC,kBAAkB;gBACvC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;gBAC9B,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;aAClD,CAAC;YAEF,OAAO;gBACH,eAAe,EAAE;oBACb,KAAK,EAAE,IAAI,CAAC,eAAe;oBAC3B,GAAG,EAAE,6CAAmB,CAAC,IAAI;oBAC7B,GAAG,QAAQ;iBACd;gBACD,iBAAiB,EAAE;oBACf,KAAK,EAAE,IAAI,CAAC,iBAAiB;oBAC7B,GAAG,EAAE,6CAAmB,CAAC,KAAK;oBAC9B,GAAG,QAAQ;iBACd;gBACD,mBAAmB,EAAE;oBACjB,KAAK,EAAE,IAAI,CAAC,mBAAmB;oBAC/B,GAAG,EAAE,6CAAmB,CAAC,QAAQ;oBACjC,GAAG,QAAQ;iBACd;aACJ,CAAC;QACN,CAAC,CAAC;IACN,CAAC;CAAA,CAAA;wCA9CY,6BAA6B;IADzC,IAAA,qBAAU,GAAE;GACA,6BAA6B,CA8CzC"}
|
|
@@ -21,9 +21,6 @@ export declare class EnapoPpasTask extends AbstractEnapoFetchMeasurementsTask<IE
|
|
|
21
21
|
constructor(config: ISimpleConfig, measurementsRepository: EnapoMeasurementsRepository, transformation: PPasMeasurementTransformation, logger: ILogger, dataSourceFactory: ICommodityProviderDataSourceFactory);
|
|
22
22
|
execute(params: IPpasMeasurementsParams): Promise<void>;
|
|
23
23
|
private fetchAndSave;
|
|
24
|
-
protected getProviderConfig(data: IPpasMeasurementsParams):
|
|
25
|
-
|
|
26
|
-
config: IAveConfig;
|
|
27
|
-
};
|
|
28
|
-
protected getDataFromDataSource<T extends AveApiDtoUnion>(resourceTypeKey: keyof typeof PpasAveApiHelper.resourceType, sessionId: string, params?: IAveApiDeviceDataParams): Promise<T[]>;
|
|
24
|
+
protected getProviderConfig(data: IPpasMeasurementsParams): IAveConfig;
|
|
25
|
+
protected getDataFromDataSource<T extends AveApiDtoUnion>(resourceTypeKey: keyof typeof PpasAveApiHelper.resourceType, apiKey: string, params?: IAveApiDeviceDataParams): Promise<T[]>;
|
|
29
26
|
}
|
|
@@ -39,24 +39,25 @@ let EnapoPpasTask = exports.EnapoPpasTask = class EnapoPpasTask extends Abstract
|
|
|
39
39
|
this.schema = EnapoPpasMeasurementsParamsValidationSchema_1.EnapoPpasMeasurementsParamsValidationSchema;
|
|
40
40
|
}
|
|
41
41
|
async execute(params) {
|
|
42
|
-
const
|
|
43
|
-
const aveApiHelper = new PpasAveApiHelper_1.PpasAveApiHelper(baseUrl, config);
|
|
44
|
-
const sessionId = await aveApiHelper.createSession();
|
|
42
|
+
const config = this.getProviderConfig(params);
|
|
45
43
|
try {
|
|
46
|
-
const places = await this.getDataFromDataSource("Places",
|
|
44
|
+
const places = await this.getDataFromDataSource("Places", config.apikey);
|
|
47
45
|
for (const place of places) {
|
|
48
|
-
if (config.excludelist && config.excludelist.includes(place.
|
|
46
|
+
if (config.excludelist && config.excludelist.includes(place.eic)) {
|
|
49
47
|
continue;
|
|
50
48
|
}
|
|
51
|
-
this.logger.info(`Fetching data for device ${place.
|
|
52
|
-
await this.fetchAndSave(place,
|
|
49
|
+
this.logger.info(`Fetching data for device ${place.serialNumber}`);
|
|
50
|
+
await this.fetchAndSave(place, config.apikey, params);
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
catch (err) {
|
|
54
|
+
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
55
|
+
throw err;
|
|
56
|
+
}
|
|
57
|
+
throw new golemio_errors_1.GeneralError(`Unable to download ppas measurements`, this.constructor.name, err);
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
|
-
async fetchAndSave(place,
|
|
60
|
+
async fetchAndSave(place, apiKey, params) {
|
|
60
61
|
try {
|
|
61
62
|
if (!params?.targetDays && (!params?.dateFrom || !params?.dateTo)) {
|
|
62
63
|
throw new golemio_errors_1.GeneralError("Both dateFrom and dateTo must be provided when targetDays is not specified", this.constructor.name);
|
|
@@ -67,14 +68,11 @@ let EnapoPpasTask = exports.EnapoPpasTask = class EnapoPpasTask extends Abstract
|
|
|
67
68
|
for (const interval of intervals) {
|
|
68
69
|
const start = interval.start.startOf("day");
|
|
69
70
|
const end = interval.end.startOf("day");
|
|
70
|
-
const measurementRawData = await this.getDataFromDataSource("DeviceData",
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
// fill all measurement values (we need the OperatingAmount and ConvertDifference values)
|
|
76
|
-
truncateData: "0",
|
|
77
|
-
dataType: AveDataTypeEnum_1.AveDataType.RawData.toString(),
|
|
71
|
+
const measurementRawData = await this.getDataFromDataSource("DeviceData", apiKey, {
|
|
72
|
+
deviceId: place.deviceId,
|
|
73
|
+
from: start.toUTC().toISO({ suppressMilliseconds: true }),
|
|
74
|
+
to: end.toUTC().toISO({ suppressMilliseconds: true }),
|
|
75
|
+
dataType: AveDataTypeEnum_1.AveDataType.HourlyData,
|
|
78
76
|
});
|
|
79
77
|
const measurementRawDataWithPlace = measurementRawData.map((item) => ({
|
|
80
78
|
...place,
|
|
@@ -88,19 +86,18 @@ let EnapoPpasTask = exports.EnapoPpasTask = class EnapoPpasTask extends Abstract
|
|
|
88
86
|
if (err instanceof golemio_errors_1.AbstractGolemioError) {
|
|
89
87
|
throw err;
|
|
90
88
|
}
|
|
91
|
-
throw new golemio_errors_1.GeneralError(`Unable to download data for
|
|
89
|
+
throw new golemio_errors_1.GeneralError(`Unable to download data for deviceId: ${place.deviceId} eic: ${place.eic}`, this.constructor.name, err);
|
|
92
90
|
}
|
|
93
91
|
}
|
|
94
92
|
getProviderConfig(data) {
|
|
95
93
|
const rawConfig = this.config.getValue(`module.energetics.commodityProviders.${data.providerType}`);
|
|
96
|
-
rawConfig.excludelist = rawConfig.excludelist ? Object.values(rawConfig.excludelist) : null;
|
|
97
94
|
return {
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
...rawConfig,
|
|
96
|
+
excludelist: rawConfig.excludelist ? Object.values(rawConfig.excludelist) : null,
|
|
100
97
|
};
|
|
101
98
|
}
|
|
102
|
-
getDataFromDataSource(resourceTypeKey,
|
|
103
|
-
const dataSource = this.dataSourceFactory.getDataSource(CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi, PpasAveApiHelper_1.PpasAveApiHelper.resourceType[resourceTypeKey],
|
|
99
|
+
getDataFromDataSource(resourceTypeKey, apiKey, params) {
|
|
100
|
+
const dataSource = this.dataSourceFactory.getDataSource(CommodityProviderEnum_1.CommodityProvider.PpasInternetAveApi, PpasAveApiHelper_1.PpasAveApiHelper.resourceType[resourceTypeKey], apiKey, params);
|
|
104
101
|
return dataSource.getAll();
|
|
105
102
|
}
|
|
106
103
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnapoPpasTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/workers/task/EnapoPpasTask.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kHAAsG;AAKtG,2GAA+F;AAC/F,qHAAyH;AAGzH,uEAAwE;AAExE,mFAAoF;AACpF,gGAAiG;AACjG,uGAAwG;AAIxG,wEAAqE;AAErE,6EAA8F;AAC9F,2DAA2D;AAC3D,iEAAwE;AAExE,uHAAoH;AACpH,6FAA0F;AAGnF,IAAM,aAAa,2BAAnB,MAAM,aAAc,SAAQ,uEAAmE;IAKlG,YACoC,MAA+B,EAE/D,sBAA6D,EAE7D,cAAuD,EAC7B,MAAyB,EAEnD,iBAAgE;QAEhE,KAAK,EAAE,CAAC;QATkC,WAAM,GAAN,MAAM,CAAe;QAErD,2BAAsB,GAAtB,sBAAsB,CAA6B;QAEnD,mBAAc,GAAd,cAAc,CAA+B;QACnB,WAAM,GAAN,MAAM,CAAS;QAEzC,sBAAiB,GAAjB,iBAAiB,CAAqC;QAZ7D,cAAS,GAAG,uBAAuB,CAAC;QACpC,aAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1B,WAAM,GAAG,yFAA2C,CAAC;IAa5D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAA+B;QAChD,MAAM,
|
|
1
|
+
{"version":3,"file":"EnapoPpasTask.js","sourceRoot":"","sources":["../../../../../src/integration-engine/enapo/workers/task/EnapoPpasTask.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,11 @@ let MeasurementRepository = exports.MeasurementRepository = class MeasurementRep
|
|
|
49
49
|
return await this.sequelizeModel.findAll({
|
|
50
50
|
attributes: [["timestamp", "time"], "value", "addr", "meter", "type", "var"],
|
|
51
51
|
where,
|
|
52
|
-
order: [
|
|
52
|
+
order: [
|
|
53
|
+
["timestamp", "DESC"],
|
|
54
|
+
["addr", "ASC"],
|
|
55
|
+
["var", "DESC"],
|
|
56
|
+
],
|
|
53
57
|
limit: options.limit,
|
|
54
58
|
offset: options.offset,
|
|
55
59
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeasurementRepository.js","sourceRoot":"","sources":["../../../src/output-gateway/repositories/MeasurementRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAwC;AACxC,sEAAmE;AACnE,mEAAqG;AACrG,iEAAgE;AAChE,6EAAwE;AAGxE,yFAAiE;AACjE,kEAA2C;AAGpC,IAAM,qBAAqB,mCAA3B,MAAM,qBAAsB,SAAQ,+BAAc;IACrD;QACI,KAAK,CAAC,wBAAwB,EAAE,oCAAgB,CAAC,SAAS,EAAE,oCAAgB,CAAC,cAAc,EAAE;YACzF,MAAM,EAAE,uBAAgB,CAAC,QAAQ;SACpC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"MeasurementRepository.js","sourceRoot":"","sources":["../../../src/output-gateway/repositories/MeasurementRepository.ts"],"names":[],"mappings":"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"}
|
package/dist/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.aveApiArchiveResponseJsonSchema = void 0;
|
|
4
|
+
exports.aveApiArchiveResponseJsonSchema = {
|
|
5
|
+
type: "object",
|
|
6
|
+
properties: {
|
|
7
|
+
deviceId: { type: "string" },
|
|
8
|
+
dataType: { type: "string" },
|
|
9
|
+
headers: {
|
|
10
|
+
type: "array",
|
|
11
|
+
items: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
key: { type: "string" },
|
|
15
|
+
name: { type: "string" },
|
|
16
|
+
type: { type: "string" },
|
|
17
|
+
},
|
|
18
|
+
required: ["key", "name", "type"],
|
|
19
|
+
additionalProperties: false,
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
rows: {
|
|
23
|
+
type: "array",
|
|
24
|
+
items: {
|
|
25
|
+
type: "array",
|
|
26
|
+
items: {
|
|
27
|
+
anyOf: [{ type: "string" }, { type: "number" }, { type: "null", nullable: true }],
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
count: { type: "integer" },
|
|
32
|
+
totalCount: { type: "integer" },
|
|
33
|
+
},
|
|
34
|
+
required: ["deviceId", "dataType", "headers", "rows", "count", "totalCount"],
|
|
35
|
+
additionalProperties: true,
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=AveApiArchiveResponseJsonSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AveApiArchiveResponseJsonSchema.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/commodity-providers/AveApiArchiveResponseJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,+BAA+B,GAA8C;IACtF,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACR,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC5B,OAAO,EAAE;YACL,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE;oBACR,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACvB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;oBACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC3B;gBACD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;gBACjC,oBAAoB,EAAE,KAAK;aAC9B;SACJ;QACD,IAAI,EAAE;YACF,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACH,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;iBACpF;aACJ;SACJ;QACD,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC1B,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAClC;IACD,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;IAC5E,oBAAoB,EAAE,IAAI;CAC7B,CAAC"}
|
package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js
CHANGED
|
@@ -6,12 +6,12 @@ exports.aveApiDeviceDataJsonSchema = {
|
|
|
6
6
|
items: {
|
|
7
7
|
type: "object",
|
|
8
8
|
properties: {
|
|
9
|
-
|
|
9
|
+
Timestamp: { type: "string" },
|
|
10
10
|
OperatingAmount: { type: "number" },
|
|
11
11
|
ConvertDifference: { type: "number" },
|
|
12
12
|
OperatingDifference: { type: "number" },
|
|
13
13
|
},
|
|
14
|
-
required: ["
|
|
14
|
+
required: ["Timestamp", "OperatingAmount", "ConvertDifference", "OperatingDifference"],
|
|
15
15
|
},
|
|
16
16
|
};
|
|
17
17
|
//# sourceMappingURL=AveApiDeviceDataJsonSchema.js.map
|
package/dist/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AveApiDeviceDataJsonSchema.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,0BAA0B,GAA2C;IAC9E,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,
|
|
1
|
+
{"version":3,"file":"AveApiDeviceDataJsonSchema.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,0BAA0B,GAA2C;IAC9E,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,eAAe,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACnC,iBAAiB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACrC,mBAAmB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC1C;QACD,QAAQ,EAAE,CAAC,WAAW,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;KACzF;CACJ,CAAC"}
|
|
@@ -6,11 +6,12 @@ exports.aveApiPlacesJsonSchema = {
|
|
|
6
6
|
items: {
|
|
7
7
|
type: "object",
|
|
8
8
|
properties: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
deviceId: { type: "string" },
|
|
10
|
+
eic: { type: "string" },
|
|
11
|
+
serialNumber: { type: "number" },
|
|
12
|
+
placeId: { type: "number" },
|
|
12
13
|
},
|
|
13
|
-
required: ["
|
|
14
|
+
required: ["deviceId", "eic", "serialNumber", "placeId"],
|
|
14
15
|
},
|
|
15
16
|
};
|
|
16
17
|
//# sourceMappingURL=AveApiPlacesJsonSchema.js.map
|
package/dist/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AveApiPlacesJsonSchema.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,sBAAsB,GAAsC;IACrE,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,
|
|
1
|
+
{"version":3,"file":"AveApiPlacesJsonSchema.js","sourceRoot":"","sources":["../../../../src/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.ts"],"names":[],"mappings":";;;AAGa,QAAA,sBAAsB,GAAsC;IACrE,IAAI,EAAE,OAAO;IACb,KAAK,EAAE;QACH,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACR,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC5B,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACvB,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SAC9B;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC;KAC3D;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAveApiArchiveHeaderDto.js","sourceRoot":"","sources":["../../../../../src/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveHeaderDto.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { IAveApiArchiveHeaderDto } from "./IAveApiArchiveHeaderDto";
|
|
2
|
+
export type ArchiveCell = string | number | null;
|
|
3
|
+
export interface IAveApiArchiveResponseDto {
|
|
4
|
+
deviceId: string;
|
|
5
|
+
dataType: string;
|
|
6
|
+
headers: IAveApiArchiveHeaderDto[];
|
|
7
|
+
rows: ArchiveCell[][];
|
|
8
|
+
count: number;
|
|
9
|
+
totalCount: number;
|
|
10
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IAveApiArchiveResponseDto.js","sourceRoot":"","sources":["../../../../../src/schema-definitions/datasources/commodity-providers/interfaces/IAveApiArchiveResponseDto.ts"],"names":[],"mappings":""}
|
|
@@ -115,11 +115,13 @@ https://gitlab.com/operator-ict/golemio/projekty/energetika/p0262.prevzeti-energ
|
|
|
115
115
|
#### _PPAS (Pražská plynárenská) InternetAVE API_
|
|
116
116
|
|
|
117
117
|
- zdroj dat
|
|
118
|
-
- url: https://
|
|
119
|
-
- API dokumentace: https://
|
|
118
|
+
- url: https://aveapi.ppas.cz/api/v1 (module.energetics.commodityProviders.ppas_ave_api.baseUrl)
|
|
119
|
+
- API dokumentace: https://aveapi.ppas.cz/api/docs/v1 (interaktivní Swagger: https://aveapi.ppas.cz/api/swagger/ui/index)
|
|
120
|
+
- endpointy: `/devices` (seznam OM), `/devices/{deviceId}/data/archive` (archivní data)
|
|
121
|
+
- autentizace: HTTP header `X-API-Key` (per-uživatel apiKey v configu, např. `module.energetics.commodityProviders.ppas_ave_api_mo.apiKey`)
|
|
120
122
|
- formát dat
|
|
121
123
|
- protokol: http
|
|
122
|
-
- datový typ: json
|
|
124
|
+
- datový typ: json (archive endpoint vrací columnar `{ headers, rows }` — rozbaluje se v [ArchiveDataTypeStrategy](../src/integration-engine/commodity-providers/datasources/ppas-ave-api/helpers/ArchiveDataTypeStrategy.ts))
|
|
123
125
|
- validační schéma: [Places](../src/schema-definitions/datasources/commodity-providers/AveApiPlacesJsonSchema.ts), [DeviceData](../src/schema-definitions/datasources/commodity-providers/AveApiDeviceDataJsonSchema.ts)
|
|
124
126
|
- příklad vstupnich dat: viz [test](../test/integration-engine/commodity-providers/FetchPpasMeasurementsTask.test.ts)
|
|
125
127
|
- frekvence stahování
|