Viewing: apps.yaml

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