Pular para o conteúdo

Endpoints de Pontos de Controle

Pontos de Controle são dispositivos IoT (ESP32) que gerenciam a aeração de múltiplos viveiros. Eles utilizam um sistema de Shadow State para sincronização:

  • target_status: Estado desejado comandado pelo App
  • current_status: Estado real reportado pelo ESP32

Todos os endpoints requerem autenticação.

Authorization: Bearer <token>

{
"id": "550e8400-e29b-41d4-a716-446655440000",
"farm_id": "farm-uuid",
"cod": "CP-001",
"target_status": "ON",
"current_status": "OFF",
"device_id": "AERA_ESP32_001",
"consumption": 1.5,
"last_command_at": "2025-11-21T15:45:00Z",
"last_heartbeat": "2025-11-21T15:44:30Z",
"created_at": "2025-11-21T10:30:00Z",
"updated_at": "2025-11-21T15:45:00Z"
}
CampoTipoDescrição
idUUIDIdentificador do ponto de controle
farm_idUUIDFazenda associada
codstringCódigo único do ponto de controle
target_statusenumEstado desejado (ON / OFF)
current_statusenumEstado real do dispositivo (ON / OFF)
device_idstringIdentificador do dispositivo ESP32
consumptionfloatConsumo de energia atual
last_command_atdatetimeTimestamp do último comando
last_heartbeatdatetimeTimestamp do último heartbeat do ESP32
created_atdatetimeData de criação
updated_atdatetimeData da última atualização

Cria um novo ponto de controle.

POST /api/v1/control-points/
Authorization: Bearer <token>
Content-Type: application/json
{
"farm_id": "farm-uuid",
"cod": "CP-001",
"target_status": "OFF",
"device_id": "AERA_ESP32_001"
}
CampoTipoObrigatórioDescrição
farm_idUUIDID da fazenda
codstringCódigo único do ponto de controle
target_statusenumStatus inicial (ON / OFF)
device_idstringIdentificador do dispositivo ESP32
{
"id": "cp-uuid",
"farm_id": "farm-uuid",
"cod": "CP-001",
"target_status": "OFF",
"current_status": null,
"device_id": "AERA_ESP32_001",
"created_at": "2025-11-21T10:30:00Z",
"updated_at": null
}
StatusDetalhe
400Erro de validação

Lista todos os pontos de controle do usuário atual.

GET /api/v1/control-points/
Authorization: Bearer <token>
[
{
"id": "cp-uuid",
"farm_id": "farm-uuid",
"cod": "CP-001",
"target_status": "ON",
"current_status": "ON",
"device_id": "AERA_ESP32_001",
"last_heartbeat": "2025-11-21T15:44:30Z"
}
]

Obtém detalhes de um ponto de controle.

ParâmetroTipoDescrição
control_point_idUUIDID do ponto de controle
GET /api/v1/control-points/cp-uuid
Authorization: Bearer <token>
{
"id": "cp-uuid",
"farm_id": "farm-uuid",
"cod": "CP-001",
"target_status": "ON",
"current_status": "OFF",
"device_id": "AERA_ESP32_001",
"consumption": 1.5,
"last_command_at": "2025-11-21T15:45:00Z",
"last_heartbeat": "2025-11-21T15:44:30Z",
"created_at": "2025-11-21T10:30:00Z",
"updated_at": "2025-11-21T15:45:00Z"
}
StatusDetalhe
404Ponto de controle não encontrado

Atualiza um ponto de controle.

PUT /api/v1/control-points/cp-uuid
Authorization: Bearer <token>
Content-Type: application/json
{
"cod": "CP-001-UPDATED",
"device_id": "AERA_ESP32_002"
}

Todos os campos são opcionais:

CampoTipoDescrição
codstringNovo código
device_idstringNovo ID do dispositivo

Retorna o objeto do ponto de controle atualizado.

StatusDetalhe
404Ponto de controle não encontrado

Exclui um ponto de controle.

DELETE /api/v1/control-points/cp-uuid
Authorization: Bearer <token>

Sem corpo de resposta.

StatusDetalhe
404Ponto de controle não encontrado

Liga o ponto de controle (define target_status como ON).

POST /api/v1/control-points/cp-uuid/turn-on
Authorization: Bearer <token>
{
"id": "cp-uuid",
"target_status": "ON",
"current_status": "OFF",
"last_command_at": "2025-11-21T15:45:00Z"
}
StatusDetalhe
404Ponto de controle não encontrado

Desliga o ponto de controle (define target_status como OFF).

POST /api/v1/control-points/cp-uuid/turn-off
Authorization: Bearer <token>
{
"id": "cp-uuid",
"target_status": "OFF",
"current_status": "ON",
"last_command_at": "2025-11-21T15:46:00Z"
}
StatusDetalhe
404Ponto de controle não encontrado

Recebe heartbeat do dispositivo ESP32 e retorna o status desejado.

POST /api/v1/devices/heartbeat
Content-Type: application/json
{
"device_id": "AERA_ESP32_001",
"current_status": "OFF"
}
CampoTipoObrigatórioDescrição
device_idstringIdentificador único do ESP32
current_statusstringEstado atual do dispositivo (ON / OFF)
{
"target_status": "ON"
}
StatusDetalhe
404Control point com este device_id não encontrado

┌─────────────┐ 1. Heartbeat ┌─────────────┐
│ ESP32 │ ───────────────►│ Backend │
│ (Campo) │ current_status │ (FastAPI) │
│ │◄─────────────── │ │
└─────────────┘ target_status └─────────────┘
│ │
│ 2. Compara estados │
│ target ≠ current? │
│ │
▼ │
┌─────────────┐ │
│ Executa │ │
│ Comando │ │
└─────────────┘ │
│ │
│ 3. Próximo heartbeat │
│ confirma execução │
└──────────────────────────────┘