Skip to content
Snippets Groups Projects
Commit 1ad5d76b authored by Robert Goldmann's avatar Robert Goldmann
Browse files

added api methods for sensor

parent 9cd4a3da
Branches
Tags
No related merge requests found
...@@ -50,6 +50,44 @@ paths: ...@@ -50,6 +50,44 @@ paths:
application/json: application/json:
schema: schema:
$ref: '#/components/schemas/Device' $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: components:
schemas: schemas:
...@@ -74,16 +112,41 @@ components: ...@@ -74,16 +112,41 @@ components:
Device: Device:
type: object type: object
required: required:
- ID - id
- name - name
properties: properties:
ID: id:
type: integer type: integer
example: 1 example: 1
Projectname: name:
type: string type: string
example: "My Device" 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: SuccessResponse:
required: required:
- success - success
......
...@@ -55,6 +55,20 @@ def construct_blueprint(settings, version): ...@@ -55,6 +55,20 @@ def construct_blueprint(settings, version):
database = Database(settings['database']['databasePath']) database = Database(settings['database']['databasePath'])
return jsonify(database.get_device(deviceName)) 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']) @routes.route('/device/<deviceName>', methods=['POST'])
def postSensorData(deviceName): def postSensorData(deviceName):
try: try:
...@@ -80,7 +94,7 @@ def construct_blueprint(settings, version): ...@@ -80,7 +94,7 @@ def construct_blueprint(settings, version):
sensorName = sensorParams[SensorParameters.NAME.value] sensorName = sensorParams[SensorParameters.NAME.value]
sensorType = sensorParams[SensorParameters.TYPE.value] sensorType = sensorParams[SensorParameters.TYPE.value]
sensorValue = sensorParams[SensorParameters.VALUE.value] sensorValue = sensorParams[SensorParameters.VALUE.value]
sensor = database.get_sensor(device[0], sensorName) sensor = database.get_sensor(device['id'], sensorName)
if sensor: if sensor:
database.update_sensor(device, sensorName, sensorType, sensorValue) database.update_sensor(device, sensorName, sensorType, sensorValue)
else: else:
......
import sqlite3 import sqlite3
from datetime import datetime from datetime import datetime
from enum import Enum from enum import Enum
from typing import Tuple from typing import Tuple, Dict
from TheCodeLabs_BaseUtils import DefaultLogger from TheCodeLabs_BaseUtils import DefaultLogger
...@@ -87,18 +87,18 @@ class Database: ...@@ -87,18 +87,18 @@ class Database:
deviceID, name, deviceID, name,
fetch_type=FetchType.ONE) fetch_type=FetchType.ONE)
def add_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): def add_sensor(self, device: Dict[str, str], name: str, sensorType: str, value: str):
LOGGER.debug(f'Inserting new sensor "{name}" for device "{device[1]}" ' LOGGER.debug(f'Inserting new sensor "{name}" for device "{device["name"]}" '
f'(type: "{sensorType}", value: "{value}")') f'(type: "{sensorType}", value: "{value}")')
self.__query(f'INSERT INTO {self.TABLE_SENSOR}(name, device_id, type, value, timestamp ) ' self.__query(f'INSERT INTO {self.TABLE_SENSOR}(name, device_id, type, value, timestamp ) '
f'VALUES(?, ?, ?, ?, ?)', f'VALUES(?, ?, ?, ?, ?)',
name, device[0], sensorType, value, self.__get_current_datetime(), name, device['id'], sensorType, value, self.__get_current_datetime(),
fetch_type=FetchType.NONE) fetch_type=FetchType.NONE)
def update_sensor(self, device: Tuple[int, str], name: str, sensorType: str, value: str): def update_sensor(self, device: Dict[str, str], name: str, sensorType: str, value: str):
LOGGER.debug(f'Updating sensor "{name}" for device "{device[1]}" ' LOGGER.debug(f'Updating sensor "{name}" for device "{device["name"]}" '
f'(type: "{sensorType}", value: "{value}")') f'(type: "{sensorType}", value: "{value}")')
self.__query(f'UPDATE {self.TABLE_SENSOR} SET value = ?, timestamp = ? ' self.__query(f'UPDATE {self.TABLE_SENSOR} SET value = ?, timestamp = ? '
f'WHERE device_id = ? AND name = ?', 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) fetch_type=FetchType.NONE)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment