m2-inno-bedpressure/hooks/useBedPressureData.ts
2025-06-21 12:55:27 +07:00

69 lines
No EOL
1.7 KiB
TypeScript

import { useEffect } from 'react'
import { useBedPressureStore, SensorData } from '@/stores/bedPressureStore'
// Mock data generator
const generateTimeSeriesData = (hours = 24) => {
const data = []
const now = new Date()
for (let i = hours * 60; i >= 0; i -= 5) {
const time = new Date(now.getTime() - i * 60 * 1000)
data.push({
time: time.toLocaleTimeString("en-US", { hour12: false }),
timestamp: time.getTime(),
value: Math.floor(Math.random() * 4096 + Math.sin(i / 60) * 500 + 2000), // 0-4095 range
})
}
return data
}
export function useBedPressureData() {
const {
sensorConfig,
sensorData,
isMonitoring,
fetchSensorConfig,
fetchSensorData,
setSensorData
} = useBedPressureStore()
// Initialize sensor configuration
useEffect(() => {
fetchSensorConfig()
}, [fetchSensorConfig])
// Initialize sensor data
useEffect(() => {
if (sensorConfig.length === 0) return
const initialData: Record<string, SensorData> = {}
sensorConfig.forEach((sensor) => {
initialData[sensor.id] = {
...sensor,
currentValue: Math.floor(Math.random() * 1000 + 1000), // Start with baseline analog value (1000-2000)
data: generateTimeSeriesData(),
status: "normal",
}
})
setSensorData(initialData)
}, [sensorConfig, setSensorData])
// Fetch sensor data from API
useEffect(() => {
if (!isMonitoring) return
// Initial fetch
fetchSensorData()
// Set up polling
const interval = setInterval(fetchSensorData, 2000)
return () => clearInterval(interval)
}, [isMonitoring, fetchSensorData])
return {
sensorData,
sensorConfig,
isMonitoring
}
}