Vou lhe mostrar uma analise que eu uso aqui e que ja testei. 
Nela a chuva acumulada eh obtida fazendo-se uma media da chuva 
acumulada de todas as PCDs que influenciam um poligono. 
Voce pode tentar adaptar este algoritmo para o seu problema. Segue a analise: 

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


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. 

Em um exemplo de analise que rodei aqui, calculo a chuva acumulada nas ultimas 72 horas, 
utilizando dado do 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 
--------------------------------------------------------------------------- 




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

> > 
> > > SERVIDOR => 200.137.4.175
> > 
> > > 
> > 
> > > CONTA => ddpi
> > 
> > > 
> > 
> > > Senha  =>  mtv.0789
> > 
> > > 
> > 
> >  
> > 



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

