尚未检测到更新。GitHub 发布版本后会显示在这里。
Monitor em tempo real dos rios Paraitinga e Paraibuna (São Luiz do Paraitinga / Natividade da Serra - SP) com dados da ANA
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Painéis em tempo real do nível e da chuva de cada rio, com histórico, avisos e modo TV. Um mesmo código atende várias bacias; cada uma tem sua pasta com configuração e histórico.
| Bacia | Cidade de referência | Painel |
|---|---|---|
| Rio Paraitinga (e afluentes) | São Luiz do Paraitinga | https://dimasdecampos.github.io/monitora-rio/paraitinga/ |
| Rio Paraibuna | Natividade da Serra | https://dimasdecampos.github.io/monitora-rio/paraibuna/ |
| Rio Ribeira de Iguape | Eldorado | https://dimasdecampos.github.io/monitora-rio/ribeira/ (fora da página inicial) |
Uma bacia com "oculta": true em public/bacias.json tem painel publicado, histórico e avisos
como as outras, mas não aparece na página inicial nem nos atalhos do app (só por link direto).
Página inicial: https://dimasdecampos.github.io/monitora-rio/
Idealização e criação: Dimas de Campos. Desenvolvido em parceria com IA (Claude, da Anthropic).
⚠️ Aviso importante. Este é um projeto independente. Os dados, cotas, impactos e previsões NÃO foram validados pela Defesa Civil nem por nenhum órgão oficial. As informações vêm de fontes públicas e de cálculos próprios, podem conter erros, atrasos ou falhas de transmissão. Qualquer uso é de responsabilidade própria. Em situação de risco, siga sempre as orientações da Defesa Civil (199) e dos Bombeiros (193).
Cada bacia é uma pasta em public/ listada em public/bacias.json. O painel e o modo TV
são os mesmos para todas (pasta modelos/); o que muda é o config.json da bacia.
Cartões sem dados para a bacia (previsão, mapa do que alaga, represamento) somem sozinhos.
O Paraitinga nasce na Serra da Bocaina (Areias); o Paraibuna, no sul de Cunha (Serra do Mar). Os dois se encontram na represa de Paraibuna e formam o Paraíba do Sul.
| Paraitinga | Paraibuna | |
|---|---|---|
| Régua principal | Passarela (SP Águas), cotas oficiais | Fazenda Palmeiras, Natividade (ANA), cotas provisórias |
| Rio acima | Cunha, Lagoinha ×2, Estrada do Ribeira (3 a 20 h) | Ponte Alta, na serra (~4 h, de 3 a 7 h) |
| Outras réguas | ANA e CESP na cidade, Jacuí, Chapéu ×2 | — (a represa fica muito abaixo de Natividade e não entra) |
| Previsão de cheias | sim (modelo próprio) | sim (com Ponte Alta; bom só para poucas horas) |
| O que alaga / memória | sim | ainda não |
| Chuva na bacia (regiões) | Cunha, Lagoinha, cidade, Chapéu | Cabeceiras em Cunha (só previsão), serra, Natividade |
| Chuva × subida do rio | sim (ERA5 desde 2018) | sim (ERA5 desde 2015) |
| Modo TV: chuva prevista | Serra da Bocaina e São Luiz | Cunha e Natividade |
| Histórico | desde 2018 (Passarela) | desde 2015 (Natividade) |
Para adicionar um rio:
public/<id>/config.json (copie o do Paraibuna, que é o mais simples). Campos
principais: id (igual ao nome da pasta), rio, cidade, principal (régua de
referência), reguas_cidade, rios[].estacoes[] (código, fonte spaguas ou ana,
id_nivel/id_chuva da SP Águas, coordenadas, cotas_cm, curto, rio_acima com
ordem e horas_ate_cidade) e regioes_chuva. Opcionais: reserva, conversoes,
previsao, impactos, represamento, estatisticas, textos, avisos,
pluviometros (estações só de chuva, com id_chuva), pontos_chuva (lugares sem
pluviômetro, com codigo pt-…: uma região de chuva com esse código mostra só a
previsão), tv_chuva (até 2 pontos com a chuva prevista no modo TV) e chuva_era5.public/bacias.json.python scripts/coletar.py --bacia <id> --desde 2024-01,
a chuva estimada nos pontos (python scripts/baixar_chuva_era5.py --bacia <id>)
e depois python scripts/estatisticas.py --bacia <id>.python scripts/montar_site.py (aponta erros no config) e
python server.py. Ao enviar ao GitHub, o site e os avisos passam a incluir a bacia.Os ids das réguas da SP Águas estão em https://cth.daee.sp.gov.br/sibh/api/v2/stations
(campo id; o station_type diz se é régua ou pluviômetro).
Uma única página, pensada primeiro para o celular:
| Parte | O que mostra |
|---|---|
| Nível agora | Última leitura da régua escolhida, situação (normal, atenção, alerta, emergência, transbordamento), tendência em cm/h e comparação com o normal da época |
| Números rápidos | Chuva 24 h e 7 dias, vazão, pico do ano, dias acima da atenção |
| Gráfico "Últimos dias" | Nível medido + linha de previsão de 7 dias com faixa de 8 em 10 chances, nível típico da época, chuva medida e prevista (na régua ou na bacia, por região); zoom e rolagem pela barra de navegação |
| Gráfico "Comparar anos" | Um ano por linha no período escolhido (ano, chuvoso, verão, hidrológico), mediana e faixa dos anos completos |
| Rio acima | Réguas de Cunha → Lagoinha → Estrada do Ribeira → cidade, com tempo típico de chegada da água e indicador de represamento pelo Ribeirão do Chapéu |
| Previsão 48 h | Chance de chegar a cada cota oficial, pico provável e chuva prevista por dia |
| O que alaga | Escada de níveis com impactos registrados e mapa do centro |
| Ano a ano, maiores cheias, mapa mensal | Histórico por ano e mês |
| Visões extras (fechadas) | Chuva × subida do rio, quando o rio enche, tempo para baixar, permanência, memória das cheias |
| Situação das fontes | Se cada fonte está transmitindo |
Modo TV (tv.html): tela cheia para televisão ou monitor (Defesa Civil, prefeitura,
comércio). Mostra o nível em letras grandes com a cor da situação, a régua com as cotas,
as últimas 48 h, as réguas rio acima e a chuva medida e prevista. Atualiza sozinho a cada
5 min, mantém a tela acesa e esconde o cursor. Tecla F liga a tela cheia;
tv.html?tema=light usa o tema claro.
Cartões menos usados começam fechados para economizar espaço; o navegador lembra o que cada visitante abriu.
| Fonte | O que vem | Frequência | Acesso |
|---|---|---|---|
| SP Águas — SIBH | Nível e chuva das réguas da SP Águas (Passarela, Estrada do Ribeira, Lagoinha ×2, Cunha, Rio Jacuí, Ribeirão do Chapéu ×2, Ponte Alta) e cotas oficiais | 10 min | API pública, direto no navegador (máx. 10 estações por chamada) |
| ANA — telemetria | Réguas da cidade (58040000), CESP (58041000) e Fazenda Palmeiras (58068000) | 15 min | Web service público, direto no navegador |
| Open-Meteo | Chuva prevista (8 dias), 31 cenários GFS, chuva histórica ERA5 e previsões arquivadas | horária | API pública |
| OpenStreetMap | Mapa e coordenadas das ruas | — | Tiles públicos |
| Relatório SGB/CPRM 2022 e notícias | Cheias históricas e impactos | — | Links no painel |
A estação padrão é a Passarela (SP Águas), no centro, que tem cotas oficiais.
Definição oficial, segundo o Manual de Operação das Salas de Situação do Estado de São Paulo (ANA/ProGestão):
| Situação | Significado oficial | Cor |
|---|---|---|
| Normal | Abaixo da cota de atenção | verde |
| Atenção | Risco significativo de evento adverso, mas ainda incerto | amarelo |
| Alerta | Perigo iminente ou previsível a curto prazo; Defesa Civil de prontidão | laranja |
| Emergência | Situação crítica que demanda ação imediata | vermelho |
| Transbordamento (extravasamento) | Rio acima das margens, transbordando | vermelho escuro |
Cotas usadas (em metros, na régua de cada estação):
| Estação | Atenção | Alerta | Emergência | Transb. | Origem |
|---|---|---|---|---|---|
| Passarela (SP Águas) | 1,92 | 2,32 | 2,72 | 3,12 | Oficiais (SIBH) |
| Régua da ANA na cidade | 2,73 | 3,16 | 4,00 | 4,41 | Atenção e alerta oficiais (SIBH); emergência e transbordamento convertidos da Passarela |
| Régua da CESP | 3,04 | 3,48 | 3,91 | 4,35 | Convertidas da Passarela (aproximadas) |
| Lagoinha, Cunha, Rio Jacuí, Chapéu, Ponte Alta | — | — | — | — | Oficiais (SIBH), ver public/<bacia>/config.json |
| Fazenda Palmeiras (ANA) | 2,50 | 3,50 | 4,50 | — | Provisórias, pelo histórico |
As duas tabelas oficiais da cidade não batem entre si: a atenção da régua da ANA (2,73 m) equivale a ~1,48 m na Passarela, cuja atenção oficial é 1,92 m. Confirme com a Defesa Civil qual tabela é usada nas sirenes.
Outras regras de classificação:
As réguas da Passarela, da ANA e da CESP medem o mesmo trecho do rio com zeros diferentes:
Quando uma régua da cidade fica sem transmitir, os dias que faltam no histórico são completados com a outra convertida (Passarela ⇄ ANA) e marcados como "completados". Exemplo: a Passarela parou de 10/09 a 15/09/2026 e o preenchimento revelou uma cheia (~2,55 m em 12/09). O gráfico de "Últimos dias" (ao vivo) não é preenchido.
Descartados automaticamente (coletor, painel ao vivo e robô de avisos):
Anos com falhas aparecem como parciais e podem subestimar picos.
Chance de chegar a cada cota em 48 h — regressão logística na régua da Passarela
(scripts/modelo_cheias/passarela.py, exportar_passarela.py):
scripts/modelo_cheias/baixar_pluviometro.py;Paraibuna: previsão de 48 h com a régua de Ponte Alta. O mesmo método, treinado para
Natividade (scripts/modelo_cheias/treinar_bacia.py --bacia paraibuna), com a subida de
Ponte Alta em 6 h e 12 h (histórico dela desde dez/2015). Teste fev/2024–out/2026 com a
previsão do tempo real: das 20 vezes em que Natividade passou da atenção, avisou 13 com
3 h de antecedência, 8 com 6 h, 5 com 12 h e 5 com 24 h; 32 dos 58 dias com aviso não
tiveram cheia. Só com nível e chuva eram 7, 6, 7 e 8, com 56 de 76 dias sem cheia.
O ganho é nas primeiras horas (a água leva de 4 a 7 h da serra até Natividade); com mais
antecedência tudo depende da chuva prevista, que quase não vê os temporais da Serra do
Mar (em 21–22/02/2026, 118 mm no pluviômetro de Natividade e ~11 mm na ERA5).
Testados em out/2026, sem ganho que valesse: chuva separada por região, pluviômetros
(Natividade e Ubatuba) no lugar da ERA5 e chuva estimada e prevista em Ubatuba e Paraty.
Linha de previsão (7 dias) — uma regressão por prazo (6 h a 7 dias) para a variação do nível; a faixa azul é o intervalo de 8 em 10 chances, tirado dos erros do próprio modelo. Erro médio com previsão real: 10 cm em 1 dia, 15 cm em 2 dias, 21 cm em 7 dias ("fica como está": 13, 20 e 29 cm). A faixa acertou 81–87% das vezes. Não acerta bem o tamanho de subidas grandes.
Depois de 7 dias o gráfico não prevê: previsão de chuva para semanas ou meses não é confiável o bastante. O gráfico vai só até o fim da previsão.
Tempo típico até a água chegar à Passarela (correlação das subidas, 2024–2026): Estrada do Ribeira 3 h, Lagoinha–Barro Vermelho 9 h, Lagoinha–Jusante do Jacuí 11 h, Cunha ~20 h. O cartão avisa quando alguma régua sobe ≥ 10 cm em 3 h.
Represamento pelo Ribeirão do Chapéu (deságua logo abaixo da cidade; agravou 1996 e 2010): alto quando o Chapéu passa da atenção e a Passarela está em alerta; atenção quando o Chapéu passa da atenção ou sobe rápido com a cidade alta.
Chuva na bacia (botão no gráfico): barras empilhadas por região — Cunha (Est. de Cunha e Rio Jacuí), Lagoinha (2 réguas), Perto da cidade (Estrada do Ribeira e Passarela) e Ribeirão do Chapéu (2 réguas). Cada região é a média dos seus pluviômetros (SP Águas) e a barra é a soma das regiões; no futuro, previsão Open-Meteo nos mesmos pontos. A legenda (recolhida) lista as regiões da que mais choveu para a que menos; tocar liga ou desliga a região.
public/paraitinga/impactos.json: níveis da Passarela ligados a impactos registrados (3,95 m:
ruas da beira do rio, 2021; ~4,60 m: ruas do centro, 2024 — aproximado; 5,36 m: Praça
da Matriz, 2022), pontos no mapa e linha do tempo das cheias desde 1863.public/<bacia>/estatisticas.json (gerado por scripts/estatisticas.py, para a régua
principal de cada bacia): frequência de cheias por mês, tempo para baixar depois do pico
e, no Paraitinga, chuva × subida do rio por umidade do solo.monitora_push no Supabase, projeto estoura; SQL em scripts/supabase/monitora_push.sql)
e o robô manda a notificação mesmo com o app fechado. Precisa dos segredos VAPID_PRIVATE_KEY
e MONITORA_PUSH_TOKEN no GitHub. Sem suporte a push (ex.: iPhone sem o app instalado), o
painel avisa enquanto estiver aberto. Para desligar, use o rodapé.scripts/alertas.py roda a cada ~10 min (.github/workflows/alertas.yml)
para todas as bacias. Avisa quando a régua principal muda de cota, a água sobe ≥ 20 cm
em 3 h rio acima (com tempo de chegada), há risco de represamento ou a previsão passa de
30%. Cada tipo de aviso se repete no máximo a cada 6–12 h. Sem nenhum canal configurado,
roda em modo de teste e só registra as mensagens.
Um aviso só conta como dado quando chega por pelo menos um canal: se todos falharem, ele
é tentado de novo na próxima rodada, e a rodada fica vermelha no GitHub (que manda e-mail).
No Telegram, as mensagens vão em HTML (nomes com _ ou * não quebram o envio).atraso_max_horas + 1 h) em duas rodadas seguidas, sai um aviso "régua sem
dados" com a última leitura. Ele se repete a cada 24 h, ou a cada 6 h se o rio estava em
alguma cota. Quando a régua volta, sai "voltou a transmitir".https://hc-ping.com/...)
para o segredo HEALTHCHECK_URL no GitHub. A cada rodada o robô faz um ping; se alguma
bacia der erro, o ping vai para /fail.NTFY_TOPIC com um nome difícil de adivinhar (ex.:
rio-024906fe); cada bacia avisa no tópico <NTFY_TOPIC>-<bacia> (ex.:
rio-024906fe-paraitinga). Instale o app ntfy, toque em + e assine os tópicos
das bacias que quiser. Quem souber o nome do tópico recebe os avisos.TELEGRAM_TOKEN; no da bacia,
(o segundo
mostra o botão do canal no painel).| Workflow | Quando | O que faz |
|---|---|---|
site.yml | todo dia às 06:20 e a cada push | baixa o mês atual e o anterior de todas as bacias (ANA e SP Águas), gera os resumos diários (com preenchimento), atualiza as estatísticas, monta o painel em cada bacia e publica no GitHub Pages |
alertas.yml | a cada ~10 min | verifica todas as bacias e envia os avisos (ntfy, Telegram, WhatsApp) |
O GitHub pode atrasar tarefas agendadas em alguns minutos.
modelos/ painel e modo TV (iguais para todas as bacias)
painel.html painel (HTML + CSS + JS, sem build)
tv.html modo TV
manifest.webmanifest base do app instalável
public/ site publicado no GitHub Pages
index.html página inicial: escolhe o rio
manifest.webmanifest app da Play Store (atalhos atualizados por montar_site.py)
privacidade.html política de privacidade (site e app)
bacias.json lista das bacias
sw.js, icones/ app instalável (vale para todas)
<bacia>/ paraitinga/, paraibuna/ …
config.json estações, cotas, conversões, regiões de chuva, o que a bacia tem
historico/<estação>/ AAAA-MM.json (leituras) e diario.json (resumo diário)
estatisticas.json sazonalidade, recessão (e chuva × subida, se houver)
modelo_cheias.json só Paraitinga: pesos da previsão e resultados dos testes
impactos.json só Paraitinga: o que alaga, mapa, memória das cheias
index.html, tv.html, manifest.webmanifest gerados por montar_site.py (fora do git)
scripts/
comum.py lista de bacias, configuração, consulta à ANA
coletar.py coleta ANA + SP Águas, filtros, resumo diário e preenchimento
estatisticas.py gera estatisticas.json de cada bacia
alertas.py robô de avisos (ntfy, Telegram, WhatsApp)
montar_site.py copia os modelos para cada bacia e confere as configurações
baixar_chuva_era5.py chuva estimada (ERA5) nos pontos de uma bacia, para chuva × subida
modelo_cheias/ previsão do Paraitinga: chuva (ERA5, previsões arquivadas), treino e testes
android/ gera o app Android (app.json + gerar.js), usado pelo workflow app-android.yml
playstore/ publicar na Play Store: passo a passo (LEIAME.md), textos, imagens
dominio/ arquivos do repositório dimasdecampos.github.io (verificação do app)
server.py servidor local para testes (serve os modelos direto)
python server.py # site em http://localhost:8000
python scripts/coletar.py # todas as bacias: mês atual e anterior
python scripts/coletar.py --bacia paraitinga --desde 2018-01 --estacao sp664 # recarrega uma estação
python scripts/estatisticas.py # recalcula as estatísticas
python scripts/montar_site.py # monta as páginas e confere os config.json
python scripts/alertas.py --bacia paraibuna # testa os avisos (sem canais: só mostra)
Para refazer os modelos, siga a ordem descrita em scripts/modelo_cheias/exportar.py
e depois rode baixar_pluviometro.py (uma vez) e exportar_passarela.py (~15 min).
Só usa a biblioteca padrão do Python.
Os dados não foram validados pela Defesa Civil. Qualquer uso é de responsabilidade própria.
config.json"avisos": {"telegram_chat": "@canal", "telegram": "https://t.me/canal"}apikey.CALLMEBOT_PHONE
(ex.: +5512999999999) e CALLMEBOT_KEY.manifest.webmanifest (gerado) e o public/sw.js
serve a todas (funciona sem internet com a última leitura guardada).