- Update SensorConsumptionTable to use new sensorStore and websocketStore - Normalize sensor and reading interfaces for consistency - Remove legacy energy data handling and mapping logic - Update API and store types for new backend schema - Fetch sensors on mount in SensorConsumptionTable - Simplify WebSocket data processing and remove legacy code
91 lines
2.0 KiB
TypeScript
91 lines
2.0 KiB
TypeScript
import {
|
|
apiClient,
|
|
type SensorDevice,
|
|
type SensorReading,
|
|
type DataQuery,
|
|
type DataResponse,
|
|
type SensorType,
|
|
type SensorStatus,
|
|
type SensorMetadata,
|
|
} from './api'
|
|
|
|
export const sensorsApi = {
|
|
async getSensors(params?: {
|
|
room?: string
|
|
sensor_type?: SensorType
|
|
status?: SensorStatus
|
|
}): Promise<{
|
|
sensors: SensorDevice[]
|
|
count: number
|
|
filters: {
|
|
room: string
|
|
sensor_type: SensorType
|
|
status: SensorStatus
|
|
}
|
|
}> {
|
|
return apiClient.get<{
|
|
sensors: SensorDevice[]
|
|
count: number
|
|
filters: {
|
|
room: string
|
|
sensor_type: SensorType
|
|
status: SensorStatus
|
|
}
|
|
}>('/api/v1/sensors/get', params)
|
|
},
|
|
|
|
async getSensor(sensorId: string): Promise<SensorDevice> {
|
|
return apiClient.get<SensorDevice>(`/api/v1/sensors/${sensorId}`)
|
|
},
|
|
|
|
async getSensorData(
|
|
sensorId: string,
|
|
params?: {
|
|
start_time?: number
|
|
end_time?: number
|
|
limit?: number
|
|
offset?: number
|
|
},
|
|
): Promise<DataResponse> {
|
|
return apiClient.get<DataResponse>(`/api/v1/sensors/${sensorId}/data`, params)
|
|
},
|
|
|
|
async queryData(query: DataQuery): Promise<DataResponse> {
|
|
return apiClient.post<DataResponse>('/api/v1/data/query', query)
|
|
},
|
|
|
|
async updateSensorMetadata(
|
|
sensorId: string,
|
|
metadata: SensorMetadata,
|
|
): Promise<{ message: string }> {
|
|
return apiClient.put<{ message: string }>(`/api/v1/sensors/${sensorId}/metadata`, metadata)
|
|
},
|
|
|
|
async deleteSensor(sensorId: string): Promise<{
|
|
message: string
|
|
readings_deleted: number
|
|
metadata_deleted?: boolean
|
|
}> {
|
|
return apiClient.delete(`/api/v1/sensors/${sensorId}`)
|
|
},
|
|
|
|
async exportData(params: {
|
|
start_time: number
|
|
end_time: number
|
|
sensor_ids?: string
|
|
format?: 'json' | 'csv'
|
|
}): Promise<{
|
|
data: SensorReading[]
|
|
count: number
|
|
export_params: any
|
|
}> {
|
|
return apiClient.get<{
|
|
data: SensorReading[]
|
|
count: number
|
|
export_params: any
|
|
}>('/api/v1/export', params)
|
|
},
|
|
}
|
|
|
|
export default sensorsApi
|