>> SERVIDORES INPE
- PCD's NATAL - SERVIDOR => 200.137.4.175
                usuario => ddpi
                senha  =>  mtv.0789
 
- CPTEC => ftp1.cptec.inpe.br
                usuario => anonymous
                senha  =>  <email>

      pasta : smar/produtos/prec_eta20km_BIN
            Arq.: Prec20km%A%M%d%h.bin
            Controle : Prec20km.ctl
            Param.: 1000 PFlutuante L end  31 360 4 4

      pasta : smar/produtos/prec_eta5km_BIN
            Arq.: Prec5km%A%M%d%h.bin
            Controle : Prec5km.ctl
            Param.: 1000 PFlutuante L end  73 60 4 4


- DSA => 150.163.133.245
                usuario => serrmar
                senha  =>  08.235sm


I - REGRAS COLETA PCD

-- ------------- REGRA 1----------------
-- Calculo do diferença de leituras do pluviometro e
-- taxa de precipitacao.

if linhas_anteriores[-1] == nil then
     return nil
end

local pluvioAnterior = linhas_anteriores[-1].pluvio
local pluvioProximo = proxima_linha.pluvio
local pluvio = pluvioProximo - pluvioAnterior

local tsAnterior = linhas_anteriores[-1].timestamp
local tsProximo = proxima_linha.timestamp
local diferencaTempo = tsProximo - tsAnterior

local txpluvio = pluvio /(diferencaTempo.em_minutos)

return {pluvio = pluvio, txpluvio = txpluvio}
-- ---------------- FIM ----------------------------




-- ------------- REGRA 2 ---------------------------
if proxima_linha.pluvio == nil then
	-- A PCD nao informou "pluvio" desta vez. Nao vamos fazer a coleta.
	return nil
   elseif coletas_anteriores[-1] == nil then
	-- Nao foi realizada nenhuma coleta ainda.
	-- Copiar o valor da linha:
	-- (Nao temos como calcular a taxa de chuva, entao vamos defini-la
	-- como zero.)
	return {pluvio = proxima_linha.pluvio, txpluvio = 0}
   else
	-- Verificar se esta coleta vai "virar" o dia:
	if coletas_anteriores[ -1].timestamp.dia == proxima_linha.timestamp.dia then
		-- Nao vai virar.
		-- Pega o ultimo valor de "pluvio" disponivel no arquivo:
		local ultimoPluvio, ultimoTS = ultimo_valor(linhas_anteriores, 'pluvio')
		if ultimoPluvio == nil then
			ultimoPluvio = 0
		end
		if ultimoTS == nil then
			ultimoTS = coletas_anteriores[-1].timestamp
		end
		
		-- Calcula a diferenca entre "pluvio"s; valor de chuva acumulada.
		local dPluvio = proxima_linha.pluvio - ultimoPluvio
		
		-- Calcula a chuva acumulada pela diferenca de tempo; taxa de chuva:
		local txPluvio = dPluvio / (proxima_linha.timestamp - ultimoTS).em_horas
		
		return {pluvio = dPluvio, txpluvio = txPluvio}
	else
		-- Vai virar o dia.
		-- Isto significa que ocorreu esvaziamento do pluviometro,
		-- e temos que manter o valor da linha.
		-- (Para a taxa de chuva, vamos copiar o valor da ultima coleta.)
		return {pluvio = proxima_linha.pluvio, txpluvio = coletas_anteriores[-1].txpluvio}
	end
end
-- -------------------------- FIM -------------------------------------------


-- -------------------- REGRA 3 --------------------------------------------
if proxima_linha.pluvio == nil then
	-- A PCD não informou "pluvio" desta vez. Não vamos fazer a coleta.
	return nil
else
	if coletas_anteriores[-1] ~= nil  then
		-- Pega o último valor de "pluvio" disponível no arquivo:
		local ultimoPluvio = ultimo_valor(linhas_anteriores, 'pluvio')
		if ultimoPluvio == nil then
			ultimoPluvio = 0
		end
		
		local prec = proxima_linha.pluvio - ultimoPluvio		
		
		--eliminar ruidos
		if prec < 0 or prec > 200 then
			return {pluvio = 0}
		else
			return {pluvio = prec}
		end
	else
		return {pluvio = proxima_linha.pluvio}
	end	
end
-- --------------------- FIM -----------------------------------------------





II - ANALISES 

-- ------------------------ ANALISE 1 ------------------
-- Calculo do valor médio de imagem de radar - em dbz  
-- ----------------------------------------------------- 
local var1 = media('Radar_SR') or 0

if var1 >= 0  and var1 < 2.5 then
        return 0
   elseif var1 >= 2.5  and var1 < 4.5 then
        return 1
   elseif var1 >= 4.5  and var1 < 12.5 then
        return 2
   elseif var1 >= 12.5  and var1 < 120 then
        return 3
   else 
        return 4
end
-- -----------------------FIM -----------------------------



-- ------------------------ ANALISE 2 ------------------
-- Calculo do valor médio do hidroestimador - em mm/h  
-- ----------------------------------------------------- 
local var1 = media('hidro') or 0

if var1 >= 0  and var1 < 2.5 then
        return 0
   elseif var1 >= 2.5  and var1 < 4.5 then
        return 2
   elseif var1 >= 4.5  and var1 < 12.5 then
        return 1
   elseif var1 >= 12.5  and var1 < 120 then
        return 3
   else 
        return 4
end
-- -----------------------FIM -----------------------------




-- ------------------------ ANALISE 3 -------------------------------
-- Chuva acumulada eh obtida fazendo-se uma media da chuva acumulada 
-- de todas as PCDs que influenciam um poligono.  
-- ------------------------------------------------------------------ 
local chuvaAcumulada = 0 

local pcds = influencia_pcd('PCD') 
for i, v in ipairs(pcds) do 
    chuvaAcumulada = chuvaAcumulada + 
    ( soma_historico_pcd('PCD', 'pluvio', v, 24) ) / #pcds 
end 

local prev24h = maximo_eta('ETA20km', 24) 

print(nome, ' ',chuvaAcumulada, ' ', prev24h) 

local chuvaTotal = chuvaAcumulada + prev24h 

if chuvaTotal < 30 then 
      return 0 
   elseif chuvaTotal < 50 then 
      return 1 
   elseif chuvaTotal < 80 then 
      return 2 
   elseif chuvaTotal < 110 then 
      return 3 
   else 
      return 4 
end 
-- ----------------------- FIM ----------------------------------------------- 



-- ----------------------- EXEMPLOS -----------------------------------------
Um exemplo para o operador prec_historico_grid: 
    Vamos supor que foram coletados em um ponto da grade os seguintes valores 
de intensidade de chuva para uma fonte de dados chamada "hidro": 
          12:00 ----- 10mm/h 
          12:15 ----- 20mm/h 
          12:45 ----- 30mm/h 
          13:00 ----- qualquer outro valor 

   Supondo que agora sao 13:00 e a ultima coleta foi a de 13 horas, ao aplicar 
o operador "prec_historico_grid('hidro', 1)", o valor obtido para este ponto 

   sera: = (10 x 0,25) + (20 x 0,5) + (30 x 0,25) 

   Ou seja, o algoritmo considera que choveu 10mm/h entre 12:00 e 12:15; choveu
20mm/h entre 12:15 e 12:45; e choveu 30mm/h entre 12:45 e 13:00. 
   Neste caso, a unidade da resposta esta em "mm". Por causa do calculo que eh 
feito internamente eu disse que o resultado so tera sentido se os valores de 
entrada estiverem em alguma unidade/hora. Observe tambem que a ultima coleta 
eh descartada no calculo da soma. 
   Outra caracteristica eh que esta soma eh feita para cada ponto da grade 
e o valor retornado por este operador eh o valor maximo encontrado no raster 
resultante para o limite do poligono. 


-- ------------------------ ANALISE 4 -----------------------
--  Calculo a chuva acumulada nas ultimas 72 horas, 
--  utilizando hidroestimador:
-- ---------------------------------------------------------- 
local max_prec = prec_historico_grid('hidro', 72) or 0 

if max_prec < 30 then 
       return 0 -- Normal 
    elseif max_prec < 60 then 
       return 1 -- Observacao 
    elseif max_prec < 90 then 
       return 2 -- Atencao 
    elseif max_prec < 120 then 
       return 3 -- Alerta 
    else 
       return 4 -- Alerta maximo 
end 
-- -------------------- FIM ---------------------------------- 





-- ------------------------ ANALISE 5 -----------------------
--  Calculo da distribuicao media de raios dentro de cada 
--  área da risco:
-- ---------------------------------------------------------- 
local r_media = media('raios') or 0
local r_amostras = conta_amostras('raios') or 0

local num_raios = r_media * r_amostras
 

if num_raios <= 0 then 
       return 0 -- Normal 
    elseif num_raios < 3 then 
       return 1 -- Observacao 
    elseif num_raios < 6 then 
       return 2 -- Atencao 
    elseif num_raios < 9 then 
       return 3 -- Alerta 
    else 
       return 4 -- Alerta maximo 
end 
-- -------------------- FIM ---------------------------------- 

