;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Com tecnologia nacional, startup previu temporais em SP três dias antes

Profissionais da Pluvi.On regulam estação medidora no Sumarezinho, em SP - RENATO STOCKLER/PLUVION
Profissionais da Pluvi.On regulam estação medidora no Sumarezinho, em SP Imagem: RENATO STOCKLER/PLUVION

Nathália Duarte

Colaboração para Ecoa

13/02/2020 04h00

Era sexta-feira, 7 de fevereiro, quando moradores do Jardim Pantanal, na zona leste de São Paulo, foram avisados de que altos volumes de chuva atingiriam a cidade. E a previsão se confirmou: entre domingo (9) e segunda (10), a capital paulista teve o maior valor acumulado de chuva para fevereiro em 37 anos, de acordo com o Inmet (Instituto Nacional de Meteorologia).

A comunidade no extremo leste sofre com perdas causadas por enchentes ano após ano, e por isso foi escolhida para testar alertas de chuva instalados pela startup Pluvi.On, uma das finalistas do Prêmio Empreendedor Social de Futuro 2019.

"Esses três dias foram fundamentais para que os moradores se preparassem, trabalhassem para evitar danos na comunidade. Em maio do ano ado, por exemplo, antecipamos para a a de uma rodovia um temporal que os levou a fechar a via antes da chuva. Ocorreram dois escorregamentos, mas não houve feridos. A precisão e antecedência dos alertas é fundamental porque salva vidas", afirma Diogo Tolezano, engenheiro à frente da Pluvi.On.

A empresa, não por acaso criada após a crise hídrica de São Paulo, tem hoje 40 estações distribuídas pela cidade, e espera chegar a 400 para que o sistema de alertas esteja disponível a todos os paulistanos já no próximo verão. "A ideia é que consigamos, até o ano que vem, distribuir alertas gratuitamente em plataformas que já estão nos celulares das pessoas", explica Diogo.

Diego, que já perdeu um carro após uma enxurrada, defende a urgência da distribuição de avisos que possam evitar tragédias - Marco Torelli/Pluvi.On - Marco Torelli/Pluvi.On
Diego defende a urgência da distribuição de avisos
Imagem: Marco Torelli/Pluvi.On

Ele mesmo, que já perdeu um carro após uma enxurrada, defende a urgência da distribuição de avisos que possam evitar tragédias e prejuízos a quem já tem tão pouco. "Em 2005, eu estava saindo do meu trabalho na zona sul de São Paulo depois de um dia inteiro de muita chuva e, parado no trânsito, vi a água invadir meu carro. Perdi o carro. E percebi o quanto a gente se sente impotente em uma situação como essa. Isso porque minha história é uma história de privilégio. Conhecemos pessoas nessa jornada que perderam tudo. Algumas, como a Dona Rosa, perderam inclusive memórias, fotos, álbuns de família, coisas que são impossíveis de recuperar. Isso nos mostra a urgência de trabalhar para disponibilizar alertas que possam salvar histórias."

Tecnologia nacional para previsões precisas

A possibilidade de enviar alertas é uma consequência da precisão de previsões, construída graças à pulverização das estações meteorológicas e à qualidade da coleta dos dados.

"Logo no início da nossa operação, em 2016, identificamos a falta de dados meteorológicos. O modelo de previsão do tempo é baseado em equações, então quanto mais dados tivermos, melhores, mais assertivas serão as respostas. Essa lacuna que percebemos nada tem a ver com a capacidade dos nossos institutos, que são referência no mundo. A questão é que faltam sensores, falta pulverização e falta manutenção desses equipamentos em um país continental como o Brasil", explica o engenheiro.

A solução encontrada pela startup foi então garantir um grande número de estações pelo país, mas a decisão esbarrou no alto custo dos equipamentos. "Uma estação básica importada custa cerca R$ 25 mil, o que nos impedia de pensar nisso em larga escala. Nosso desejo era ter quase uma estação em cada quarteirão, então o valor era um impeditivo. Foi aí que decidimos desenvolver uma estação no Brasil."

O trabalho de desenvolvimento de uma estação com tecnologia 100% brasileira levou cerca de dois anos para ser concluído. No final de 2018, o equipamento foi lançado, com um custo entre 5 e 10 vezes menor do que o importado, em parceria com o QD (Centro de Pesquisa e Desenvolvimento em Telecomunicações), o Ministério da Ciência e Tecnologia e apoiadores da indústria de telecomunicações.

A Pluvion cria soluções meteorológicas de baixo custos - RENATO STOCKLER/PLUVION - RENATO STOCKLER/PLUVION
A Pluvion cria soluções meteorológicas de baixo custos
Imagem: RENATO STOCKLER/PLUVION
Em todo o país, a Pluvi.On tem hoje cerca de 300 estações, em dez estados. Os equipamentos medem chuva, temperatura e umidade do ar, direção e velocidade do vento, tudo em tempo real. A empresa tem dez funcionários, entre engenheiros, designers, cientistas de dados, programadores e meteorologistas, mas conta com uma extensa rede de operadores em campo, para garantir o funcionamento do sistema.

O serviço dos alertas e previsão é procurado principalmente por empresas de logística, transportes, agricultura, varejo e construção civil, os mais expostos aos impactos do tempo. Parte do código usado para desenvolver o sistema foi aberto, e pelo menos três iniciativas já utilizaram os dados da Pluvi.On para construir outras soluções no setor. A empresa também pretende estruturar, no próximo ano, um modelo para disponibilizar seus dados para pesquisadores.

Outras iniciativas

A Defesa Civil de São Paulo já envia, desde 2017, alertas para riscos de desastres via SMS. O cadastro é gratuito, e pode ser feito através do envio do seu CEP para o número 40199, via mensagem de texto. De acordo com o órgão, o envio do alerta é feito com até duas horas de antecedência.

O CGE (Centro de Gerenciamento de Emergências Climáticas), da Prefeitura de São Paulo, também publica alertas em seu site e redes sociais. Nas publicações é possível acompanhar a previsão do tempo e pontos de alagamento ativos pela cidade. No caso do CGE, os alertas podem ser emitidos até três dias antes de fortes chuvas, mas é possível também que sejam publicados entre 2 horas e 30 minutos, a depender do evento e sua previsibilidade.

Outros órgãos e empresas que trabalham com previsão do tempo também emitem avisos de atenção e de risco iminente. É o caso, por exemplo, do tec/Inpe (Centro de Previsão de Tempo e Estudos Climáticos), que dispõe as informações diariamente em seu site, em forma de mapa, e com uma antecedência que pode variar entre 72 horas e 24 horas.

O Climatempo também disponibiliza alertas em seu site, ou via celular, para usuários do seu aplicativo, que é gratuito. De acordo com a meteorologista chefe, Bianca Lobo, a equipe é capaz de prever eventos com cinco dias de antecedência, com uma assertividade entre 80% e 90%. Nestes casos, para evitar pânico, a previsão é publicada no site. Os alarmes via aplicativo são disparados com 12 horas de antecedência para sistemas de grande escala. Para pancadas típicas de verão, o alerta é feito com uma hora de antecedência.