Este contrato cobre o schema e a semantica dos dados expostos pela API JSON publica do LabTelemetry.
| Papel | Sistema | Dado |
|---|---|---|
| Produtor primario | simulate_telemetry ou ingest_telemetry |
TelemetryReading |
| Produtor secundario | quality.py |
TelemetryAlert |
| Consumidor | Dashboard HTML/HTMX | /api/summary/, /api/readings/recent/, /api/alerts/active/ |
| Consumidor | Avaliador tecnico | curl ou cliente HTTP simples |
{
"id": 1,
"sensor_id": 1,
"sensor_name": "Sensor pH #1",
"parameter": "PH",
"timestamp": "2026-06-22T10:30:00Z",
"raw_value": 7.05,
"calibrated_value": 7.05,
"value": 7.05,
"source": "simulator:seed=42",
"status": "NORMAL"
}Contrato:
sensor_id: FK paraTelemetrySensorsensor_name: nome legivel do sensorparameter: enumPH | TURBIDITY | TOCraw_value: valor lido da fontecalibrated_value: valor persistido para avaliacao de qualidadevalue: alias decalibrated_valueno endpoint de leituras recentessource: lineage curto, por exemplosimulator:seed=42,modbus:host:portouopcua:host:portstatus: enumNORMAL | OUT_OF_BOUNDS | DRIFT_WARNING
{
"id": 1,
"timestamp": "2026-06-22T10:30:00Z",
"raw_value": 7.05,
"calibrated_value": 7.05,
"source": "simulator:seed=42",
"status": "NORMAL"
}{
"id": 1,
"name": "Sensor pH #1",
"parameter": "PH",
"status": "HEALTHY",
"calibration_factor": 1.0
}{
"id": 1,
"sensor_id": 1,
"sensor_name": "Sensor pH #1",
"message": "PH fora do limite: 9.20",
"timestamp": "2026-06-22T10:30:05Z"
}| Endpoint | Metodo | Retorno |
|---|---|---|
/api/sensors/ |
GET | Lista de sensores |
/api/readings/recent/?limit=50 |
GET | Leituras recentes agregadas |
/api/sensors/{id}/readings/?limit=100 |
GET | Leituras de um sensor |
/api/alerts/active/ |
GET | Alertas ativos |
/api/summary/ |
GET | Resumo operacional |
/api/health/sources/ |
GET | Estado das fontes por nome |
| Regra | Descricao | Efeito |
|---|---|---|
| Limite inferior | calibrated_value < lower_threshold |
OUT_OF_BOUNDS |
| Limite superior | calibrated_value > upper_threshold |
OUT_OF_BOUNDS |
| Drift | Divergencia relevante entre raw_value e calibrated_value |
DRIFT_WARNING |
| Alerta duplicado | Ja existe alerta ativo equivalente | Nao cria duplicata |
ingest_telemetrydeduplica por(sensor, timestamp)viaUniqueConstraint+bulk_create(ignore_conflicts=True): reprocessar a mesma janela e no-op. Detalhes e limites em replay-idempotency.md.- Dois valores diferentes no mesmo
(sensor, timestamp)colapsam no primeiro; nao ha upsert. - Leituras sao persistidas em lote por ciclo de leitura da fonte.
sourceguarda somente lineage curto, nao payload bruto do protocolo.- Nao ha SLO publico de latencia para a API.
Contrato atual: v1.
Mudancas incompatíveis exigem:
- migration reversivel;
- atualizacao desta documentacao;
- ajuste dos testes de API e ingestao.