diff --git a/docs/api.yml b/docs/api.yml index 99b4147ea12e03bcfcf280e438ad67aeda200b58..0bc3a2a5c4da5c611091946f20c782c44c5e49be 100644 --- a/docs/api.yml +++ b/docs/api.yml @@ -50,6 +50,44 @@ paths: application/json: schema: $ref: '#/components/schemas/Device' + /device/{deviceName}/sensors/{sensorName}: + get: + summary: Gets a specific device + operationId: device + parameters: + - in: path + name: deviceName + description: The device name + required: true + schema: + type: string + - in: path + name: sensorName + description: The sensor name + required: true + schema: + type: string + responses: + '200': + description: The sensor + content: + application/json: + schema: + $ref: '#/components/schemas/Sensor' + + /sensors: + get: + summary: Gets all sensors + operationId: sensors + responses: + '200': + description: All available sensors + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Sensor' components: schemas: @@ -74,16 +112,41 @@ components: Device: type: object required: - - ID + - id - name properties: - ID: + id: type: integer example: 1 - Projectname: + name: type: string example: "My Device" + Sensor: + type: object + required: + - id + - device_id + - name + - sensor_type + - value + properties: + id: + type: integer + example: 1 + device_id: + type: integer + example: 1 + name: + type: string + example: "My Device" + sensor_type: + type: string + example: "temperature" + value: + type: string + example: "20.15" + SuccessResponse: required: - success diff --git a/src/blueprints/Routes.py b/src/blueprints/Routes.py index e0191cf82afc0a0dc4b48fb59f26bee705f2e7f0..3ae54e1db5b47ef300f045efc656641114780c4a 100644 --- a/src/blueprints/Routes.py +++ b/src/blueprints/Routes.py @@ -55,6 +55,20 @@ def construct_blueprint(settings, version): database = Database(settings['database']['databasePath']) return jsonify(database.get_device(deviceName)) + @routes.route('/sensors', methods=['GET']) + def get_all_sensors(): + database = Database(settings['database']['databasePath']) + return jsonify(database.get_all_sensors()) + + @routes.route('/device/<deviceName>/sensors/<sensorName>', methods=['GET']) + def get_sensor(deviceName, sensorName): + database = Database(settings['database']['databasePath']) + device = database.get_device(deviceName) + if not device: + return jsonify({'success': False, 'msg': f'No device with name "{deviceName}" existing'}) + + return jsonify(database.get_sensor(device['id'], sensorName)) + @routes.route('/device/<deviceName>', methods=['POST']) def postSensorData(deviceName): try: @@ -80,7 +94,7 @@ def construct_blueprint(settings, version): sensorName = sensorParams[SensorParameters.NAME.value] sensorType = sensorParams[SensorParameters.TYPE.value] sensorValue = sensorParams[SensorParameters.VALUE.value] - sensor = database.get_sensor(device[0], sensorName) + sensor = database.get_sensor(device['id'], sensorName) if sensor: database.update_sensor(device, sensorName, sensorType, sensorValue) else: diff --git a/src/logic/Database.py b/src/logic/Database.py index c291030180542e4ce073c5dd954c949bab30334e..cdf0843b23cd1a7a96ff6cdbfc641d41a3b1f848 100644 --- a/src/logic/Database.py +++ b/src/logic/Database.py @@ -1,7 +1,7 @@ import sqlite3 from datetime import datetime from enum import Enum -from typing import Tuple +from typing import Tuple, Dict from TheCodeLabs_BaseUtils import DefaultLogger @@ -87,18 +87,18 @@ class Database: deviceID, name, fetch_type=FetchType.ONE) - def add_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): - LOGGER.debug(f'Inserting new sensor "{name}" for device "{device[1]}" ' + def add_sensor(self, device: Dict[str, str], name: str, sensorType: str, value: str): + LOGGER.debug(f'Inserting new sensor "{name}" for device "{device["name"]}" ' f'(type: "{sensorType}", value: "{value}")') self.__query(f'INSERT INTO {self.TABLE_SENSOR}(name, device_id, type, value, timestamp ) ' f'VALUES(?, ?, ?, ?, ?)', - name, device[0], sensorType, value, self.__get_current_datetime(), + name, device['id'], sensorType, value, self.__get_current_datetime(), fetch_type=FetchType.NONE) - def update_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): - LOGGER.debug(f'Updating sensor "{name}" for device "{device[1]}" ' + def update_sensor(self, device: Dict[str, str], name: str, sensorType: str, value: str): + LOGGER.debug(f'Updating sensor "{name}" for device "{device["name"]}" ' f'(type: "{sensorType}", value: "{value}")') self.__query(f'UPDATE {self.TABLE_SENSOR} SET value = ?, timestamp = ? ' f'WHERE device_id = ? AND name = ?', - value, self.__get_current_datetime(), device[0], name, + value, self.__get_current_datetime(), device['id'], name, fetch_type=FetchType.NONE)