diff --git a/docs/api.yml b/docs/api.yml index 8d0b35e50ced86576b98721fa4c94aed648a6e4e..a54fc6c5f7b11cb181545df161c18e1f30865352 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -10,6 +10,8 @@ info: paths: /version: get: + tags: + - general summary: Gets information about the server version operationId: version responses: @@ -209,7 +211,7 @@ paths: type: integer - in: path name: limit - description: Maximum number of results. + description: Maximum number of results. Set to "0" to disable limit. required: true schema: type: integer @@ -282,7 +284,7 @@ paths: parameters: - in: path name: limit - description: Maximum number of results. + description: Maximum number of results. Set to "0" to disable limit. required: true schema: type: integer @@ -296,6 +298,33 @@ paths: items: $ref: '#/components/schemas/Measurement' + /measurements/minMax: + get: + tags: + - measurement + summary: Gets the minimum and maximum values for the given sensor ids. + operationId: measurementsMinMax + parameters: + - in: query + name: sensorIds + description: The sensor ids to calculate the min and max value for. + required: true + style: form + explode: false + schema: + type: array + items: + type: integer + responses: + '200': + description: All available measurements + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Measurement' + /measurements: post: tags: diff --git a/src/blueprints/Measurements.py b/src/blueprints/Measurements.py index 1d76e0a1d62ad42229f25783eaebdfce00f768b8..3dd7ee9dc8d025930d14dacd7a0102919c0f7b6e 100644 --- a/src/blueprints/Measurements.py +++ b/src/blueprints/Measurements.py @@ -17,6 +17,32 @@ def construct_blueprint(settings: Dict, backupService: BackupService): database = Database(settings['database']['databasePath'], backupService) return jsonify(database.measurementAccess.get_all_measurements(limit)) + @measurements.route('/measurements/minMax', methods=['GET']) + def get_min_and_max_for_sensor_ids(): + if 'sensorIds' not in request.args: + return jsonify({'message': 'Parameter "sensorIds" missing'}), 400 + + sensorIds = request.args.get('sensorIds').split(',') + database = Database(settings['database']['databasePath'], backupService) + + values = [] + for sensorId in sensorIds: + sensorId = int(sensorId) + latestValue = database.measurementAccess.get_latest_measurements_for_sensor(sensorId) + if latestValue: + values.append(float(latestValue['value'])) + + if values: + return jsonify({ + 'min': min(values), + 'max': max(values) + }) + + return jsonify({ + 'min': None, + 'max': None + }) + @measurements.route('/measurement/<int:measurementID>', methods=['GET']) def get_measurement(measurementID): database = Database(settings['database']['databasePath'], backupService)