@golemio/microclimate 1.1.2-dev.781549704 → 1.1.2-dev.788237500
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/db/example/00_truncate_tables.sql +2 -2
- package/db/example/01_microclimate.sql +44 -2
- package/db/migrations/postgresql/20230215185618-og-api.js +53 -0
- package/db/migrations/postgresql/sqls/20230215185618-og-api-down.sql +2 -0
- package/db/migrations/postgresql/sqls/20230215185618-og-api-up.sql +164 -0
- package/dist/output-gateway/MicroclimateRouter.d.ts +4 -0
- package/dist/output-gateway/MicroclimateRouter.js +85 -0
- package/dist/output-gateway/MicroclimateRouter.js.map +1 -0
- package/dist/output-gateway/helpers/LocationsOutputMapper.d.ts +18 -0
- package/dist/output-gateway/helpers/LocationsOutputMapper.js +35 -0
- package/dist/output-gateway/helpers/LocationsOutputMapper.js.map +1 -0
- package/dist/output-gateway/helpers/PointsOutputMapper.d.ts +27 -0
- package/dist/output-gateway/helpers/PointsOutputMapper.js +45 -0
- package/dist/output-gateway/helpers/PointsOutputMapper.js.map +1 -0
- package/dist/output-gateway/index.d.ts +1 -0
- package/dist/output-gateway/index.js +18 -0
- package/dist/output-gateway/index.js.map +1 -0
- package/dist/output-gateway/repositories/SensorDevicesImportRepository.d.ts +19 -0
- package/dist/output-gateway/repositories/SensorDevicesImportRepository.js +55 -0
- package/dist/output-gateway/repositories/SensorDevicesImportRepository.js.map +1 -0
- package/dist/output-gateway/repositories/SensorMeasurementsViewRepository.d.ts +16 -0
- package/dist/output-gateway/repositories/SensorMeasurementsViewRepository.js +49 -0
- package/dist/output-gateway/repositories/SensorMeasurementsViewRepository.js.map +1 -0
- package/dist/output-gateway/repositories/SensorPointsViewRepository.d.ts +11 -0
- package/dist/output-gateway/repositories/SensorPointsViewRepository.js +43 -0
- package/dist/output-gateway/repositories/SensorPointsViewRepository.js.map +1 -0
- package/dist/output-gateway/repositories/index.d.ts +3 -0
- package/dist/output-gateway/repositories/index.js +20 -0
- package/dist/output-gateway/repositories/index.js.map +1 -0
- package/dist/schema-definitions/SensorDevicesImport.d.ts +33 -0
- package/dist/schema-definitions/SensorDevicesImport.js +8 -0
- package/dist/schema-definitions/SensorDevicesImport.js.map +1 -0
- package/dist/schema-definitions/SensorMeasurementsView.d.ts +13 -0
- package/dist/schema-definitions/SensorMeasurementsView.js +8 -0
- package/dist/schema-definitions/SensorMeasurementsView.js.map +1 -0
- package/dist/schema-definitions/SensorPointsView.d.ts +23 -0
- package/dist/schema-definitions/SensorPointsView.js +8 -0
- package/dist/schema-definitions/SensorPointsView.js.map +1 -0
- package/dist/schema-definitions/index.js +6 -0
- package/dist/schema-definitions/index.js.map +1 -1
- package/dist/schema-definitions/models/SensorDevicesImportModel.d.ts +32 -0
- package/dist/schema-definitions/models/SensorDevicesImportModel.js +37 -0
- package/dist/schema-definitions/models/SensorDevicesImportModel.js.map +1 -0
- package/dist/schema-definitions/models/SensorMeasurementsViewModel.d.ts +12 -0
- package/dist/schema-definitions/models/SensorMeasurementsViewModel.js +17 -0
- package/dist/schema-definitions/models/SensorMeasurementsViewModel.js.map +1 -0
- package/dist/schema-definitions/models/SensorPointsViewModel.d.ts +22 -0
- package/dist/schema-definitions/models/SensorPointsViewModel.js +27 -0
- package/dist/schema-definitions/models/SensorPointsViewModel.js.map +1 -0
- package/docs/implementation_documentation.md +20 -1
- package/docs/openapi.yaml +298 -0
- package/package.json +1 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SensorMeasurementsViewRepository = void 0;
|
|
13
|
+
const output_gateway_1 = require("@golemio/core/dist/output-gateway");
|
|
14
|
+
const _sch_1 = require("../../schema-definitions");
|
|
15
|
+
const SensorMeasurementsViewModel_1 = require("../../schema-definitions/models/SensorMeasurementsViewModel");
|
|
16
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
17
|
+
class SensorMeasurementsViewRepository extends output_gateway_1.SequelizeModel {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(_sch_1.Microclimate.definitions.sensorMeasurementsView.name, _sch_1.Microclimate.definitions.sensorMeasurementsView.pgTableName, SensorMeasurementsViewModel_1.SensorMeasurementsViewModel.attributeModel, {
|
|
20
|
+
schema: _sch_1.Microclimate.pgSchema,
|
|
21
|
+
});
|
|
22
|
+
this.GetAllMeasurements = (options = {}) => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
var _a;
|
|
24
|
+
const whereAttributes = {
|
|
25
|
+
[sequelize_1.Op.and]: [
|
|
26
|
+
...(options.locationId ? [{ location_id: { [sequelize_1.Op.eq]: options.locationId } }] : []),
|
|
27
|
+
...(options.pointId ? [{ point_id: { [sequelize_1.Op.eq]: options.pointId } }] : []),
|
|
28
|
+
...(options.measure ? [{ measure: { [sequelize_1.Op.eq]: options.measure } }] : []),
|
|
29
|
+
...(options.from ? [{ measured_at: { [sequelize_1.Op.gte]: options.from } }] : []),
|
|
30
|
+
...(options.to ? [{ measured_at: { [sequelize_1.Op.lte]: options.to } }] : []),
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
return this.sequelizeModel.findAll({
|
|
34
|
+
where: whereAttributes,
|
|
35
|
+
limit: options.limit,
|
|
36
|
+
offset: (_a = options.offset) !== null && _a !== void 0 ? _a : 0,
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
this.sequelizeModel.removeAttribute("id");
|
|
40
|
+
}
|
|
41
|
+
GetAll() {
|
|
42
|
+
throw new Error("Not implemented");
|
|
43
|
+
}
|
|
44
|
+
GetOne() {
|
|
45
|
+
throw new Error("Not implemented");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.SensorMeasurementsViewRepository = SensorMeasurementsViewRepository;
|
|
49
|
+
//# sourceMappingURL=SensorMeasurementsViewRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorMeasurementsViewRepository.js","sourceRoot":"","sources":["../../../src/output-gateway/repositories/SensorMeasurementsViewRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAmE;AACnE,mDAAoC;AACpC,6GAAsF;AAEtF,mEAAuE;AAEvE,MAAa,gCAAiC,SAAQ,+BAAc;IAChE;QACI,KAAK,CACD,mBAAY,CAAC,WAAW,CAAC,sBAAsB,CAAC,IAAI,EACpD,mBAAY,CAAC,WAAW,CAAC,sBAAsB,CAAC,WAAW,EAC3D,yDAA2B,CAAC,cAAc,EAC1C;YACI,MAAM,EAAE,mBAAY,CAAC,QAAQ;SAChC,CACJ,CAAC;QAIC,uBAAkB,GAAG,CACxB,UAQI,EAAE,EAC4B,EAAE;;YACpC,MAAM,eAAe,GAAiB;gBAClC,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE;oBACN,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACxE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtE,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrE;aACJ,CAAC;YACF,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC/B,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,MAAA,OAAO,CAAC,MAAM,mCAAI,CAAC;aAC9B,CAAC,CAAC;QACP,CAAC,CAAA,CAAC;QA5BE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IA6BD,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;CACJ;AA/CD,4EA+CC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { SequelizeModel } from "@golemio/core/dist/output-gateway";
|
|
2
|
+
import { ISensorPointsView } from "../../schema-definitions/SensorPointsView";
|
|
3
|
+
export declare class SensorPointsViewRepository extends SequelizeModel {
|
|
4
|
+
constructor();
|
|
5
|
+
GetAllPoints: (options?: {
|
|
6
|
+
locationId?: number;
|
|
7
|
+
pointId?: number;
|
|
8
|
+
}) => Promise<ISensorPointsView[]>;
|
|
9
|
+
GetAll(): never;
|
|
10
|
+
GetOne(): never;
|
|
11
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SensorPointsViewRepository = void 0;
|
|
13
|
+
const output_gateway_1 = require("@golemio/core/dist/output-gateway");
|
|
14
|
+
const _sch_1 = require("../../schema-definitions");
|
|
15
|
+
const SensorPointsViewModel_1 = require("../../schema-definitions/models/SensorPointsViewModel");
|
|
16
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
17
|
+
class SensorPointsViewRepository extends output_gateway_1.SequelizeModel {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(_sch_1.Microclimate.definitions.sensorPointsView.name, _sch_1.Microclimate.definitions.sensorPointsView.pgTableName, SensorPointsViewModel_1.SensorPointsViewModel.attributeModel, {
|
|
20
|
+
schema: _sch_1.Microclimate.pgSchema,
|
|
21
|
+
});
|
|
22
|
+
this.GetAllPoints = (options = {}) => __awaiter(this, void 0, void 0, function* () {
|
|
23
|
+
const whereAttributes = {
|
|
24
|
+
[sequelize_1.Op.and]: [
|
|
25
|
+
...(options.locationId ? [{ location_id: { [sequelize_1.Op.eq]: options.locationId } }] : []),
|
|
26
|
+
...(options.pointId ? [{ point_id: { [sequelize_1.Op.eq]: options.pointId } }] : []),
|
|
27
|
+
],
|
|
28
|
+
};
|
|
29
|
+
return this.sequelizeModel.findAll({
|
|
30
|
+
where: whereAttributes,
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
this.sequelizeModel.removeAttribute("id");
|
|
34
|
+
}
|
|
35
|
+
GetAll() {
|
|
36
|
+
throw new Error("Not implemented");
|
|
37
|
+
}
|
|
38
|
+
GetOne() {
|
|
39
|
+
throw new Error("Not implemented");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.SensorPointsViewRepository = SensorPointsViewRepository;
|
|
43
|
+
//# sourceMappingURL=SensorPointsViewRepository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorPointsViewRepository.js","sourceRoot":"","sources":["../../../src/output-gateway/repositories/SensorPointsViewRepository.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,sEAAmE;AACnE,mDAAoC;AACpC,iGAA0E;AAE1E,mEAAuE;AAEvE,MAAa,0BAA2B,SAAQ,+BAAc;IAC1D;QACI,KAAK,CACD,mBAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAC9C,mBAAY,CAAC,WAAW,CAAC,gBAAgB,CAAC,WAAW,EACrD,6CAAqB,CAAC,cAAc,EACpC;YACI,MAAM,EAAE,mBAAY,CAAC,QAAQ;SAChC,CACJ,CAAC;QAIC,iBAAY,GAAG,CAClB,UAGI,EAAE,EACsB,EAAE;YAC9B,MAAM,eAAe,GAAiB;gBAClC,CAAC,cAAE,CAAC,GAAG,CAAC,EAAE;oBACN,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjF,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAE,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC3E;aACJ,CAAC;YAEF,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC/B,KAAK,EAAE,eAAe;aACzB,CAAC,CAAC;QACP,CAAC,CAAA,CAAC;QAnBE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAoBD,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;IAED,MAAM;QACF,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACvC,CAAC;CACJ;AAtCD,gEAsCC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./SensorDevicesImportRepository"), exports);
|
|
18
|
+
__exportStar(require("./SensorPointsViewRepository"), exports);
|
|
19
|
+
__exportStar(require("./SensorMeasurementsViewRepository"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/output-gateway/repositories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kEAAgD;AAChD,+DAA6C;AAC7C,qEAAmD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export interface ISensorDeviceImport {
|
|
2
|
+
location_id: number;
|
|
3
|
+
point_id: number;
|
|
4
|
+
location: string;
|
|
5
|
+
loc_description: string;
|
|
6
|
+
loc_orientation: string;
|
|
7
|
+
loc_surface: string;
|
|
8
|
+
point_name: string;
|
|
9
|
+
point_whole_name: string;
|
|
10
|
+
address: string;
|
|
11
|
+
sensor_position: string;
|
|
12
|
+
sensor_position_detail: string;
|
|
13
|
+
sensor_id: string;
|
|
14
|
+
data_relevance: string;
|
|
15
|
+
lat: number;
|
|
16
|
+
lng: number;
|
|
17
|
+
air_temp: number;
|
|
18
|
+
air_hum: number;
|
|
19
|
+
pressure: number;
|
|
20
|
+
wind_dir: number;
|
|
21
|
+
wind_impact: number;
|
|
22
|
+
wind_speed: number;
|
|
23
|
+
precip: number;
|
|
24
|
+
sun_irr: number;
|
|
25
|
+
soil_temp: number;
|
|
26
|
+
water_pot: number;
|
|
27
|
+
dendro_circ: number;
|
|
28
|
+
dendro_gain: number;
|
|
29
|
+
}
|
|
30
|
+
export declare const sensorDevicesImport: {
|
|
31
|
+
name: string;
|
|
32
|
+
pgTableName: string;
|
|
33
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sensorDevicesImport = void 0;
|
|
4
|
+
exports.sensorDevicesImport = {
|
|
5
|
+
name: "SensorDevicesImport",
|
|
6
|
+
pgTableName: "sensor_devices_import",
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=SensorDevicesImport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorDevicesImport.js","sourceRoot":"","sources":["../../src/schema-definitions/SensorDevicesImport.ts"],"names":[],"mappings":";;;AA8Ba,QAAA,mBAAmB,GAAG;IAC/B,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,uBAAuB;CACvC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface ISensorMeasurementsView {
|
|
2
|
+
sensor_id: string;
|
|
3
|
+
measured_at: Date | string;
|
|
4
|
+
point_id: number;
|
|
5
|
+
location_id: number;
|
|
6
|
+
measure: string;
|
|
7
|
+
value: number;
|
|
8
|
+
unit: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const sensorMeasurementsView: {
|
|
11
|
+
name: string;
|
|
12
|
+
pgTableName: string;
|
|
13
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sensorMeasurementsView = void 0;
|
|
4
|
+
exports.sensorMeasurementsView = {
|
|
5
|
+
name: "SensorMeasurementsView",
|
|
6
|
+
pgTableName: "v_sensor_measurements",
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=SensorMeasurementsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorMeasurementsView.js","sourceRoot":"","sources":["../../src/schema-definitions/SensorMeasurementsView.ts"],"names":[],"mappings":";;;AAUa,QAAA,sBAAsB,GAAG;IAClC,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,uBAAuB;CACvC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface ISensorPointsView {
|
|
2
|
+
point_id: number;
|
|
3
|
+
point_name: string;
|
|
4
|
+
location_id: number;
|
|
5
|
+
location: string;
|
|
6
|
+
loc_description: string;
|
|
7
|
+
loc_orientation: string;
|
|
8
|
+
loc_surface: string;
|
|
9
|
+
lat: number;
|
|
10
|
+
lng: number;
|
|
11
|
+
x_jtsk: null;
|
|
12
|
+
y_jtsk: null;
|
|
13
|
+
elevation_m: null;
|
|
14
|
+
sensor_position: string;
|
|
15
|
+
sensor_position_detail: string;
|
|
16
|
+
measure: string;
|
|
17
|
+
measure_cz: string;
|
|
18
|
+
unit: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const sensorPointsView: {
|
|
21
|
+
name: string;
|
|
22
|
+
pgTableName: string;
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorPointsView.js","sourceRoot":"","sources":["../../src/schema-definitions/SensorPointsView.ts"],"names":[],"mappings":";;;AAoBa,QAAA,gBAAgB,GAAG;IAC5B,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,iBAAiB;CACjC,CAAC"}
|
|
@@ -5,6 +5,9 @@ const SensorDevicesJsonSchema_1 = require("./datasources/SensorDevicesJsonSchema
|
|
|
5
5
|
const MeasurementsJsonSchema_1 = require("./datasources/MeasurementsJsonSchema");
|
|
6
6
|
const SensorDevices_1 = require("./SensorDevices");
|
|
7
7
|
const Measurements_1 = require("./Measurements");
|
|
8
|
+
const SensorDevicesImport_1 = require("./SensorDevicesImport");
|
|
9
|
+
const SensorPointsView_1 = require("./SensorPointsView");
|
|
10
|
+
const SensorMeasurementsView_1 = require("./SensorMeasurementsView");
|
|
8
11
|
const forExport = {
|
|
9
12
|
name: "Microclimate",
|
|
10
13
|
pgSchema: "microclimate",
|
|
@@ -15,6 +18,9 @@ const forExport = {
|
|
|
15
18
|
definitions: {
|
|
16
19
|
sensorDevices: SensorDevices_1.sensorDevices,
|
|
17
20
|
measurements: Measurements_1.measurements,
|
|
21
|
+
sensorDevicesImport: SensorDevicesImport_1.sensorDevicesImport,
|
|
22
|
+
sensorPointsView: SensorPointsView_1.sensorPointsView,
|
|
23
|
+
sensorMeasurementsView: SensorMeasurementsView_1.sensorMeasurementsView,
|
|
18
24
|
},
|
|
19
25
|
};
|
|
20
26
|
exports.Microclimate = forExport;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema-definitions/index.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,iFAAiF;AACjF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schema-definitions/index.ts"],"names":[],"mappings":";;;AAAA,mFAAmF;AACnF,iFAAiF;AACjF,mDAAmD;AACnD,iDAAiD;AACjD,+DAA+D;AAC/D,yDAAyD;AACzD,qEAAqE;AAErE,MAAM,SAAS,GAAQ;IACnB,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,cAAc;IACxB,WAAW,EAAE;QACT,uBAAuB,EAAvB,iDAAuB;QACvB,sBAAsB,EAAtB,+CAAsB;KACzB;IACD,WAAW,EAAE;QACT,aAAa,EAAb,6BAAa;QACb,YAAY,EAAZ,2BAAY;QACZ,mBAAmB,EAAnB,yCAAmB;QACnB,gBAAgB,EAAhB,mCAAgB;QAChB,sBAAsB,EAAtB,+CAAsB;KACzB;CACJ,CAAC;AAEoB,iCAAY"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Model, ModelAttributes } from "@golemio/core/dist/shared/sequelize";
|
|
2
|
+
import { ISensorDeviceImport } from "../SensorDevicesImport";
|
|
3
|
+
export declare class SensorDevicesImportModel extends Model<ISensorDeviceImport> implements ISensorDeviceImport {
|
|
4
|
+
location_id: number;
|
|
5
|
+
point_id: number;
|
|
6
|
+
location: string;
|
|
7
|
+
loc_description: string;
|
|
8
|
+
loc_orientation: string;
|
|
9
|
+
loc_surface: string;
|
|
10
|
+
point_name: string;
|
|
11
|
+
point_whole_name: string;
|
|
12
|
+
address: string;
|
|
13
|
+
sensor_position: string;
|
|
14
|
+
sensor_position_detail: string;
|
|
15
|
+
sensor_id: string;
|
|
16
|
+
data_relevance: string;
|
|
17
|
+
lat: number;
|
|
18
|
+
lng: number;
|
|
19
|
+
air_temp: number;
|
|
20
|
+
air_hum: number;
|
|
21
|
+
pressure: number;
|
|
22
|
+
wind_dir: number;
|
|
23
|
+
wind_impact: number;
|
|
24
|
+
wind_speed: number;
|
|
25
|
+
precip: number;
|
|
26
|
+
sun_irr: number;
|
|
27
|
+
soil_temp: number;
|
|
28
|
+
water_pot: number;
|
|
29
|
+
dendro_circ: number;
|
|
30
|
+
dendro_gain: number;
|
|
31
|
+
static attributeModel: ModelAttributes<SensorDevicesImportModel, ISensorDeviceImport>;
|
|
32
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SensorDevicesImportModel = void 0;
|
|
4
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
5
|
+
class SensorDevicesImportModel extends sequelize_1.Model {
|
|
6
|
+
}
|
|
7
|
+
exports.SensorDevicesImportModel = SensorDevicesImportModel;
|
|
8
|
+
SensorDevicesImportModel.attributeModel = {
|
|
9
|
+
location_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
10
|
+
point_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
11
|
+
location: { type: sequelize_1.DataTypes.STRING(50) },
|
|
12
|
+
loc_description: { type: sequelize_1.DataTypes.STRING(50) },
|
|
13
|
+
loc_orientation: { type: sequelize_1.DataTypes.STRING(50) },
|
|
14
|
+
loc_surface: { type: sequelize_1.DataTypes.STRING(50) },
|
|
15
|
+
point_name: { type: sequelize_1.DataTypes.STRING(50) },
|
|
16
|
+
point_whole_name: { type: sequelize_1.DataTypes.STRING(50) },
|
|
17
|
+
address: { type: sequelize_1.DataTypes.STRING(50) },
|
|
18
|
+
sensor_position: { type: sequelize_1.DataTypes.STRING(50) },
|
|
19
|
+
sensor_position_detail: { type: sequelize_1.DataTypes.STRING(50) },
|
|
20
|
+
sensor_id: { type: sequelize_1.DataTypes.STRING(50), primaryKey: true },
|
|
21
|
+
data_relevance: { type: sequelize_1.DataTypes.STRING(50) },
|
|
22
|
+
lat: { type: sequelize_1.DataTypes.REAL },
|
|
23
|
+
lng: { type: sequelize_1.DataTypes.REAL },
|
|
24
|
+
air_temp: { type: sequelize_1.DataTypes.INTEGER },
|
|
25
|
+
air_hum: { type: sequelize_1.DataTypes.INTEGER },
|
|
26
|
+
pressure: { type: sequelize_1.DataTypes.INTEGER },
|
|
27
|
+
wind_dir: { type: sequelize_1.DataTypes.INTEGER },
|
|
28
|
+
wind_impact: { type: sequelize_1.DataTypes.INTEGER },
|
|
29
|
+
wind_speed: { type: sequelize_1.DataTypes.INTEGER },
|
|
30
|
+
precip: { type: sequelize_1.DataTypes.INTEGER },
|
|
31
|
+
sun_irr: { type: sequelize_1.DataTypes.INTEGER },
|
|
32
|
+
soil_temp: { type: sequelize_1.DataTypes.INTEGER },
|
|
33
|
+
water_pot: { type: sequelize_1.DataTypes.INTEGER },
|
|
34
|
+
dendro_circ: { type: sequelize_1.DataTypes.INTEGER },
|
|
35
|
+
dendro_gain: { type: sequelize_1.DataTypes.INTEGER },
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=SensorDevicesImportModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorDevicesImportModel.js","sourceRoot":"","sources":["../../../src/schema-definitions/models/SensorDevicesImportModel.ts"],"names":[],"mappings":";;;AAAA,mEAAwF;AAGxF,MAAa,wBAAyB,SAAQ,iBAA0B;;AAAxE,4DA0DC;AA7BiB,uCAAc,GAAmE;IAC3F,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACxC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACxC,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC3C,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC1C,gBAAgB,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAChD,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACvC,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,sBAAsB,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACtD,SAAS,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE;IAC3D,cAAc,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC9C,GAAG,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IAC7B,GAAG,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IAC7B,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACpC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACxC,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACvC,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACnC,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACpC,SAAS,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACtC,SAAS,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACtC,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACxC,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;CAC3C,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Model, ModelAttributes } from "@golemio/core/dist/shared/sequelize";
|
|
2
|
+
import { ISensorMeasurementsView } from "../SensorMeasurementsView";
|
|
3
|
+
export declare class SensorMeasurementsViewModel extends Model<ISensorMeasurementsView> implements ISensorMeasurementsView {
|
|
4
|
+
sensor_id: string;
|
|
5
|
+
measured_at: Date;
|
|
6
|
+
point_id: number;
|
|
7
|
+
location_id: number;
|
|
8
|
+
measure: string;
|
|
9
|
+
value: number;
|
|
10
|
+
unit: string;
|
|
11
|
+
static attributeModel: ModelAttributes<SensorMeasurementsViewModel, ISensorMeasurementsView>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SensorMeasurementsViewModel = void 0;
|
|
4
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
5
|
+
class SensorMeasurementsViewModel extends sequelize_1.Model {
|
|
6
|
+
}
|
|
7
|
+
exports.SensorMeasurementsViewModel = SensorMeasurementsViewModel;
|
|
8
|
+
SensorMeasurementsViewModel.attributeModel = {
|
|
9
|
+
sensor_id: { type: sequelize_1.DataTypes.STRING(50) },
|
|
10
|
+
measured_at: { type: sequelize_1.DataTypes.DATE },
|
|
11
|
+
point_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
12
|
+
location_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
13
|
+
measure: { type: sequelize_1.DataTypes.TEXT },
|
|
14
|
+
value: { type: sequelize_1.DataTypes.DOUBLE },
|
|
15
|
+
unit: { type: sequelize_1.DataTypes.TEXT },
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=SensorMeasurementsViewModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorMeasurementsViewModel.js","sourceRoot":"","sources":["../../../src/schema-definitions/models/SensorMeasurementsViewModel.ts"],"names":[],"mappings":";;;AAAA,mEAAwF;AAKxF,MAAa,2BAA4B,SAAQ,iBAA8B;;AAA/E,kEAkBC;AATiB,0CAAc,GAA0E;IAClG,SAAS,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACzC,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IACrC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IACjC,KAAK,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,EAAE;IACjC,IAAI,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;CACjC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Model, ModelAttributes } from "@golemio/core/dist/shared/sequelize";
|
|
2
|
+
import { ISensorPointsView } from "../SensorPointsView";
|
|
3
|
+
export declare class SensorPointsViewModel extends Model<ISensorPointsView> implements ISensorPointsView {
|
|
4
|
+
point_id: number;
|
|
5
|
+
point_name: string;
|
|
6
|
+
location_id: number;
|
|
7
|
+
location: string;
|
|
8
|
+
loc_description: string;
|
|
9
|
+
loc_orientation: string;
|
|
10
|
+
loc_surface: string;
|
|
11
|
+
lat: number;
|
|
12
|
+
lng: number;
|
|
13
|
+
x_jtsk: null;
|
|
14
|
+
y_jtsk: null;
|
|
15
|
+
elevation_m: null;
|
|
16
|
+
sensor_position: string;
|
|
17
|
+
sensor_position_detail: string;
|
|
18
|
+
measure: string;
|
|
19
|
+
measure_cz: string;
|
|
20
|
+
unit: string;
|
|
21
|
+
static attributeModel: ModelAttributes<SensorPointsViewModel, ISensorPointsView>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SensorPointsViewModel = void 0;
|
|
4
|
+
const sequelize_1 = require("@golemio/core/dist/shared/sequelize");
|
|
5
|
+
class SensorPointsViewModel extends sequelize_1.Model {
|
|
6
|
+
}
|
|
7
|
+
exports.SensorPointsViewModel = SensorPointsViewModel;
|
|
8
|
+
SensorPointsViewModel.attributeModel = {
|
|
9
|
+
point_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
10
|
+
point_name: { type: sequelize_1.DataTypes.STRING(50) },
|
|
11
|
+
location_id: { type: sequelize_1.DataTypes.INTEGER },
|
|
12
|
+
location: { type: sequelize_1.DataTypes.STRING(50) },
|
|
13
|
+
loc_description: { type: sequelize_1.DataTypes.STRING(50) },
|
|
14
|
+
loc_orientation: { type: sequelize_1.DataTypes.STRING(50) },
|
|
15
|
+
loc_surface: { type: sequelize_1.DataTypes.STRING(50) },
|
|
16
|
+
lat: { type: sequelize_1.DataTypes.REAL },
|
|
17
|
+
lng: { type: sequelize_1.DataTypes.REAL },
|
|
18
|
+
x_jtsk: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
|
|
19
|
+
y_jtsk: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
|
|
20
|
+
elevation_m: { type: sequelize_1.DataTypes.INTEGER, allowNull: true },
|
|
21
|
+
sensor_position: { type: sequelize_1.DataTypes.STRING(50) },
|
|
22
|
+
sensor_position_detail: { type: sequelize_1.DataTypes.STRING(50) },
|
|
23
|
+
measure: { type: sequelize_1.DataTypes.TEXT },
|
|
24
|
+
measure_cz: { type: sequelize_1.DataTypes.TEXT },
|
|
25
|
+
unit: { type: sequelize_1.DataTypes.TEXT },
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=SensorPointsViewModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SensorPointsViewModel.js","sourceRoot":"","sources":["../../../src/schema-definitions/models/SensorPointsViewModel.ts"],"names":[],"mappings":";;;AAAA,mEAAwF;AAGxF,MAAa,qBAAsB,SAAQ,iBAAwB;;AAAnE,sDAsCC;AAnBiB,oCAAc,GAA8D;IACtF,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACrC,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC1C,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE;IACxC,QAAQ,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACxC,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC3C,GAAG,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IAC7B,GAAG,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IAC7B,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IACpD,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IACpD,WAAW,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IACzD,eAAe,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IAC/C,sBAAsB,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;IACtD,OAAO,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IACjC,UAAU,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,EAAE,IAAI,EAAE,qBAAS,CAAC,IAAI,EAAE;CACjC,CAAC"}
|
|
@@ -279,4 +279,23 @@ Proměnné zaslané vysílači se liší, tj. různé vysílače odesílají rů
|
|
|
279
279
|
|
|
280
280
|
## Output API
|
|
281
281
|
|
|
282
|
-
|
|
282
|
+
### Obecné
|
|
283
|
+
|
|
284
|
+
- OpenAPI v3 dokumentace
|
|
285
|
+
- [swagger] (https://gitlab.com/operator-ict/golemio/code/modules/microclimate/-/blob/development/docs/openapi.yaml).
|
|
286
|
+
- api je veřejné
|
|
287
|
+
|
|
288
|
+
#### _/microclimate/locations_
|
|
289
|
+
|
|
290
|
+
- zdrojové tabulky
|
|
291
|
+
- `sensor_devices_import`
|
|
292
|
+
|
|
293
|
+
#### _/microclimate/points_
|
|
294
|
+
|
|
295
|
+
- zdrojové tabulky
|
|
296
|
+
- view `v_sensor_points` nad `sensor_devices_import`
|
|
297
|
+
|
|
298
|
+
#### _/microclimate/measurements_
|
|
299
|
+
|
|
300
|
+
- zdrojové tabulky
|
|
301
|
+
- view `v_sensor_measurements` nad `sensor_devices_import` a `measurements`
|