I have started using ApexCharts card - A highly customizable graph card to visualise some of the EMHASS data as an alternative to the local UI.
@kc_au @ThirtyDursty @madpilot

type: custom:apexcharts-card
span:
start: minute
header:
show: true
title: EMHASS Forecasts
show_states: true
colorize_states: true
now:
show: true
label: now
series:
- entity: sensor.p_pv_forecast
curve: stepline
show:
in_header: before_now
stroke_width: 1
data_generator: |
return entity.attributes.forecasts.map((entry) => {
return [new Date(entry.date), entry.p_pv_forecast];
});
- entity: sensor.p_batt_forecast
curve: stepline
show:
in_header: before_now
stroke_width: 1
data_generator: |
return entity.attributes.forecasts.map((entry) => {
return [new Date(entry.date), entry.p_batt_forecast];
});
- entity: sensor.p_load_forecast
curve: stepline
show:
in_header: before_now
stroke_width: 1
data_generator: |
return entity.attributes.forecasts.map((entry) => {
return [new Date(entry.date), entry.p_load_forecast];
});
- entity: sensor.p_deferrable0
curve: stepline
stroke_width: 1
show:
in_header: before_now
data_generator: |
return entity.attributes.deferrables_schedule.map((entry) => {
return [new Date(entry.date), entry.p_deferrable0];
});
- entity: sensor.p_deferrable1
curve: stepline
stroke_width: 1
show:
in_header: before_now
data_generator: |
return entity.attributes.deferrables_schedule.map((entry) => {
return [new Date(entry.date), entry.p_deferrable1];
});
Works well for my energy provider as well:

type: custom:apexcharts-card
experimental:
color_threshold: true
graph_span: 24h
span:
start: minute
header:
show: true
title: Amber Electricty Forecast
show_states: true
colorize_states: true
series:
- entity: sensor.amber_general_forecast
float_precision: 2
show:
in_header: after_now
color_threshold:
- value: 0
color: cyan
- value: 0.16
color: green
- value: 0.2
color: yellow
- value: 0.3
color: red
name: price kwh
data_generator: |
return entity.attributes.forecasts.map((entry) => {
return [new Date(entry.start_time), entry.per_kwh];
});
yaxis:
- min: 0
max: 1
decimals: 2
apex_config:
forceNiceScale: true
My EMHASS config file:
web_ui_url: 0.0.0.0
hass_url: empty
long_lived_token: empty
costfun: profit
optimization_time_step: 30
historic_days_to_retrieve: 2
method_ts_round: first
set_total_pv_sell: false
lp_solver: COIN_CMD
lp_solver_path: /usr/bin/cbc
sensor_power_photovoltaics: sensor.apf_generation_entity
sensor_power_load_no_var_loads: sensor.power_load_no_var_loads
number_of_deferrable_loads: 4
list_nominal_power_of_deferrable_loads:
- nominal_power_of_deferrable_loads: 1500
- nominal_power_of_deferrable_loads: 5500
- nominal_power_of_deferrable_loads: 11500
- nominal_power_of_deferrable_loads: 2400
list_operating_hours_of_each_deferrable_load:
- operating_hours_of_each_deferrable_load: 4
- operating_hours_of_each_deferrable_load: 2
- operating_hours_of_each_deferrable_load: 2
- operating_hours_of_each_deferrable_load: 1
list_peak_hours_periods_start_hours:
- peak_hours_periods_start_hours: '02:54'
- peak_hours_periods_start_hours: '17:24'
list_peak_hours_periods_end_hours:
- peak_hours_periods_end_hours: '15:24'
- peak_hours_periods_end_hours: '20:24'
list_treat_deferrable_load_as_semi_cont:
- treat_deferrable_load_as_semi_cont: true
- treat_deferrable_load_as_semi_cont: true
- treat_deferrable_load_as_semi_cont: false
- treat_deferrable_load_as_semi_cont: false
load_peak_hours_cost: 0.1907
load_offpeak_hours_cost: 0.1419
photovoltaic_production_sell_price: 0.065
maximum_power_from_grid: 30000
list_pv_module_model:
- pv_module_model: Advance_Power_API_M370
- pv_module_model: Advance_Power_API_M370
list_pv_inverter_model:
- pv_inverter_model: SolarEdge_Technologies_Ltd___SE7600A_US__208V_
- pv_inverter_model: SolarEdge_Technologies_Ltd___SE7600A_US__208V_
list_surface_tilt:
- surface_tilt: 18
- surface_tilt: 10
list_surface_azimuth:
- surface_azimuth: 90
- surface_azimuth: 270
list_modules_per_string:
- modules_per_string: 29
- modules_per_string: 21
list_strings_per_inverter:
- strings_per_inverter: 1
- strings_per_inverter: 1
set_use_battery: true
battery_discharge_power_max: 5264
battery_charge_power_max: 5000
battery_discharge_efficiency: 0.95
battery_charge_efficiency: 0.95
battery_nominal_energy_capacity: 13500
battery_minimum_state_of_charge: 0.05
battery_maximum_state_of_charge: 1
battery_target_state_of_charge: 0.1
nominal_power_of_deferrable_loads: 5500,1500,7000,3000
operating_hours_of_each_deferrable_load: 10,16,3,1
peak_hours_periods_start_hours: 02:54,17:24
peak_hours_periods_end_hours: 15:24,20:24
pv_module_model: Advance_Power_API_M370,Advance_Power_API_M370
pv_inverter_model: >-
SolarEdge_Technologies_Ltd___SE7600A_US__208V_,SolarEdge_Technologies_Ltd___SE7600A_US__208V_
surface_tilt: 10,10
surface_azimuth: 90,270
modules_per_string: 29,21
strings_per_inverter: 1,1