pred_bat:
module: predbat
class: PredBat
template: false
# Prefix for all entities Predbat creates in HA
prefix: predbat
# Reference only - entities below are hard-coded to "sunsynk"
inverter_name: "sunsynk"
timezone: Europe/London
currency_symbols:
- '£'
- 'p'
threads: auto
load_filter_threshold: 30
ha_url: 'http://10.0.20.15:8123'
ha_key: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiI1MTRhYzFkYjlhYmU0NjcxOTQyNWY2ZjJjZjI2ZGE1NiIsImlhdCI6MTc4MTcyOTE2OCwiZXhwIjoyMDk3MDg5MTY4fQ.Szco1rvyCQRREBr3eebHz7Euwzeb3fewt_ETbdfl8-8'
# ---------------- Energy sensors (inputs, auto-summed if a list) ----------------
load_today:
- sensor.sunsynk_day_load_energy
import_today:
- sensor.sunsynk_day_grid_import
export_today:
- sensor.sunsynk_day_grid_export
load_power:
- sensor.sunsynk_load_power
grid_power:
- sensor.sunsynk_grid_ct_power
grid_power_invert:
- true
battery_power:
- sensor.sunsynk_battery_power # watts
# If the battery charge/discharge sign reads backwards in Predbat, uncomment:
#battery_power_invert:
# - true
# ---------------- Inverter control ----------------
num_inverters: 1
inverter_type: SK
# **** Outputs to Sunsynk inverter ****
# Ensure on the inverter: 'Grid charge enabled', 'Solar Export', 'Use Timer'
charge_start_service:
- service: select.select_option
entity_id: "select.sunsynk_prog1_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog2_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog3_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog4_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog5_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog6_charge"
option: "Allow Grid & Gen"
- service: select.select_option
entity_id: "select.sunsynk_load_limit"
option: "Zero Export"
charge_stop_service:
- service: select.select_option
entity_id: "select.sunsynk_prog1_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog2_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog3_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog4_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog5_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog6_charge"
option: "Allow Gen"
- service: select.select_option
entity_id: "select.sunsynk_load_limit"
option: "Zero Export"
discharge_start_service:
- service: select.select_option
entity_id: "select.sunsynk_prog1_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog2_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog3_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog4_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog5_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_prog6_charge"
option: "No Grid or Gen"
- service: select.select_option
entity_id: "select.sunsynk_load_limit"
option: "Allow Export"
timed_charge_current:
- number.sunsynk_battery_max_charge_current # Amps
timed_discharge_current:
- number.sunsynk_battery_max_discharge_current # Amps
soc_percent:
- sensor.sunsynk_battery_soc
battery_voltage:
- 51.2 # nominal 16S LiFePO4; or map to sensor.sunsynk_battery_voltage
battery_rate_max:
- 5000 # max charge/discharge power in W (5kW Sunsynk ECCO)
# CONFIRM: total usable battery capacity in kWh.
# 1x Fogstar 314Ah @ 51.2V = ~16.0 kWh. Multiply if you have more than one pack.
soc_max:
- 16.0
battery_min_soc:
- 7 # %
reserve:
- 7 # %
# Predbat writes the target SoC% to prog1 only; the HA automation below
# copies it to prog2-6 (Predbat treats multiple charge_limit entries as
# separate inverters, so we keep one here + automation).
charge_limit:
- number.sunsynk_prog1_capacity
# **** End outputs to Sunsynk inverter ****
balance_inverters_seconds: 0
inverter_limit:
- 5000 # inverter rated power in W
# ---------------- PV forecast ----------------
# No solar PV installed - no pv_today / pv_power / Solcast forecast needed.
# Predbat runs as a battery + grid arbitrage system only.
# ---------------- Cars ----------------
# Predbat-led charging for Achilles (Tesla) via the Hypervolt.
# NOTE: The Hypervolt is OUTSIDE the inverter CT (inverter cannot see car
# load), so:
# - car_charging_energy is deliberately NOT set (nothing to strip from
# house load history)
# - turn OFF switch.predbat_car_energy_reported_load in HA (this also
# auto-disables car_charging_hold)
# Predbat publishes binary_sensor.predbat_car_charging_slot - an HA
# automation must start/stop the Hypervolt from that sensor.
num_cars: 1
# Car plugged in and available to charge (Hypervolt)
car_charging_planned:
- binary_sensor.hypervolt_car_plugged
car_charging_planned_response:
- 'yes'
- 'on'
- 'true'
# Check tesla mate battery health stats
car_charging_battery_size:
- 58.6
# Tesla charge target % and current SoC % (tesla_custom integration)
car_charging_limit:
- number.charge_limit
car_charging_soc:
- sensor.battery_3
# Do NOT enable car_charging_now with Predbat-led charging - it creates a
# circular dependency (Predbat would treat any active charge as a low-rate
# slot).
#car_charging_now:
# - off
# ---------------- Energy rates ----------------
metric_octopus_import: 'sensor.octopus_energy_electricity_current_rate'
metric_standing_charge: 'sensor.octopus_energy_electricity_current_standing_charge'
# No Octopus export/outgoing rate sensor exists (no export tariff in the
# integration). Add when set up, e.g.:
#metric_octopus_export: 'sensor.octopus_energy_electricity_..._export_current_rate'
octopus_intelligent_slot: 're:(binary_sensor.octopus_energy([0-9a-z_]+|)_intelligent_dispatching)'
octopus_ready_time: 're:((select|time).octopus_energy_([0-9a-z_]+|)_intelligent_target_time)'
octopus_charge_limit: 're:(number.octopus_energy([0-9a-z_]+|)_intelligent_charge_target)'
octopus_slot_low_rate: true
octopus_slot_max: 12 # 6 hours - Octopus cap on IOG cheap slots
# ---------------- Octopus Octoplus saving sessions ----------------
octopus_saving_session: 're:(binary_sensor.octopus_energy([0-9a-z_]+|)_saving_session(s|))'
octopus_saving_session_octopoints_per_penny: 8
octopus_free_session: 're:(event.octopus_energy_([0-9a-z_]+|)_octoplus_free_electricity_session_events)'
# ---------------- History / forecast windows ----------------
days_previous:
- 7
- 14
days_previous_weight:
- 1
forecast_hours: 48
# ---------------- Notifications ----------------
# Set to your mobile_app notify device, e.g. mobile_app_fraser_iphone
notify_devices:
- mobile_app_fraser_phone
battery_scaling:
- 1.0
import_export_scaling: 1.0
export_triggers:
- name: 'large'
minutes: 60
energy: 1.0
- name: 'small'
minutes: 15
energy: 0.25
# Tariff comparison feature
#
# Adjust this list to the tariffs you want to compare, include your current tariff also
# DNO region code (see https://energy-stats.uk/dno-region-codes-explained/)
dno_region: "G"
compare_list:
- id: 'current'
name: 'Current Tariff (IOG)'
- id: 'agile'
name: 'Agile'
rates_import_octopus_url: 'https://api.octopus.energy/v1/products/AGILE-24-10-01/electricity-tariffs/E-1R-AGILE-24-10-01-G/standard-unit-rates/'
mcp_enable: "True"
battery_charge_power_curve:
97: 0.9
98: 0.66
99: 0.49
100: 0.49
# ---------------- Load ML ----------------
load_ml_enable: true
load_ml_source: false
temperature_enable: true
load_ml_max_days_history: 28
load_ml_database_days: 90