Relay AMQP
Entrega contínua das leituras das estações Kitelife Radar, por AMQP 0-9-1.
Use este canal para ingerir o fluxo de muitas estações em um sistema próprio: um banco de séries temporais, um motor de alertas, um pipeline de dados. A fila é sua, é durável, e o que chega enquanto o seu consumidor está fora fica esperando, que é exatamente o que o WebSocket não faz.
Você não publica nada aqui. O relay é unidirecional: a Kitelife escreve, você lê.
Antes de integrar, dimensione
Seção intitulada “Antes de integrar, dimensione”Uma estação publica a cada poucos segundos. Trinta estações produzem algo na ordem de 300 mil mensagens por dia. Se o seu consumidor não acompanhar esse ritmo, a fila cresce até o limite e começa a descartar as mensagens mais antigas. Não é um canal para processar sincronamente contra um banco lento: consuma, grave em lote, confirme.
Se o que você quer é o histórico ou um número a cada tanto, a API REST resolve melhor e sem infraestrutura sua.
Servidores
Seção intitulada “Servidores”| Ambiente | Endereço | Observação |
|---|---|---|
| sandbox | amqps://relay.radar-sandbox.kitelife.com.br:5671/integradores |
Sandbox. TLS obrigatório na 5671; a 5672 em texto claro não é exposta. O vhost /integradores é isolado do tráfego interno da plataforma. |
Consumir leituras
Seção intitulada “Consumir leituras”Você recebe.
Confirmação manual, depois de persistir.
A entrega é ao menos uma vez e o message_id é determinístico, derivado
de stationId e observedAt: a mesma leitura sempre produz o mesmo
identificador. Deduplique por ele, ou por uma chave única em
(station_id, observed_at) no seu banco.
Dentro de uma estação as mensagens saem em ordem cronológica. Entre estações não há ordenação.
Mensagem rejeitada sem reenfileiramento vai para {sua-fila}.dlq, que
retém por 7 dias.
Consumir mudanças de estado
Seção intitulada “Consumir mudanças de estado”Você recebe.
Mudanças de estado operacional das estações vinculadas à sua fila.
É por aqui que se distingue “a estação caiu” de “meu consumidor travou”. sem este evento, os dois casos são indistinguíveis de dentro do consumidor: mensagens que simplesmente param de chegar.
O volume é baixo, algumas mensagens por dia. Processe na mesma fila e no
mesmo laço das leituras, discriminando pelo cabeçalho messageType.
Mensagens
Seção intitulada “Mensagens”reading
Seção intitulada “reading”O corpo é exatamente o objeto Reading da API REST: mesmo formato,
mesmas unidades, mesmos campos omitidos quando a estação não os reporta.
Vento em nós.
| Campo | Tipo | Descrição |
|---|---|---|
stationId * |
string | Identificador público e estável da estação. É desvinculado do hardware: trocar o equipamento de uma estação não altera este valor. |
observedAt * |
string (date-time) | Instante da medição, sempre UTC com sufixo Z. É a chave temporal de toda série histórica e, junto de stationId, a chave de deduplicação. |
timeSource |
station · reconstructed · unanchored |
Confiabilidade do horário em observedAt. |
receivedAt |
string (date-time) | Instante em que a plataforma recebeu a leitura. Difere de observedAt quando a estação ficou sem link e retransmitiu depois. Serve para medir atraso, nunca para ordenar a série. |
windSpeedKnots * |
number | Velocidade média do vento, em nós. Medida pelo sensor no intervalo de amostragem, não é a média móvel de 10 minutos. Para essa, consulte a rota de histórico com resolution=10m. |
windGustKnots |
number | Maior rajada observada no intervalo de amostragem, em nós. Reportada pelo próprio sensor. Ausente quando a estação não reporta esta grandeza; ver Station.measurements. |
windDirectionDegrees * |
integer | Direção de onde o vento sopra, em graus verdadeiros. 0 = norte, 90 = leste. Não há correção de alinhamento de mastro aplicada. |
temperatureCelsius |
number | Temperatura do ar, em graus Celsius. Ausente quando a estação não reporta esta grandeza; ver Station.measurements. |
humidityPercent |
integer | Umidade relativa do ar, em porcentagem. Ausente quando a estação não reporta esta grandeza; ver Station.measurements. |
pressureAbsoluteHpa |
number | Pressão atmosférica medida na altitude da estação, em hectopascais. NÃO é reduzida ao nível do mar. Duas estações em altitudes diferentes mostram valores diferentes sob o mesmo tempo, e a diferença é altitude, não descalibração. Para comparar estações entre si, use pressureSeaLevelHpa. |
pressureSeaLevelHpa |
number | Pressão reduzida ao nível do mar (QNH), em hectopascais. É o valor comparável entre estações e o que sustenta leitura de tendência barométrica ao longo da costa. Derivado pela plataforma a partir da pressão absoluta, da altitude e da temperatura da estação: ausente quando a altitude da estação não é conhecida. |
rainRateMmPerHour |
number | Taxa de precipitação instantânea, em milímetros por hora. É uma taxa, não um acumulado: integrá-la ao longo do tempo é responsabilidade de quem consome. Ausente quando a estação não reporta esta grandeza; ver Station.measurements. |
uvIndex |
number | Índice UV, adimensional. Ausente quando a estação não reporta esta grandeza; ver Station.measurements. |
Campos marcados com * são obrigatórios.
{ "stationId": "stn_barra-da-tijuca-01", "observedAt": "2026-08-26T17:42:08Z", "timeSource": "station", "receivedAt": "2026-08-26T17:42:09Z", "windSpeedKnots": 18.2, "windGustKnots": 24.6, "windDirectionDegrees": 118, "temperatureCelsius": 27.4, "humidityPercent": 71, "pressureAbsoluteHpa": 1012.4, "pressureSeaLevelHpa": 1012.9, "rainRateMmPerHour": 0, "uvIndex": 3.1}station.status
Seção intitulada “station.status”| Campo | Tipo | Descrição |
|---|---|---|
stationId * |
string | |
status * |
online · offline · degraded · maintenance · decommissioned |
|
changedAt * |
string (date-time) | |
previousStatus |
online · offline · degraded · maintenance · decommissioned |
Campos marcados com * são obrigatórios.
{ "stationId": "stn_cabo-frio-01", "status": "offline", "previousStatus": "online", "changedAt": "2026-08-26T18:03:11Z"}