springfall2008 / batpred

Home battery prediction and charging automation for Home Assistant, supporting many inverter types
https://springfall2008.github.io/batpred/
118 stars 41 forks source link

Solax Inverters #259

Closed Bart39 closed 1 month ago

Bart39 commented 11 months ago

Splitting this out to separate request. Please add support for Solax inverters. I use https://github.com/wills106/homeassistant-solax-modbus for HA integration (also supports other brands of inverters) As I have an X1 gen 4 inverter https://github.com/wills106/homeassistant-solax-modbus/wiki/Modbus-Power-Control-(remotecontrol-power) is the preferred method as it avoids excessive writes to eeprom

nikotime commented 4 months ago

Hey @DougManton , was wondering whether you had made any more progress here ? :) would be fab to get this up and running in an official capacity

adamrhunt commented 3 months ago

hi did anyone manage to get predbat working with solax i have a solax x3 hybrid inverter and i had to change the apps.yaml as some of the sensors were wrong decriptions and its all working but the charge discharge doesnt activate my inverter i think that bit is wrong for my inverter can anyone help here is my current apps.yaml file attached thank you :) apps.yaml.txt

luismsousa commented 2 months ago

Hi there,

I've come across the same issue regarding the time_pressed variable. I've tried disabling the config line in the yaml file but with no success.

2024-07-16 12:35:59.628355: Info: record_status Error: Exception raised strptime() argument 1 must be str, not None
2024-07-16 12:35:59.628669: Error: strptime() argument 1 must be str, not None
Traceback (most recent call last):
  File "/config/hass.py", line 173, in timer_tick
    item["callback"](None)
  File "/config/predbat.py", line 10899, in update_time_loop
    raise e
  File "/config/predbat.py", line 10893, in update_time_loop
    self.update_pred(scheduled=False)
  File "/config/predbat.py", line 9796, in update_pred
    status, status_extra = self.execute_plan()
  File "/config/predbat.py", line 8375, in execute_plan
    inverter.adjust_charge_window(charge_start_time, charge_end_time, self.minutes_now)
  File "/config/inverter.py", line 1965, in adjust_charge_window
    self.press_and_poll_button(entity_id)
  File "/config/inverter.py", line 1998, in press_and_poll_button
    time_pressed = datetime.strptime(self.base.get_state_wrapper(entity_id, refresh=True), TIME_FORMAT_SECONDS)
TypeError: strptime() argument 1 must be str, not None

apps.yaml snippet

    - sensor.solax_house_load
  import_today:
    - sensor.solax_today_s_import_energy
  export_today:
    - sensor.solax_today_s_export_energy
  pv_today:
    - sensor.solax_today_s_solar_energy

  battery_voltage:
    - sensor.solax_battery_voltage_charge

  # This is disabled by default in the Solax integration so it must be manually enabled.
#   inverter_time:
#     - sensor.date_time

has anyone got the integration working with an X1-Hybrid-G4 inverter? I'm using the wifi3.0 dongle to do the modbus communication.

heyiamluke commented 2 months ago

I've done some work on this and got a fix for the issue : https://github.com/springfall2008/batpred/pull/1324

I've also added in these as the comands to control the inverter:

charge_start_service:
  service: select.select_option
  entity_id: select.solax_manual_mode_select
  option: "Force Charge"
charge_stop_service:
  service: select.select_option
  entity_id: select.solax_manual_mode_select
  option: "Stop Charge and Discharge"
discharge_start_service:
  service: select.select_option
  entity_id: select.solax_manual_mode_select
  option: "Force Discharge"

Then to use these you need the inverter to has_service_api: True

However as the inverter mode also needs to be togled between manual and self-use i've got the three automations described above set up as well. I wonder if there is away to change two options instead of using the automations?

Paulifi commented 2 months ago

I have a Solax X1 Hybrid G4 inverter and think I am seeing this same time error in my log?

2024-08-05 21:00:43.452764 INFO pred_bat: Error: Exception raised strptime() argument 1 must be str, not None
2024-08-05 21:00:43.455156 INFO pred_bat: Error: Traceback (most recent call last):
  File "/config/apps/predbat.py", line 15422, in update_time_loop
    self.update_pred(scheduled=False)
  File "/config/apps/predbat.py", line 14310, in update_pred
    status, status_extra = self.execute_plan()
                           ^^^^^^^^^^^^^^^^^^^
  File "/config/apps/predbat.py", line 12810, in execute_plan
    self.reset_inverter()
  File "/config/apps/predbat.py", line 12787, in reset_inverter
    inverter.disable_charge_window()
  File "/config/apps/predbat.py", line 3910, in disable_charge_window
    self.adjust_charge_window(self.base.midnight_utc, self.base.midnight_utc, self.base.minutes_now)
  File "/config/apps/predbat.py", line 4187, in adjust_charge_window
    self.press_and_poll_button(entity_id)
  File "/config/apps/predbat.py", line 4223, in press_and_poll_button
    time_pressed = datetime.strptime(self.base.get_state_wrapper(entity_id, refresh=True), TIME_FORMAT_SECONDS)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: strptime() argument 1 must be str, not None

2024-08-05 21:00:43.475623 INFO pred_bat: Info: record_status Error: Exception raised strptime() argument 1 must be str, not None
2024-08-05 21:05:00.053218 INFO pred_bat: --------------- PredBat - update at 2024-08-05 21:05:00+01:00 with clock skew 0 minutes, minutes now 1265

I have managed to use some automations to successfully control the charge (not tried discharge yet) using the Modbus power control method, described in https://homeassistant-solax-modbus.readthedocs.io/en/latest/modbus-power-control/#why-use-modbus-power-control.

The Solax modbus integration advises to use this over "manual mode", due to the life of the EEPROM from writing lots of manual mode changes, is this valid?

springfall2008 commented 2 months ago

I've made a change on this branch (untested): https://github.com/springfall2008/batpred/tree/solax You can try if you like, copy inverter.py manually over to your tree.

It will allow a list of services to call e.g:

discharge_start_service:
  - service: select.select_option
    entity_id: select.solax_manual_mode_select
    option: "Force Discharge"
  - service: select.select_option
    entity_id: xxxx
    option: yyyy
heyiamluke commented 1 month ago

I've made a change on this branch (untested): https://github.com/springfall2008/batpred/tree/solax

You can try if you like, copy inverter.py manually over to your tree.

It will allow a list of services to call e.g:


discharge_start_service:

  - service: select.select_option

    entity_id: select.solax_manual_mode_select

    option: "Force Discharge"

  - service: select.select_option

    entity_id: xxxx

    option: yyyy

This doesn't work I get an error "list indices must be integers or slices"

I think it's close to working but I'm on a phone at the moment so will do some debugging when I'm next at the pc.

Paulifi commented 1 month ago

I've made a change on this branch (untested): https://github.com/springfall2008/batpred/tree/solax You can try if you like, copy inverter.py manually over to your tree.

It will allow a list of services to call e.g:

discharge_start_service:
  - service: select.select_option
    entity_id: select.solax_manual_mode_select
    option: "Force Discharge"
  - service: select.select_option
    entity_id: xxxx
    option: yyyy

I've updated to this inverter.py and now get this:

2024-08-07 09:30:25.411719 INFO pred_bat: Error: Exception raised strptime() argument 1 must be str, not None
2024-08-07 09:30:25.414964 INFO pred_bat: Error: Traceback (most recent call last):
  File "/config/apps/predbat.py", line 10944, in run_time_loop
    self.update_pred(scheduled=True)
  File "/config/apps/predbat.py", line 9796, in update_pred
    status, status_extra = self.execute_plan()
                           ^^^^^^^^^^^^^^^^^^^
  File "/config/apps/predbat.py", line 8490, in execute_plan
    inverter.adjust_force_discharge(False, discharge_start_time, discharge_end_time)
  File "/config/apps/inverter.py", line 1635, in adjust_force_discharge
    self.press_and_poll_button(entity_id)
  File "/config/apps/inverter.py", line 1999, in press_and_poll_button
    def press_and_poll_button(self, entity_id):
                           ^^^^^^^^^^^^^^^^^^^^^
TypeError: strptime() argument 1 must be str, not None
springfall2008 commented 1 month ago

Is 'charge_discharge_update_button' set in apps.yaml?

springfall2008 commented 1 month ago

I don't think your update worked, try restarting the add-on?

heyiamluke commented 1 month ago

I've made a change on this branch (untested): https://github.com/springfall2008/batpred/tree/solax

You can try if you like, copy inverter.py manually over to your tree.

It will allow a list of services to call e.g:


discharge_start_service:

  - service: select.select_option

    entity_id: select.solax_manual_mode_select

    option: "Force Discharge"

  - service: select.select_option

    entity_id: xxxx

    option: yyyy

This works perfectly now 🙂

adamrhunt commented 1 month ago

Hi sorry what do I copy it to? And also what apps.yaml settings do I put for solax

heyiamluke commented 1 month ago

pred_bat:
  module: predbat
  class: PredBat

  # Sets the prefix for all created entities in HA - only change if you want to run more than once instance
  prefix: predbat

  # Timezone to work in
  timezone: Europe/London

  #
  # Sensors, currently more than one can be specified and they will be summed up automatically
  # however if you have two inverters only set one of them as they will both read the same.
  #

  solax_modbus_new: true
#  inverter_type: "SX4"

 # Try custom inverter
  inverter_type: MINE
  inverter:
    name: "Solax Hybrid 4"
    has_rest_api: False
    has_mqtt_api: False
    has_service_api: True
    output_charge_control: "power"
    has_charge_enable_time: False
    has_discharge_enable_time: False
    has_target_soc: False
    has_reserve_soc: True
    has_timed_pause: False
    charge_time_format: "S"
    charge_time_entity_is_option: False
    soc_units: "%"
    num_load_entities: 1
    has_ge_inverter_mode: False
    time_button_press: False
    clock_time_format: "%Y-%m-%d %H:%M:%S"
    write_and_poll_sleep: 2
    has_time_window: False
    support_charge_freeze: False
    support_discharge_freeze": False
    has_idle_time: False
    can_span_midnight: True

  charge_start_service:
    - service: select.select_option
      entity_id: select.solax_manual_mode_select
      option: "Force Charge"
    - service: select.select_option
      entity_id: select.solax_charger_use_mode
      option: "Manual Mode"

  charge_stop_service:
    - service: select.select_option
      entity_id: select.solax_manual_mode_select
      option: "Stop Charge and Discharge"
    - service: select.select_option
      entity_id: select.solax_charger_use_mode
      option: "Self Use Mode"

  discharge_start_service:
    - service: select.select_option
      entity_id: select.solax_manual_mode_select
      option: "Force Discharge"
    - service: select.select_option
      entity_id: select.solax_charger_use_mode
      option: "Manual Mode"

  pause_mode:
    entity_id: select.solax_charger_use_mode
    service: select.select_option
    option: "Feedin Priority"

  ##Custom end

  num_inverters: 1
  #
  # Controls/status - must by 1 per inverter
  #

  # Max inverter power from battery
  battery_rate_max:
    - 6000
  # Battery capacity in kWh
  soc_max:
    - 6

  # Solis specific parameters (these are based on https://github.com/wills106/homeassistant-solax-modbus)

  load_today:
    - sensor.solax_house_load
  import_today:
    - sensor.solax_today_s_import_energy
  export_today:
    - sensor.solax_today_s_export_energy
  pv_today:
    - sensor.solax_today_s_solar_energy

  battery_voltage:
    - sensor.solax_battery_voltage_charge

  # This is disabled by default in the Solax integration so it must be manually enabled.
  inverter_time:
    - sensor.date_time

  # This is disabled by default in the Solax integration so it must be manually enabled.
  battery_power:
    - sensor.solax_battery_power_charge
  pv_power:
    - sensor.solax_pv_power_total

  # For Solis inverters we need to add the bypass (backup) load to the main house load. If not used the load_power_1 can be commented out
  load_power:
    - sensor.solax_house_load
  #load_power_1:
  #  - sensor.solis_bypass_load

  soc_percent:
    - sensor.solax_battery_capacity

  soc_kw:
    - sensor.solax_battery_capacity * 6

  reserve:
    - number.solax_backup_discharge_min_soc

  inverter_reserve_max: 97

  battery_min_soc:
    - number.solax_feedin_discharge_min_soc

  # With the Solax integration we need to press a button to send the time to
  charge_discharge_update_button:
    - button.solax_battery_awaken

  #timed_charge_current:
  #  - number.solis_timed_charge_current
  #charge_start_hour:
  #  - number.solis_timed_charge_start_hours
  #charge_start_minute:
  #  - number.solis_timed_charge_start_minutes
  #charge_end_hour:
  #  - number.solis_timed_charge_end_hours
  #charge_end_minute:
  #  - number.solis_timed_charge_end_minutes

  #timed_discharge_current:
  #  - number.solis_timed_discharge_current

  #discharge_start_hour:
  # - number.solis_timed_discharge_start_hours
  #discharge_start_minute:
  #  - number.solis_timed_discharge_start_minutes
  #discharge_end_hour:
  #  - number.solis_timed_discharge_end_hours
  #discharge_end_minute:
  #  - number.solis_timed_discharge_end_minutes

  #energy_control_switch:
  #  - select.solax_manual_mode_select

  # Inverter max AC limit (one per inverter)
  # If you have a second inverter for PV only please add the two values together
  inverter_limit: 5000

  # Export limit is a software limit set on your inverter that prevents exporting above a given level
  # When enabled Predbat will model this limit
  #export_limit:
  # - 3600
  # - 3600
  #
  # The maximum rate the inverter can charge and discharge the battery can be overwritten, this will change
  # the register programming and thus cap the max rates. The default is to use the maximum supported rates (recommended)
  #
  inverter_limit_charge:
   - 6000
  inverter_limit_discharge:
   - 6000

  # Some inverters don't turn off when the rate is set to 0, still charge or discharge at around 200w
  # The value can be set here in watts to model this (doesn't change operation)
  #inverter_battery_rate_min:
  #  - 100

  # Some batteries tail off their charge rate at high soc%
  # enter the charging curve here as a % of the max charge rate for each soc percentage.
  # the default is 1.0 (full power)
  battery_charge_power_curve:
    91 : 0.91
    92 : 0.81
    93 : 0.71
    94 : 0.62
    95 : 0.52
    96 : 0.43
    97 : 0.33
    98 : 0.24
    99 : 0.24
    100 : 0.24

  # Inverter clock skew in minutes, e.g. 1 means it's 1 minute fast and -1 is 1 minute slow
  # Separate start and end options are applied to the start and end time windows, mostly as you want to start late (not early) and finish early (not late)
  # Separate discharge skew for discharge windows only
  inverter_clock_skew_start: 0
  inverter_clock_skew_end: 0
  inverter_clock_skew_discharge_start: 0
  inverter_clock_skew_discharge_end: 0

  # Clock skew adjusts the Appdaemon time
  # This is the time that Predbat takes actions like starting discharge/charging
  # Only use this for workarounds if your inverter time is correct but Predbat is somehow wrong (AppDaemon issue)
  # 1 means add 1 minute to AppDaemon time, -1 takes it away
  clock_skew: 0

  # Set these to match solcast sensor names
  # The regular expression (re:) makes the solcast bit optional
  # If these don't match find your own names in Home Assistant
  #pv_forecast_today: re:(sensor.(solcast_|)(pv_forecast_|)forecast_today)
  #pv_forecast_tomorrow: re:(sensor.(solcast_|)(pv_forecast_|)forecast_tomorrow)
  #pv_forecast_d3: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_3|d3))
  # pv_forecast_d4: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_4|d4))

  # car_charging_energy defines an incrementing sensor which measures the charge added to your car
  # is used for car_charging_hold feature to filter out car charging from the previous load data
  # Automatically set to detect Wallbox and Zappi, if it doesn't match manually enter your sensor name
  # Also adjust car_charging_energy_scale if it's not in kwH to fix the units
  # car_charging_energy: 're:(sensor.myenergi_zappi_[0-9a-z]+_charge_added_session|sensor.wallbox_portal_added_energy)'

  num_cars: 0

  # car_charging_planned is set to a sensor which when positive indicates the car will charged in the upcoming low rate slots
  # This should not be needed if you use Octopus Intelligent Slots which will take priority if enabled
  # The list of possible values is in car_charging_planned_response
  # Auto matches Zappi and Wallbox, or change it for your own
  # car_charging_planned:
  #   - 're:(sensor.wallbox_portal_status_description|sensor.myenergi_zappi_[0-9a-z]+_plug_status)'
  #   - 'connected'

  # car_charging_planned_response:
  #   - 'yes'
  #   - 'on'
  #   - 'true'
  #   - 'connected'
  #   - 'ev connected'
  #   - 'charging'
  #   - 'paused'
  #   - 'waiting for car demand'
  #   - 'waiting for ev'
  #   - 'scheduled'
  #   - 'enabled'
  #   - 'latched'
  #   - 'locked'
  #   - 'plugged in'

  # To make planned car charging more accurate, either using car_charging_planned or Octopus Intelligent
  # specify your battery size in kwh, charge limit % and current car battery soc % sensors/values
  # If you have intelligent the battery size and limit will be extracted from Intelligent directly
  # Set the car SOC% if you have it to give an accurate forecast of the cars battery levels
  # One entry per car if you have multiple cars
  # car_charging_battery_size:
  #   - 75
  # car_charging_limit:
  #   - 're:number.tsunami_charge_limit'
  # car_charging_soc:
  #   - 're:sensor.tsunami_battery'

  # If you have Octopus intelligent, enable the intelligent slot information to add to pricing
  # Will automatically disable if not found, or comment out to disable fully
  # When enabled it overrides the 'car_charging_planned' feature and predict the car charging based on the intelligent plan (unless octopus intelligent charging is False)
  # This matches either the intelligent slot from the Octopus Plugin or from the Intelligent plugin
  #octopus_intelligent_slot: 're:(binary_sensor.octopus_intelligent_slot|re:binary_sensor.octopus_energy_intelligent_dispatching)'
  # octopus_intelligent_slot: 're:binary_sensor.octopus_energy_intelligent_dispatching'
  # octopus_ready_time: 're:time.octopus_energy_intelligent_ready_time'
  # octopus_charge_limit: 're:number.octopus_energy_intelligent_charge_limit'

  # Energy rates
  # Please set one of these three, if multiple are set then Octopus is used first, second rates_import/rates_export and latest basic metric

  # Set import and export entity to point to the Octopus Energy plugin
  # automatically matches your meter number assuming you have only one
  # Will be ignored if you don't have the sensor
  # Or manually set it to the correct sensor names e.g:
  # sensor.octopus_energy_electricity_xxxxxxxxxx_xxxxxxxxxxxxx_current_rate
  # sensor.octopus_energy_electricity_xxxxxxxxxx_xxxxxxxxxxxxx_export_current_rate
  metric_octopus_import: "re:(sensor.(octopus_energy_|)electricity_[0-9a-z]+_[0-9a-z]+_current_rate)"
  metric_octopus_export: "re:(sensor.(octopus_energy_|)electricity_[0-9a-z]+_[0-9a-z]+_export_current_rate)"

  # Standing charge can be set to a sensor (e.g. Octopus) or manually entered in pounds here (e.g. 0.50 is 50p)
  metric_standing_charge: "re:(sensor.(octopus_energy_|)electricity_[0-9a-z]+_[0-9a-z]+_current_standing_charge)"

  # Or set your actual rates across time for import and export
  # If start/end is missing it's assumed to be a fixed rate
  # Gaps are filled with 0
  # rates_import:
  #   -  start: "23:30:00"
  #      end: "05:30:00"
  #      rate: 7.5
  #   -  start: "05:30:00"
  #      end: "23:30:00"
  #      rate: 30.0

  # rates_export:
  #   -  rate: 15.0

  # Can be used instead of the plugin to get import rates directly online
  # Overrides metric_octopus_import and rates_import
  # rates_import_octopus_url : "https://api.octopus.energy/v1/products/FLUX-IMPORT-23-02-14/electricity-tariffs/E-1R-FLUX-IMPORT-23-02-14-A/standard-unit-rates"
  # rates_import_octopus_url : "https://api.octopus.energy/v1/products/AGILE-FLEX-BB-23-02-08/electricity-tariffs/E-1R-AGILE-FLEX-BB-23-02-08-A/standard-unit-rates"

  # Overrides metric_octopus_export and rates_export
  # rates_export_octopus_url: "https://api.octopus.energy/v1/products/FLUX-EXPORT-BB-23-02-14/electricity-tariffs/E-1R-FLUX-EXPORT-BB-23-02-14-A/standard-unit-rates"
  # rates_export_octopus_url: "https://api.octopus.energy/v1/products/AGILE-OUTGOING-BB-23-02-28/electricity-tariffs/E-1R-AGILE-OUTGOING-BB-23-02-28-A/standard-unit-rates/"
  # rates_export_octopus_url: "https://api.octopus.energy/v1/products/OUTGOING-FIX-12M-BB-23-02-09/electricity-tariffs/E-1R-OUTGOING-FIX-12M-BB-23-02-09-A/standard-unit-rates/"

  # Import rates can be overridden with rate_import_override
  # Export rates can be overridden with rate_export_override
  # Use the same format as above, but a date can be included if it just applies for a set day (e.g. Octopus power ups)
  # This will override even the Octopus plugin rates if enabled
  #
  #rates_import_override:
  # -  date: '2023-09-10'
  #    start: '14:00:00'
  #    end: '14:30:00'
  #    rate: 5

  # For pv estimate, leave blank for central estimate, or add 10 for 10% curve (worst case) or 90 or 90% curve (best case)
  # If you use 10 then disable pv_metric10_weight below
  # pv_estimate: 10

  # Days previous is the number of days back to find historical load data
  # Recommended is 7 to capture day of the week but 1 can also be used
  # if you have more history you could use 7 and 14 (in a list) but the standard data in HA only lasts 10 days
  days_previous:
    - 7

  # Days previous weight can be used to control the weighting of the previous load points, the values are multiplied by their
  # weights and then divided through by the total weight. E.g. if you used 1 and 0.5 then the first value would have 2/3rd of the weight and the second 1/3rd
  days_previous_weight:
    - 1

  # Number of hours forward to forecast, best left as-is unless you have specific reason
  forecast_hours: 48

  # The number of hours ahead to count in charge planning (for cost estimates)
  # It's best to set this on your charge window repeat cycle (24) but you may want to set it higher for more variable
  # tariffs like Agile
  forecast_plan_hours: 24

  # Specify the devices that notifies are sent to, the default is 'notify' which goes to all
  #notify_devices:
  #  - mobile_app_treforsiphone12_2

  # Set the frequency in minutes that this plugin is run
  # recommend something that divides by 60 (5, 10 or 15) or you won't trigger at the start of energy price slots
  run_every: 5

  # Battery scaling makes the battery smaller (e.g. 0.9) or bigger than its reported
  # If you have an 80% DoD battery that falsely reports it's kwh then set it to 0.8 to report the real figures
  battery_scaling: 1.0

  # Can be used to scale import and export data, used for workarounds
  import_export_scaling: 1.0

  # Export triggers:
  # For each trigger give a name, the minutes of export needed and the energy required in that time
  # Multiple triggers can be set at once so in total you could use too much energy if all run
  # Creates an entity called 'binary_sensor.predbat_export_trigger_<name>' which will be turned On when the condition is valid
  # connect this to your automation to start whatever you want to trigger
  export_triggers:
    - name: "large"
      minutes: 60
      energy: 1.0
    - name: "small"
      minutes: 15
      energy: 0.25

  # If you have a sensor that gives the energy consumed by your solar diverter then add it here
  # this will make the predictions more accurate. It should be an incrementing sensor, it can reset at midnight or not
  # It's assumed to be in Kwh but scaling can be applied if need be
  #iboost_energy_today: 'sensor.xxxxx'
  #iboost_energy_scaling: 1.0

  notify_devices:
    - mobile_app_lukes_iphone

  solcast_host: 'https://api.solcast.com.au/'
  solcast_api_key: your key 
  solcast_poll_hours: 8

  #threads: 0

  iboost_solar : false

  charge_start_time:
    - select.solax_charger_start_time_1
  charge_end_time:
    - select.solax_charger_end_time_1
  discharge_start_time:
    - select.solax_discharger_start_time_1
  discharge_end_time:
    - select.solax_discharger_end_time_1

#  rates_import_override:
#   - date: '2024-08-15'
#     start: '13:00:00'
#     end: '14:00:00'
#      rate: 0
#     load_scaling: 0.0

  carbon_intensity: 're:(sensor.carbon_intensity_uk)'

#  scheduled_charge_enable:
#   - off
#  scheduled_discharge_enable:
#   - off

This is currently mine. Not cleaned it up.

Paulifi commented 1 month ago
apps.yaml

This is currently mine. Not cleaned it up.

I've tested this and it seems to work nicely!

I do get warnings on my logs

2024-08-20 10:10:34.295385 INFO pred_bat: Warn: Inverter 0 unable to find service template for charge_stop_service
2024-08-20 10:10:34.297908 INFO pred_bat: Inverter 0 current discharge rate is 2600.0 and new target is 6000
2024-08-20 10:10:34.300566 INFO pred_bat: Adjust reserve to default (as set_reserve_enable is true)
2024-08-20 10:10:34.303238 INFO pred_bat: Inverter 0 Current Reserve is 30.0 % and new target is 10.0 %
2024-08-20 10:10:34.317523 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:36.341497 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:38.365587 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:40.389097 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:42.412208 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:44.437343 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value
2024-08-20 10:10:46.452940 INFO pred_bat: Warn: Inverter 0 Trying to write 10.0 to reserve didn't complete got 30
2024-08-20 10:10:46.471217 INFO pred_bat: Info: record_status Warn: Inverter 0 write to reserve failed
2024-08-20 10:10:46.556643 INFO pred_bat: Completed run status Idle with Errors reported (check log)
2024-08-20 10:10:46.617433 INFO pred_bat: Saved current settings to /config/predbat_config.json
gcoan commented 1 month ago

I've tested this and it seems to work nicely!

I do get warnings on my logs

2024-08-20 10:10:34.317523 INFO pred_bat: Warn: Failed to decode response <Response [500]> from http://supervisor/core/api/services/number/set_value

This looks like another side effect of #1373

What version of Predbat are you running?

springfall2008 commented 1 month ago

Hopefully fixed now, please raise a new ticket for new issues