Pular para o conteúdo

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ê.

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.

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.

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.

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.

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
}
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"
}