Sensores
Los sensores permiten monitorear las condiciones ambientales de los espacios de cultivo en tiempo real. Esta API gestiona diferentes tipos de sensores, sus lecturas y alertas.
La API de Sensores soporta integracion con dispositivos Growcast y sensores IoT genericos.
El modelo de Sensor
- Name
id- Type
- string
- Description
Identificador unico del sensor.
- Name
name- Type
- string
- Description
Nombre descriptivo del sensor.
- Name
type- Type
- SensorType
- Description
Tipo de sensor (TEMPERATURE, HUMIDITY, etc).
- Name
value- Type
- string
- Description
Valor actual de la lectura.
- Name
unit- Type
- string
- Description
Unidad de medida (°C, %, ppm, pH, mS/cm, kPa).
- Name
isConnected- Type
- boolean
- Description
Estado de conexion del sensor.
- Name
space- Type
- object
- Description
Espacio donde esta instalado el sensor.
- Name
id- Type
- string
- Description
ID del espacio.
- Name
name- Type
- string
- Description
Nombre del espacio.
- Name
thresholds- Type
- object
- Description
Umbrales para alertas.
- Name
min- Type
- number
- Description
Valor minimo antes de alerta.
- Name
max- Type
- number
- Description
Valor maximo antes de alerta.
- Name
alertEnabled- Type
- boolean
- Description
Si las alertas estan habilitadas.
- Name
serialNumber- Type
- string
- Description
Numero de serie del hardware.
- Name
manufacturer- Type
- string
- Description
Fabricante del sensor.
- Name
lastReadingAt- Type
- string
- Description
Timestamp de la ultima lectura.
- Name
lastCalibratedAt- Type
- string
- Description
Timestamp de la ultima calibracion.
Ejemplo de sensor
{
"id": "sensor-001",
"name": "Growcast Pro Temperature",
"type": "TEMPERATURE",
"value": "24.5",
"unit": "°C",
"isConnected": true,
"space": {
"id": "space-001",
"name": "Invernadero A"
},
"thresholds": {
"min": 18,
"max": 30,
"alertEnabled": true
},
"manufacturer": "Growcast",
"lastReadingAt": "2024-09-15T10:30:00Z"
}
Tipos de Sensor (SensorType)
| Tipo | Descripcion | Unidad | Rango Optimo (Vegetativo) | Rango Optimo (Floracion) |
|---|---|---|---|---|
TEMPERATURE | Temperatura ambiente | °C | 22-28°C | 20-26°C |
HUMIDITY | Humedad relativa | % | 50-70% | 40-50% |
VPD | Deficit de Presion de Vapor | kPa | 0.8-1.2 kPa | 1.0-1.5 kPa |
CO2 | Dioxido de carbono | ppm | 800-1200 ppm | 800-1500 ppm |
SOIL_MOISTURE | Humedad del sustrato | % | 60-80% | 50-70% |
PH | Acidez/Alcalinidad | pH | 5.8-6.5 pH | 5.8-6.5 pH |
EC | Conductividad Electrica | mS/cm | 1.0-2.0 mS/cm | 1.5-2.5 mS/cm |
Listar sensores
Parametros de Consulta
- Name
type- Type
- SensorType
- Description
Filtrar por tipo de sensor.
- Name
spaceId- Type
- string
- Description
Filtrar por espacio.
- Name
isConnected- Type
- boolean
- Description
Filtrar por estado de conexion.
- Name
hasAlert- Type
- boolean
- Description
Solo sensores con alertas activas.
- Name
search- Type
- string
- Description
Busqueda por nombre.
- Name
page- Type
- number
- Description
Pagina (default: 1).
- Name
limit- Type
- number
- Description
Limite por pagina (default: 50).
Request
curl -G https://api.cannahub.tech/api/sensors \
-H "Authorization: Bearer {token}" \
-d type=TEMPERATURE \
-d isConnected=true
Response
{
"sensors": [
{
"id": "sensor-001",
"name": "Growcast Pro Temperature",
"type": "TEMPERATURE",
"value": "24.5",
"unit": "°C",
"isConnected": true,
"space": { "id": "space-001", "name": "Invernadero A" }
}
],
"count": 8,
"filters": { "type": "TEMPERATURE", "isConnected": true }
}
Crear sensor
Campos Requeridos
- Name
name- Type
- string
- Description
Nombre del sensor.
- Name
type- Type
- SensorType
- Description
Tipo de sensor.
- Name
unit- Type
- string
- Description
Unidad de medida.
Campos Opcionales
- Name
spaceId- Type
- string
- Description
ID del espacio donde instalar.
- Name
serialNumber- Type
- string
- Description
Numero de serie.
- Name
manufacturer- Type
- string
- Description
Fabricante.
- Name
model- Type
- string
- Description
Modelo del sensor.
- Name
thresholds- Type
- object
- Description
Configuracion de alertas.
Request
curl -X POST https://api.cannahub.tech/api/sensors \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Bluelab Guardian pH",
"type": "PH",
"unit": "pH",
"spaceId": "space-004",
"manufacturer": "Bluelab",
"thresholds": {
"min": 5.5,
"max": 6.8,
"alertEnabled": true
}
}'
Response (201)
{
"sensor": {
"id": "sensor-1698765432100",
"name": "Bluelab Guardian pH",
"type": "PH",
"value": "0",
"unit": "pH",
"isConnected": false,
"space": { "id": "space-004", "name": "Sistema Hidroponico" },
"manufacturer": "Bluelab",
"thresholds": { "min": 5.5, "max": 6.8, "alertEnabled": true },
"createdAt": "2024-09-15T10:30:00Z"
}
}
Obtener sensor
Retorna los detalles de un sensor especifico.
Request
curl https://api.cannahub.tech/api/sensors/sensor-001 \
-H "Authorization: Bearer {token}"
Response
{
"sensor": {
"id": "sensor-001",
"name": "Growcast Pro Temperature",
"type": "TEMPERATURE",
"value": "24.5",
"unit": "°C",
"isConnected": true,
"space": { "id": "space-001", "name": "Invernadero A" },
"lastReadingAt": "2024-09-15T10:30:00Z"
}
}
Actualizar sensor
Actualiza la configuracion de un sensor.
Request
curl -X PATCH https://api.cannahub.tech/api/sensors/sensor-001 \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"name": "Sensor Temperatura Principal",
"thresholds": {
"min": 20,
"max": 28,
"alertEnabled": true
}
}'
Eliminar sensor
Elimina un sensor del sistema.
Request
curl -X DELETE https://api.cannahub.tech/api/sensors/sensor-001 \
-H "Authorization: Bearer {token}"
Response
{
"success": true
}
React Query Hooks
Uso de hooks
import {
useSensorsQuery,
useSensorQuery,
useCreateSensorMutation,
useUpdateSensorMutation,
useDeleteSensorMutation
} from '@/features/Club/Sensors/hooks'
// Listar sensores
const { data: sensors, isLoading } = useSensorsQuery({
type: 'TEMPERATURE',
isConnected: true
})
// Obtener un sensor
const { data: sensor } = useSensorQuery('sensor-001')
// Crear sensor
const createMutation = useCreateSensorMutation()
await createMutation.mutateAsync({
name: 'Nuevo Sensor',
type: 'HUMIDITY',
unit: '%'
})
// Actualizar sensor
const updateMutation = useUpdateSensorMutation()
await updateMutation.mutateAsync({
id: 'sensor-001',
data: { name: 'Sensor Actualizado' }
})
// Eliminar sensor
const deleteMutation = useDeleteSensorMutation()
await deleteMutation.mutateAsync('sensor-001')
Query Keys
sensorKeys = {
all: ['sensors'],
lists: () => ['sensors', 'list'],
list: (filters) => ['sensors', 'list', filters],
details: () => ['sensors', 'detail'],
detail: (id) => ['sensors', 'detail', id],
readings: (id, params) => ['sensors', 'detail', id, 'readings', params]
}