There are a few approaches suitable for a water heater.
In many cases you maybe better off having your heater scheduled at different times rather than one individual block so it can reheat after consumption, rather than waiting until the next 24 hour block.
Another approach is to have a temperature sensor on schedule the def_hours based on how quickly your heater recovers. So if you water temp is 50° and it requires 2 hours to heat to 60°. Then maybe when it is 50° it would only require 1 hour.
11 kW is very large consumption, my domestic hot water heat pump draws 600W and my three phase pool heat pump draws 5 kW. I have fixed run times for both of those systems and I rely on the thermostat to switch off when the set point is reached.
- name: def_total_hours_pool_filter
unique_id: 326ca07d-fb97-4977-8821-78d5c5e0a7b5
state: >-
{{
(is_state('automation.p_deferable0_automation', 'on') | int(0)) *
states('sensor.pv_forecast_energy') | int(0) / 10
}}
- name: def_total_hours_pool_heatpump
unique_id: ad586a0f-d16a-4ab9-841d-96b753612709
state: "{{is_state('automation.p_deferable1_automation','on')|int
* max(0,((state_attr('sensor.amber_feed_in_forecast', 'forecasts')|selectattr('descriptor','eq','extremely_low')|list|count)/2)
)}}"
- name: def_total_hours_hws
unique_id: ffff343f-d08d-4cbf-b783-3c8c116f0fd3
state: "{{is_state('automation.p_deferrable_4','on')|int
* max(6,((state_attr('sensor.amber_feed_in_forecast', 'forecasts')|selectattr('descriptor','eq','extremely_low')|list|count)/2))|int(0)}}"
Finally, if you can control the set point via automation then you could define this as continuous (not semi continuous) and allow EMHASS to schedule power levels between 0-11 kW. Then create a mapping from the desired power level to the setpoint.
For example:
At 0 W set point = current temp
At 2000W set point = current temp +5
At 11000 W set point = 65 °
Do you have any power monitoring on your device that you could share the power curve?