EMHASS: An Energy Management for Home Assistant

The emhass referenced file is the options.json file in the emhass addon data directory. You only need to gain access to the emhass Docker container and change directory to /data:

  1. Install community “SSH & Web Terminal” addon (not the official “Terminal & SSH” addon!) and configure your credentials. Note: the addon will fail to start if you use an insecure password so it’s better to configure it with public key authentication.
  2. Disable “Protection mode” in the addon’s configuration.
  3. At the shell, log into the main Home Assistant Docker container like this:
docker exec -it addon_5b918bf2_emhass bash

You need to know either the container id or name of the addon. You can use this docker command for getting the name or id:

docker ps -a

Change directory to data and read the options.json file with the command cat more:

root@5b918bf2-emhass:/data# cd data/
root@5b918bf2-emhass:/data# more options.json
or 
root@5b918bf2-emhass:/data# cat options.json
1 Like

When you use the nordpool intergration you need to use time step 60 minutes because nordpool have 24 hour prices publised.
image
You can look at my config here: EMHASS: An Energy Management for Home Assistant - #1017 by haraldov

But you get this error also when you have less than 2 days recorded sensor.power_load_no_var_loads data:
image
The minimum recorded data is two days:
image

Here is my template for sensor.power_load_no_var_loads:

template:
  - sensor:
      - name: "Power load no var loads"
        unique_id: fbfeef21-1aa3-4a54-b781-426f46fef597
        unit_of_measurement: W
        device_class: power
        state: >
          {% set powerload = states('sensor.power_adresse') | float(default=0) %}
          {% set ecupower = states('sensor.ecu_current_power') | float(default=0) %}
          {% set vkbad1etg = states('sensor.varmekabel_bad1etg_electric_consumption_w') | float(default=0) %}
          {% set vkbad2etg = states('sensor.varmekabel_bad2etg_electric_consumption_w') | float(default=0) %}
          {% set vkgang = states('sensor.varmekabel_gang_electric_consumption_w') | float(default=0) %}
          {% set vkgmlstue = states('sensor.varmekabel_gmlstue_electric_consumption_w') | float(default=0) %}
          {% set vknystue = states('sensor.varmekabel_nystue_electric_consumption_w') | float(default=0) %}
          {% set vkkjokken = states('sensor.varmekabel_kjokken_electric_consumption_w') | float(default=0) %}
          {% set vvb = states('sensor.bryter_varmvannsbereder_electric_consumption_w') | float(default=0) %}
          {% set varmepumpe = states('sensor.strombryter_varmepumpe_electric_consumption_w') | float(default=0) %}
          {% set easee = states('sensor.easee_home_number_power') | float(default=0) %}
          {% set value = ((powerload + ecupower)- vkbad1etg - vkbad2etg - vkgang - vkgmlstue - vknystue - vkkjokken - vvb - varmepumpe - easee) | round(1,default=0) %}
          {% if value < 0.0  %}
            {{ 0.0 }}
          {% else %}
            {{ value }}
          {% endif %} 
1 Like

You should template consumption sensor in Watt minus the deferable load in Watt https://emhass.readthedocs.io/en/latest/intro.html#passing-your-own-data.

In my template I add the pv production (ecupower) plus the grid import sensor (powerload) and substract the deferable load in my house. I now sure this is the correct way to do it, but it works.

{% set value = ((powerload + ecupower)- vkbad1etg - vkbad2etg - vkgang - vkgmlstue - vknystue - vkkjokken - vvb - varmepumpe - easee) | round(1,default=0) %}
          {% if value < 0.0  %}
1 Like

Thanks, I set the resolution to 60minutes, but indeed my template was created yesterday evening. Will wait 2 days!

1 Like

These are great instructions for debugging and going inside the docker container to see what is going on and like you said retrieve the options.json file if you want to check whats inside it.

However if you are using the add-on there is no need to do all this, just set your parameters to configure your system in the add-on configuration pane and that’s all. The add-on will internally create that options.json file and use it to run the calculations. As a user you can just stay with the web UI on the add-on a it should work fine with no need to use the SSH and Web Terminal (which is great) and to meddle with the Docker containers.

1 Like

EMHASS config for sonnen users

3 Likes

Anybody understand what these errors mean?

2023-07-28 16:42:20,021 - web_server - INFO - Retrieve hass get data method initiated...
2023-07-28 16:42:20,654 - web_server - ERROR - Exception on /action/naive-mpc-optim [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/usr/local/lib/python3.9/dist-packages/emhass/web_server.py", line 174, in action_call
    input_data_dict = set_input_data_dict(config_path, str(data_path), costfun,
  File "/usr/local/lib/python3.9/dist-packages/emhass/command_line.py", line 110, in set_input_data_dict
    rh.get_data(days_list, var_list,
  File "/usr/local/lib/python3.9/dist-packages/emhass/retrieve_hass.py", line 140, in get_data
    df_tp = df_raw.copy()[['state']].replace(
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/generic.py", line 5920, in astype
    new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/managers.py", line 419, in astype
    return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/managers.py", line 304, in apply
    applied = getattr(b, f)(**kwargs)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/blocks.py", line 580, in astype
    new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1292, in astype_array_safe
    new_values = astype_array(values, dtype, copy=copy)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1237, in astype_array
    values = astype_nansafe(values, dtype, copy=copy)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1098, in astype_nansafe
    result = astype_nansafe(flat, dtype, copy=copy, skipna=skipna)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1181, in astype_nansafe
    return arr.astype(dtype, copy=True)
ValueError: could not convert string to float: 'NOTRUN'
2023-07-28 16:42:20,687 - web_server - INFO - Setting up needed data
2023-07-28 16:42:20,690 - web_server - INFO -  >> Publishing data...
2023-07-28 16:42:20,690 - web_server - INFO - Publishing data to HASS instance
2023-07-28 16:42:20,705 - web_server - INFO - Successfully posted to sensor.p_pv_forecast = 17.0
2023-07-28 16:42:20,716 - web_server - INFO - Successfully posted to sensor.p_load_forecast = 2587.03
2023-07-28 16:42:20,727 - web_server - INFO - Successfully posted to sensor.p_deferrable0 = 0.0
2023-07-28 16:42:20,740 - web_server - INFO - Successfully posted to sensor.p_batt_forecast = 2054.05
2023-07-28 16:42:20,751 - web_server - INFO - Successfully posted to sensor.soc_batt_forecast = 88.38
2023-07-28 16:42:20,762 - web_server - INFO - Successfully posted to sensor.p_grid_forecast = 515.98
2023-07-28 16:42:20,774 - web_server - INFO - Successfully posted to sensor.total_cost_fun_value = 0.61
2023-07-28 16:42:20,785 - web_server - INFO - Successfully posted to sensor.unit_load_cost = 0.55
2023-07-28 16:42:20,798 - web_server - INFO - Successfully posted to sensor.unit_prod_price = 0.45

I restarted HA and now I’m getting these errors with each MPC POST? Didn’t change anything relating to EMHASS.

{"load_cost_forecast":{{(
        ([states('sensor.cecil_st_general_price')|float(0)] +
        state_attr('sensor.cecil_st_general_forecast', 'forecasts') |map(attribute='per_kwh')|list)[:48])
        }}, 


        "prod_price_forecast":{{(
        ([states('sensor.cecil_st_feed_in_price')|float(0)] +
        state_attr('sensor.cecil_st_feed_in_forecast', 'forecasts')|map(attribute='per_kwh')|list)[:48]) 
        }},



        "pv_power_forecast":{{([states('sensor.sonnenbatterie_84324_production_w')|int(0)] +
        state_attr('sensor.forecast_today', 'detailedForecast')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',2000)|map('int')|list +
        state_attr('sensor.forecast_tomorrow', 'detailedForecast')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',2000)|map('int')|list
        )| tojson
        }},

        "prediction_horizon":{{min(48, (state_attr('sensor.cecil_st_feed_in_forecast', 'forecasts')|map(attribute='per_kwh')|list|length)+1)
        }},

        "soc_init":{{(states('sensor.sonnenbatterie_84324_state_charge_user')|float(0))/100
        }},
{"load_cost_forecast":[0.56, 0.52, 0.58, 0.68, 0.69, 0.64, 0.62, 0.4, 0.29, 0.34, 0.31, 0.43, 0.43, 0.26, 0.26, 0.31, 0.27, 0.26, 0.26, 0.26, 0.23, 0.21, 0.2, 0.2, 0.17, 0.2, 0.2, 0.2, 0.23, 0.2, 0.18, 0.16, 0.13, 0.13, 0.13, 0.13, 0.07, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.36, 0.39, 0.39, 0.3, 0.32], 


        "prod_price_forecast":[0.46, 0.42, 0.48, 0.56, 0.57, 0.53, 0.51, 0.28, 0.18, 0.23, 0.2, 0.31, 0.31, 0.15, 0.15, 0.2, 0.16, 0.15, 0.15, 0.15, 0.13, 0.1, 0.1, 0.09, 0.07, 0.09, 0.09, 0.1, 0.13, 0.1, 0.08, 0.06, 0.04, 0.04, 0.04, 0.02, -0.04, -0.06, -0.06, -0.07, -0.07, -0.06, -0.06, 0.27, 0.3, 0.3, 0.22, 0.24],



        "pv_power_forecast":[30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 414, 876, 1278, 1634, 1964, 2156, 2142, 2110, 2071, 1981, 1818, 1693, 1608, 1451, 1207, 929, 666, 256, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],

        "prediction_horizon":48,

        "soc_init":0.94,

        "soc_final":0.05,"def_total_hours":[2]}}

Thanks
Rob

Somewhere on your data list you are passing this string 'NOTRUN' instead of a float.
Maybe a nodered related issue?

1 Like

I got the following error since two days (no changes on the configuration since one week):

Logger: homeassistant.components.shell_command
Source: /usr/src/homeassistant/homeassistant/components/shell_command/__init__.py:117
Integration: Shell Command (documentation, issues)
First occurred: 27 de julho de 2023 às 05:30:47 (6 occurrences)
Last logged: 09:07:17

Error running command: `curl -i -H "Content-Type: application/json" -X POST -d '{"pv_power_forecast":{{states('sensor.solcast_24hrs_forecast')}}}' http://localhost:5000/action/dayahead-optim`, return code: 52
Error running command: `curl -i -H "Content-Type:application/json" -X POST -d '{}' http://localhost:5000/action/publish-data`, return code: 56
NoneType: None

Any idea what could be the issue? No errors in EMHASS but there are no results published since two days

David
I’ve moved it back to the automations.yaml and configuation.yaml. No node red but still getting the same error. Something wrong with my array. Just don’t understand how a reboot can trigger it.

I notice that my template creates array with line feeds after each number until I put a bracket or curly bracket at the end? Have to go through it in detail and compare to other examples.

@davidusb
@markpurcell
Ok I’ve reduced it down to the bare command line and this is what is being sent:

curl -i -H "Content-Type: application/json" -X POST -d '{"load_cost_forecast":[0.52, 0.53, 0.26, 0.23, 0.26, 0.26, 0.26, 0.26, 0.22, 0.22, 0.26, 0.26, 0.26, 0.26, 0.26, 0.2, 0.2, 0.2, 0.2, 0.17, 0.2, 0.2, 0.2, 0.21, 0.2, 0.18, 0.16, 0.13, 0.13, 0.13, 0.13, 0.08, 0.05, 0.04, 0.04, 0.04, 0.04, 0.04, 0.3, 0.39, 0.39, 0.3, 0.31, 0.41, 0.51, 0.7, 0.7, 0.7], "prod_price_forecast":[0.42, 0.43, 0.15, 0.13, 0.15, 0.15, 0.15, 0.15, 0.12, 0.12, 0.15, 0.15, 0.15, 0.15, 0.15, 0.1, 0.1, 0.1, 0.09, 0.07, 0.09, 0.09, 0.1, 0.1, 0.1, 0.08, 0.06, 0.04, 0.04, 0.04, 0.02, -0.03, -0.06, -0.06, -0.07, -0.07, -0.07, -0.07, 0.22, 0.3, 0.3, 0.22, 0.23, 0.32, 0.42, 0.59, 0.59, 0.59],"pv_power_forecast":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 414, 876, 1278, 1634, 1964, 2156, 2142, 2110, 2071, 1981, 1818, 1693, 1608, 1451, 1207, 929, 666, 256, 66, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],"prediction_horizon":48,"soc_init":0.33,"soc_final":0.05,"def_total_hours":[2]}' http://192.168.99.17:5000/action/naive-mpc-optim

I can sent this command line verbatim from another machine and it causes this error?

2023-07-28 19:22:39,370 - web_server - INFO - Setting up needed data
2023-07-28 19:22:39,373 - web_server - INFO - Retrieve hass get data method initiated...
2023-07-28 19:22:39,896 - web_server - ERROR - Exception on /action/naive-mpc-optim [POST]
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2190, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1486, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1484, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1469, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/usr/local/lib/python3.9/dist-packages/emhass/web_server.py", line 174, in action_call
    input_data_dict = set_input_data_dict(config_path, str(data_path), costfun,
  File "/usr/local/lib/python3.9/dist-packages/emhass/command_line.py", line 110, in set_input_data_dict
    rh.get_data(days_list, var_list,
  File "/usr/local/lib/python3.9/dist-packages/emhass/retrieve_hass.py", line 140, in get_data
    df_tp = df_raw.copy()[['state']].replace(
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/generic.py", line 5920, in astype
    new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/managers.py", line 419, in astype
    return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/managers.py", line 304, in apply
    applied = getattr(b, f)(**kwargs)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/internals/blocks.py", line 580, in astype
    new_values = astype_array_safe(values, dtype, copy=copy, errors=errors)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1292, in astype_array_safe
    new_values = astype_array(values, dtype, copy=copy)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1237, in astype_array
    values = astype_nansafe(values, dtype, copy=copy)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1098, in astype_nansafe
    result = astype_nansafe(flat, dtype, copy=copy, skipna=skipna)
  File "/usr/local/lib/python3.9/dist-packages/pandas/core/dtypes/cast.py", line 1181, in astype_nansafe
    return arr.astype(dtype, copy=True)
ValueError: could not convert string to float: 'NOTRUN'

Any ideas?

Thanks
Rob

What is the error? What does the logger says?

I’m getting some errors relating to the battery?

Logger: homeassistant.helpers.template_entity
Source: helpers/template_entity.py:409
First occurred: 17:48:14 (30 occurrences)
Last logged: 19:09:06

TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template<template=({{ states.sensor.json_sonnen.attributes["Consumption_W"] }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.sonnen_power_consumption'
TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template<template=({{ states.sensor.json_sonnen.attributes["GridFeedIn_W"] }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.sonnen_power_supply'
TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template<template=({{ states.sensor.json_sonnen.attributes["Production_W"] }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.sonnen_power_generation'
TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template<template=({{ states.sensor.json_sonnen.attributes["USOC"] }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.sonnen_electricity_storage'
TemplateError('UndefinedError: 'None' has no attribute 'attributes'') while processing template 'Template<template=({{ states.sensor.json_sonnen.attributes["Uac"] }}) renders=4>' for attribute '_attr_native_value' in entity 'sensor.sonnen_alternating_current'

I’ll look into that. Perhaps the HACS that extracts battery info is off?

THanks will have a look at that and come back.

This must be it

Log Details (WARNING)
Logger: homeassistant.components.integration.sensor
Source: components/integration/sensor.py:356
Integration: integration (documentation, issues)
First occurred: 20:12:16 (6 occurrences)
Last logged: 20:12:16

Invalid state (NOTRUN > 1439): [<class 'decimal.ConversionSyntax'>]
Invalid state (NOTRUN > 0): [<class 'decimal.ConversionSyntax'>]
Invalid state (NOTRUN > 1): [<class 'decimal.ConversionSyntax'>]
Invalid state (NOTRUN > -9): [<class 'decimal.ConversionSyntax'>]
Invalid state (NOTRUN > 1460.8): [<class 'decimal.ConversionSyntax'>]

÷

@davidusb
Is there any way to tell what entity is cuasing this error?

ValueError: could not convert string to float: 'NOTRUN'

I’ve looked at the two entities in EMHASS config file:


Both seem to be ok:

And the template creating the lists seem to be ok:

'{"load_cost_forecast":{{(
        ([states('sensor.cecil_st_general_price')|float(0)] +
        state_attr('sensor.cecil_st_general_forecast', 'forecasts') |map(attribute='per_kwh')|list)[:48])
        }},"prod_price_forecast":{{(
        ([states('sensor.cecil_st_feed_in_price')|float(0)] +
        state_attr('sensor.cecil_st_feed_in_forecast', 'forecasts')|map(attribute='per_kwh')|list)[:48]) 
        }},"pv_power_forecast":{{([states('sensor.sonnenbatterie_84324_production_w')|int(0)] +
        state_attr('sensor.forecast_today', 'detailedForecast')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',2000)|map('int')|list +
        state_attr('sensor.forecast_tomorrow', 'detailedForecast')|selectattr('period_start','gt',utcnow()) | map(attribute='pv_estimate')|map('multiply',2000)|map('int')|list
        )| tojson
        }},"prediction_horizon":{{min(48, (state_attr('sensor.cecil_st_feed_in_forecast', 'forecasts')|map(attribute='per_kwh')|list|length)+1)
        }},"soc_init":{{(states('sensor.sonnenbatterie_84324_state_charge_user')|float(0))/100
        }},"soc_final":0.05,"def_total_hours":[2]}'

The list:

'{"load_cost_forecast":[0.15, 0.13, 0.16, 0.06, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.41, 0.41, 0.39, 0.35, 0.35, 0.41, 0.51, 0.7, 0.7, 0.7, 0.52, 0.51, 0.23, 0.26, 0.21, 0.22, 0.23, 0.26, 0.25, 0.22, 0.23, 0.2, 0.2, 0.2, 0.19, 0.16, 0.16, 0.16],"prod_price_forecast":[0.05, 0.04, 0.04, -0.05, 0.02, 0.02, 0.02, 0.01, 0.02, 0.02, 0.32, 0.32, 0.3, 0.27, 0.27, 0.32, 0.42, 0.59, 0.59, 0.59, 0.42, 0.41, 0.13, 0.15, 0.11, 0.12, 0.13, 0.15, 0.14, 0.12, 0.13, 0.09, 0.09, 0.09, 0.09, 0.06, 0.06, 0.06],"pv_power_forecast":[1056, 2501, 2806, 3007, 3173, 3214, 3148, 3054, 2786, 2339, 1906, 1435, 984, 579, 187, 58, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 593, 1122, 1610, 2028, 2506, 2861, 2981, 3167, 3377, 3409, 3381, 3274, 3083, 2825, 2362, 1994, 1552, 974, 296, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],"prediction_horizon":38,"soc_init":0.19,"soc_final":0.05,"def_total_hours":[2]}'

The logger is clear of any errors related to this. Has some ring door bell errors etc.
What else can I look at?
THanks
Rob

Is this normal for EMHASS to export to grid with negative FIT

I’m handling this with if then else conditions… just curious maybe an improvement

Looks like you are going to have to export to grid at some stage today, as your battery is going to fully charged and you don’t have any more deferrable load to add.

So in that case you are better to export at -4¢ now and make some additional room in your battery rather than exporting at -6¢ later.

My forcing using rules you are not going to have an optimal solution as you will need to export at -6¢ later when you battery fills up earlier.

How much longer in the day does your -ve FIT run for?

Do you have other household loads you can turn on? I have 0830-1500 today with -ve FIT in s.qld.

Can you solar PV go into zero export mode?

Thanks for the explanation mark… that makes sense… really trying to understand how EMHASS thinks. :smiley: negative FIT runs up until 4PM
I can manage the negative FIT later if it holds…charging EV will fixt this… thanks again…

If you schedule your EV in EMHASS then it can also take th at into account.

Even if you have to manual switch your charging, I have mine automated via the https://github.com/alandtse/tesla

I have not get around my head to automate it and taken into EMHASS… the deferral load keeps on moving and not continous like 4 hours… I have not any deferral yet automatically… I use that Tesla HA integration to charge the EV by monitoring export and adjusting the amps accordingly just to charge with excess solar.

I use the deferral load 0 for my dishwasher…I will check when is the best time… and schedule the diswasher accordingly…