diff -r afd58d4c7b5b -r 30aca5888d2b main/automation.c --- a/main/automation.c Tue Nov 02 14:47:43 2021 +0100 +++ b/main/automation.c Sat Jun 25 15:24:55 2022 +0200 @@ -109,7 +109,7 @@ log_msg(TAG, "Automation startup"); #ifdef CONFIG_TEMP_SENSORS_SIMULATOR Fake_MLT = recipe.MashStep[0].Step_temp - 10; - Fake_HLT = recipe.SpargeTemp - 15; + Fake_HLT = recipe.SpargeTemp - 45; if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) { ds18b20_state->mlt_temperature = ((int)(Fake_MLT * 16)) / 16.0; ds18b20_state->hlt_temperature = ((int)(Fake_HLT * 16)) / 16.0; @@ -594,16 +594,21 @@ ESP_LOGD(TAG, "Use HLT %s", (_UseHLT)?"true":"false"); updateRuntime = true; if (_UseHLT) { - /* - * Calculate HLT setpoint for pre-heat. Substract the - * available Mash rest times, asume 0.5 degrees/minute - * heat capacity during mash. - */ + /* + * Calculate HLT setpoint for pre-heat. + * Substract the available Mash rest plus ramp times, + * asume 0.67 degrees/minute heat capacity during mash. + */ int AvailableTime = 0; - for (int i = 1; i < 6; i++) // Only normal Mash steps - AvailableTime += recipe.MashStep[i].Step_time; + for (int i = 0; i < recipe.Mashsteps; i++) { + if (recipe.MashStep[i].Step_temp < 75) { + AvailableTime += (recipe.MashStep[i].Step_time + recipe.MashStep[i].Ramp_time); + } + } if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { - driver_state->hlt_sp = recipe.SpargeTemp - ((AvailableTime / 2) + 2); + driver_state->hlt_sp = recipe.SpargeTemp - ((AvailableTime / 1.5) + 2); + if (driver_state->hlt_sp < 10.0) + driver_state->hlt_sp = 10.0; log_msg(TAG, "HLT preheat set to %4.2f", driver_state->hlt_sp); xSemaphoreGive(xSemaphoreDriver); }