ha-pool_pump icon indicating copy to clipboard operation
ha-pool_pump copied to clipboard

Abacus algorithm - taking account of pool size, power of the pump and overwintering

Open Hammerhand17 opened this issue 10 months ago • 0 comments

Is your feature request related to a problem? Please describe. I think using Abacus algorithm is unreliable, because it only takes (as long as I understand it) temperature as base as calculations for filtration time, and we should take account of the size of the pool and the power of the pump.

Describe the solution you'd like Currently I have a calculation formula:

Formula

Being it:

Filtration: Filtration time (in hours) Temp: Water temperature Prec: Recirculation time (in hours) K: Overwintering reduction factor.

Recirculation time: Let's imagine a pool with a capacity of 50m3 and a pump capable of moving 10m3/h. Therefore, to pass ALL the water volume of the pool through the filter ideally (emphasizing "ideally"), it takes 5 hours.

Regarding the overwintering reduction factor (K), it only has an effect at temperatures below 15ºC and takes the following values:

• K=1.00 for temperatures above 15ºC • K=0.50 for temperatures between 15ºC and 13ºC • K=0.33 for temperatures between 12ºC and 10ºC • K=0.25 for temperatures between 9ºC and 6ºC • K=0.15 for temperatures between 5ºC and 1ºC

Describe alternatives you've considered

I calculated my recirculation time watching the specs of my pump and the size of my pool (in my case the value is 1,5), and used this automation to automatically calculate the value of K:

alias: Temperatura piscina -> Cambio Factor de Corrección description: "" trigger:

  • platform: state entity_id:
    • sensor.medidor_calidad_piscina_temperature
  • platform: state entity_id:
    • input_number.temperatura_piscina action:
  • service: input_number.set_value data_template: entity_id: input_number.factor_de_correccion_temperatura_piscina value: > {% if states('input_number.temperatura_piscina') | float >= 15 %} 1 {% elif states('input_number.temperatura_piscina') | float >= 13 and states('input_number.temperatura_piscina') | float <= 14.9 %} 0.50 {% elif states('input_number.temperatura_piscina') | float >= 10 and states('input_number.temperatura_piscina') | float <= 12.9 %} 0.33 {% elif states('input_number.temperatura_piscina') | float >= 6 and states('input_number.temperatura_piscina') | float <= 9.9 %} 0.25 {% elif states('input_number.temperatura_piscina') | float >= 1 and states('input_number.temperatura_piscina') | float <= 5.9 %} 0.15 {% else %} 0 # Valor por defecto si no se cumple ninguna de las condiciones {% endif %}

The value is, as now, always lower than with abacus algorithm (here we have very low temps yet).

Maybe it's useful to tune filtration time with your component.

Hammerhand17 avatar Apr 09 '24 08:04 Hammerhand17