diff --git a/docs/api.yml b/docs/api.yml index 15517cf1c92e4707ac865ff4b6990f508ff42fa2..098be6dd5d5ac6673e68ab7a1050aecb63905c29 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -122,6 +122,26 @@ paths: type: array items: $ref: '#/components/schemas/Measurement' + /sensor/{sensorID}/measurements/latest: + get: + summary: Gets the latest measurement for a specific sensor + operationId: sensorMeasurementsLatest + parameters: + - in: path + name: sensorID + description: The sensor id + required: true + schema: + type: integer + responses: + '200': + description: The latest measurement + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Measurement' /measurements: get: diff --git a/src/blueprints/Routes.py b/src/blueprints/Routes.py index 524e729527d1f7b15712f883593d1a416dd39ca2..e6a590610f5881dffa83cf792bed3ac6b5efcb5d 100644 --- a/src/blueprints/Routes.py +++ b/src/blueprints/Routes.py @@ -96,6 +96,15 @@ def construct_blueprint(settings, version): return jsonify(database.get_all_measurements_for_sensor(sensorID)) + @routes.route('/sensor/<sensorID>/measurements/latest', methods=['GET']) + def get_latest_measurements_for_sensor(sensorID): + database = Database(settings['database']['databasePath']) + sensor = database.get_sensor(sensorID) + if not sensor: + return jsonify({'success': False, 'msg': f'No sensor with id "{sensorID}" existing'}) + + return jsonify(database.get_latest_measurements_for_sensor(sensorID)) + @routes.route('/measurements', methods=['POST']) @require_api_key(password=settings['api']['key']) def addMeasurement(): diff --git a/src/logic/Database.py b/src/logic/Database.py index be9572665a97b7c1ae0f12ecbe139fe8048ec1bd..e54445c41550f12532bb2b287358fa16cf95ea8d 100644 --- a/src/logic/Database.py +++ b/src/logic/Database.py @@ -125,6 +125,12 @@ class Database: sensorID, fetch_type=FetchType.ALL) + def get_latest_measurements_for_sensor(self, sensorID: int) -> Dict[str, str] or None: + return self.__query(f'SELECT * FROM {self.TABLE_MEASUREMENT} WHERE sensor_id = ? ' + f'ORDER BY datetime(timestamp) DESC LIMIT 1', + sensorID, + fetch_type=FetchType.ONE) + def add_measurement(self, sensorID: int, value: str): sensor = self.get_sensor(sensorID) LOGGER.debug(f'Inserting new measurement for sensor "{sensor["name"]}" '