Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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).