From 2d2077226c2da62187cb5379591b1f297fd264d3 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Mon, 8 Jan 2024 19:24:51 +0000 Subject: [PATCH 01/34] Review and update configuration guide --- docs/apps-yaml.md | 4 ++ docs/configuration-guide.md | 87 ++++++++++++++++++------------------ docs/customisation.md | 56 +++++++++++------------ docs/install.md | 12 +++-- docs/installation-summary.md | 16 ++++--- 5 files changed, 94 insertions(+), 81 deletions(-) diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 61729ac2b..1247e4df6 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -216,6 +216,10 @@ then it's recommended that Solcast is only configured for the PV connected to th Solcast produces 3 forecasted PV estimates, the 'central' (50% or most likely to occur) PV forecast, the '10%' (worst case) PV forecast, and the '90%' (best case) PV forecast.
By default Predbat will use the central estimate and applies to it the **input_number.pv_metric10_weight** weighting of the 10% (worst case) estimate. +Predbat models cloud coverage by using the difference between the PV and PV10 forecasts to work out a cloud factor, +this modulates the PV output predictions up and down accordingly as if there were passing clouds. +This can have an impact on planning, especially for things like freeze charging which could assume the PV will cover the house load but it might not due to clouds. + - **pv_estimate** in `apps.yaml` can be used to configure Predbat to always use the 10% forecast by setting the configuration item to '10', or '90' to always use the 90% PV estimate (not recommended!).
Set to blank or delete / comment out the line to use the default central estimate. diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index a0dc4f8c1..e1a1b4ce1 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -1,59 +1,60 @@ # Configuration guide -First get the basics set up, ensure you have the inverter controls configured, the historical load data and the solar forecast -in place. Make sure your energy rates are configured correctly for import and export. +First get the basics set up, ensure you have the [inverter controls configured](install.md#inverter-control-integration-install-givtcpsolax-modbus), +you have [configured apps.yaml](apps-yaml.md) to your setup, and the [solar forecast](install.md#solcast-install) is in place. +Make sure your [energy rates](energy-rates.md) are configured correctly for import and export. -If you have an EV try to set up the car charging sensor correctly so the tool can tell what part of your historical load is EV -charging. You might want to also set to the car charging plan so you can predict when your car is plugged in and how much it will charge. +If you have an EV try to set up the [car charging sensor](apps-yaml.md#car-charging-integration) correctly so Predbat can tell what part of your historical load is EV charging. +You might want to also set to the [car charging plan](apps-yaml.md#planned-car-charging) so you can predict when your car is plugged in and how much it will charge. -You should try to tune **inverter_loss**, **battery_loss** and **battery_loss_discharge** to the correct % loss for your system -in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. Also set **inverter_hybrid** to -True or False depending on if you have a Hybrid or AC-Coupled battery. +It is recommended that you [create a dashboard page](output-data.md#displaying-output-data) with all the required entities to control Predbat. -The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a cost on using your battery for charging -and discharging. In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then -each cycle is 19kWh and so the cost is £4000 / 19 / 6000 = 3.5p. If you configure this number higher then more expensive plans -will be selected which avoids charging and discharging your battery as much. The default is 2p but can be set to 0 if you want -to turn this off. Note that the cycle cost will not be included in the cost predictions, just taken into account in the planning -stage. _Note: Setting this to a non-zero value will increase your daily cost, but will reduce your home battery usage._ +You should try to tune **input_number.inverter_loss**, **input_number.battery_loss** and **input_number.battery_loss_discharge** to the correct % loss for your system +in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. +Also set **switch.inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. -Cloud coverage is modelled by using difference between PV and PV10 is used to work out a cloud factor, this modulates the PV -output predictions up and down accordingly as if there were passing clouds. This can have an impact on planning, especially for -things like freeze charging which could assume the PV will cover the house load but it might not due to clouds. +The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence on using your battery for charging and discharging.
+In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each cycle is 19kWh and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. +If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. +The default is 2p but can be set to 0 if you want to turn this feature off. +Note that the cycle cost will not be included in the cost predictions that Predbat produces, its just taken into account in the planning stage.
+_NB: Setting this to a non-zero value will increase your daily cost, but will reduce your home battery usage._ -- **input_number.forecast_plan_hours** - the number of hours after the next charge slot to include in the plan, default 24 hours -is the suggested amount (to match energy rate cycles) +- **input_number.forecast_plan_hours** - the number of hours after the next charge slot to include in the plan, default 24 hours is the suggested amount (to match energy rate cycles) -- **set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter +- **switch.set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter setups to avoid cross charging when batteries are out of balance. -Below is a guide to some of the tariff options, in theory most tariffs will work out of the box but still it's worth reviewing your settings. +Below is a guide to some of the electricity tariff options and a set of recommended Predbat settings for each tariff type. +In theory most tariffs will work out of the box but still it's worth reviewing your settings. ## Fixed daily rates With a fixed daily rate tariff you will just be predicting the battery levels, no charging or discharging is required although it won't hurt if you leave these options enabled. +You should set **select.predbat_mode** to 'Monitor'. + ## Cheap night rate with bad export rate (e.g. Octopus Go, Economy 7 etc) -In this scenario you will want to charge overnight based on the next day's solar forecast. +In this scenario you will want to charge overnight based on the next day's solar forecast and don't want Predbat to force discharge your battery. Recommended settings - these must be changed in Home Assistant once Predbat is running: | Item | Value | Comment | |---------|---------------|-------------| -| select.predbat_mode | Control Charge | You want the tool to calculate and control charging | +| select.predbat_mode | Control Charge | You want Predbat to calculate and control charging | | input_number.predbat_best_soc_keep | 2.0 | Tweak this to control what battery level you want to keep as a backup in case you use more energy | -| switch.predbat_combine_charge_slots | True | Use one big charge slot | +| switch.predbat_combine_charge_slots | True | Use one big charge slot | If you are using expert mode then these options maybe worth reviewing: | Item | Value | Comment | |---------|---------------|-------------| -| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | +| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | | switch.predbat_combine_charge_slots | True | As you have just one overnight rate then one slot is fine | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | -You should set **select.predbat_mode** to Control Charge +You should set **select.predbat_mode** to 'Control Charge' ## Cheap night rate, with a good export rate (e.g. Intelligent Octopus with Octopus Outgoing) @@ -61,47 +62,47 @@ Follow the instructions from the _Cheap Night rate_ above, but also you will als | Item | Value | Comment | |---------|---------------|-------------| -| select.predbat_mode | Control Charge & Discharge | You want the tool to calculate and control charging and discharging | +| select.predbat_mode | Control Charge & Discharge | You want Predbat to calculate and control charging and discharging | | input_number.predbat_best_soc_keep | 2.0 | Tweak this to control what battery level you want to keep as a backup in case you use more energy | -| switch.predbat_combine_charge_slots | True | Use one big charge slot | +| switch.predbat_combine_charge_slots | True | Use one big charge slot | If you are using expert mode then these options maybe worth reviewing, otherwise ignore this: | Item | Value | Comment | |---------|---------------|-------------| -| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | -| switch.predbat_combine_charge_slots | ? | Going to False will allow charging at more expensive day rates when it's worth it to export mode | +| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | +| switch.predbat_combine_charge_slots | ? | Setting to False will allow charging at more expensive day rates when it's worth it to export more | | input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | | input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | | input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | ? | Can be set non-zero if you want to force a minimum charge level | -You should set **select.predbat_mode** to Control Charge & Discharge +You should set **select.predbat_mode** to 'Control Charge & Discharge' ## Multiple rates for import and export (e.g. Octopus Flux & Cozy) -Follow the instructions from Cheap Night rate above, but also you will want to have automatic discharge when the export rates are profitable. +Follow the instructions from _Cheap Night_ rate above, but also you will want to have automatic discharge when the export rates are profitable. Recommended settings - these must be changed in Home Assistant once Predbat is running: | Item | Value | Comment | |---------|---------------|-------------| -| select.predbat_mode | Control Charge & Discharge | You want the tool to calculate and control charging and discharging | +| select.predbat_mode | Control Charge & Discharge | You want Predbat to calculate and control charging and discharging | | input_number.predbat_best_soc_keep | 0.5 | Use the full battery without going empty | -| switch.predbat_combine_charge_slots | True | Use one big charge slot | +| switch.predbat_combine_charge_slots | True | Use one big charge slot | If you are using expert mode then these options maybe worth reviewing, otherwise ignore this: | Item | Value | Comment | |---------|---------------|-------------| -| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | -| switch.predbat_combine_charge_slots | ? | Going to False will allow charging at more expensive day rates when it's worth it to export mode | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | +| switch.predbat_combine_charge_slots | ? | Setting to False will allow charging at more expensive day rates when it's worth it to export more | +| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | | input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | | input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | -You should set **select.predbat_mode** to Control Charge & Discharge +You should set **select.predbat_mode** to 'Control Charge & Discharge' ## Half hourly variable rates (e.g. Octopus Agile) @@ -109,19 +110,19 @@ Recommended settings - these must be changed in Home Assistant once Predbat is r | Item | Value | Comment | |---------|---------------|-------------| -| select.predbat_mode | Control Charge & Discharge | You want the tool to calculate and control charging and discharging | +| select.predbat_mode | Control Charge & Discharge | You want Predbat to calculate and control charging and discharging | | input_number.predbat_best_soc_keep | 0.5 | Use the full battery without going empty | -| switch.predbat_combine_charge_slots | True | Use one big charge slot | +| switch.predbat_combine_charge_slots | True | Use one big charge slot | If you are using expert mode then these options maybe worth reviewing, otherwise ignore this: | Item | Value | Comment | |---------|---------------|-------------| -| input_number.predbat_forecast_plan_hours | 24-48 | If you set this to 24 then you will have quicker updates, going to 36/48 for a longer plan | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_forecast_plan_hours | 24-48 | If you set this to 24 then you will have quicker updates, going to 36/48 for a longer plan | +| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | | input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | | input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | | switch.calculate_fast_plan | False | The fast plan feature reduces accuracy of planning | -You should set **select.predbat_mode** to Control Charge & Discharge +You should set **select.predbat_mode** to 'Control Charge & Discharge' diff --git a/docs/customisation.md b/docs/customisation.md index 1c4b1ce79..917132f3b 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -1,7 +1,6 @@ # Customisation -These are configuration items that you can modify to fit your needs, you can configure these in Home Assistant directly. -Changing the items in apps.yaml will have no effect. +These are the Predbat configuration items in Home Assistant that you can modify to fit your needs, you can configure these in Home Assistant directly. See [Displaying output data](output-data.md#displayng-output-data) for information on how to view and edit these entities within @@ -81,9 +80,9 @@ legacy reasons but please adjust. **switch.inverter_hybrid** When True you have a hybrid inverter so no inverter losses for DC charging. When false you have inverter losses as it's AC coupled battery. -**input_number.metric_battery_cycle** (_expert mode_) Sets the cost in pence per kWh of using your battery for -charging and discharging. Higher numbers will reduce battery cycles at the expensive of higher energy costs. -Figures of around 1p-5p are recommended, the default is 0. +**input_number.metric_battery_cycle** (_expert mode_) Sets the cost in pence per kWh of using your battery for charging and discharging. +Higher numbers will reduce battery cycles at the expense of using higher energy costs. +Figures of around 1p-5p are recommended, the default is 2p. **input_number.predbat_metric_battery_value_scaling** (_expert mode_) Can be used to scale the value of the energy in the battery at the end of the plan. The battery value is accounted for in the optimisations at the lowest future @@ -114,7 +113,7 @@ A value of 0.15 is recommended. ## Historical load data -The historical load data is taken from the load sensor as configured in apps.yaml and the days are selected +The historical load data is taken from the load sensor as configured in `apps.yaml` and the days are selected using **days_previous** and weighted using ***days_previous_weight** in the same configuration file **switch.predbat_load_filter_modal** (_expert mode_) when enabled will automatically discard the lowest daily consumption @@ -208,49 +207,50 @@ you want to discharge late. ## Battery margins and metrics options -**best_soc_keep** is minimum battery level to try to keep above during the whole period of the simulation time, -soft constraint only (use min for hard constraint). It's usually good to have this above 0 to allow some margin +**input_number.best_soc_keep** is the minimum battery level in kWh that Predbat will to try to keep above during the whole period of the simulation time. +This is a soft constraint only so it is possible for your SoC to drop below this - use **input_number.best_soc_min** for hard SoC constraint that will always be maintained. +It's usually good to have best_soc_keep set to a value above 0 to allow some margin in case you use more energy than planned between charge slots. -**best_soc_min** (_expert mode_) sets the minimum charge level (in kWh) for charging during each slot and the -minimum discharge level also (set to 0 if you want to skip some slots). If you set this non-zero you will need +**input_number.best_soc_min** (_expert mode_) sets the minimum charge level (in kWh) for charging during each slot and the +minimum discharge level also (set to 0 if you want to skip some slots). If you set this to a non-zero value you will need to use the low rate threshold to control which slots you charge from or you may charge all the time. -**best_soc_max** (_expert mode_) sets the maximum charge level (in kWh) for charging during each slot. +**input_number.best_soc_max** (_expert mode_) sets the maximum charge level (in kWh) for charging during each slot. A value of 0 disables this feature. -**combine_charge_slots** Controls if charge slots of > 30 minutes can be combined. When disabled they will be split up, +**switch.combine_charge_slots** Controls if charge slots of > 30 minutes can be combined. When disabled they will be split up, increasing run times but potentially more accurate for planning. Turn this off if you want to enable ad-hoc import during long periods of higher rates but you wouldn't charge normally in that period (e.g. pre-charge at day rate before a saving session). The default is enable (True) -**combine_discharge_slots** (_expert mode_) Controls if discharge slots of > 30 minute can be combined. When disabled +**switch.combine_discharge_slots** (_expert mode_) Controls if discharge slots of > 30 minute can be combined. When disabled they will be split up, increasing run times but potentially more accurate for planning. The default is disabled (False) -**metric_min_improvement** (_expert mode_) sets the minimum cost improvement that it's worth lowering the battery SOC % for. +**input_number.metric_min_improvement** (_expert mode_) sets the minimum cost improvement that it's worth lowering the battery SOC % for. If it's 0 then this is disabled and the battery will be charged less if it's cost neutral. If you use **pv_metric10_weight** then you probably don't need to enable this as the 10% forecast does the same thing better Do not use if you have multiple charge windows in a given period as it won't lead to good results (e.g. Agile) You could even go to something like -0.1 to say you would charge less even if it cost up to 0.1p more (best used with metric10) -**metric_min_improvement_discharge** (_expert mode_) Sets the minimum pence cost improvement it's worth doing a forced discharge (and export) for. +**input_number.metric_min_improvement_discharge** (_expert mode_) Sets the minimum pence cost improvement it's worth doing a forced discharge (and export) for. A value of 0.1 is the default which prevents any marginal discharges. If you increase this value (e.g. you only want to discharge/forced export if definitely very profitable), then discharges will become less common and shorter. -**rate_low_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets +**input_number.rate_low_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets the threshold below average rates as the minimum to consider for a charge window, 0.8 = 80% of average rate If you set this too low you might not get enough charge slots. If it's too high you might get too many in the 24-hour period which makes optimisation harder. -**rate_high_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets +**input_number.rate_high_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets the threshold above average rates as to the minimum export rate to consider exporting for - 1.2 = 20% above average rate If you set this too high you might not get any export slots. If it's too low you might get too many in the 24-hour period. -**metric_future_rate_offset_import** (_expert mode_) Sets an offset to apply to future import energy rates that are +**input_number.metric_future_rate_offset_import** (_expert mode_) Sets an offset to apply to future import energy rates that are not yet published, best used for variable rate tariffs such as Agile import where the rates are not published until 4pm. If you set this to a positive value then Predbat will assume unpublished import rates are higher by the given amount. -**metric_future_rate_offset_export** (_expert mode_) Sets an offset to apply to future export energy rates that are +**input_number.metric_future_rate_offset_export** (_expert mode_) Sets an offset to apply to future export energy rates that are not yet published, best used for variable rate tariffs such as Agile export where the rates are not published until 4pm. If you set this to a negative value then Predbat will assume unpublished export rates are lower by the given amount. @@ -263,32 +263,32 @@ in the charts template in Github). ## Inverter control options -**set_status_notify** Enables mobile notification about changes to the Predbat state (e.g. Charge, Discharge etc). On by default. +**switch.set_status_notify** Enables mobile notification about changes to the Predbat state (e.g. Charge, Discharge etc). On by default. -**set_inverter_notify** Enables mobile notification about all changes to inverter registers (e.g. setting window, turning discharge on/off). +**switch.set_inverter_notify** Enables mobile notification about all changes to inverter registers (e.g. setting window, turning discharge on/off). Off by default. **switch.predbat_set_charge_low_power** Enables low power charging mode where the max charge rate will be limited to the lowest possible to meet the charge target. Only really effective for charge windows >30 minutes. Off by default. -**set_reserve_enable** (_expert_mode_) When enabled the reserve setting is used to hold the battery charge level +**switch.set_reserve_enable** (_expert_mode_) When enabled the reserve setting is used to hold the battery charge level once it has been reached or to protect against discharging beyond the set limit. Enabled by default. -**set_charge_freeze** (_expert mode_) When enabled will allow Predbat to hold the current battery level while drawing +**switch.set_charge_freeze** (_expert mode_) When enabled will allow Predbat to hold the current battery level while drawing from the grid/solar as an alternative to charging. Enabled by default. -**set_discharge_freeze_only** (_expert mode_) When enabled forced discharge is prevented, but discharge freeze can be used +**switch.set_discharge_freeze_only** (_expert mode_) When enabled forced discharge is prevented, but discharge freeze can be used (if enabled) to export excess solar rather than charging the battery. This is useful with tariffs that pay you for solar exports but don't allow forced export (brown energy). -If you have **inverter_hybrid** set to False then if **inverter_soc_reset** (_expert mode_) is set to True then the +If you have **switch.inverter_hybrid** set to False then if **switch.inverter_soc_reset** (_expert mode_) is set to True then the target SOC % will be reset to 100% outside a charge window. This may be required for AIO inverter to ensure it charges from solar. -**set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, a value of 4 is the +**input_number.set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, a value of 4 is the minimum and recommended to make use of the full battery -**inverter_soc_reset** (_expert mode_) When enabled the target SOC for the inverter(s) will be reset to 100% +**switch.inverter_soc_reset** (_expert mode_) When enabled the target SOC for the inverter(s) will be reset to 100% when a charge slot is not active, this can be used to workaround some firmware issues where the SOC target is used for solar charging as well as grid charging. When disabled the SOC % will not be changed after a charge slot. This is disabled by default. @@ -311,7 +311,7 @@ Enable the **switch.predbat_balance_inverters_enable** switch in Home Assistant ## iBoost model options -iBoost model, when enabled with **iboost_enable** tries to model excess solar energy being used to heat +iBoost model, when enabled with **switch.iboost_enable** tries to model excess solar energy being used to heat hot water (or similar). The predicted output from the iBoost model is returned in **iboost_best**. The following entities are only available when you turn on iboost enable: diff --git a/docs/install.md b/docs/install.md index a5776474c..864459a2e 100644 --- a/docs/install.md +++ b/docs/install.md @@ -239,13 +239,19 @@ As described above, the basic configuration of Predbat is held in the `apps.yaml When Predbat first runs it will create a number of output and configuration control entities in Home Assistant which are used to fine-tune how Predbat operates. The entities are all prefixed *predbat* and can be seen (and changed) from the Settings / Devices & Services / Entities list in Home Assistant. +It is recommended that you create a dashboard page with all the required entities to control Predbat +and another page to display Predbat's charging and discharging plan for your battery. + +The [Output Data](output-data.md) section describes these points in more detail. + The Home Assistant entity **predbat.status** contains details of what status Predbat is currently in (e.g. Idle, Charging, Error). Detailed progress messages and error logging is written to the Predbat logfile which you can view within Home Assistant using a file editor. -It is recommended that you create a dashboard page with all the required entities to control Predbat -and another page to display Predbat's charging and discharging plan for your battery. +The [Predbat Configuration Guide](configuration-guide.md) gives an overview of the main Predbat configuration items and +detail of 'standard Predbat configuration' settings for different electricity tariff types - e.g. a cheap overnight rate, +multiple import rates during the day, and variable tariffs such as Agile, etc. -The [Output Data](output-data.md) section describes all these points in more detail. +The detailed [Predbat Customisation Guide](customisation.md) details all the Predbat configuration items (switches, input numbers, etc) in Home Assistant, and what each of them does. ## Ready to light the touch-paper diff --git a/docs/installation-summary.md b/docs/installation-summary.md index 689cea695..83736f9a5 100644 --- a/docs/installation-summary.md +++ b/docs/installation-summary.md @@ -16,8 +16,9 @@ see the [video guides](video-guides.md) section for those and other videos Create an automation to update Solcast a times a day, and check that you see the Solcast data in Home Assistant 6. Follow the [Energy Rates](energy-rates.md) instructions to tell Predbat what your import and export energy rates are. If you use Octopus Energy then this includes installing the Octopus Energy integration (if you haven't already) - [Octopus Energy](energy-rates.md#octopus-energy-integration) -7. Edit Predbat's `apps.yaml` configuration file (which will be in either the directory `/addon_configs/46f69597_appdaemon-predbat/apps` -or `/config/appdaemon/apps/predbat/config/` depending on which Predbat install method you used) to match your system - [apps.yaml settings](apps-yaml.md) +7. Edit Predbat's `apps.yaml` configuration file to to match your system - [apps.yaml settings](apps-yaml.md)
+The apps.yaml file will be in either the directory `/addon_configs/46f69597_appdaemon-predbat/apps` +or `/config/appdaemon/apps/predbat/config/` depending on which Predbat install method you used. - Inverter settings match the names in GivTCP - should be automatic (but if you have 2 names you will have to edit apps.yaml) - You have set the right number of inverters (**num_inverters**) - Adjust your **inverter_limit** and **export_limit** as required @@ -25,15 +26,16 @@ or `/config/appdaemon/apps/predbat/config/` depending on which Predbat install m - That the Solcast plugin is matching the configuration correctly - should be automatic - If you have a car charging sensor you might want to add that also to help make predictions more accurate 8. Add the Predbat entities to your dashboard - [Output data](output-data.md) -9. Follow the configuration guide to tune things for your system - [Configuration guide](configuration-guide.md) -10. Set up the Predbat Plan card so you can check what Predbat is planning to do - [Create the Predbat Plan card](predbat-plan-card.md) -11. Set up the Apex Charts for other views on what Predbat is doing - [Creating the charts](creating-charts.md) -12. Then check Predbat is working correctly: +9. Follow the [Configuration Guide](configuration-guide.md) to set 'standard' Predbat configuration settings depending on your import and export tariffs +10. The detailed [Customisation Guide](customisation.md) lists all Predbat's controls and settings in Home Assistant that can be tuned for your system +11. Set up the Predbat Plan card so you can check what Predbat is planning to do - [Create the Predbat Plan card](predbat-plan-card.md) +12. Set up the Apex Charts for other views on what Predbat is doing - [Creating the charts](creating-charts.md) +13. Then check Predbat is working correctly: - Look at the Predbat AppDaemon log file and make sure you have no errors or warnings that are unexpected - Comment out or delete the [template: True line in apps.yaml](apps-yaml.md#basics) when you are ready to start Predbat - The **predbat.status** in Home Assistant should be 'Idle' (if there are any errors then they are reported here too) - Start with **select.predbat_mode** set to 'Monitor' but remember to change it later to enable Predbat to control your inverter -13. Look at the [FAQ](faq.md) for help +14. Look at the [FAQ](faq.md) for help Overview of the key configuration elements: From 6025df9e7a808a6dca2dec8cd45001ceba372474 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Mon, 8 Jan 2024 20:04:12 +0000 Subject: [PATCH 02/34] Review & refine 'what does predbat do' --- docs/install.md | 4 ++- docs/installation-summary.md | 2 +- docs/output-data.md | 23 ++++++++++++++-- docs/what-does-predbat-do.md | 51 ++++++++++++++++++------------------ 4 files changed, 51 insertions(+), 29 deletions(-) diff --git a/docs/install.md b/docs/install.md index 864459a2e..3fe6fa16b 100644 --- a/docs/install.md +++ b/docs/install.md @@ -256,7 +256,9 @@ The detailed [Predbat Customisation Guide](customisation.md) details all the Pre ## Ready to light the touch-paper By now you should have successfully installed and configured Predbat in AppDaemon and the other components it is dependent upon (e.g. GivTCP, Solcast, Octopus Integration). -You have checked the logfile doesn't have any errors (there is a lot of output in the logfile, this is normal). + +You have checked the [Predbat AppDaemon log file](output-data.md#predbat-logfile) doesn't have any errors (there is a lot of output in the logfile, this is normal). + You have configured predbat's control entities, created a couple of dashboard pages to control and monitor Predbat, and are ready to start Predbat running. In order to enable Predbat you must delete the 'template: True' line in `apps.yaml` once you are happy with your configuration. diff --git a/docs/installation-summary.md b/docs/installation-summary.md index 83736f9a5..3e08ac2bb 100644 --- a/docs/installation-summary.md +++ b/docs/installation-summary.md @@ -31,7 +31,7 @@ or `/config/appdaemon/apps/predbat/config/` depending on which Predbat install m 11. Set up the Predbat Plan card so you can check what Predbat is planning to do - [Create the Predbat Plan card](predbat-plan-card.md) 12. Set up the Apex Charts for other views on what Predbat is doing - [Creating the charts](creating-charts.md) 13. Then check Predbat is working correctly: - - Look at the Predbat AppDaemon log file and make sure you have no errors or warnings that are unexpected + - Look at the [Predbat AppDaemon log file](output-data.md#predbat-logfile) and make sure you have no errors or warnings that are unexpected - Comment out or delete the [template: True line in apps.yaml](apps-yaml.md#basics) when you are ready to start Predbat - The **predbat.status** in Home Assistant should be 'Idle' (if there are any errors then they are reported here too) - Start with **select.predbat_mode** set to 'Monitor' but remember to change it later to enable Predbat to control your inverter diff --git a/docs/output-data.md b/docs/output-data.md index eba56bc4a..bb11f1dbc 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -124,11 +124,30 @@ The calculated best results under PV 10% scenario: - binary_sensor.predbat_car_charging_slot - A binary sensor suggesting when to charge your car (if the car planning is enabled) -## Sample Predbat data out +## Sample Predbat data out dashboard ![image](https://github.com/springfall2008/batpred/assets/48591903/5c73cd6e-3110-4ecd-af42-7e6d156af4b2) -## Monitoring that Predbat and GivTCP are running OK +## Predbat Logfile + +Predbat writes detailed logging, status and progress activity information to a logfile as it runs and so this file should be checked if **predbat.status** reports an error, +or if you want to verify that Predbat is running OK. + +There is a lot of output in the logfile, this is normal! + +Depending upon whether you have used the [combined AppDaemon/Predbat add-on installation method](install.md#appdaemon-predbat-combined-install) or the +[HACS, Appdaemon add-on then Predbat installation method](install.md#predbat-installation-into-appdaemon), the logfile will be held in one of two directories in Home Assistant: + +- `/addon_configs/46f69597_appdaemon-predbat/predbat.log` if you used the combined AppDaemon/Predbat add-on installation method + +or + +- `/homeassistant/appdaemon/appdaemon.log` if you used the HACS, AppDaemon add-on then Predbat installation method + +You will need to use a file editor within Home Assistant (e.g. either the File editor or Studio Code Server add-on's) +to view Predbat's logfile - see [editing configuration files within Home Assistant](install.md#editing-configuration-files-in-home-assistant) if you need to install an editor. + +## Automated monitoring that Predbat and GivTCP are running OK With GivTCP and Predbat performing an important function, managing your battery charging and discharging to best reduce your electricity bills, you may find these automations useful to monitor that GivTCP and Predbat are running OK, and if not, to raise an alert on your mobile device. diff --git a/docs/what-does-predbat-do.md b/docs/what-does-predbat-do.md index 948a0275f..87e92d47c 100644 --- a/docs/what-does-predbat-do.md +++ b/docs/what-does-predbat-do.md @@ -1,21 +1,22 @@ # What does Predbat do? -Predbat runs every 5 minutes and will automatically update its prediction for the home battery levels for the next period, -up to a maximum of 48 hours. It will automatically decide when to charge and discharge your battery to achieve the best cost -metric within the parameters you have set. It uses the solar production forecast from Solcast combined with your historical -energy use to make this prediction. +Predbat is a home battery automation program. + +It automatically runs every 5 minutes and will update its prediction for the home battery levels for the next period, up to a maximum of 48 hours ahead. +Predbat will automatically decide when to charge and discharge your battery to achieve the best (lowest) cost spend within the parameters you have set. +It uses the solar production forecast from Solcast combined with your historical +energy usage to make this prediction. - The output is a prediction of the battery levels, charging slots, discharging slots, costs and import and export amounts. -- Costs are based on energy pricing data, either manually configured (e.g. 7p from 11pm-4pm and 35p otherwise) or by using the Octopus Plugin +- Costs are based on energy pricing data, either manually configured (e.g. 7p from 11pm-4pm and 35p otherwise) or by using the Octopus Energy integration - Both import and export rates are supported. - Intelligent Octopus is also supported and takes into account allocated charging slots. -- The solar forecast used is the central scenario from Solcast (50%) with a weighting towards the more pessimistic (10%) scenario. +- The solar forecast used is the central scenario from Solcast (50%) with a configurable weighting towards the more pessimistic (10%) scenario. - The charging and discharging controls are automatically programmed into the inverter. -- Automatic planning of export slots is also supported, when enabled Batpred can start a forced discharge of the battery if -the export rates are high and you have spare capacity. +- Automatic planning of export slots is also supported, when enabled Predbat can start a forced discharge of the battery if the export rates are high and you have spare capacity. - Historical load data is used to predict your consumption, optionally car charging load can be filtered out of this data. - Predbat can be configured to manage the charging of your EV and take into account its load on the house during these periods. -- Multiple inverter support depends on running all inverters in lockstep. +- Multiple inverter support is included but depends on all inverters running in lockstep. ## Terminology @@ -28,36 +29,36 @@ the export rates are high and you have spare capacity. - **Import** - Electricity drawn from the grid to be used in the home or to charge the battery - **Export** - Electricity from your home from the battery or solar which is sent to the grid. - **PV** - Solar power that is generated in your home -- **Inverter** - The box that converts DC energy from solar or from your battery into AC power for your home and the grid. It also -converts AC power from the grid into DC to charge a battery. +- **Inverter** - The box that converts DC energy from solar or from your battery into AC power for your home and the grid. +The inverter also converts AC power from the grid into DC to charge a battery. - **Hybrid inverter** - An inverter that can charge a battery from solar directly using DC power as well as charging it from AC power from the grid. -- **AC Coupled** - A battery that comes with it's own inverter and is always charge or discharged with AC (using an internal inverter) +- **AC Coupled** - A battery that comes with it's own inverter and is always charged or discharged with AC (using an internal inverter) - **Slot** - A period of time where Predbat performs an action e.g. charging. In Predbat everything is a multiple of 5 minutes. - - Charge slots are always multiples of 30 minutes and align to a 30-minute boundary to match the way energy rates are allocated. + - Charge slots are always in multiples of 30 minutes and align to a 30-minute boundary to match the way energy rates are allocated. - Discharge slots can be any multiple of 5 minutes and always finish on a 30-minute boundary. ### Predbat modes -When you first install Predbat it will be in Monitor Only mode. +When you first install Predbat it will be in 'Monitor' mode. -Can you configure the mode of operation using the drop down menu in **select.predbat_mode**. -You will find a full description of the modes under: [Predbat Monitor Mode](customisation.md#predbat-monitor-mode) +You can configure Predbat's mode of operation using the drop down menu in **select.predbat_mode**. +You will find a full description of [Predbat Modes](customisation.md#predbat-mode) in the Customisation Guide. Once you are ready for Predbat to take control move this setting to one of the active control modes. ### Predbat status -The current Predbat status is reported in **predbat.status** +The current Predbat status is reported in the Home Assistant entity **predbat.status**: - **Idle** - This is the default, the load will be covered by solar and/or battery. Excess solar will charge the battery or be -exported if the battery is full. This will be described as ECO Mode for Givenergy inverters but other inverters use different terminology. +exported if the battery is full. This is described as 'ECO' Mode for GivEnergy inverters but other inverters use different terminology. -- **Charge** - The battery charges from the grid and the grid also covers any load. Solar power will also be used to charge the battery. -- **Charge Freeze** - The current battery level is held and the grid/solar covers any load. Solar power will also be used to charge the battery. -- **Hold Charge** - A type of charge where the target % is the same as the current %, effectively the same as a charge freeze (but without being explicitly selected) -- **No Charge** - A charge where the target % is lower than the current battery level so there will be no charging unless the usage is unexpectedly high. +- **Charging** - The battery charges from the grid and the grid also covers any load. Solar power will also be used to charge the battery. +- **Freeze charging** - The current battery level is held and the grid/solar covers any load. Solar power will also be used to charge the battery. +- **Hold charging** - A type of charge where the target SOC % is the same as the current SOC %, effectively the same as a charge freeze (but without being explicitly selected). +- **No Charge** - A charge where the target SOC % is lower than the current battery SOC level so there will be no charging unless the usage is unexpectedly high. -- **Discharge** - A force discharge slot where the battery is exported to the grid. The battery covers the load. Any solar generated will be exported. -- **Discharge Freeze** - A slot where the battery covers the load but charging is disabled, thus any solar generated will be exported. +- **Discharging** - The battery is being force-discharged. The house load will be covered by the battery and any excess is exported to the grid. Any solar generated will be exported. +- **Freeze discharging** - The battery is covering the load but charging is disabled, thus any solar generated will be exported. -- **Error** - There is a configuration error or other problem, you should check the AppDaemon log in home assistant for more details (Settings, System, Logs, AppDaemon) +- **Error** - There is a configuration error or other problem, you should check the [Predbat AppDaemon log file](output-data.md#predbat-logfile) for more details. From d27e014afb67d6d0bb92e6690e4395e870396ace Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Wed, 10 Jan 2024 13:40:31 +0000 Subject: [PATCH 03/34] Expand explanation days_previous with examples --- README.md | 8 +++---- docs/apps-yaml.md | 58 +++++++++++++++++++++++++++++++++++++---------- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index e4b79b7a2..7d35d44a5 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you want to buy me a beer then please use Paypal - [tdlj@tdlj.net](mailto:tdl ## Predbat documentation You can find the latest Predbat documentation at [https://springfall2008.github.io/batpred/](https://springfall2008.github.io/batpred/) and -how-to videos on my [YouTube channel](https://www.youtube.com/channel/UCr3eWnHExUYFi4-8ZUGfNJQ) +how-to videos on my [YouTube channel](https://www.youtube.com/channel/UCr3eWnHExUYFi4-8ZUGfNJQ). The documentation covers how Predbat works, how to get it installed and configured, video tutorials and FAQs to help you get going. @@ -29,7 +29,7 @@ It also explains how you can contribute to the project. For support please raise a Github ticket or use the [GivTCP](https://www.facebook.com/groups/615579009972782) or [Solis](https://www.facebook.com/groups/288045168816481) Facebook Groups. ```text -Copyright (c) Trefor Southwell October 2023 - All rights reserved -This software maybe used at not cost for personal use only -No warranty is given, either expressed or implied +Copyright (c) Trefor Southwell 2024 - All rights reserved +This software maybe used at no cost for personal use only. +No warranty is given, either expressed or implied. ``` diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 1247e4df6..f96f6e398 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -46,18 +46,52 @@ Once you have made all other required changes to apps.yaml this line should be d - **notify_devices** - A list of device names to notify when Predbat sends a notification. The default is just 'notify' which contacts all mobile devices -- **days_previous** - A list (one entry per line) of the number of days of historical house load to be used to predict your future daily load.
-It's recommended that you set days_previous so Predbat uses sufficient days' history so that 'unusual' load activity (e.g. saving sessions, "big washing day", etc) get averaged out.
-Typical settings could be 1, 7 or 7, 14, or 2, 3, 4, 5, 6, 7, 8.
-Do keep in mind that Home Assistant only keeps 10 days history by default, so you might need to increase the number of days history kept in HA before its purged +- **days_previous** - A list (which has to be entered as one entry per line) of the number of days of historical house load to be used to predict your future daily load.
+It's recommended that you set days_previous so Predbat uses sufficient days' history so that 'unusual' load activity (e.g. saving sessions, "big washing day", etc) get averaged out. + +For example, to take an average house load over all the days of the last week: + +```yaml + days_previous: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 +``` + +Or if you just want same day last week's consumption: + +```yaml + days_previous: + - 7 +``` + +Or if you want the average of the same day for the last 2 weeks: + +```yaml + days_previous: + - 7 + - 14 +``` + +Do keep in mind that Home Assistant only keeps 10 days history by default, so you might need to increase the number of days history kept in HA before it is purged by editing and adding the following to the `/homeassistant/configuration.yaml` configuration file and restarting Home Assistant afterwards: ```yaml - recorder: - purge_keep_days: 14 + recorder: + purge_keep_days: 14 ``` -- **days_previous_weight** - A list (one entry per line) of weightings to be applied to each of the days in days_previous. Default value is 1, that all history days are equally weighted. +- **days_previous_weight** - A list (again with one entry per line) of weightings to be applied to each of the days in days_previous. +The default value is 1, that all history days are equally weighted, so if you don't want to weight individual days you can simply use: + +```yaml + days_previous_weight: + - 1 +``` - **forecast_hours** - the number of hours to that Predbat will forecast ahead, 48 is the suggested amount, although other values can be used such as 30 or 36 if you have a small battery and thus don't need to forecast 2 days ahead. @@ -104,11 +138,11 @@ In this circumstance one solution is to create a Home Assistant template helper e.g. ```yaml -{{ states('sensor.givtcp_XXX_pv_energy_today_kwh')|float(0) + ... -+ states('sensor.givtcp_XXX_battery_discharge_energy_today_kwh')|float(0) + ... -- states('sensor.givtcp_XXX_battery_charge_energy_today_kwh')|float(0) - ... -+ states('sensor.givtcp_XXX_import_energy_today_kwh')|float(0) -- states('sensor.givtcp_XXX_export_energy_today_kwh')|float(0) }} +{{ ( states('sensor.givtcp_XXX_pv_energy_today_kwh')|float(0) + ... + + states('sensor.givtcp_XXX_battery_discharge_energy_today_kwh')|float(0) + ... + - states('sensor.givtcp_XXX_battery_charge_energy_today_kwh')|float(0) - ... + + states('sensor.givtcp_XXX_import_energy_today_kwh')|float(0) + - states('sensor.givtcp_XXX_export_energy_today_kwh')|float(0) ) | round(1) }} ``` ### GivEnergy Cloud Data From 6730b20df4197290bad833ae8451bd30b0df7904 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Wed, 10 Jan 2024 13:52:34 +0000 Subject: [PATCH 04/34] Added explanation of how set_reserve_min could be used to retain SOC ahead of predicted storms #571 --- docs/customisation.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/customisation.md b/docs/customisation.md index 917132f3b..701268a36 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -285,8 +285,10 @@ solar exports but don't allow forced export (brown energy). If you have **switch.inverter_hybrid** set to False then if **switch.inverter_soc_reset** (_expert mode_) is set to True then the target SOC % will be reset to 100% outside a charge window. This may be required for AIO inverter to ensure it charges from solar. -**input_number.set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, a value of 4 is the -minimum and recommended to make use of the full battery +**input_number.set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, a value of 4 is the minimum and recommended to make use of the full battery.
+If you want to pre-prepare the battery to retain extra charge in the event of a high likelihood of a grid power outage such as storms predicted, +you can increase set_reserve_min to 100%, and then change it back afterwards.
+(Obviously this is only any use if your inverter is wired to act as an Emergency Power Supply or whole-home backup 'island mode' on the GivEnergy AIO). **switch.inverter_soc_reset** (_expert mode_) When enabled the target SOC for the inverter(s) will be reset to 100% when a charge slot is not active, this can be used to workaround some firmware issues where the SOC target is From 1bddd75695ba139a78403dceec6988d467617d1f Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:52:53 +0000 Subject: [PATCH 05/34] Add explanation of using car_charging_energy to filter other loads such as Mixergy out #574 --- .cspell/custom-dictionary-workspace.txt | 1 + docs/apps-yaml.md | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.cspell/custom-dictionary-workspace.txt b/.cspell/custom-dictionary-workspace.txt index 0a16b2343..c0b4ea0d1 100644 --- a/.cspell/custom-dictionary-workspace.txt +++ b/.cspell/custom-dictionary-workspace.txt @@ -69,6 +69,7 @@ metricmid minb minmax minuteb +Mixergy mkdocs Modbus mqtt diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index f96f6e398..d9421c050 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -307,7 +307,10 @@ high battery charge levels when the car was charged previously (e.g. last week). - **switch.car_charging_hold** - A Home Assistant switch that when turned on (True) tells Predbat to remove car charging data from Predbat's battery prediction plan. - **car_charging_energy** - Set in apps.yaml to point to a Home Assistant entity which is the incrementing kWh data for the car charger. -This has been pre-defined to a regular expression to auto-detect the appropriate Wallbox and Zappi car charger sensors, or edit as necessary in apps.yaml for your charger sensor. +This has been pre-defined to a regular expression to auto-detect the appropriate Wallbox and Zappi car charger sensors, or edit as necessary in apps.yaml for your charger sensor.
+This can be set to a list of car charging energy sensors, one per line if you have multiple EV car chargers.
+You can also use **car_charging_energy** to remove other house load kWh from the data Predbat uses for the forecast, +e.g. if you want to remove Mixergy hot water tank heating data from the forecast such as if you sometimes heat on gas, and sometimes electric depending upon import rates. - **input_number.car_charging_energy_scale** - A Home Assistant entity used to define a scaling factor (in the range 0.1 to 1.0) to multiply the car_charging_energy data by if required (e.g. set to 0.001 to convert Watts to kW). From c557a3e244ed2739b3301a47ddf7164c4fd9bfb9 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Wed, 10 Jan 2024 22:21:42 +0000 Subject: [PATCH 06/34] Add details of load_forecast and predheat Not utilising battery #574 --- docs/apps-yaml.md | 24 ++++++++++++++++++++++++ docs/images/load_forecast.png | Bin 0 -> 31288 bytes 2 files changed, 24 insertions(+) create mode 100644 docs/images/load_forecast.png diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index d9421c050..9113300d5 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -375,6 +375,30 @@ Multiple cars can be planned with Predbat, in which case you should set **num_ca - Each car will have it's own Home Assistant slot sensor created e.g. **binary_sensor.predbat_car_charging_slot_1**, SOC planning sensor e.g **predbat.car_soc_1** and **predbat.car_soc_best_1** for car 1 +## Load Forecast + +In addition to the historical house load data that Predbat uses by default, you can optionally provide a forecast of future load +such as is produced by [Predheat for Hot water and Heat Pump heating systems](https://github.com/springfall2008/predheat): + +- **load_forecast** - this should be configured to point to a sensor and attribute that is in the format of 'last_updated' timestamp and 'energy' in incrementing kWh. + +For example:
+![IMAGE](images/load_forecast.png) + +`apps.yaml` should be configured to point to the forecast sensor and attribute (in the above format) like this: + +```yaml +load_forecast: + - sensor_name$attribute_name +``` + +So if using Predheat it would be configured as: + +```yaml +load_forecast: + - predheat.heat_energy$external +``` + ## Balance Inverters When you have two or more inverters it's possible they get out of sync so they are at different charge levels or they start to cross-charge (one discharges into another). diff --git a/docs/images/load_forecast.png b/docs/images/load_forecast.png new file mode 100644 index 0000000000000000000000000000000000000000..217f00a1bb1cd7ee57374d29acb86128ad960a5c GIT binary patch literal 31288 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 Date: Fri, 12 Jan 2024 12:10:09 +0000 Subject: [PATCH 07/34] Added 'choose' branching to givtcp activity monitor --- docs/output-data.md | 87 ++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/docs/output-data.md b/docs/output-data.md index bb11f1dbc..bcc13251a 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -168,7 +168,7 @@ description: Alert when communications to GivTCP have ceased for 30 minutes trigger: - platform: state entity_id: sensor.givtcp__last_updated_time - to: null + to: "null" for: minutes: 30 id: no-givtcp-update @@ -177,7 +177,7 @@ trigger: - platform: state entity_id: - sensor.givtcp__status - from: online + from: "online" for: minutes: 30 id: no-givtcp-update @@ -186,51 +186,56 @@ trigger: - platform: state entity_id: - sensor.givtcp__battery_cells - to: unknown + to: "unknown" for: minutes: 30 id: battery-unavailable variables: batt_id: action: - - condition: trigger - id: - - no-givtcp-update - - service: notify.mobile_app_ - data: - title: GivTCP communication issue - message: | - {{ now().timestamp() | timestamp_custom('%-d %b %H:%M') }} ISSUE: - No GivTCP update received from {{ inv_id }} for the past 30 minutes. - data: - visibility: public - persistent: true - push: - sound: - name: default - critical: 1 - volume: 0.8 - sticky: true - color: red - - condition: trigger - id: - - battery-unavailable - - service: notify.mobile_app_ - data: - title: GivTCP communication issue - message: | - {{ now().timestamp() | timestamp_custom('%-d %b %H:%M') }} ISSUE: - Battery {{ batt_id }} offline to GivTCP for the past 30 minutes. - data: - visibility: public - persistent: true - push: - sound: - name: default - critical: 1 - volume: 0.8 - sticky: true - color: red + - choose: + - conditions: + - condition: trigger + id: + - no-givtcp-update + sequence: + - service: notify.mobile_app_ + data: + title: GivTCP communication issue + message: | + {{ now().timestamp() | timestamp_custom('%-d %b %H:%M') }} ISSUE: + No GivTCP update received from {{ inv_id }} for the past 30 minutes. + data: + visibility: public + persistent: true + push: + sound: + name: default + critical: 1 + volume: 0.8 + sticky: true + color: red + - conditions: + - condition: trigger + id: + - battery-unavailable + sequence: + - service: notify.mobile_app_ + data: + title: GivTCP communication issue + message: | + {{ now().timestamp() | timestamp_custom('%-d %b %H:%M') }} ISSUE: + Battery {{ batt_id }} offline to GivTCP for the past 30 minutes. + data: + visibility: public + persistent: true + push: + sound: + name: default + critical: 1 + volume: 0.8 + sticky: true + color: red mode: single ``` From 69a1dbb12a6143c9a3c94657274ab2d9e8e6941e Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 12 Jan 2024 12:12:38 +0000 Subject: [PATCH 08/34] Added givtcp alert if inverter temperature <5 degrees (should never happen, indicates inverter offline) --- docs/output-data.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/output-data.md b/docs/output-data.md index bcc13251a..d6cc706e5 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -183,6 +183,15 @@ trigger: id: no-givtcp-update variables: inv_id: inverter + - platform: numeric_state + entity_id: + - sensor.givtcp__invertor_temperature + for: + minutes: 30 + below: 5 + id: no-givtcp-update + variables: + inv_id: inverter - platform: state entity_id: - sensor.givtcp__battery_cells From c0ca72b0a10407d31c8cd07c84c3533b2ad5a6bf Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 12 Jan 2024 12:29:06 +0000 Subject: [PATCH 09/34] Added GivTCP restart to activity monitor --- .cspell/custom-dictionary-workspace.txt | 1 + docs/output-data.md | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/.cspell/custom-dictionary-workspace.txt b/.cspell/custom-dictionary-workspace.txt index c0b4ea0d1..f1c9742c0 100644 --- a/.cspell/custom-dictionary-workspace.txt +++ b/.cspell/custom-dictionary-workspace.txt @@ -49,6 +49,7 @@ hadashboard HAOS hass hassapi +hassio heatsink homeassistant houseb diff --git a/docs/output-data.md b/docs/output-data.md index d6cc706e5..147f9c1f2 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -158,6 +158,7 @@ This automation will raise an alert if any of the following occur: - The inverter goes offline for more than 30 minutes - No last_updated_time received from the inverter for more than 30 minutes +- Inverter temperature less than 5 degrees for more than 30 minutes (should never happen) - The battery goes offline to the inverter for more than 30 minutes The script will need to be customised for your inverter id, battery id and mobile details, and can be extended for multiple inverters and batteries. @@ -248,6 +249,17 @@ action: mode: single ``` +As an extension to the above, instead of just alerting that GivTCP has a problem, the automation could also restart GivTCP add-on which usually cures most GivTCP connectivity issues. +Restarting GivTCP does however lose the current GivTCP log in Home Assistant. + +To restart the GivTCP add-on, add the following at the end of each 'sequence' sub-section within the action section: + +```yaml + - service: hassio.addon_restart + data: + addon: a6a2857d_givtcp +``` + ### Predbat error monitor This automation will raise an alert if Predbat's status turns to *ERROR* for more than 10 minutes. From 3d0bc007b8090529302ffd532d793a6358107e06 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 12 Jan 2024 12:55:59 +0000 Subject: [PATCH 10/34] Move GivTCP 'output raw register values' image into images folder --- docs/apps-yaml.md | 2 +- .../GivTCP-output_raw_register_values.png | Bin 0 -> 11354 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/GivTCP-output_raw_register_values.png diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 9113300d5..920721b16 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -196,7 +196,7 @@ If you get a bunch of inverter information back then it's working! It's recommended you enable 'Output Raw Register Values' in GivTCP (via Settings / Add-on's / GivTCP / configuration tab) for added monitoring: -![image](https://github.com/springfall2008/batpred/assets/48591903/e6cf0304-57f3-4259-8354-95a7c4f9b77f) +![image](images/GivTCP-output_raw_register_values.png) ### Home Assistant inverter control diff --git a/docs/images/GivTCP-output_raw_register_values.png b/docs/images/GivTCP-output_raw_register_values.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb1fd532365f4b823af6bd2cfb51335b71524d0 GIT binary patch literal 11354 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 Date: Fri, 12 Jan 2024 12:58:28 +0000 Subject: [PATCH 11/34] Move 'Predbat sample data-out dashboard' into images folder --- .../Predbat-data_out_dashboard_sample.png | Bin 0 -> 36122 bytes docs/output-data.md | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/Predbat-data_out_dashboard_sample.png diff --git a/docs/images/Predbat-data_out_dashboard_sample.png b/docs/images/Predbat-data_out_dashboard_sample.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5d0a1f2c779817e09c54883f9cd5b35fa59a84 GIT binary patch literal 36122 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%0D0mcjvXB8m$27-rv>gVR>-J~pQtVXk$CZK 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/output-data.md b/docs/output-data.md index 147f9c1f2..790e17e95 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -126,7 +126,7 @@ The calculated best results under PV 10% scenario: ## Sample Predbat data out dashboard -![image](https://github.com/springfall2008/batpred/assets/48591903/5c73cd6e-3110-4ecd-af42-7e6d156af4b2) +![image](images/Predbat-data_out_dashboard_sample.png) ## Predbat Logfile From 96c2ba85e56c55c8545c8e50f8d0bdf8ac5b5367 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Sat, 13 Jan 2024 22:14:33 +0000 Subject: [PATCH 12/34] Added rounding to rate_min_forward_looking log message --- apps/predbat/predbat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index d49d0cacb..a810f0ca6 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -5378,7 +5378,7 @@ def rate_min_forward_calc(self, rates): for minute in range(self.minutes_now, self.forecast_minutes + 24 * 60 + self.minutes_now): rate_min_forward[minute] = min(rate_array[minute:]) - self.log("Rate min forward looking: now {} at end of forecast {}".format(rate_min_forward[self.minutes_now], self.dp2(rate_min_forward[self.forecast_minutes]))) + self.log("Rate min forward looking: now {} at end of forecast {}".format(self.dp2(rate_min_forward[self.minutes_now]), self.dp2(rate_min_forward[self.forecast_minutes]))) return rate_min_forward From b3847b7074caa4376470d23224261b2593689ba2 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Wed, 17 Jan 2024 14:30:06 +0000 Subject: [PATCH 13/34] Reformat 'joined Octopus saving session' log & alert for improved readability --- apps/predbat/predbat.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index a810f0ca6..55bfdc716 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -9384,14 +9384,16 @@ def fetch_sensor_data(self): available_events = self.get_state(entity_id=entity_id, attribute="available_events") if available_events: for event in available_events: - code = event.get("code", None) + code = event.get("code", None) # decode the available events structure for code, start/end time & rate start = event.get("start", None) end = event.get("end", None) + start_time = self.str2time(start) # reformat the saving session start & end time for improved readability + end_time = self.str2time(end) saving_rate = event.get("octopoints_per_kwh", saving_rate * octopoints_per_penny) / octopoints_per_penny # Octopoints per pence if code: # Join the new Octopus saving event and send an alert - self.log("Joining Octopus saving event code {} start {} end {} price per kWh {}".format(code, start, end, saving_rate)) + self.log("Joining Octopus saving event code {} {}-{} at rate {} p/kWh".format(code, start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate)) #gc self.call_service("octopus_energy/join_octoplus_saving_session_event", event_code=code, entity_id=entity_id) - self.call_notify("Predbat: Joined Octopus saving event: start {}, end {}, price per kWh {}".format(start, end, saving_rate)) + self.call_notify("Predbat: Joined Octopus saving event {}-{}, {} p/kWh".format(start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate)) if joined_events: for event in joined_events: From 65bd8c85879df73500d739c96245278146079959 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci-lite[bot]" <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com> Date: Wed, 17 Jan 2024 14:31:07 +0000 Subject: [PATCH 14/34] [pre-commit.ci lite] apply automatic fixes --- apps/predbat/predbat.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index 55bfdc716..bdd9bdd3b 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -9384,16 +9384,22 @@ def fetch_sensor_data(self): available_events = self.get_state(entity_id=entity_id, attribute="available_events") if available_events: for event in available_events: - code = event.get("code", None) # decode the available events structure for code, start/end time & rate + code = event.get("code", None) # decode the available events structure for code, start/end time & rate start = event.get("start", None) end = event.get("end", None) - start_time = self.str2time(start) # reformat the saving session start & end time for improved readability + start_time = self.str2time(start) # reformat the saving session start & end time for improved readability end_time = self.str2time(end) saving_rate = event.get("octopoints_per_kwh", saving_rate * octopoints_per_penny) / octopoints_per_penny # Octopoints per pence if code: # Join the new Octopus saving event and send an alert - self.log("Joining Octopus saving event code {} {}-{} at rate {} p/kWh".format(code, start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate)) #gc + self.log( + "Joining Octopus saving event code {} {}-{} at rate {} p/kWh".format( + code, start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate + ) + ) # gc self.call_service("octopus_energy/join_octoplus_saving_session_event", event_code=code, entity_id=entity_id) - self.call_notify("Predbat: Joined Octopus saving event {}-{}, {} p/kWh".format(start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate)) + self.call_notify( + "Predbat: Joined Octopus saving event {}-{}, {} p/kWh".format(start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate) + ) if joined_events: for event in joined_events: From b41552db99bc98310afefdc5e8dc0135323be4d9 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Thu, 18 Jan 2024 22:37:45 +0000 Subject: [PATCH 15/34] Expanded and updated Predbat Plan card documentation --- apps/predbat/predbat.py | 2 +- docs/customisation.md | 16 ++- ... => predbat-data_out_dashboard_sample.png} | Bin docs/images/predbat-html-debug-plan.png | Bin 0 -> 49424 bytes docs/images/predbat-html-plan.png | Bin 0 -> 221728 bytes docs/install.md | 2 +- docs/output-data.md | 2 +- docs/predbat-plan-card.md | 129 +++++++++++++++++- docs/what-does-predbat-do.md | 3 + 9 files changed, 140 insertions(+), 14 deletions(-) rename docs/images/{Predbat-data_out_dashboard_sample.png => predbat-data_out_dashboard_sample.png} (100%) create mode 100644 docs/images/predbat-html-debug-plan.png create mode 100644 docs/images/predbat-html-plan.png diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index bdd9bdd3b..b3d0083dd 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -5687,7 +5687,7 @@ def publish_html_plan(self, pv_forecast_minute_step, load_minutes_step, end_reco if self.num_cars > 0: html += "Car kWh" if self.iboost_enable: - html += "IBoost kWh" + html += "iBoost kWh" html += "SOC %" html += "Cost" html += "Total" diff --git a/docs/customisation.md b/docs/customisation.md index 701268a36..43d740313 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -237,13 +237,17 @@ You could even go to something like -0.1 to say you would charge less even if it A value of 0.1 is the default which prevents any marginal discharges. If you increase this value (e.g. you only want to discharge/forced export if definitely very profitable), then discharges will become less common and shorter. -**input_number.rate_low_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets -the threshold below average rates as the minimum to consider for a charge window, 0.8 = 80% of average rate +**input_number.rate_low_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future import rates in the plan +and determine the import rate threshold below which a slot will be considered to be a potential charging slot.
+If rate_low_threshold is set to a non zero value this will set the threshold below future average import rates as the minimum to consider for a charge window, +e.g. setting to 0.8 = 80% of average rate.
If you set this too low you might not get enough charge slots. If it's too high you might get too many in the 24-hour period which makes optimisation harder. -**input_number.rate_high_threshold** (_expert mode_) When 0 (default) this is automatic but can be overridden. When non zero it sets -the threshold above average rates as to the minimum export rate to consider exporting for - 1.2 = 20% above average rate +**input_number.rate_high_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future export rates in the plan +and determine the threshold above which a slot can be considered a potential exporting slot.
+If rate_high_threshold is set to a non zero value this will set the threshold above future average export rates as the minimum export rate to consider exporting for, +e.g. setting to 1.2 = 20% above average rate.
If you set this too high you might not get any export slots. If it's too low you might get too many in the 24-hour period. **input_number.metric_future_rate_offset_import** (_expert mode_) Sets an offset to apply to future import energy rates that are @@ -363,6 +367,6 @@ In summary: ## Debug -**debug_enable** when on prints lots of debug, leave off by default +**switch.debug_enable** when on prints lots of debug, leave off by default -**plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan +**switch.plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan - see [Predbat Plan debug mode](predbat-plan-card.md#debug-mode-for-predbat-plan) for more details. diff --git a/docs/images/Predbat-data_out_dashboard_sample.png b/docs/images/predbat-data_out_dashboard_sample.png similarity index 100% rename from docs/images/Predbat-data_out_dashboard_sample.png rename to docs/images/predbat-data_out_dashboard_sample.png diff --git a/docs/images/predbat-html-debug-plan.png b/docs/images/predbat-html-debug-plan.png new file mode 100644 index 0000000000000000000000000000000000000000..c95e8610497eaa4a0e240c1c0f806540a2e395a6 GIT binary patch literal 49424 zcmcG#1yEeuy0#kug1a>u+zIXy+@XPnAi*uT1lL959)d$~cZcBa5Zv9}-Tx+Qt$o%$ z=j{Jh-MV*HAzc)6c8xja7~k_fZwCS8C6M6p;9tFZg(M{@s`TpBTM*>;Rah9v_u=r1 zmmjacDoF^xD)~jQ3wZ%$A|xmD>Q#9J!h;?(-=8;WEQ>kFsJ_<_}ClXk@gm!|^zTISU#c>g>ipcwMl z{&5hYv6AIAKfTiGsXu9(KKo1-a`MUD#tz?e>Y39;K;;2hkdCgSrdDF(wzdtnUfTtl z|Cv#N-53S*N#WoIu=M=gcTS_facD_RcMtHm1hlr|&p4jFrFDT^Ga)qT`5a3AVL0i` zf(58^c7?xl$5}dQv6re%Eix< zT9l5F$5_}ML;~Q9JN0tZ!*7a9Me03A>}h&N>zX6f`gxnmqRa9?1(&bFYrFa+3s1Wj zobRsksl|KQNK1#F7h5wqzV4c(@@GKGj)rSZKAxnoq+hrfQzdv$&^p8X9e>ZQth+>% zcWAd)xW2OA&9C%rZK3IJvHp0oNQy1V-CfkKSIXSW%OVoWZK(2~xb(XXQU6w*(*}d2 z(E7^V7$P(N?Kc^v($&M}<)+U7_mfNh&og4%`wA;>0a5dkXjd=-l2<{DYpeYV)WvdK z=lNWZD{&;z#Tf#FT=%TM_(ZPR9w*A)ZB+;Yy#}n`-ac8}4wpD(bhbPrc-Hu&M4YQC zh9&nb_we5iJ@ZWXeM*U%7M?$;4B?Cix(+z;e7^5wo#_M2I*6yBC}LzqcJjd%EI*QYMBvot=-57=ziliR@a24xOHqLS z3>((MUJ33$=-vDEq@H4eVAyjuIBe6FhXN*kxTj|~S z<^SY}ar#X9M1-<;$R~Iyl(H)V|7P5{&iT!}>ZnWAJFf?8-mp9Ob`U6tNR);Vg*1DG zl!)sCCg+`?nw6a=wY)mv8sE5ZPUYc6{sKA(a3?=T(&?psI6QK`EBA2Q@(eY3A?yEW zo0<~U-!rF0H6pUP*vQ?jSIidP zIyv8Bco*}#h{=_ho>GEbm>&{VpDf$)aokSC4>i^oEqJbYi3XUKwsX3ZXAB!NExAZ? zWpOjfS&rs3m?`AhVtG%aaGP}Yik3F7<))G5cs^X)N8PMI2^$Hv-CO8-xxyq3MpCTT zZJxIDD4Oir+}sBXn=zDmb&brI_A1_2&s?DJx36EOa*m#(B$dUc7VBeZySVk<{Nj8L zV7J2Y-vEt9o=4Xfv2qyothpbRK0}v|xRpLpG;x`oc-Exw?9SZZgtjc-SED*d zAMX(@38rXMh2C8Z(%tki20!-?hn^XFS|{bP?5$89EKuw(B2bOxtl(w(T_8R*J#7+G zhk4z^O)P)wIqunsM?^9ZO&n;WMOVCV=MXX?L_$#S-)~XmMhP-OICOq{{A>-+mV=wK z)@<8l@sx*=)+q3u>4!vocd*`jrYBC$3*wd9(hzt2tO^^SrLJFQr(t0g&w^IL*A_vn zYnzThvcfcub_UCNwmX&@q_O^bS>~ac2Tm64=K;WjOTQ0a1bE_W0_w2D;p`)Vzjw`U zYS+glo#$;j%p(HBs=$C!8U_w+r%u~*>xmlM2CJ&miKT%DJpJ|^&HUv?>ZSRd9lEt9 zMa`4$)`Ka#PeR!iwJ!b7@*w<2+x}l=SBvIOhnSDya(qV9yix(w7zSt8mBRUumvN6pIcJ}sotJ(_qRkICw13TtQ$N96wQeLK(XY6e_In zXI6~!T0Q`lxbAr$baWyzwyEsHXb(p690;Rj>d$C9D0M^g-7{A4H;+ZG?XuBhRDu~h zGL5i5MmD1bGz)S@mp;@Au5Z0F2^|$oxzfwhxq@eW=%E&8d_qi;#Ql8pu`%k?(><*C zbLKliH~&yM9uD2;Ouz+r5YDhi*hN~YSvm8^IOkKJ!ro4U#Ha{T)$Af2v>%^tEP{saFrU}j_J22t{PY4N@rX+vdYYuyE z9r1gr+?zg*`7hSvjW=ifoonLw8me-KX#_YHCqE|v5r+w>+_^f>d0li z7g75T+qBv+;ems?rJJYZV+rYpaF$=!@=px8?@}MU@NC%R5!c&_z|z>_g+H0-Rs^4j z_3eL*moe=l(s5El#Uya9FUG&2yk%By_a%Ws^wZfGB?$308kAe|AAhdB=r@qzgp0Fh zxCX>9xTIca5ZvReKU;nnss4iUm<;MxY9gxYkb{3#V`Zk(oS5JI0$79Cj z)Ck6~Zux*mk8b2&n2cW@rRD6UR-+%PPQ6lzqFypjiV<@>2pgwNkr$rLepJI__W2YM&V+=`H_!0&l=a8$F|jVW zsb<2VcQ#=k_QN*yllv*6b|jhmWb`{vnHtwGgh(9J&2qHi58{3M;J)jEbmjmczEMTE zolCN~j`5VKLre4!rJ}=I`j58^TJx6u&sgZPcE;X9cgDwO z=Ty@Ivn_=m9h)#XAHtelrkU#~9kH4!y*>#>065r%V%k4P+d3>7h1Snu?Rjz=jT!O|*>8xcbW0ewEnW0I=e`!(WFe9T$!qFW0lacvQ-nzr==M#rRPG(68mOJ~g~|7Z zl8M_=yZb|{uxJfvR_lS`ePp`0dBoevsslZww2C4*3PSIyL*N6 zbZaux*WN~ec8|Y!zC65QV&{q%5s%BX)c3$v6oDKvN+R<8X8*Wz!MHz@`7+`gCS^Au zNahN8=x3T8M;4;1d`Lk5g=B@z*5#WABu;(_!nED64dj`MZkpQ#4EsUwY z&|e85;}QYO64O%LO__I4qIu5NefAY^GH(`VIT44;xDlBQol`sA6edMzVna=dw;H~7 zM=tjk9;S(_3Ry<0&()Y-80A=|9mSDzH4)mnw^pioo(Vj4D<6M{d5{$mi2Lkx+Mtks zr7p3uS=F+m;7OX3#eErlOC;%Qxpwv7=WK>SWq^n8r~GVOq|Usg%w9l~LNW+Cwv4^! z+N`xVuYD%g*I1%7D||M-UGh(p{`IBY>y!6^E0rnkQ5$~G(#PR4zUO)gS%oaV;OlFK zoQH(?OqL^o&11f&!Vs-C$>TU>4y~e4*VVOA*8L#9^YgMqSft(SIQvbNx8faCNMHO{ ztC><2JxdMWb#%8>kLAD@%|{DnmX%UvK0N8z9uLR+1w4@}h3sSrZ=ZXSlc273T8P>KRzIK9@mtvO zF1Vf^E_IkYk9~68af5E}x~TyIiUx!kdWg+qA|7o7 zu(X9k`aT2;D_l}&dSd;Ks{-HsB<*r1Hh4%XQ=_{%{Qyb0c}w&3Apt=x+4YM{_6HuB zNG!2NBTh|vvbULzM{DHDPZb-7q9R1?q9hg?F(25bouA}4)vG&hO+Ihbd2_tqiJ zbAvMQU)8#)oGGidPI0(b_7392_*W}zzD{Txu)e#hKQMMnJPmDJcqpz2brS~$$kXZ=@ubV~X3e`uCn?P!wCUtCGjXJp4T(4^aKddfdX1Uu!T%6^W{qf; zY3o`W;7Md0$8q^O8x2O>FWJb!oSZSG53K4bw#q^tM1@gr9w6QxZMRH*cFI)b$hk`x zCy+|RO;Q@Uo(C9_B`sZoII_zeIT|;)tbsz;&3gIZ3_i>Dn!L}FMKjUubpxr?GD<7G z@<3-YKW{zz_voZ0?#OX+G(}bpOY#e9H>M$)CWC#P-?AGX0G4q^^B2{Vyixd;GkdEo zP9*)u;9M8c+r^+ZSWSWtwLW<2(26Z$2^@8YheD>l%Ic6cGnT~>^!WX)*W)V_XP*@H zL}UtGFGj3RL}XK7Zkv7ss=y6J2wMM#TI;^#1Esf78AGwW^Fuz)KrflQd&a}7p>w=UXS-if+J$K!d5~c z*foHrU;gXhBdtpN`ywxwau)p}l%4)x$7$dQ*bL_MV%mi5tMBiVCWLw2*Ln@Wu{^on zVGT*`#9VL0xXX51_+W!rVPjT{cje4pPH)HoTI&cg%tKU?<83-iY5X417jOA;u5^}0 z_9iJL$PqT^FYWFei5MePV4C}BDeBW1GoTVl132^^d?C?CG3vq-WZ zUi7=2NefUK)CeII0DSvTQe;$hmSDXe^3LW4&oTQo+o_2awax`t-=GAHR<~fhJ+q&( zB@3U?>^Kt@5fLG)Oh+fyCKoaKW;VC`_nYpRfS$y$6?GT5`LRIIQ~ZSMUV7OVINpW} z6D|Q%mEFaRBN-bD;6>qfCotf=Llp!@tT;+92b%ZHOgf56BkTg;6;-Fhz2BX+hcSwB z-i&u_zse~md^$i?CCdNk2?vK9f=0AQUEb6HRt|`oMhqwFO3Xpuz#6^G5ToYtgq=Lo za4vf-ld2io<9@{!^?VZ3%V5ktP$g~;Sfz)C%~y#PBd+!i zEb(ToE|y-zmXC5R{6PE^n^oRw)c=$j@w#WUkv;IPGIoq-EM&_D0Kcn=6U&iteiz@U z+g|+8;5X0gTm&-|CziPG6fok^h{m4H9M4{U%&z#$!hT9wBwD3?c={nGFeMJ$N1-4> zcp0c=y9F6K5wi2Nm$4%=4NO_^cFu#9sgrxwMsu{B*JD*es+nBf>37Ej{>b*i`S@@- zQ9XY@Wze%cUR^=!uHV%2wyKFL>YZ@j6~FhdRGxO$_mtWN2Y7t2ClKNH%kikRV` z0+pPK$Ekl~59PV-vQK>zH~TdNRo4=i*c}wx{(l9tbDu3lmh#0wlwrdWZ{ zNW@@k%Jl;TKmh+|WLvhYu2(S4k^two68#6eJVyYxfY95fMO-(oa8Yov+#5oaQHf%b zj+hig=0c(To1{v(hEcg;GYk-+T4ey#n8XwpaOq06WBuI!S9#m^M7{pRS`|5o7fIx|JpQw zM)viKt8BHt)-7=Mu!d@}hD|s4?mV826g6|cTNC_;rn81CCy!!fOB_8xjV=A05njBI z&}6t!4L0#bpW;y;bPQ6Em1wG2SDJ%a)HxBlg28gH!J8Ip)ovq)WL%cec3Estfa0Aj z(V6twZo=;KoCehR6mha}m-#>_->rKH5Yq&$gVY2KyGbqbhu!wEt+TJdTrha!q7m~@ z_zV25y9eyRG&Hd4D}X4|L=C9qJ%&Q_P|+pg@Qf;LcCNG=E?&-7hK5yR->85!MtgMg zULzGfle2kD-2PF_zc7vV88Oc05;nLY4NpKTioiqa-Ez;cdeGK@YG1BZ=nUbK^AeGQ z&&NYKzQZKQq#wljJ?Uq{6vw{;eRKFf@RroU72w!RJVQAaMfuyW!rT8U^X6NwYRa9S zHc(~?9Ufl_z?X9N7|6F}71I=u&4DZM_<7So@#VIBFY)IRA+6|ur#WuavV=gQqivlj zi>QhBZX4)ishRf2x}Dv7-%PjhQZM{DrXYSnOQB1f*0prJo{=OpOuXGnM;cM}-HSNn zq4sD&Wl1>^U?gk^znHCc?^g_EG|@2;EWTgL_blqbWTD9w63|la`Y1 z#y#hnt@b-3*Ssl}_a_Oc`p|>{p{A~@Z9JHm+>MHSDkqb9{0tddKsge^^#q&_FCp3M z!um3AUrYq{a{qo*^?hNrn&Gu{r43e`JaFaO8D>Lo(wK-tLT-6KjjR067_V9zX$ozV zd`&6HRED$SB1oaa@(n0JTf8=UB{Yd!#{t9>pU+zk^A|V%NFmTD>EHhzi>LsL%V`4d zh%)cyS(xCx2oE>bh{1l|_v60!J)DnD_yGzkz$UOlidVbQ-ogS)0!qfItiN;3x90hk z6!sa=JvcBI9VCdde%qoGu|LJ+6Mk*W0;bG#S6i2Cej>9!O5%?&hPRkkJIhtmXR{O% zW10fq(lo6}i}n%W5Ybjl3lO$5I4i^{O-v_TPsXRuToHU zCai_J|K>Dh@VZBVZt2hPvtvrfh5l#JOZ`Of-mhD6ZVC>6hrPI3~Sg5t@pXUyw}Ke8xvYZ6H3B-pI{u?B$gxe8@~?0*Tu;j zMW`4or==1JqaI*=bJ=cE5OWAPc#V)+^n$QlsI#~hKbv<59MEBitE!~ID6%atWGH{T ze)--rMYt=W#!4Xab&?YKE-IdrQ>ODJOi`UwhFR6njA;7_Fmj~8xD=}^|IPuLXugIp z#y_9{Zh(Wn`|NsH_p!9U{2P>V%&t1Th3Lqhdg54g3*1=Ua^yl5>CK!zrhTUpQ31nz zx%SeteFhR%F71hP@uu}IjhEC6ozs;m8COfF(25t=it?oj0GfgDUwDdi~;auTbwYr%lGT#%X*L*)0&GxgPu zpclFvcZijvQGNf5s31!2=d}!4kEL?(bqZr=&Nlt(CLe|T!aB6ZvU0HUCD68U5EW8w zQ0HFOeZJ2%DKET{YK+4iR<#pQR(=x5*NKF{@&D=5Me;h!h4Cm-)T2@M&PVQxH@ziH3MY z#zUHs+nKW6yuAUh!&fckR|6k-rv>CJmEmjc!SBw2HsVj7lf5L-7Mi}$nA_$3sBdy4 zLio+ZLcX<_6gpe6$~Do5p_^hk`63?hlv~z&iD24x%y%wPl=Fs}-=-F6qvq7pbj?uE z28@LzcgEnt4-vj2MkKMChf>HgB#OKxg46=O z-dg&!FZSCHM(ze#Z%h0Tesa@lxg6TO(8aiAmO}#hxGLe9s$nP#!2!cboT!yZs2G1d z+77o8wbAc$93G5)yzjQ|YIe`T4O(C9HKW**Y-SmNFD2;s?-KOy@|~^WwwJ&=;cueY z4t*eN*h0B4C>e&iM7jS(=g&jhM|_n`w?lk2IWp3V{rd?80aU#Y8OMIuE(DTY#a_ul!0E4% z`u_=QXkW1CuOm#t_cu{diHs*ryr5aHMP4H}1Yp?POaEWt($obd`-{3|!KXc46=MOx zdj*&s z#iNb1h`f;EDtye%2`PZq2Q)5U+DKKpVZdUHpTn5f97wiy-nPB5#btHbv*K2)ApQfn zo5_X`T%j+W`x7xTR$#$JvduqT4NfrkxK#Aw0JY10MI0vs|KS4BkGjyjr`1QQ{r>@{ zx>08;5hG47DF%S3{(siMuQI^(Ug= z1wVoe{;12Mdazc1i}_DNpB}Rjcl9i8Pbb*L9(+Y*JRfz8du^GRYVzdE3H9k;GHn~* zbJN3JJ4>=A#Ub}IEY#H=WuI4Uri>|pgJo^Yc*-SNZt1RIRqnv>9=}5$BhxbH9A_rH%)ruGNU!4vX%)R`JsnGaQ?r!>Cd@4iis@#&>Z5z+~r`h{<} zl#B#7$4ax+bdF9c`2=PQqf}v%+PTI{lg13n41x64GhQ>TDm`g+6#ty}yF1h(ZThhG zr6?rhJXxOYP6^x})Mh{)&p4ap-+3z@t=M5$Xg-nma}&;>DbRm+b|e2~&gTgKwas{* zJz!8%k=_2yNzKaijiJs=#BvSVIqQ_4y~5W7wM^=cwEhc=Qm(>Tl1y)PQ)U9@E#*vC zudj-P9GHV(0&MIMQi;g8-oGaN zzlhgm*Yt?>JrhzU5d4Y^N~)DU2Rw>-nb5{_3su)C76>VYGk9d}aEV}(bP_R2_;)ws zwzlHXytQ7DOo%*6-fzOKr+eFHcreE}25_T-e_pbZPSWd}IS<^}26=Df^P2SzXp@PFUO_;T_cEl5RbhS*CRZY2dXZ zPf490zD3$~`I~p`?E~s7DDR)@FI{;`kHc23kx1-i(XH#N^w8awtO^&}MzYfqw7eo$ zX@5q0)t*%Gd}-AJBBhoHJvnJz;* zTn5d5?~tC81i}swrm^EnWp{P<>vV`&Hk9TP8~!1!?sQnaInnS38V`c7Zi{x{B; zpvm)1Dqy8#tb3Hb8<(?bd7+s3I3fX&mkLPc2~#F?;o!R-d}-Fr(bh2T<-B2GvI@N+ z6CX&Z>RBj70sI0n61EVCNk-^Kzj(tLh4zIW{cF1(m$A=3K}I<+Ew?4>J_Sy1D3xHf z)0!&J*#iV8Ex=Y<*=i>*Gyyg%0JUkS6K*c6bIAQ>ySL*QAg5oP8CzAZlTi-+#2xCj z)oB$z%Mr!vN=lcOkZNEH@AoKJbnkp1SIZ~{!|qc%gGVZN@jp3#>$~n079Mpx zc9kZP$K+$`NQvKt5FMT6TA*0u+U!6|=Wz6@$_;tK)ZgS{T)i;EBz)y=JLvGqAV#bG z?QG;@Q@>mjR5$a3G5;PfJ^r$K?gLtm!SP^5T88sGcr=fIT$r%+srfK!`{1O%AO<;e z)Y4FZd-H=2XSU=R3ER<;_~{;!+Se%2$uCLeLB6Z$r0FU{+H~Qp!q-J)kx`iZj`i>b zG;+7RK9?=D3RbRq&UtU}(F{>0ACc>%{2*M>$A+~grEn|Lu6>HWv$QF(K40q_uqRDt zHdW&zvwq{lOg2~zX_0DvQ+0ke`BE z1qG{TAT&P`f+S6HQJ=qF0<&`-Jd|2UJ^GjX2n|1hR(Y)5^^sEb=4>)C*fA^uH>*^- zCF4L-UCalV$`B}_=m0GhmdhA!bJ(w9e2d|AAqk3XP>OYaXphAb!P>F=lFU z;vt_cYx{&_#KQ1{HF+T#{H^T;L_#9=2CAv4`!Y=iM3!oJiq>g74zvmu&5C05Uq{DU zhivz$0Of3zgL5S!^yQ*vVm*YUAUqPn4r=ppq2?m@?eMp5+R{t=4!=Z}?$Yrf)}SxOwf?`dN|5hLeeEIJLP`J7=2m+jWi%N!osHnj+0R^}DP7>o_j zzuTsG|K=}@If)anRubO@`H~WZ18M0Plc~ow?=RddaWdzoo?-C#1NJ zB>d0znxw)Ozy*k3%#2yTzWz_>;h+IQ4{<9Y z6&N=5%7nUC{~W)+n4&5zQ7Dh6xX$QBfSk0rN!wc1IOAsXiom+()o*DTLtPvLhX5d> zkIJk`2?+no!0GLQ_d>Wx1&H0{t-{w;y%3wH?+iP4brIk8kWtg+*ar`wn(lTa2Vh#@ z2FILyy?c@t9Y$7^beZ#S`C#i2sB@%eY#9MG;5>U1U!WF~E zZd+bI=;bLhRv_Znd6iAfU5X~S5Wd#$zP>1+O5-Q3pw?)PKYpx3T-s_-t%-)0eGZX4 zkMoKZxdaF=^g)r*W?tR9ZLb|R*O8FP40RR#zBI4|he6nL+^T4stwq3Z4N(g za2SXX@OYceCqw)@X~j0-$-q?fB~T7aa~yzTJrR`bb0+l zga3bWKa5n!Jp1{TCCUGkJ{|XEp7$s3Clw3k5q6Rps8?Sjo*K+;mfm4rdRzgBOhqP# zIDEr+3i7$x=T@eW$(j9^9w(LslmrF6{$3Cjjz02%e6t@IT0Z$|%{$J7PP9B#!6)4$ zhAE^~3hcldz}SwuTE{|)5?LbH^u+ULWeKj+!kQQVGjOwKcvpR!#X`)%kybf)%iu9{ z;r>?3yuE1}QarEPMaO+w#n^ltU;osya$SX@LsQ~`&l6d3|Cq-&62eQcW9&sy{pxby zPx^TiM3?-W;M?WW zC?!1teS5{g+K({a9>^C1bD=HQIR zT3*N*QnU-aROn-;EX6zK`Jx6g1X>L2foilDA7w~La|80pmHHYdWZwuf;=RIP++1c~ z2yW2ITVA3VyC)6ruBYZ%PWNw%LkGzt5|N4Qes5Bg`e7{!V3)0_=U7Xj3cV!7%Q1<{ ztpjh=w&44DIlLOUmuekxx!JO!M~Y4}v=M-s)Qj$SZA_!K*6#dad^HAN>)6^kvuQk0 zMB$@}P!LMq!6s~Nt?7*==#E{h4)w66&gPNY*{;`+Zni$$F;lM3U&7nr^+4{4>WY2+ zV^v*t-;G6bt8>ag;FIU;LtL0NdEXvlO%8AJ8grd_&X2doy{2J!e zM|T8uWYTC^6)0xYT4r*~pD(ssn~r4RhAGpqToqFCbC$Lib(ui)fW`c^sh3onVMnzp z)HDaFCxhOMDQ(^XCFkIew7CW9$@erp5cdQCRKSv4*>JP`rJeY9S|eG=7I~-LnC(Bo zeD9m7*2-eNLI$w9H85Y<5Cr)S3j9w2m6-`?Jn!9Kv|P~6hW==fGYs7%@#aR_nfgw=z3o7E&GPSZ7Z5&3=;p|N#ez+-BgZ}zx7B+0kPhV zJSsSfO!n_bQp{AFr;@ot?D5#ET0axc;^QEf$2zJqQv|@Skr}hiaSz(Velu$LkyHyu zs{K~SdpHUm2Xg)&E?@WylGoz-W2A+;^zHsqWyBvJ983s!|F4jkyEsr2>ZM=4q0d>T z2Lr9b3p1;+(LIg3nD`ku`)x=3B3~7eCx;_U$67+phaiaRl+9-G-mC*`Zgc?f;Ac-U*-cs=dzx3)^q1{a|0cl7_3|O2bPk?MxwF-Bj7nU{0 zi8}Y8nxrhOvMk##Ox8W ztuW^KD@><7StfZ6zG;p~twbNP6YUYLPs^xUDiT_EapNoPcsTleh4k8x27wYu$RP`$ zk~xN<)qu6%V%1TfLh0MQ!Ihhbq~;H1l@QZHv1r93`;q&4J2Q>U*tw}d@(%{KJtahn zRd}eUUUO1~^fOuRGmXS3ui=#dB(0ZaDbLUo-zt$$|-kxGY8Tk`Ug?^DC!1|@RK1%E? zNC-zQjVc-x{8+!^8-p-v2{^dRmPF%@ z{d)p%K{0ajhn$u;Sv?lw&KHNbB*9cHyt}Q(_k0~plZ*jRJ8;hh5Q>`D;8C_OC>eUC ztUKTRT~Lg7!#EC6*_onCfzyj?=)Hbir+rJ6skd@fQc=8@P}f(I+Ud;2I$e69ghkne z^1*facAm|MNZENkpz*gfmMJ!M1Ye;536t+MUcx(pmw0_{sQT@4^-EZsTu8&)BQw-ZA}f&_tkp4H-a= z%@10@a7>_67Bs}Sj)@t1SLb? z3i?`%90Ip(Q<K*;D z=a-H!`3c!FlGt%oK;~6J1!K5gZv379!3O|`4S9T`SSJzf*US$wi)_$?1!-$EZeeyI z9lcB9ARcI}Whx1n?^#^WA=8f|_Lud3STpvXINdL1lBHS_9usWVBN^HZJgv?|PN z+Aq?4F@xU^@vGgEk!bLXWq53(9mg?GB*D@mNGiGPaaE7VF>7}g%-ay{B=9dxA78la zrUS-!12$9j)tr=N5sK=|Ub{?HD;jYj7!E^96@eb5ZXVh92fgJwFofu5^)4ri&4#OTw&%U*(AAw4h+-yjo zas&JSg0(^jFWN9nDh-m6gs}5VPaTi--Al9Ke_Z5j3lg`Sgl)-5eq(WE%v&8mi$T&H z+8z4wKjS>~k2P}qd}tL)VRt|nz`J0445AV35DHk*@)L#zq5sRP!gF;=aVQ}a$ok%} z;IY2>&u<*lCOFC>3mcRGduqgH4E1t1xQPW1+#o3bqHYoX1IGXJ-*Uho)&g(byFc8{ z|KtwWd}O}S-j71d^$9Pxa89s2!^MitoM{$Y;ms1Dc+822I7?!2648jg9kr z4|X$@TDuF>SnHK-q|60a4De8|$S5f$fvGUN-=}Ne^4}~Ue$Oxae`oog4d_2xM~kIDPSMa{1#GZV>#--`}Jr8`Bd3Cbc%;{#N zWZZ^1`Q@T-%?ZRY?_6yI-Yy=LW?`SSwU7jt;Ik}%L9VJzO#bQPVX${~7QHQ*Wi237 z9pgmZ|7a>Pw(%9k6C`aY(G8K+%)!H5z*!v`TlZdb(;5ex!95vr`JK6Toc*$jXQp=g@Mf#-idP;B zCT5DKdaSX6B0c+N<-c5yzhHE!`x?b{x!e|Fn)H#9c&6CG7L4Lbb0OXFV!#yuB|dgW zf(!1114UDMU+Te>@dq~vw3#)Lr&BczJnd{O4~Cd87D1VX*)V7_enkHaedf1!LqebJ z*^q9Hrfn_4<$Qyvt4`;r8jjdDZ}OLmY^WFvpB_mjt%?wm+WM{7|HAY)|JH{4-=dyy znH{PkmqwjFkjnY8BCy3ANwuh`eS6CR-SBs=^V&rXSY2|Key(iG=ROzEj;&mTYW;0S zLq?b`3F^NGJ|*D`;&$#oh&tS;yPwIpE$p&_-};B`h_pGGG&jz))<{6M7XUy!N6Wrz zNVVMTHO@VP4+zH4Rp|p}4dN>@TTxZ^%;|4v`7Nwifgf1qsG%pf#PeaKMyoF(yBqv& zj9Gp)f3uzG=vtz8>Bqg-fAv-;3$f9g%t*ZcC1ttJhu(c06tR2j8C6D>kv>5G3 ztgqU^oKU0r`(}$Pq~8fVE@N=Ot3$GGEl4Vyyr^62AMk;)!cu@a@5+7L-PwJ*r2J_i|ouDAINx&5OK21GG2*L(9imseg?==9uVxOht^f@ zoJXsH-G&2^cVx&O2=&jW1_7Zr`!qvrt6O>nHv1Nxlmajj@07v8dy+#XRs~x$zfBCC z8tklZ_-l#VS}=ZQ*sgGIaY=&BRuH=I@so6w7rnw)sDE2hnZia&=d`<>hD~ZG-`X+8ZqnCD&_V2mrK_Htc+-jCVEe(V_jAwhGvr`S zjdI|sU(Bf>gzLHc`RmduNJhhUl#6j?>!)V83=NvmhvKpU(g{TO{wOSJzyy1ES|6nq zn`Sd9_Zd-)(=A8La>@MS)^!qF=5IJncGHLhQOHSw%Dyy4!W*7ncOm?@J5h$8nX{b+E9d4*MH^=E$5(=9 zyw7~J9WN%ejY)tr)Xdr~FTVCy@KZwW15#K>*(#^UM9b(Yjxr9&R$2l}!0ktH+FU@0 z;Ae0w@qFpxJfJoB3~NU5hOqx$_~AW)RIsVg(^by9%0AQ?Xb`2<{92Z?wGP&=@^3t- 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�=NqI<%0Hsp@ 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 literal 0 HcmV?d00001 diff --git a/docs/install.md b/docs/install.md index a86639601..f07a7ea11 100644 --- a/docs/install.md +++ b/docs/install.md @@ -156,7 +156,7 @@ If you install Predbat through HACS, once installed you will get automatic updat **NOTE:** Throughout the rest of the Predbat documentation you will find reference to the Predbat configuration file `apps.yaml` and the Predbat logfile. -These are located under the Home Assistant directory `/config/appdaemon/` which contains: +As you are following the 'install Predbat through HACS' installation method these are located under the Home Assistant directory `/config/appdaemon/` which contains: - **appdaemon.log** - AppDaemon and Predbat's active logfile that reports detail of what Predbat is doing, and details of any errors - **apps/batpred/config/apps.yaml** - Predbat's configuration file which will need to be customised to your system and requirements. This configuration process is described below. diff --git a/docs/output-data.md b/docs/output-data.md index 790e17e95..1aa5aab1a 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -126,7 +126,7 @@ The calculated best results under PV 10% scenario: ## Sample Predbat data out dashboard -![image](images/Predbat-data_out_dashboard_sample.png) +![image](images/predbat-data_out_dashboard_sample.png) ## Predbat Logfile diff --git a/docs/predbat-plan-card.md b/docs/predbat-plan-card.md index 00189d17a..2c74f2a79 100644 --- a/docs/predbat-plan-card.md +++ b/docs/predbat-plan-card.md @@ -1,11 +1,19 @@ # Predbat Plan card -Predbat can create its own plan card which can be added to your HA dashboard. +Predbat can create its own plan card which can be added to your Home Assistant dashboard. -* First install html-template-card in HACS (from the Frontend list), it will already be available to add, but for reference the repository can be found here: - * +At a glance the Predbat plan shows you the plan going forward of home demand, EV charging, iBoost and for your battery, and any actions that Predbat plans to take. -Next create a new card as follows: +## Displaying the Predbat plan + +Firstly install the [HTML template card](https://github.com/PiotrMachowski/Home-Assistant-Lovelace-HTML-Jinja2-Template-card) in HACS: + +- In HACS, click on Frontend +- Click in the *Search for downloaded or new repositories* and type 'HTML' +- Click on 'HTML Jinja2 Template card', then click 'Download' to install it +- When prompted to 'reload your browser', click 'Reload' + +Next, on a Home Assistant dashboard create a new card with the following configuration to display the Predbat plan: ```yaml type: custom:html-template-card @@ -17,4 +25,115 @@ content: | You should see something like this: -![image](https://github.com/springfall2008/batpred/assets/48591903/6999eb09-1d62-4e12-8c9d-8642762f2a65) +![image](images/predbat-html-plan.png) + +## Understanding the Predbat plan + +For every half hour period (slot) that Predbat has planned for (the *forecast_hours* setting in `apps.yaml`), the Predbat plan shows: + +- The import rate in pence for that slot +- The export rate in pence for that slot +- What 'status' predbat will be in (e.g. Charging, Discharging) +- Any limit applied (e.g. charging to 70%) +- Forecast Solar generation (from Solcast) +- Forecast house load (from your historical load data) +- Planned car charging +- Planned iBoost immersion heating +- What the battery SOC will be at the start of the 30 minute slot +- The forecast cost for the half hour slot +- A running total cost + +Explaining each column in the Predbat plan in more detail: + +- **Time** - Predbat plans your home, solar and battery load in 30 minute slots, on the :00 and :30 minutes past each hour. +The Predbat slots are therefore aligned to Octopus Agile slots or rate change times on any other tariff. + +- **Import** - The import rate for that time slot in pence.
+The rate will be coloured Blue if the price is zero pence or negative, +Green if the rate is less than the import rate threshold, +Red if the rate is more than 1.5 times the import rate threshold, +and Yellow if the rate is between 1 and 1.5 times the import rate threshold.
+See the [Predbat customisation guide](customisation.md#battery-margins-and-metrics-options) for explanation of the import rate threshold (and over-riding it), but in essence +Predbat will consider blue and green-coloured slots as preferred candidates for importing, yellow and red (higher rates) will not. + +- **Export** - Similarly, the export rate for that time slot in pence.
+The rate will be coloured White if the price is less than the export rate threshold, +Yellow if it is more than the export rate threshold, +and pale Red if the rate is more than 1.5 times the export rate threshold.
+So in essence, Yellow and Red coloured export rates will be considered as priorities for exporting, White will not. + +- **State** - [Predbat's status](what-does-predbat-do.md#predbat-status) controls whether the battery is charging, discharging to support house load (Eco mode), +discharging and force exported, or being held at the current level.
+Alongside the state is an arrow which points upwards if the battery SoC is increasing (i.e. charging), to the right if the battery SoC is remaining constant, +or downwards if the battery SoC is decreasing (i.e. discharging).
+The slot will be coloured Green for Charging, Yellow for Discharging, Silver Grey for Freeze Charging, Pale Blue for Hold Charging or White for Idle.
+NB: The Predbat plan is shown in 30 minute time slots but Predbat actually plans battery activity in 5 minute segments within the 30 minute slot. +If the Home Assistant control *switch.predbat_calculate_discharge_oncharge* is set to True, +then within a 30 minute slot (and depending on import and export rates) Predbat could potentially plan for there to be both +charging and discharging activity - if Predbat plans this, state will show as both Charging and Discharging in the same slot. + +- **Limit %** - Alongside any battery activity (charging, discharging, etc) there will be a SoC limit. This limit is what the SoC is planned to be at the end of the 30 minute time slot. +e.g. 'Charge↗ 70%' is charge to 70% SoC, and 'Discharge↘ 4%' is discharge the battery to the 4% reserve level. + +- **PV kWh** - The predicted solar forecast for the half hour slot, estimated from the [Solcast Forecast](apps-yaml.md#solcast-solar-forecast).
+If the PV forecast is above 0.2kWh for the slot it will be coloured Melon Red, above 0.1kWh it will be Yellow, otherwise it will be Silver Grey. + +- **Load kWh** - The predicted house load for the half hour slot, estimated as a weighted average of the number of [days_previous](apps-yaml.md#basics) +[Historical data](apps-yaml.md#historical-data) from your inverter or other house load sensor.
+If the load forecast is 0.5kWh or above for the slot it will be coloured Orangey-Red, from 0.25kWh to 0.5 it will be coloured Yellow, +above 0 to 0.25 it will be Light Green, and if zero, it will be coloured White. + +- **Car kWh** - The total predicted car charging for the half hour slot. This column will only be shown if *num_cars* in `apps.yaml` is 1 or more.
+If the car is planned to be charged in that slot then the kWh will be coloured Yellow, otherwise it will be White. + +- **iBoost kWh** - The energy planned for iBoost immersion heating. This column will only be shown if *switch.iboost_enable* is set to True.
+If the iBoost is planned to be on in that slot then the kWh will be coloured Yellow, otherwise it will be White. + +- **SOC %** - The estimate of battery State of Charge percentage *at the start* of the time slot +together with an arrow pointing up, to the right or downwards to indicate whether the battery SoC is increasing, remaining constant or decreasing during the time slot.
+The 'SOC %' can be read in conjunction with the 'Limit %'; the SOC column gives the estimated SOC at the beginning of the slot, +the Limit column the estimated SOC at the end of the slot.
+If the SOC is 50% or greater it will be coloured Green, 20% or greater, Yellow, and if less than 20%, Orangey-Red. + +- **Cost** - The estimated cost in pence for the time slot together with an arrow indicating whether the total cost today is increasing, staying flat or decreasing.
+If the cost for the slot is 10p or more it will be coloured Orangey-Red, ½p or more it will be coloured Yellow, -½p or less it will be coloured Green, +otherwise it will be coloured White. + +- **Total** - The total cumulative cost so far for 'today' at the start of the slot. At midnight tonight this cumulative cost will be reset to zero.
+Due to the way Predbat works, total cost is always reported (in Predbat output entities, this HTML plan, in the [Apex charts](creating-charts.md), etc) +as starting from midnight today and adding on from there.
+Looking at the sample Predbat plan above as an example, the plan starts at 10:00 with total cost today already being £3.13. The house load is then fully met through the day and evening +by the battery (with some PV top-up charging) so total cost remains constant at £3.13.
+In the 22:30 and 23:00 slots there is a little grid import, and then at 23:30 there's grid import and the battery starts to be charged. +As you can see the Total continues to increase in the plan past midnight with each Total being +the Total from the preceding slot plus the Cost estimate from the preceding slot - reminder that Total gives the running total *at the start* of the slot.
+Total cost is always coloured White. + +## Debug mode for Predbat Plan + +If [Predbat expert mode](customisation.md#expert-mode) is turned on then a number of additional controls and switches are made available in Home Assistant. + +If **switch.plan_debug** is then turned on then the Predbat plan shows additional 'debugging' information for the import and export rate columns. + +The Predbat plan will now look like this with plan_debug turned on: + +![IMAGE](images/predbat-html-debug-plan.png) + +Import and Export rate will now show the actual rate (according to how you have setup the [energy rates](energy-rates.md)) and also in brackets the *effective* import or export rate. + +The *effective rate* takes into account [battery and inverter energy losses](customisation.md#battery-loss-options) for charging and discharging and converting from DC to AC and vice-versa. + +Using the above debug plan as an example: + +- At 22:30 the battery is being charged. The actual import rate is 14.07p, but after conversion losses to store the grid AC into the DC battery, +the energy being put into the battery has effectively cost 14.81p - for every 1kWh of AC grid import you don't get 1kWh of DC stored in the battery, +so 1kWh of battery charge has effectively cost slightly more than the import rate. +- At 00:30 the battery is being force discharged and excess energy (above the estimated house load of 0.47kWh) will be exported. +The actual export rate is 18.22p, but after losses converting the stored DC battery charge into AC to supply the home and export it, +the energy being exported has effectively only earned 17.31p - it will take slightly more than 1kWh of stored DC battery charge to get 1kWh of AC to use or export +so each discharged and exported kWh actually earns slightly less. +- Putting these together, at 00:00, the effective import rate (after losses) is 13.93p, the effective export rate is 17.31p, +so even though battery and inverter conversion losses have been incurred, there is still a 3.38p profit per kWh and +Predbat plans to charge and then discharge the battery in the same slot to generate that profit. + +The debug mode on the Predbat plan can be quite useful to understand from the import and export rates *after conversion losses*, why Predbat plans to charge or discharge the battery. diff --git a/docs/what-does-predbat-do.md b/docs/what-does-predbat-do.md index 87e92d47c..d9ee74af6 100644 --- a/docs/what-does-predbat-do.md +++ b/docs/what-does-predbat-do.md @@ -54,11 +54,14 @@ The current Predbat status is reported in the Home Assistant entity **predbat.st exported if the battery is full. This is described as 'ECO' Mode for GivEnergy inverters but other inverters use different terminology. - **Charging** - The battery charges from the grid and the grid also covers any load. Solar power will also be used to charge the battery. + - **Freeze charging** - The current battery level is held and the grid/solar covers any load. Solar power will also be used to charge the battery. - **Hold charging** - A type of charge where the target SOC % is the same as the current SOC %, effectively the same as a charge freeze (but without being explicitly selected). + - **No Charge** - A charge where the target SOC % is lower than the current battery SOC level so there will be no charging unless the usage is unexpectedly high. - **Discharging** - The battery is being force-discharged. The house load will be covered by the battery and any excess is exported to the grid. Any solar generated will be exported. + - **Freeze discharging** - The battery is covering the load but charging is disabled, thus any solar generated will be exported. - **Error** - There is a configuration error or other problem, you should check the [Predbat AppDaemon log file](output-data.md#predbat-logfile) for more details. From f6e5fa840d243566e45714c53ff6e3789115fe57 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Thu, 18 Jan 2024 22:42:06 +0000 Subject: [PATCH 16/34] Line length fix --- apps/predbat/predbat.py | 2 +- docs/customisation.md | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/predbat/predbat.py b/apps/predbat/predbat.py index b3d0083dd..85c3ffadd 100644 --- a/apps/predbat/predbat.py +++ b/apps/predbat/predbat.py @@ -9395,7 +9395,7 @@ def fetch_sensor_data(self): "Joining Octopus saving event code {} {}-{} at rate {} p/kWh".format( code, start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate ) - ) # gc + ) self.call_service("octopus_energy/join_octoplus_saving_session_event", event_code=code, entity_id=entity_id) self.call_notify( "Predbat: Joined Octopus saving event {}-{}, {} p/kWh".format(start_time.strftime("%a %d/%m %H:%M"), end_time.strftime("%H:%M"), saving_rate) diff --git a/docs/customisation.md b/docs/customisation.md index 43d740313..7364e2dd8 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -369,4 +369,5 @@ In summary: **switch.debug_enable** when on prints lots of debug, leave off by default -**switch.plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan - see [Predbat Plan debug mode](predbat-plan-card.md#debug-mode-for-predbat-plan) for more details. +**switch.plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan - see [Predbat Plan debug mode](predbat-plan-card.md#debug-mode-for-predbat-plan) +for more details. From 4959856f102a99671bc09a523a0d30c5e2d92aee Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Thu, 18 Jan 2024 23:16:47 +0000 Subject: [PATCH 17/34] Minor changes to predbat-plan-card --- docs/predbat-plan-card.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/predbat-plan-card.md b/docs/predbat-plan-card.md index 2c74f2a79..0391d07ea 100644 --- a/docs/predbat-plan-card.md +++ b/docs/predbat-plan-card.md @@ -37,8 +37,8 @@ For every half hour period (slot) that Predbat has planned for (the *forecast_ho - Any limit applied (e.g. charging to 70%) - Forecast Solar generation (from Solcast) - Forecast house load (from your historical load data) -- Planned car charging -- Planned iBoost immersion heating +- Planned car charging (if car charging is configured in Predbat) +- Planned iBoost immersion heating (if iBoost is configured) - What the battery SOC will be at the start of the 30 minute slot - The forecast cost for the half hour slot - A running total cost @@ -76,7 +76,8 @@ charging and discharging activity - if Predbat plans this, state will show as bo e.g. 'Charge↗ 70%' is charge to 70% SoC, and 'Discharge↘ 4%' is discharge the battery to the 4% reserve level. - **PV kWh** - The predicted solar forecast for the half hour slot, estimated from the [Solcast Forecast](apps-yaml.md#solcast-solar-forecast).
-If the PV forecast is above 0.2kWh for the slot it will be coloured Melon Red, above 0.1kWh it will be Yellow, otherwise it will be Silver Grey. +If the PV forecast is above 0.2kWh for the slot it will be coloured Melon Red with a little sun symbol, above 0.1kWh it will be Yellow with a sun symbol, +otherwise it will be Silver Grey. - **Load kWh** - The predicted house load for the half hour slot, estimated as a weighted average of the number of [days_previous](apps-yaml.md#basics) [Historical data](apps-yaml.md#historical-data) from your inverter or other house load sensor.
From c52a4f9a2de37559b566a8472e2521bf7602e8a3 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:22:33 +0000 Subject: [PATCH 18/34] Expanded installation guide for #645, clarify Monitor mode --- docs/customisation.md | 56 ++++++++++++++++++++++----------------- docs/install.md | 15 ++++++++--- docs/predbat-plan-card.md | 2 ++ 3 files changed, 46 insertions(+), 27 deletions(-) diff --git a/docs/customisation.md b/docs/customisation.md index e3822ecf9..b4eed0e01 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -1,6 +1,8 @@ # Customisation -These are the Predbat configuration items in Home Assistant that you can modify to fit your needs, you can configure these in Home Assistant directly. +This document describes the Predbat configuration items in Home Assistant that you can modify to customise Predbat to fit your needs. + +All of these settings are entities that can be configured directly in Home Assistant (unlike the '[apps.yaml](apps-yaml.md)' configuration items that have to be edited with a file editor). See [Displaying output data](output-data.md#displayng-output-data) for information on how to view and edit these entities within @@ -8,17 +10,17 @@ Home Assistant. ## Saving and restoring Predbat settings -The selector **select.predbat_saverestore** can be used to save you current settings to a yaml file (kept in /config/predbat_save/) and to +The selector **select.predbat_saverestore** can be used to save your current Predbat settings to a yaml file (kept in the directory `/config/predbat_save/`) and to restore the settings from one of these files. -Selecting **save current** will cause the settings to be save to a date/time stamped file. You can rename this file yourself in the HA filesystem -to give it a more human readable name or delete it if you no longer want it. This is normally best done in the SSH window or via a Samba mount. +Selecting the selector option **save current** will cause the settings to be saved to a date/time stamped file. +You can rename this file yourself in the Home Assistant filesystem to give it a more human readable name, or delete it if you no longer want to keep it. +This is normally best done in an SSH window or via a Samba mount. -Selecting **restore default** will put all your settings back to the Predbat defaults. -Before the the restore the current settings will be saved as **previous.yaml** should you have made a mistake you can restore them quickly again. +Selecting the option **restore default** will put all your settings back to the Predbat defaults. +Before the restore the current Predbat settings will be saved to the file **previous.yaml** - should you have made a mistake you can restore them quickly again. Selecting any of the .yaml files you have created will restore your settings from this file. -Before the the restore the current settings will be saved as **previous.yaml** should you have made a mistake you can restore them quickly again. ![image](https://github.com/springfall2008/batpred/assets/48591903/209442c1-bd4d-4812-84e2-c5a81794bd1d) @@ -42,35 +44,39 @@ both charge and discharge, reset charge and discharge rates to full power and re ### Predbat Monitor mode -In **monitor** mode Predbat will not control charging or discharging, inverter balancing will take place if enabled, the plan will show -just what is expected based on the current inverter configuration alone. +In **monitor** mode Predbat will not control or Plan any charging or discharging, inverter balancing will take place if enabled, +and the plan will show just what is expected based on the current inverter configuration alone. ### Predbat Control SOC Only mode In **Control SOC Only** mode Predbat will adjust the target charge percentage (SOC target) according to the Best plan, but the charge -window will not be modified. This can be useful if you just have one fixed -charge slot per day and you only want Predbat to control the percentage. +window will not be modified. + +This mode can be useful if you just have one fixed charge slot per day and you only want Predbat to control the percentage the battery is charged based on solar generation +and predicted house load. -_CAUTION: If the charge window is disabled then no charging will take place._ +_CAUTION: You must manually set any charging required on the inverter and if the charge window is disabled then no charging will take place._ ### Predbat Control Charge mode In **Control Charge** mode Predbat will set the charge times and charge percentages according to the Best plan, charging can be enabled and disabled by Predbat. +Predbat will set the inverter into Eco mode when required to enable the battery to support house load, but it will not plan any forced discharging of the battery for export purposes. + +This mode can be useful if you don't have an export rate, or if you want to preserve the battery for home demand. ### Predbat Control Charge & Discharge mode In **Control Charge and Discharge** mode Predbat will set both charge and discharge times and control charge and discharge percentages. -If you have set the **switch.predbat_set_discharge_freeze_only** to True then forced export won't occur but Predbat can force the export +If you have set the **switch.predbat_set_discharge_freeze_only** set to True then forced export won't occur but Predbat can force the export of solar power to the grid when desired. ## Expert mode -Predbat has a toggle switch called **switch.predbat_expert_mode** which is off by default for new installs (on -by default for upgraded installs). A lot of configuration items will not be available unless expert mode is enabled. -It's recommended for new users to start without expert mode and then maybe enable it later once you become more -confident with the tool. +Predbat has a toggle switch called **switch.predbat_expert_mode** which is set to Off by default for new installs (On by default for upgraded installs). +A lot of Predbat's more advanced configuration options will not be available unless expert mode is enabled. +It's recommended for new users to start without expert mode and then maybe enable it later once you become more confident with the tool. ## Performance related @@ -388,22 +394,24 @@ In summary: ## Manual control -In some cases you may want to override Predbat behaviour and make a decision yourself. One way to achieve this is to put Predbat into +In some cases you may want to override Predbat's planned behaviour and make a decision yourself. One way to achieve this is to put Predbat into read-only mode using **switch.predbat_set_read_only**. When going to read only mode the inverter will be put back to the default settings and then you should control it yourself using GivTCP or the App. A better alternative in some cases is to tell Predbat what you want it to do using the manual force features: -Can you force a charge within a 30 minute slot by using the **select.predbat_manual_charge** selector. Pick the 30 minute slot you wish -to charge in and this will be actioned. You can select multiple slots by using the drop down menu more than once, when Predbat updates -you will see the slots picked in the current value of this selector and in the HTML plan (upside down F symbol). +You can force the battery to be charged within a 30 minute slot by using the **select.predbat_manual_charge** selector. +Pick the 30 minute slot you wish to charge in and Predbat will change the plan to charge in the selected slot. +You can select multiple slots by using the drop down menu more than once. +When Predbat updates the plan you will see the slots picked to be charging slots in the current value of this selector, +and annotated in the [Predbat HTML plan](predbat-plan-card.md#displaying-the-predbat-plan) with an upside down 'F' symbol. -You can cancel a force slot by selecting the time again (it will be shown in square brackets to indicate its already selected). +You can cancel a force slot by selecting the slot time again (it will be shown in square brackets to indicate its already selected). ![image](https://github.com/springfall2008/batpred/assets/48591903/aa668cc3-60fc-4956-8619-822f09f601dd) -The **select.predbat_manual_discharge** selector can be used to manually force a discharge within a 30 minute slot in the same way as the -manual force charge feature. The force discharge takes priority over force charging. +The **select.predbat_manual_discharge** selector can be used to manually force a discharge within a 30 minute slot in the same way as the manual force charge feature. +The force discharge takes priority over force charging. The **select.predbat_manual_idle** selector is used to force Predbat to be idle during a 30 minute slot, this implies no charging or discharging and thus the battery will cover the house load (if there is enough charge). diff --git a/docs/install.md b/docs/install.md index f07a7ea11..43f1a321e 100644 --- a/docs/install.md +++ b/docs/install.md @@ -266,10 +266,19 @@ You have configured predbat's control entities, created a couple of dashboard pa In order to enable Predbat you must delete the 'template: True' line in `apps.yaml` once you are happy with your configuration. -You may initially want to set **select.predbat_mode** to *Monitor* to see how Predbat operates, e.g. by studying the Predbat Plan. +You may initially want to set **select.predbat_mode** to *Monitor* to see how Predbat operates, e.g. by studying the [Predbat Plan](predbat-plan-card.md). +In *Monitor* mode Predbat will monitor (but not change) the current inverter settings and predict the battery SoC based on predicted Solar Generation and House Load. -Once you are happy with the plan Predbat is producing, and are ready to let Predbat start controlling your inverter, set **select.predbat_mode** -to the correct mode of operation for your system. +The recommended next step is to start Predbat planning your inverter charging and discharging activity but not (yet) make any changes to the inverter. +This enables you to get a feel for the Predbat plan and [customise Predbat's settings](customisation.md) to meet your needs. + +Set **select.predbat_mode** to the correct [mode of operation](customisation.md#predbat-mode) for your system +and also set **switch.predbat_set_read_only** to True to stop Predbat making any changes to your inverter. + +Once you are happy with the plan Predbat is producing, and are ready to let Predbat start controlling your inverter charging and discharging, +set the switch **switch.predbat_set_read_only** to False and Predbat will start controlling your inverter. + +You can see the planned charging and discharging activity in the [Predbat Plan](predbat-plan-card.md). ## Updating Predbat diff --git a/docs/predbat-plan-card.md b/docs/predbat-plan-card.md index 0391d07ea..45dcce03c 100644 --- a/docs/predbat-plan-card.md +++ b/docs/predbat-plan-card.md @@ -66,6 +66,8 @@ So in essence, Yellow and Red coloured export rates will be considered as priori discharging and force exported, or being held at the current level.
Alongside the state is an arrow which points upwards if the battery SoC is increasing (i.e. charging), to the right if the battery SoC is remaining constant, or downwards if the battery SoC is decreasing (i.e. discharging).
+If Predbat's plan has been over-ridden and the [slot has been manually controlled](customisation.md#manual-control) to be a Charging slot, Discharging or Idle, +then alongside the State and battery SoC arrow will be an upside down 'F' indicating it is a 'Forced' activity.
The slot will be coloured Green for Charging, Yellow for Discharging, Silver Grey for Freeze Charging, Pale Blue for Hold Charging or White for Idle.
NB: The Predbat plan is shown in 30 minute time slots but Predbat actually plans battery activity in 5 minute segments within the 30 minute slot. If the Home Assistant control *switch.predbat_calculate_discharge_oncharge* is set to True, From f6190b517119c05198f38c0103523ddb8ff1983a Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Mon, 22 Jan 2024 09:37:18 +0000 Subject: [PATCH 19/34] Added Arg0t's tip to use metric_future_rate_offset_import for more aggressive charging --- docs/customisation.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/customisation.md b/docs/customisation.md index b4eed0e01..7a9c198ad 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -281,6 +281,10 @@ If you set this too high you might not get any export slots. If it's too low you not yet published, best used for variable rate tariffs such as Agile import where the rates are not published until 4pm. If you set this to a positive value then Predbat will assume unpublished import rates are higher by the given amount. +Setting this to 1 to 1.5p for example results in Predbat being a little more aggressive in the charging calculation - +Predbat will charge the battery to a higher percentage than it would otherwise as it expects a cost benefit of using today's lower rates. +NB: this can lead to higher costs and to some export if solar generation is better than forecast. + **input_number.metric_future_rate_offset_export** (_expert mode_) Sets an offset to apply to future export energy rates that are not yet published, best used for variable rate tariffs such as Agile export where the rates are not published until 4pm. If you set this to a negative value then Predbat will assume unpublished export rates are lower by the given amount. From 3f22abc0ac72926b4d83860f085832a199e8bf23 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Tue, 23 Jan 2024 22:38:34 +0000 Subject: [PATCH 20/34] Improve battery loss & scaling and weight documentation sections --- docs/configuration-guide.md | 9 ++++- docs/customisation.md | 77 ++++++++++++++++++++++--------------- 2 files changed, 53 insertions(+), 33 deletions(-) diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index d7e818a3a..ce6783aeb 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -13,8 +13,13 @@ You should try to tune **input_number.inverter_loss**, **input_number.battery_lo in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. Also set **switch.inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. -The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence on using your battery for charging and discharging.
-In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each cycle is 19kWh and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. +The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence per kWh on using your battery for charging and discharging.
+In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each full charge and discharge cycle is 19kWh +and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. + +Taking the 3.5p example, Predbat will apply a "virtual cost" of 3.5p to every kWh charge and discharge of the battery. +This cost will be included in Predbat's cost optimisation plan when it decides whether to charge, discharge the battery or let the house run on grid import. + If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. The default is 1p but can be set to 0 if you want to turn this feature off. Note that the cycle cost will not be included in the cost predictions that Predbat produces, its just taken into account in the planning stage.
diff --git a/docs/customisation.md b/docs/customisation.md index 7a9c198ad..116f111b5 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -94,48 +94,64 @@ reduce your CPU load. ## Battery loss options -**input_number.battery_loss** accounts for energy lost charging the battery, default 0.05 is 5% +**input_number.battery_loss** is an assumed percentage figure for energy lost when charging the battery, the default 0.05 is 5%. -**input_number.battery_loss_discharge** accounts for energy lost discharging the battery, default 0.05 is 5% +**input_number.battery_loss_discharge** is an assumed percentage figure for energy lost whilst discharging the battery, the default 0.05 is 5%. -**input_number.inverter_loss** accounts for energy loss during going from DC to AC or AC to DC, default is 0% for -legacy reasons but please adjust. +**input_number.inverter_loss** is an assumed percentage figure for energy lost during the conversion within the inverter from DC to AC or AC to DC, +the default is 0% for legacy reasons but please adjust. -**switch.inverter_hybrid** When True you have a hybrid inverter so no inverter losses for DC charging. When false -you have inverter losses as it's AC coupled battery. +**switch.inverter_hybrid** Set to True if you have a hybrid inverter so no inverter losses will be applied for DC charging from Solar generation. +Set to False if you have an AC coupled battery and inverter losses will be applied when charging from solar. +NB: This switch only applies when Predbat is modelling solar charging. +All grid charging (regardless of inverter type) has to undergo an AC to DC conversion and so the inverter_loss % will be included in Predbat's model when charging from the grid. + +**input_number.metric_battery_cycle** (_expert mode_) This sets a 'virtual cost' in pence per kWh on using your battery for charging and discharging. +Higher numbers will reduce battery cycles at the expense of using higher energy costs.
+In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each full charge and discharge cycle is 19kWh +and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. + +Taking the 3.5p example, Predbat will apply a "virtual cost" of 3.5p to every kWh charge and discharge of the battery. +This cost will be included in Predbat's cost optimisation plan when it decides whether to charge, discharge the battery or let the house run on grid import. + +If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. +The default is 1p but can be set to 0 if you want to turn this feature off. +Note that the cycle cost will not be included in the cost predictions that Predbat produces, its just taken into account in the planning stage.
+_NB: Setting this to a non-zero value will increase your daily cost, but will reduce your home battery usage._ -**input_number.metric_battery_cycle** (_expert mode_) Sets the cost in pence per kWh of using your battery for charging and discharging. -Higher numbers will reduce battery cycles at the expense of using higher energy costs. Figures of around 1p-5p are recommended, the default is 1p per kWh. -**input_number.predbat_metric_battery_value_scaling** (_expert mode_) Can be used to scale the value of the energy -in the battery at the end of the plan. The battery value is accounted for in the optimisations at the lowest future -import rate including charging and inverter losses. A value of 1.0 means no change to this, while lower than 1.0 -means to value future battery levels less, greater than 1.0 will value it more (and hence hold more charge at the end of the plan). +**input_number.predbat_metric_battery_value_scaling** (_expert mode_) A percentage value that can be used to scale the value of the energy in the battery at the end of the plan. +The battery value is accounted for in the optimisations at the lowest future import rate including charging and inverter losses. +A value of 1.0 means no change to this, while lower than 1.0 means to value future battery levels less, +greater than 1.0 will value it more (and hence hold more charge at the end of the plan). ## Scaling and weight options -**input_number.battery_rate_max_scaling** adjusts your maximum charge/discharge rate from that reported by GivTCP -e.g. a value of 1.1 would simulate a 10% faster charge/discharge than reported by the inverter +**input_number.battery_rate_max_scaling** is a percentage factor to adjust your maximum charge/discharge rate from that reported by GivTCP +e.g. a value of 1.1 would simulate a 10% faster charge/discharge rate than reported by the inverter. -**switch.predbat_battery_capacity_nominal** - When enabled Predbat uses the reported battery size from the Nominal field rather than from the normal GivTCP -reported size. If your battery size is reported wrongly maybe try turning this on and see if it helps. +**switch.predbat_battery_capacity_nominal** - When enabled Predbat uses the reported battery size from the GivTCP 'Battery Nominal Capacity' field +rather than from the normal GivTCP reported 'Battery Capacity kWh' size. +If your battery size is reported wrongly maybe try turning this on and see if it helps. -**input_number.load_scaling** is a Scaling factor applied to historical load, tune up if you want to be more pessimistic on future consumption -Use 1.0 to use exactly previous load data (1.1 would add 10% to load) +**input_number.load_scaling** is a percentage Scaling factor applied to historical load, increase this if you want to be more pessimistic on future consumption. +Use 1.0 to use exactly previous load data. A value of 1.1 for example would add 10% to historical load. -**input_number.load_scaling10** is a Scaling factor applied to historical load only for the PV10% scenario (this is in addition to load_scaling). -This can be used to make the 10% scenario take into account extra load usage and hence be more pessimistic while leaving the central +**input_number.load_scaling10** is a percentage Scaling factor applied to historical load only for the PV10% scenario (this is in addition to load_scaling above). +This can be used to make the PV10% scenario take into account extra load usage and hence be more pessimistic while leaving the central scenario unchanged. The default is 1.1 meaning an extra 10% load is added. This will only have an impact if the PV 10% weighting is non-zero. -**input_number.load_scaling_saving** is a Scaling factor applied to historical load only during Octopus Saving sessions. This can be used to model -your household cutting down on energy use only inside a session (e.g. turning off a heat pump). +**input_number.load_scaling_saving** is a percentage Scaling factor applied to historical load only during Octopus Saving sessions. +This can be used to model your household cutting down on energy use inside a saving session (e.g. turning off a heat pump, deferring cooking until after the session, etc). -**input_number.pv_scaling** is a scaling factor applied to PV data, tune down if you want to be more pessimistic on PV production vs Solcast -Use 1.0 to use exactly the Solcast data (0.9 would remove 10% from forecast) +**input_number.pv_scaling** is a percentage scaling factor applied to PV data, decrease this if you want to be more pessimistic on PV production vs Solcast.
+Use 1.0 to use exactly use the Solcast forecast generation data. A value of 0.9 for example would remove 10% from the Solcast generation forecast. -**input_number.pv_metric10_weight** is the weighting given to the 10% PV scenario. Use 0.0 to disable this. -A value of 0.1 assumes that 1:10 times we get the 10% scenario and hence to count this in the metric benefit/cost. +**input_number.pv_metric10_weight** is the percentage weighting given to the Solcast 10% PV scenario in calculating solar generation. +Use 0.0 to disable using the PV 10% in Predbat's forecast of solar generation. +A value of 0.1 assumes that 1 in every 10 times we will get the Solcast 10% scenario, and 9 in every 10 times we will get the 'median' Solcast forecast.
+Predbat estimates solar generation for each half hour slot to be a pv_metric10_weight weighting of the Solcast 10% PV forecast to the Solcast Median forecast.
A value of 0.15 is recommended. ## Historical load data @@ -227,15 +243,14 @@ you want to discharge late. **switch.predbat_calculate_second_pass** (_expert mode_) When True causes Predbat to perform a second pass optimisation across all the charge and discharge windows in time order. -NOTE: This feature is quite slow and so may need a higher performance machine +NOTE: This feature is quite slow and so may need a higher performance machine. -This can help to slightly improve the plan for tariffs like Agile but can make it worse in some fixed rate tariffs which -you want to discharge late. +This can help to slightly improve the plan for tariffs like Agile but can make it worse in some fixed rate tariffs which you want to discharge late. ## Battery margins and metrics options **input_number.best_soc_keep** is the minimum battery level in kWh that Predbat will to try to keep above during the whole period of the simulation time. -This is a soft constraint only so it is possible for your SoC to drop below this - use **input_number.best_soc_min** for hard SoC constraint that will always be maintained. +This is a soft constraint only so it is possible for your SoC to drop below this - use **input_number.best_soc_min** for a hard SoC constraint that will always be maintained. It's usually good to have best_soc_keep set to a value above 0 to allow some margin in case you use more energy than planned between charge slots. @@ -281,7 +296,7 @@ If you set this too high you might not get any export slots. If it's too low you not yet published, best used for variable rate tariffs such as Agile import where the rates are not published until 4pm. If you set this to a positive value then Predbat will assume unpublished import rates are higher by the given amount. -Setting this to 1 to 1.5p for example results in Predbat being a little more aggressive in the charging calculation - +Setting this to 1 to 1.5p for example results in Predbat being a little more aggressive in the charging calculation for today - Predbat will charge the battery to a higher percentage than it would otherwise as it expects a cost benefit of using today's lower rates. NB: this can lead to higher costs and to some export if solar generation is better than forecast. From 99f61e1e2dd8c96b073fc3cdb5cd7ecd50d5edfd Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:02:31 +0000 Subject: [PATCH 21/34] New FAQ for improving the plan --- docs/faq.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/faq.md b/docs/faq.md index b4a870027..ee6f14c03 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -50,6 +50,22 @@ especially if you have a small battery. If you set it to zero then predbat may n - Perhaps set up the calibration chart and let it run for 24 hours to see how things line up - If your export slots are too small compared to expected check your inverter_limit is set correctly (see below) +## The plan doesn't charge or discharge when I expect it to + +It is very important to correctly set Predbat's [Battery Loss Options](customisation.md#battery-loss-options) +and [Battery Margins](customisation.md#battery-margins-and-metrics-options) as these can have a huge and critical impact on the plan that Predbat generates. + +Predbat's default configuration values are the recommended starting values for most users but there is no single right set of configuration values for every user of Predbat, +it depends on many factors and your personal preferences. Many users will need to customise and tweak the [Predbat configuration](customisation.md) to suit their needs. + +The SOC level that Predbat aims to keep in the battery **input_number.best_soc_keep** and the absolute minimum SoC level **input_number.best_soc_min** are the first thing to check. +If these are set too high then Predbat will charge at unfavourable rates to maintain the battery SoC. + +Predbat performs a lowest cost battery optimisation so a key part of deciding whether to charge, discharge or feed the house from the battery is the loss rates +**input_number.battery_loss**, **input_number.battery_loss_discharge** and **input_number.inverter_loss**. + +**input_number.metric_battery_cycle** + ## Predbat is causing warning messages in the Home Assistant Core log - If you have a large **input_number.predbat_forecast_plan_hours** then you may see warning From 8d390e294f478e48cc2407a6f43a403be1a981b5 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Thu, 25 Jan 2024 21:33:25 +0000 Subject: [PATCH 22/34] Move configuration docs from config guide to customisation doc --- docs/configuration-guide.md | 16 +++------------- docs/customisation.md | 15 +++++++++++---- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index ce6783aeb..d6ce5187b 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -9,26 +9,16 @@ You might want to also set to the [car charging plan](apps-yaml.md#planned-car-c It is recommended that you [create a dashboard page](output-data.md#displaying-output-data) with all the required entities to control Predbat. +This page gives a summary of some of the key configuration settings you should consider in Predbat for different energy tariffs; +the [Predbat customisation guide](customisation.md) details all the Predbat customisation options. + You should try to tune **input_number.inverter_loss**, **input_number.battery_loss** and **input_number.battery_loss_discharge** to the correct % loss for your system in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. Also set **switch.inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence per kWh on using your battery for charging and discharging.
-In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each full charge and discharge cycle is 19kWh -and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. - -Taking the 3.5p example, Predbat will apply a "virtual cost" of 3.5p to every kWh charge and discharge of the battery. -This cost will be included in Predbat's cost optimisation plan when it decides whether to charge, discharge the battery or let the house run on grid import. - If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. The default is 1p but can be set to 0 if you want to turn this feature off. -Note that the cycle cost will not be included in the cost predictions that Predbat produces, its just taken into account in the planning stage.
-_NB: Setting this to a non-zero value will increase your daily cost, but will reduce your home battery usage._ - -- **input_number.forecast_plan_hours** - the number of hours after the next charge slot to include in the plan, default 24 hours is the suggested amount (to match energy rate cycles) - -- **switch.set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter setups -to avoid cross charging when batteries are out of balance. Below is a guide to some of the electricity tariff options and a set of recommended Predbat settings for each tariff type. In theory most tariffs will work out of the box but still it's worth reviewing your settings. diff --git a/docs/customisation.md b/docs/customisation.md index 116f111b5..be9f08790 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -4,7 +4,7 @@ This document describes the Predbat configuration items in Home Assistant that y All of these settings are entities that can be configured directly in Home Assistant (unlike the '[apps.yaml](apps-yaml.md)' configuration items that have to be edited with a file editor). -See [Displaying output data](output-data.md#displayng-output-data) +See [Displaying output data](output-data.md) for information on how to view and edit these entities within Home Assistant. @@ -111,12 +111,14 @@ Higher numbers will reduce battery cycles at the expense of using higher energy In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each full charge and discharge cycle is 19kWh and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. -Taking the 3.5p example, Predbat will apply a "virtual cost" of 3.5p to every kWh charge and discharge of the battery. -This cost will be included in Predbat's cost optimisation plan when it decides whether to charge, discharge the battery or let the house run on grid import. +Taking the 3.5p example, Predbat will apply a "virtual cost" of 3.5p to every kWh of charge and of discharge of the battery. +This cost will be included in Predbat's cost optimisation plan when it decides whether to charge, discharge the battery or let the house run on grid import.
+_NB: For clarity and to re-emphasise, the "virtual cost" will be applied to BOTH the cost calculation for charging AND for discharging the battery._ If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. The default is 1p but can be set to 0 if you want to turn this feature off. -Note that the cycle cost will not be included in the cost predictions that Predbat produces, its just taken into account in the planning stage.
+Note that the cycle cost will not be included in the cost predictions that Predbat produces such as the Predbat HTML plan or Apex charts, +its just a cost taken into account by Predbat at the planning stage when the plan is calculated.
_NB: Setting this to a non-zero value will increase your daily cost, but will reduce your home battery usage._ Figures of around 1p-5p are recommended, the default is 1p per kWh. @@ -221,6 +223,8 @@ charging sessions but will not reset it automatically. See the Predbat mode setting as above for basic calculation options +**input_number.forecast_plan_hours** is the number of hours after the next charge slot to include in the plan, default 24 hours is the suggested amount (to match energy rate cycles). + **switch.predbat_calculate_regions** (_expert mode_) When True the a second pass of the initial thresholds is calculated in 4 hour regions before forming the detailed plan. Is True by default but can be turned off in expert mode. @@ -234,6 +238,9 @@ longer term plan will be less accurate. **switch.predbat_calculate_discharge_oncharge** (_expert mode_) When True calculated discharge slots will disable or move charge slots, allowing them to intermix. When False discharge slots will never be placed into charge slots. +**switch.set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter setups +to avoid cross charging when batteries are out of balance. + **switch.predbat_calculate_tweak_plan** (_expert mode_) When True causes Predbat to perform a second pass optimisation across the next 8 charge and discharge windows in time order. From ae9f55d731f06cdd4f38975a8277f13f1b63305f Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Thu, 25 Jan 2024 23:10:31 +0000 Subject: [PATCH 23/34] Completed new FAQ for understanding losses & battery metric #643 --- docs/customisation.md | 4 ++-- docs/faq.md | 28 +++++++++++++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/docs/customisation.md b/docs/customisation.md index be9f08790..186a1a9ac 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -276,8 +276,8 @@ a saving session). The default is enable (True) **switch.combine_discharge_slots** (_expert mode_) Controls if discharge slots of > 30 minute can be combined. When disabled they will be split up, increasing run times but potentially more accurate for planning. The default is disabled (False) -**input_number.metric_min_improvement** (_expert mode_) sets the minimum cost improvement that it's worth lowering the battery SOC % for. -If it's 0 then this is disabled and the battery will be charged less if it's cost neutral. +**input_number.metric_min_improvement** (_expert mode_) sets the minimum cost improvement in pence that it's worth lowering the battery SOC % for. +The default value is 0 which means this feature is disabled and the battery will be charged less if it's cost neutral. If you use **pv_metric10_weight** then you probably don't need to enable this as the 10% forecast does the same thing better Do not use if you have multiple charge windows in a given period as it won't lead to good results (e.g. Agile) You could even go to something like -0.1 to say you would charge less even if it cost up to 0.1p more (best used with metric10) diff --git a/docs/faq.md b/docs/faq.md index ee6f14c03..07a07ca64 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -56,15 +56,37 @@ It is very important to correctly set Predbat's [Battery Loss Options](customisa and [Battery Margins](customisation.md#battery-margins-and-metrics-options) as these can have a huge and critical impact on the plan that Predbat generates. Predbat's default configuration values are the recommended starting values for most users but there is no single right set of configuration values for every user of Predbat, -it depends on many factors and your personal preferences. Many users will need to customise and tweak the [Predbat configuration](customisation.md) to suit their needs. +it depends on many factors and your personal preferences. Many users will need to customise and tweak their [Predbat configuration](customisation.md) to suit their needs. The SOC level that Predbat aims to keep in the battery **input_number.best_soc_keep** and the absolute minimum SoC level **input_number.best_soc_min** are the first thing to check. If these are set too high then Predbat will charge at unfavourable rates to maintain the battery SoC. -Predbat performs a lowest cost battery optimisation so a key part of deciding whether to charge, discharge or feed the house from the battery is the loss rates +Predbat performs a lowest cost battery optimisation so a key part of deciding whether to charge, discharge or feed the house from the battery are the loss rates **input_number.battery_loss**, **input_number.battery_loss_discharge** and **input_number.inverter_loss**. +Typical values could be 4, 4, 4 or 5, 5, 5. It is tempting to set these inverter loss figures lower to encourage Predbat to use the battery more, +but this should be resisted as experience from the GivEnergy community forum suggests total energy conversion losses are in the range of 10-20%. -**input_number.metric_battery_cycle** +Putting these losses into context and assuming you have an AC-coupled battery and have set the losses to 4, 4 and 4; +then for every kWh charged from the grid you will only get 0.92kWh stored in the battery (4% charge + 4% inverter conversion loss) +and similarly when that 0.92kWh is discharged to the home you will only receive 0.85kWh (0.92 x 0.92). + +These loss percentages also impact the Predbat plan. Consider an import rate of 20p/kWh; after conversion losses are considered, +each 1kWh of stored battery charge will in effect have cost 21.7p (20 / 0.92) to import. + +Then for discharging, the same applies. Each kWh of stored battery charge (that cost 21.7p to charge) will in effect have cost 23.6p (21.7 / 0.92) to discharge. +Predbat makes cost optimisation decisions so unless the current import rate is more than 23.6p, it will be cheaper to let the home run off grid import rather than to discharge the battery. + +If you turn [debug mode on for the Predbat plan](predbat-plan-card.md#debug-mode-for-predbat-plan) then you can see the +effective import and export rates after losses that Predbat calculates in the Predbat plan. + +Predbat also uses **input_number.metric_battery_cycle** (_expert mode_ setting) to apply a 'virtual cost' in pence per kWh for charging and discharging the battery. +The default value is 1p but this this can be changed to a different value to recognise the 'cost of using the battery', or set to zero to disable this feature. + +So if metric battery cycle is set to 1p, and continuing the example above, each kWh of battery charge will be costed at 22.7p (21.7p + 1p battery metric to charge), +and the battery will not be discharged to support the home unless the current import rate is more than 25.6p (23.6p + 1p cost of charging + 1p cost to discharge). + +**input_number.metric_min_improvement** and **input_number.metric_min_improvement_discharge** (both _expert mode_ settings) also affect Predbat's cost optimisation decisions +as to whether to charge or discharge the battery so could be tweaked. The defaults (0p and 0.1p respectively) should however give good results for most users. ## Predbat is causing warning messages in the Home Assistant Core log From 4559b82652df785213bed60d00931c8651235962 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:10:31 +0000 Subject: [PATCH 24/34] Expanded explanation of how days_previous works #647 --- docs/apps-yaml.md | 81 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 69 insertions(+), 12 deletions(-) diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 920721b16..e1f66ba04 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -49,36 +49,84 @@ Once you have made all other required changes to apps.yaml this line should be d - **days_previous** - A list (which has to be entered as one entry per line) of the number of days of historical house load to be used to predict your future daily load.
It's recommended that you set days_previous so Predbat uses sufficient days' history so that 'unusual' load activity (e.g. saving sessions, "big washing day", etc) get averaged out. -For example, to take an average house load over all the days of the last week: +For example, if you just want same day last week's consumption: ```yaml days_previous: - - 2 - - 3 - - 4 - - 5 - - 6 - 7 - - 8 ``` -Or if you just want same day last week's consumption: +Or if you want the average of the same day for the last 2 weeks: ```yaml days_previous: - 7 + - 14 ``` -Or if you want the average of the same day for the last 2 weeks: +When Predbat forecasts future home demand it counts backwards the days_previous number of days to find the appropriate historical home consumption. +This is best explained through a worked example: + +In this example, days_previous is set to use history from 2 days ago: + +```yaml + days_previous: + - 2 +``` + +If today is Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: + +- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 2 days from Tuesday so will use the historical home consumption from Sunday 9am +as being the predicted load for Tuesday 9am. +- For the day after (Wednesday) 9am slot, Predbat again looks backwards 2 days from that day, so will use historical home consumption from Monday 9am as being the Wednesday 9am prediction. + +This pattern of counting backwards days_previous days to find the appropriate time slot to load historical home consumption from +requires Predbat to operate some additional special processing if days_previous is set to a low value or forecast_hours to a high value. + +Extending the previous example but this time days_previous is set to use history from the previous day: + +```yaml + days_previous: + - 1 +``` + +Today is still Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: + +- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 1 day from Tuesday so will use the historical home consumption from today (Monday) 9am +as being the predicted load for Tuesday 9am. +- For the day after (Wednesday) 9am slot, Predbat again looks backwards 1 days from that day, +so looks for historical home consumption from Tuesday 9am as being the Wednesday 9am prediction, +but of course it's still Monday and Tuesday hasn't happened yet so we can't know what that historial consumption was!
+What Predbat does in this circumstance is to subtract a further day from days_previous and for Wednesday 9am's prediction it will therefore use the historical load from Monday 9am. + +This issue of finding future historical load only occurs when days_previous is set to 1 and Predbat is forecasting more than 24 hours ahead from 'now'. +So to highlight this with some edge cases, today is still Monday 3:15pm, days_previous is still set to '1' and in the forward plan: + +- For tomorrow (Tuesday) 2:30pm slot, Predbat looks backwards 1 day from Tuesday and takes the historical home consumption from today (Monday) 2:30pm slot. +- For tomorrow (Tuesday) 3:00pm slot, Predbat looks backwards 1 day and takes the historical load from today (Monday) 3:00pm slot - which we are only part way through +so only 15 minutes of load will be predicted for tomorrow 3pm. +- For tomorrow (Tuesday) 3:30pm slot, Predbat looks backwards 1 day but the 3:30pm slot today hasn't yet occurred so Predbat will take the historical load from the prior day +and has to use Sunday's 3:30pm load for tomorrow's prediction. +- Ditto the predicted load for tomorrow (Tuesday) 4:00pm slot comes from Sunday 4pm. + +Of course as today rolls forward and Predbat keeps on updating the forward plan every 5 minutes the prediction will be updated with the correct previous_day history as and when it exists. + +Its recommended therefore that days_previous isn't set to 1, or if it is, that you understand the way this has to work and the consequences. +If you want to set days_previous to take an average of the house load over all the days of the last week its suggested that it be set as: ```yaml days_previous: + - 2 + - 3 + - 4 + - 5 + - 6 - 7 - - 14 + - 8 ``` -Do keep in mind that Home Assistant only keeps 10 days history by default, so you might need to increase the number of days history kept in HA before it is purged -by editing and adding the following to the `/homeassistant/configuration.yaml` configuration file and restarting Home Assistant afterwards: +Do keep in mind that Home Assistant only keeps 10 days history by default, so if you want to access more than this for Predbat you might need to increase the number of days history +kept in HA before it is purged by editing and adding the following to the `/homeassistant/configuration.yaml` configuration file and restarting Home Assistant afterwards: ```yaml recorder: @@ -86,6 +134,15 @@ by editing and adding the following to the `/homeassistant/configuration.yaml` c ``` - **days_previous_weight** - A list (again with one entry per line) of weightings to be applied to each of the days in days_previous. + +For example, to apply a 100% weighting for the first day entry in days_previous, but only a 50% weighting to the second day in days_previous: + +```yaml + days_previous_weight: + - 1 + - 0.5 +``` + The default value is 1, that all history days are equally weighted, so if you don't want to weight individual days you can simply use: ```yaml From 7ea374b285b3749716b7c5b6b6831f03d657a563 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 26 Jan 2024 21:15:56 +0000 Subject: [PATCH 25/34] Move extended days_previous examples to separate section --- docs/apps-yaml.md | 146 ++++++++++++++++++++++++++-------------------- 1 file changed, 82 insertions(+), 64 deletions(-) diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index e1f66ba04..ad779518b 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -46,17 +46,19 @@ Once you have made all other required changes to apps.yaml this line should be d - **notify_devices** - A list of device names to notify when Predbat sends a notification. The default is just 'notify' which contacts all mobile devices -- **days_previous** - A list (which has to be entered as one entry per line) of the number of days of historical house load to be used to predict your future daily load.
-It's recommended that you set days_previous so Predbat uses sufficient days' history so that 'unusual' load activity (e.g. saving sessions, "big washing day", etc) get averaged out. +- **days_previous** - Predbat needs to know what your likely future house load will be to set and manage the battery level to support it. +days_previous defines a list (which has to be entered as one entry per line) of the previous days of historical house load that are to be used to predict your future daily load.
+It's recommended that you set days_previous so Predbat calculates an average house load using sufficient days' history so that 'unusual' load activity +(e.g. saving sessions, "big washing day", etc) get averaged out. -For example, if you just want same day last week's consumption: +For example, if you just want Predbat to assume the house load on a particular day is the same as the same day of last week: ```yaml days_previous: - 7 ``` -Or if you want the average of the same day for the last 2 weeks: +Or if you want Predbat to take the average of the same day for the last two weeks: ```yaml days_previous: @@ -64,66 +66,7 @@ Or if you want the average of the same day for the last 2 weeks: - 14 ``` -When Predbat forecasts future home demand it counts backwards the days_previous number of days to find the appropriate historical home consumption. -This is best explained through a worked example: - -In this example, days_previous is set to use history from 2 days ago: - -```yaml - days_previous: - - 2 -``` - -If today is Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: - -- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 2 days from Tuesday so will use the historical home consumption from Sunday 9am -as being the predicted load for Tuesday 9am. -- For the day after (Wednesday) 9am slot, Predbat again looks backwards 2 days from that day, so will use historical home consumption from Monday 9am as being the Wednesday 9am prediction. - -This pattern of counting backwards days_previous days to find the appropriate time slot to load historical home consumption from -requires Predbat to operate some additional special processing if days_previous is set to a low value or forecast_hours to a high value. - -Extending the previous example but this time days_previous is set to use history from the previous day: - -```yaml - days_previous: - - 1 -``` - -Today is still Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: - -- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 1 day from Tuesday so will use the historical home consumption from today (Monday) 9am -as being the predicted load for Tuesday 9am. -- For the day after (Wednesday) 9am slot, Predbat again looks backwards 1 days from that day, -so looks for historical home consumption from Tuesday 9am as being the Wednesday 9am prediction, -but of course it's still Monday and Tuesday hasn't happened yet so we can't know what that historial consumption was!
-What Predbat does in this circumstance is to subtract a further day from days_previous and for Wednesday 9am's prediction it will therefore use the historical load from Monday 9am. - -This issue of finding future historical load only occurs when days_previous is set to 1 and Predbat is forecasting more than 24 hours ahead from 'now'. -So to highlight this with some edge cases, today is still Monday 3:15pm, days_previous is still set to '1' and in the forward plan: - -- For tomorrow (Tuesday) 2:30pm slot, Predbat looks backwards 1 day from Tuesday and takes the historical home consumption from today (Monday) 2:30pm slot. -- For tomorrow (Tuesday) 3:00pm slot, Predbat looks backwards 1 day and takes the historical load from today (Monday) 3:00pm slot - which we are only part way through -so only 15 minutes of load will be predicted for tomorrow 3pm. -- For tomorrow (Tuesday) 3:30pm slot, Predbat looks backwards 1 day but the 3:30pm slot today hasn't yet occurred so Predbat will take the historical load from the prior day -and has to use Sunday's 3:30pm load for tomorrow's prediction. -- Ditto the predicted load for tomorrow (Tuesday) 4:00pm slot comes from Sunday 4pm. - -Of course as today rolls forward and Predbat keeps on updating the forward plan every 5 minutes the prediction will be updated with the correct previous_day history as and when it exists. - -Its recommended therefore that days_previous isn't set to 1, or if it is, that you understand the way this has to work and the consequences. -If you want to set days_previous to take an average of the house load over all the days of the last week its suggested that it be set as: - -```yaml - days_previous: - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 -``` +Further details and worked examples of [how days_previous works](#understanding-how-days_previous-works) are covered at the end of this document. Do keep in mind that Home Assistant only keeps 10 days history by default, so if you want to access more than this for Predbat you might need to increase the number of days history kept in HA before it is purged by editing and adding the following to the `/homeassistant/configuration.yaml` configuration file and restarting Home Assistant afterwards: @@ -554,3 +497,78 @@ Note that this does include charge freeze slots where the discharge rate is set - **binary_sensor.predbat_discharging** - Will be True when the home battery is inside a force discharge slot. This does not include discharge freeze slots where the charge rate is set to zero to export excess solar only. + +## Understanding how days_previous works + +As described earlier, **days_previous** is a list of the previous days of historical house load that are averaged together to predict your future daily load. + +e.g., if you want the average of the same day for the last 2 weeks: + +```yaml + days_previous: + - 7 + - 14 +``` + +This section describes in more detail how days_previous is used by Predbat in creating the future battery plan, and gives some worked examples and a 'gotcha' to be aware of. + +When Predbat forecasts future home demand it counts backwards the days_previous number of days to find the appropriate historical home consumption. +This is best explained through a worked example: + +In this example, days_previous is set to use history from 2 days ago: + +```yaml + days_previous: + - 2 +``` + +If right now today it's Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: + +- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 2 days from Tuesday so will use the historical home consumption from Sunday 9am +as being the predicted load for Tuesday 9am. +- For the day after (Wednesday) 9am slot, Predbat again looks backwards 2 days from that day, so will use historical home consumption from Monday 9am as being the Wednesday 9am prediction. + +This pattern of counting backwards days_previous days to find the appropriate time slot to load historical home consumption from +requires Predbat to operate some additional special processing if days_previous is set to a low value or forecast_hours to a high value. + +Extending the previous example but this time days_previous is set to use history from just the previous day: + +```yaml + days_previous: + - 1 +``` + +Today its still Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours: + +- For tomorrow (Tuesday) 9am slot, Predbat will look backwards 1 day from Tuesday so will use the historical home consumption from today (Monday) 9am +as being the predicted load for Tuesday 9am. +- For the day after (Wednesday) 9am slot, Predbat again looks backwards 1 days from that day, +so looks for historical home consumption from Tuesday 9am as being the Wednesday 9am prediction, +but of course it's still Monday and Tuesday hasn't happened yet so we can't know what that historial consumption was!
+What Predbat does in this circumstance is to subtract a further day from days_previous and for Wednesday 9am's prediction it will therefore use the historical load from Monday 9am. + +This issue of finding future historical load only occurs when days_previous is set to 1 and Predbat is forecasting more than 24 hours ahead from 'now'. +So to highlight this with some edge cases, today is still Monday 3:15pm, days_previous is still set to '1' and in the forward plan: + +- For tomorrow (Tuesday) 2:30pm slot, Predbat looks backwards 1 day from Tuesday and takes the historical home consumption from today (Monday) 2:30pm slot. +- For tomorrow (Tuesday) 3:00pm slot, Predbat looks backwards 1 day and takes the historical load from today (Monday) 3:00pm slot - which we are only part way through +so only 15 minutes of load will be predicted for tomorrow 3pm. +- For tomorrow (Tuesday) 3:30pm slot, Predbat looks backwards 1 day but the 3:30pm slot today hasn't yet occurred so Predbat will take the historical load from the prior day +and has to use Sunday's 3:30pm load for tomorrow's prediction. +- Ditto the predicted load for tomorrow (Tuesday) 4:00pm slot comes from Sunday 4pm. + +Of course as today rolls forward and Predbat keeps on updating the forward plan every 5 minutes the prediction will be updated with the correct previous_day history as and when it exists. + +Its recommended therefore that days_previous isn't set to 1, or if it is, that you understand the way this has to work and the consequences. +If you want to set days_previous to take an average of the house load over all the days of the last week its suggested that it be set as: + +```yaml + days_previous: + - 2 + - 3 + - 4 + - 5 + - 6 + - 7 + - 8 +``` From d11a01f34fd279ebc8aab440f11b974e16f3dea3 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 09:37:12 +0000 Subject: [PATCH 26/34] Update configuration-guide.md, add missing predbat_ prefixes predbat_ prefix missing from a number of entities --- docs/configuration-guide.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index d6ce5187b..bd0727200 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -47,7 +47,7 @@ If you are using expert mode then these options maybe worth reviewing: |---------|---------------|-------------| | input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | | switch.predbat_combine_charge_slots | True | As you have just one overnight rate then one slot is fine | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_metric_min_improvement | 0 | Charge less if it's cost neutral | You should set **select.predbat_mode** to 'Control Charge' @@ -67,9 +67,9 @@ If you are using expert mode then these options maybe worth reviewing, otherwise |---------|---------------|-------------| | input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | | switch.predbat_combine_charge_slots | ? | Setting to False will allow charging at more expensive day rates when it's worth it to export more | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | -| input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | -| input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | +| input_number.predbat_metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | +| input_number.predbat_metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | ? | Can be set non-zero if you want to force a minimum charge level | You should set **select.predbat_mode** to 'Control Charge & Discharge' @@ -92,9 +92,9 @@ If you are using expert mode then these options maybe worth reviewing, otherwise |---------|---------------|-------------| | input_number.predbat_forecast_plan_hours | 24 | If you set this to 24 then you will have quicker updates, the cycle repeats itself anyhow | | switch.predbat_combine_charge_slots | ? | Setting to False will allow charging at more expensive day rates when it's worth it to export more | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | -| input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | -| input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | +| input_number.predbat_metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | +| input_number.predbat_metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | You should set **select.predbat_mode** to 'Control Charge & Discharge' @@ -114,10 +114,10 @@ If you are using expert mode then these options maybe worth reviewing, otherwise | Item | Value | Comment | |---------|---------------|-------------| | input_number.predbat_forecast_plan_hours | 24-48 | If you set this to 24 then you will have quicker updates, going to 36/48 for a longer plan | -| input_number.metric_min_improvement | 0 | Charge less if it's cost neutral | -| input_number.metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | -| input_number.metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | +| input_number.predbat_metric_min_improvement | 0 | Charge less if it's cost neutral | +| input_number.predbat_metric_min_improvement_discharge | 0.1 | Discharge only if there is a profit | +| input_number.predbat_metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | -| switch.calculate_fast_plan | False | The fast plan feature reduces accuracy of planning | +| switch.predbat_calculate_fast_plan | False | The fast plan feature reduces accuracy of planning | You should set **select.predbat_mode** to 'Control Charge & Discharge' From dee253afe21bc879a444c6bfcc1e570d1f75b9b8 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 09:44:44 +0000 Subject: [PATCH 27/34] Update energy-rates.md, minor typos --- docs/energy-rates.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/energy-rates.md b/docs/energy-rates.md index 382894e16..02ac3362c 100644 --- a/docs/energy-rates.md +++ b/docs/energy-rates.md @@ -201,8 +201,8 @@ rates_import_override: Would say that during a 1 hour period at 5:30-6:30pm on 21st of Jan set the import rate to 150p and assume our load will be 80% of normal (20% lower). You can also make relative adjustments to your energy rates, e.g. if you want to avoid exporting during peak periods to improve your energy -saving session results you could make a relative adjustment your export rates using **rate_increment**. -The reason not to just set **rate** is then when an energy saving session is active you do not want to ignore the higher export take. +saving session results you could make a relative adjustment to your export rates using **rate_increment**. +The reason not to just set **rate** is then when an energy saving session is active you do not want to ignore the higher export rate that is automatically provided by Octopus. In this example we subtract 10p from our export rate during the period that saving sessions normally fall within and thus steer Predbat away from force exporting during that time. The saving session will still work correctly as a 10p adjustment on rates >100p will have little/no impact. @@ -217,8 +217,8 @@ rates_export_override: You can also use rate_increment with load_scaling, e.g. a rate_increment of 0 can be used to just apply load scaling to certain defined periods. - **date** is in the date format of "YYYY-MM-DD" e.g. "2023-09-09", **start** and **end** in "HH:MM:SS" time format e.g. "12:30:00", and **rate** in pence. -- **load_scaling** is a factor, where 1.0 would be no change, 0.8 is 80% of nominal. -- **rate_increment** is the number of pence to add to the reported energy rates during this period +- **load_scaling** is a percentage factor, where 1.0 would be no change, 0.8 is 80% of nominal house load. +- **rate_increment** is the number of pence to add (or subtract) to the reported energy rates during this period ## Rate offsets From 0cb0b70e350d9d102b9f47cb27a7b166d1a05650 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:26:04 +0000 Subject: [PATCH 28/34] Update install.mdUpdate install.md, extra highlight of what Monitor mode does --- docs/install.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/install.md b/docs/install.md index 43f1a321e..50e29f3aa 100644 --- a/docs/install.md +++ b/docs/install.md @@ -267,13 +267,14 @@ You have configured predbat's control entities, created a couple of dashboard pa In order to enable Predbat you must delete the 'template: True' line in `apps.yaml` once you are happy with your configuration. You may initially want to set **select.predbat_mode** to *Monitor* to see how Predbat operates, e.g. by studying the [Predbat Plan](predbat-plan-card.md). -In *Monitor* mode Predbat will monitor (but not change) the current inverter settings and predict the battery SoC based on predicted Solar Generation and House Load. +In *Monitor* mode Predbat will monitor (but not change) the current inverter settings and predict the battery SoC based on predicted Solar Generation and House Load.
+NB: In _Monitor_ mode Predbat will _NOT_ plan any battery charge or discharge activity of its own, it will report on the current inverter charge & discharge settings, house load and solar generation. The recommended next step is to start Predbat planning your inverter charging and discharging activity but not (yet) make any changes to the inverter. This enables you to get a feel for the Predbat plan and [customise Predbat's settings](customisation.md) to meet your needs. -Set **select.predbat_mode** to the correct [mode of operation](customisation.md#predbat-mode) for your system -and also set **switch.predbat_set_read_only** to True to stop Predbat making any changes to your inverter. +Set **select.predbat_mode** to the correct [mode of operation](customisation.md#predbat-mode) for your system - usually 'Control charge' or 'Control charge & discharge'. +ALSO you should set **switch.predbat_set_read_only** to True to stop Predbat making any changes to your inverter. Once you are happy with the plan Predbat is producing, and are ready to let Predbat start controlling your inverter charging and discharging, set the switch **switch.predbat_set_read_only** to False and Predbat will start controlling your inverter. @@ -282,8 +283,8 @@ You can see the planned charging and discharging activity in the [Predbat Plan]( ## Updating Predbat -Note that future updates to Predbat will not overwrite the `apps.yaml` configuration file that you have tailored to your setup. -You may therefore need to manually copy across any new apps.yaml settings from the [Template apps.yaml](apps-yaml.md#templates) for new features. +Note that any future updates to Predbat will not overwrite the `apps.yaml` configuration file that you have tailored to your setup. +If new Predbat releases introduce new featurs to apps.yaml you may therefore need to manually copy across the new apps.yaml settings from the [Template apps.yaml](apps-yaml.md#templates). ## HACS Update @@ -296,7 +297,7 @@ Go to Settings, Add-ons, AppDaemon, and click 'Restart'. ## Predbat built-in update -Predbat can now update itself, just select the version you want from the **select.predbat_update** drop down menu, the latest version will be at the top of the list. +Predbat can now update itself, just select the version of Predbat you want to install from the **select.predbat_update** drop down menu, the latest version will be at the top of the list. Predbat will update itself and automatically restart. Alternatively, if you turn on **switch.predbat_auto_update**, Predbat will automatically update itself as new releases are published on Github. From 016d288da59a89c212ff29af7dbbcc586c192d45 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 17:41:23 +0000 Subject: [PATCH 29/34] Update configuration-guide.md, more missing predbat_ prefixes --- docs/configuration-guide.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index bd0727200..bcd2eb019 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -12,11 +12,11 @@ It is recommended that you [create a dashboard page](output-data.md#displaying-o This page gives a summary of some of the key configuration settings you should consider in Predbat for different energy tariffs; the [Predbat customisation guide](customisation.md) details all the Predbat customisation options. -You should try to tune **input_number.inverter_loss**, **input_number.battery_loss** and **input_number.battery_loss_discharge** to the correct % loss for your system +You should try to tune **input_number.predbat_inverter_loss**, **input_number.predbat_battery_loss** and **input_number.predbat_battery_loss_discharge** to the correct % loss for your system in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. -Also set **switch.inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. +Also set **switch.predbat_inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. -The setting **input_number.metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence per kWh on using your battery for charging and discharging.
+The setting **input_number.predbat_metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence per kWh on using your battery for charging and discharging.
If you configure this number higher then more expensive plans will be selected which avoids charging and discharging your battery as much. The default is 1p but can be set to 0 if you want to turn this feature off. From 60cd86112b1e285c6500386f39a66001be1c606b Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 18:22:13 +0000 Subject: [PATCH 30/34] Update car-charge-planning.md, clarify settings for Octopus Intelligent --- docs/car-charge-planning.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/car-charge-planning.md b/docs/car-charge-planning.md index 2f15d216a..eacc757ea 100644 --- a/docs/car-charge-planning.md +++ b/docs/car-charge-planning.md @@ -2,12 +2,15 @@ There are two ways to plan car charging slots: -- If you have Intelligent Octopus import tariff and the Octopus Energy integration - in which case Predbat will use the slots allocated by Octopus Energy in battery prediction - - Ensure **octopus_intelligent_slot** in `apps.yaml` points to the Intelligent Slot sensor in the Octopus Energy integration +- If you have Intelligent Octopus import tariff and the Octopus Energy integration - in which case Predbat will use the slots allocated by Octopus Energy in battery prediction. +The [Octopus Energy integration supports Octopus Intelligent](https://bottlecapdave.github.io/HomeAssistant-OctopusEnergy/entities/intelligent/) and through that Predbat gets most of the information it needs. + - **octopus_intelligent_slot** in `apps.yaml` is pre-configured with a regular expression to point to the Intelligent Slot sensor in the Octopus Energy integration. +You should not need to change this, but its worth checking the [Predbat logfile](#output-data.md#predbat-logfile) to confirm that it has found your Octopus account details - Set **switch.predbat_octopus_intelligent_charging** to True - - Information about the car's battery size will also be extracted from the Octopus Energy integration - - You will need to set the cars current soc sensor, **car_charging_soc** in apps.yaml correctly to have accurate results - - If you set **car_charging_limit** in `apps.yaml` then Predbat can also know if the car's limit is set lower than in Intelligent Octopus + - Information about the car's battery size will be automatically extracted from the Octopus Energy integration + - You should set the cars current soc sensor, **car_charging_soc** in `apps.yaml` to point to a sensor that specifies the car's cuurrent % charge level to have accurate results. +This should normally be a sensor provided by your car charger. If you don't have this available for your charger then Predbat will assume the charge level is 0%. + - If you set **car_charging_limit** in `apps.yaml` then Predbat can also know if the car's limit is set lower than in Intelligent Octopus. If you don't set this Predbat will default to 100%. - You can use **car_charging_now** as a workaround to indicate your car is charging but the Intelligent API hasn't reported it. - Let the Octopus app control when your car charges From 83aa399b684765a49fb29e95e090a8db49f9af22 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 19:58:48 +0000 Subject: [PATCH 31/34] Typo & formatting corrections --- docs/car-charge-planning.md | 10 ++++++---- docs/configuration-guide.md | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/car-charge-planning.md b/docs/car-charge-planning.md index eacc757ea..5b2485ac9 100644 --- a/docs/car-charge-planning.md +++ b/docs/car-charge-planning.md @@ -3,14 +3,16 @@ There are two ways to plan car charging slots: - If you have Intelligent Octopus import tariff and the Octopus Energy integration - in which case Predbat will use the slots allocated by Octopus Energy in battery prediction. -The [Octopus Energy integration supports Octopus Intelligent](https://bottlecapdave.github.io/HomeAssistant-OctopusEnergy/entities/intelligent/) and through that Predbat gets most of the information it needs. +The [Octopus Energy integration supports Octopus Intelligent](https://bottlecapdave.github.io/HomeAssistant-OctopusEnergy/entities/intelligent/), +and through that Predbat gets most of the information it needs. - **octopus_intelligent_slot** in `apps.yaml` is pre-configured with a regular expression to point to the Intelligent Slot sensor in the Octopus Energy integration. -You should not need to change this, but its worth checking the [Predbat logfile](#output-data.md#predbat-logfile) to confirm that it has found your Octopus account details +You should not need to change this, but its worth checking the [Predbat logfile](output-data.md#predbat-logfile) to confirm that it has found your Octopus account details - Set **switch.predbat_octopus_intelligent_charging** to True - Information about the car's battery size will be automatically extracted from the Octopus Energy integration - - You should set the cars current soc sensor, **car_charging_soc** in `apps.yaml` to point to a sensor that specifies the car's cuurrent % charge level to have accurate results. + - You should set the cars current soc sensor, **car_charging_soc** in `apps.yaml` to point to a sensor that specifies the car's current % charge level to have accurate results. This should normally be a sensor provided by your car charger. If you don't have this available for your charger then Predbat will assume the charge level is 0%. - - If you set **car_charging_limit** in `apps.yaml` then Predbat can also know if the car's limit is set lower than in Intelligent Octopus. If you don't set this Predbat will default to 100%. + - If you set **car_charging_limit** in `apps.yaml` then Predbat can also know if the car's limit is set lower than in Intelligent Octopus. + If you don't set this Predbat will default to 100%. - You can use **car_charging_now** as a workaround to indicate your car is charging but the Intelligent API hasn't reported it. - Let the Octopus app control when your car charges diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index bcd2eb019..b10d8be89 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -12,8 +12,8 @@ It is recommended that you [create a dashboard page](output-data.md#displaying-o This page gives a summary of some of the key configuration settings you should consider in Predbat for different energy tariffs; the [Predbat customisation guide](customisation.md) details all the Predbat customisation options. -You should try to tune **input_number.predbat_inverter_loss**, **input_number.predbat_battery_loss** and **input_number.predbat_battery_loss_discharge** to the correct % loss for your system -in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. +You should try to tune **input_number.predbat_inverter_loss**, **input_number.predbat_battery_loss** and **input_number.predbat_battery_loss_discharge** to the correct % loss +for your system in order to get more accurate predictions. Around 4% for each is good for a hybrid inverter. Also set **switch.predbat_inverter_hybrid** to True or False depending upon if you have a Hybrid or AC-Coupled battery. The setting **input_number.predbat_metric_battery_cycle** (_expert mode_) can be used to put a 'virtual cost' in pence per kWh on using your battery for charging and discharging.
From c5e6bcc36a94640a9543766aeda880903ef00900 Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 20:50:47 +0000 Subject: [PATCH 32/34] Create charge curve, more info on entities required for history to create the curve #666 --- docs/apps-yaml.md | 26 +++++++++++++++++++++----- docs/faq.md | 27 +++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 3f018690d..74accee46 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -224,7 +224,8 @@ The **givtcp_rest** line should be commented out/deleted in order for Predbat to - **discharge_start_time** - GivTCP scheduled discharge slot_1 start time - **discharge_end_time** - GivTCP scheduled discharge slot_1 end time -If you are using REST control the above GivTCP configuration items can be deleted or commented out of apps.yaml. +If you are using REST control the above GivTCP configuration items can be deleted or commented out of `apps.yaml` +(but see section below on [creating the battery charge power curve](#workarounds)). ## Solcast Solar Forecast @@ -448,14 +449,29 @@ Enter the charging curve as a series of steps of % of max charge rate for each s The default is 1.0 (full power) charge all the way to 100%. -Modelling the charge curve becomes important if you have limited charging slots (e.g. ony a few hours a night) or you wish to make accurate use of the +Modelling the charge curve becomes important if you have limited charging slots (e.g. only a few hours a night) or you wish to make accurate use of the low power charging mode (**switch.predbat_set_charge_low_power**). -Predbat can now automatically calculate the charging curve for you if you have enough suitable data in your load history. The charging curve will be calculated +Predbat can now automatically calculate the charging curve for you if you have enough suitable historical data in Home Assistant. The charging curve will be calculated when battery_charge_power_curve option is *not* set in apps.yaml and Predbat is started for the first time (due to restarting AppDaemon or an edit to apps.yaml). -You should look at the AppDaemon logfile to find the predicted charging curve and copy/paste it into your apps.yaml. +You should look at the [AppDaemon logfile](output-data.md#predbat-logfile) to find the predicted battery charging curve and copy/paste it into your `apps.yaml` file. -Example from a GivEnergy 9.5kWh battery with latest firmware and Gen 1 inverter: +NB: In order for Predbat to have calculate your charging curve it needs to have access to historical Home Assistant data for battery_charge_rate, battery_power and soc_kw. + +If you are using the recommended default [REST mode to control your inverter](#inverter-control-configurations) then you will need to uncomment out the following entries in apps.yaml: + +```yaml + charge_rate: + - number.givtcp_{geserial}_battery_charge_rate + battery_power: + - sensor.givtcp_{geserial}_battery_power + soc_kw: + - sensor.givtcp_{geserial}_soc_kwh +``` + +Once the battery charge curve has been created these entries can be commented out again in `apps.yaml`. + +Example charging curve from a GivEnergy 9.5kWh battery with latest firmware and Gen 1 inverter: ```yaml battery_charge_power_curve: diff --git a/docs/faq.md b/docs/faq.md index 07a07ca64..ed2cd005d 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -58,11 +58,12 @@ and [Battery Margins](customisation.md#battery-margins-and-metrics-options) as t Predbat's default configuration values are the recommended starting values for most users but there is no single right set of configuration values for every user of Predbat, it depends on many factors and your personal preferences. Many users will need to customise and tweak their [Predbat configuration](customisation.md) to suit their needs. -The SOC level that Predbat aims to keep in the battery **input_number.best_soc_keep** and the absolute minimum SoC level **input_number.best_soc_min** are the first thing to check. +The SOC level that Predbat aims to keep in the battery **input_number.predbat_best_soc_keep** +and the absolute minimum SoC level **input_number.predbat_best_soc_min** are the first thing to check. If these are set too high then Predbat will charge at unfavourable rates to maintain the battery SoC. Predbat performs a lowest cost battery optimisation so a key part of deciding whether to charge, discharge or feed the house from the battery are the loss rates -**input_number.battery_loss**, **input_number.battery_loss_discharge** and **input_number.inverter_loss**. +**input_number.predbat_battery_loss**, **input_number.predbat_battery_loss_discharge** and **input_number.predbat_inverter_loss**. Typical values could be 4, 4, 4 or 5, 5, 5. It is tempting to set these inverter loss figures lower to encourage Predbat to use the battery more, but this should be resisted as experience from the GivEnergy community forum suggests total energy conversion losses are in the range of 10-20%. @@ -79,13 +80,13 @@ Predbat makes cost optimisation decisions so unless the current import rate is m If you turn [debug mode on for the Predbat plan](predbat-plan-card.md#debug-mode-for-predbat-plan) then you can see the effective import and export rates after losses that Predbat calculates in the Predbat plan. -Predbat also uses **input_number.metric_battery_cycle** (_expert mode_ setting) to apply a 'virtual cost' in pence per kWh for charging and discharging the battery. +Predbat also uses **input_number.predbat_metric_battery_cycle** (_expert mode_ setting) to apply a 'virtual cost' in pence per kWh for charging and discharging the battery. The default value is 1p but this this can be changed to a different value to recognise the 'cost of using the battery', or set to zero to disable this feature. So if metric battery cycle is set to 1p, and continuing the example above, each kWh of battery charge will be costed at 22.7p (21.7p + 1p battery metric to charge), and the battery will not be discharged to support the home unless the current import rate is more than 25.6p (23.6p + 1p cost of charging + 1p cost to discharge). -**input_number.metric_min_improvement** and **input_number.metric_min_improvement_discharge** (both _expert mode_ settings) also affect Predbat's cost optimisation decisions +**input_number.predbat_metric_min_improvement** and **input_number.predbat_metric_min_improvement_discharge** (both _expert mode_ settings) also affect Predbat's cost optimisation decisions as to whether to charge or discharge the battery so could be tweaked. The defaults (0p and 0.1p respectively) should however give good results for most users. ## Predbat is causing warning messages in the Home Assistant Core log @@ -134,6 +135,24 @@ If you've run out of API calls you will have to wait until midnight GMT for the It's recommended that you don't include the Solcast forecast within your GivEnergy portal to avoid running out of API calls. - Check the [Solcast server API status](https://status.solcast.com/) is OK +## Note, Can not find battery charge curve + +If you get the message "Note: Can not find battery charge curve, one of the required settings for soc_kw, battery_power and charge_rate are missing from apps.yaml" in the logfile +then Predbat is trying to create a battery charge curve but does not have access to the required history information in Home Assistant. + +[Creating the battery charge curve](apps-yaml.md#workarounds) is described in the apps.yaml document. +The most likely cause of the above message appearing in the logfile is that you are controlling the inverter in REST mode +but have not uncommented the following entities in apps.yaml that Predbat needs to obtain history from to create the battery charge curve: + +```yaml + charge_rate: + - number.givtcp_{geserial}_battery_charge_rate + battery_power: + - sensor.givtcp_{geserial}_battery_power + soc_kw: + - sensor.givtcp_{geserial}_soc_kwh +``` + ## I have another problem not listed above If you are still having trouble feel free to raise a [Github ticket](https://github.com/springfall2008/batpred/issues) for support From b09b3f3efdc963806d838272a6d44df6510f931f Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 22:37:54 +0000 Subject: [PATCH 33/34] Added missing predbat_ prefixes to HA entity names --- docs/apps-yaml.md | 12 +-- docs/configuration-guide.md | 8 +- docs/customisation.md | 146 ++++++++++++++++++------------------ docs/faq.md | 12 +-- docs/install.md | 9 ++- docs/predbat-plan-card.md | 6 +- 6 files changed, 99 insertions(+), 94 deletions(-) diff --git a/docs/apps-yaml.md b/docs/apps-yaml.md index 74accee46..6055d4b86 100644 --- a/docs/apps-yaml.md +++ b/docs/apps-yaml.md @@ -249,7 +249,7 @@ If however you have a mixed PV array setup with some PV that does not feed into then it's recommended that Solcast is only configured for the PV connected to the GivEnergy inverters. Solcast produces 3 forecasted PV estimates, the 'central' (50% or most likely to occur) PV forecast, the '10%' (worst case) PV forecast, and the '90%' (best case) PV forecast.
-By default Predbat will use the central estimate and applies to it the **input_number.pv_metric10_weight** weighting of the 10% (worst case) estimate. +By default Predbat will use the central estimate and applies to it the **input_number.predbat_pv_metric10_weight** weighting of the 10% (worst case) estimate. Predbat models cloud coverage by using the difference between the PV and PV10 forecasts to work out a cloud factor, this modulates the PV output predictions up and down accordingly as if there were passing clouds. @@ -259,11 +259,11 @@ This can have an impact on planning, especially for things like freeze charging or '90' to always use the 90% PV estimate (not recommended!).
Set to blank or delete / comment out the line to use the default central estimate. -If **pv_estimate** is set to 10 then **input_number.pv_metric10_weight** in Home Assistant should be set to 1.0. +If **pv_estimate** is set to 10 then **input_number.predbat_pv_metric10_weight** in Home Assistant should be set to 1.0. ## Energy Rates -There are a number of configuration items in apps.yaml for telling Predbat what your import and export rates are. +There are a number of configuration items in `apps.yaml` for telling Predbat what your import and export rates are. These are described in detail in [Energy Rates](energy-rates.md) and are listed here just for completeness: @@ -305,7 +305,7 @@ Set to 0 if you don't have an EV (and the remaining car sensors in apps.yaml can You might want to remove your electric car charging data from the historical house load data so as to not bias the calculations, otherwise you will get high battery charge levels when the car was charged previously (e.g. last week). -- **switch.car_charging_hold** - A Home Assistant switch that when turned on (True) tells Predbat to remove car charging data from Predbat's battery prediction plan. +- **switch.predbat_car_charging_hold** - A Home Assistant switch that when turned on (True) tells Predbat to remove car charging data from Predbat's battery prediction plan. - **car_charging_energy** - Set in apps.yaml to point to a Home Assistant entity which is the incrementing kWh data for the car charger. This has been pre-defined to a regular expression to auto-detect the appropriate Wallbox and Zappi car charger sensors, or edit as necessary in apps.yaml for your charger sensor.
@@ -313,12 +313,12 @@ This can be set to a list of car charging energy sensors, one per line if you ha You can also use **car_charging_energy** to remove other house load kWh from the data Predbat uses for the forecast, e.g. if you want to remove Mixergy hot water tank heating data from the forecast such as if you sometimes heat on gas, and sometimes electric depending upon import rates. -- **input_number.car_charging_energy_scale** - A Home Assistant entity used to define a scaling factor (in the range 0.1 to 1.0) +- **input_number.predbat_car_charging_energy_scale** - A Home Assistant entity used to define a scaling factor (in the range 0.1 to 1.0) to multiply the car_charging_energy data by if required (e.g. set to 0.001 to convert Watts to kW). If you do not have a suitable car charging kWh sensor in Home Assistant then comment the car_charging_energy line out of `apps.yaml` and configure the following Home Assistant entity: -- **input_number.car_charging_threshold** - Sets the threshold above which home consumption is assumed to be car charging and will be removed from the home load data (default 6 = 6kW). +- **input_number.predbat_car_charging_threshold** - Sets the threshold above which home consumption is assumed to be car charging and will be removed from the home load data (default 6 = 6kW). ### Planned Car Charging diff --git a/docs/configuration-guide.md b/docs/configuration-guide.md index b10d8be89..54fb647d6 100644 --- a/docs/configuration-guide.md +++ b/docs/configuration-guide.md @@ -49,7 +49,7 @@ If you are using expert mode then these options maybe worth reviewing: | switch.predbat_combine_charge_slots | True | As you have just one overnight rate then one slot is fine | | input_number.predbat_metric_min_improvement | 0 | Charge less if it's cost neutral | -You should set **select.predbat_mode** to 'Control Charge' +You should set **select.predbat_mode** to 'Control charge' ## Cheap night rate, with a good export rate (e.g. Intelligent Octopus with Octopus Outgoing) @@ -72,7 +72,7 @@ If you are using expert mode then these options maybe worth reviewing, otherwise | input_number.predbat_metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | ? | Can be set non-zero if you want to force a minimum charge level | -You should set **select.predbat_mode** to 'Control Charge & Discharge' +You should set **select.predbat_mode** to 'Control charge & discharge' ## Multiple rates for import and export (e.g. Octopus Flux & Cozy) @@ -97,7 +97,7 @@ If you are using expert mode then these options maybe worth reviewing, otherwise | input_number.predbat_metric_battery_cycle | ? | Higher numbers mean less charging and discharging but higher costs | | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | -You should set **select.predbat_mode** to 'Control Charge & Discharge' +You should set **select.predbat_mode** to 'Control charge & discharge' ## Half hourly variable rates (e.g. Octopus Agile) @@ -120,4 +120,4 @@ If you are using expert mode then these options maybe worth reviewing, otherwise | input_number.predbat_best_soc_min | 0 | Don't use non-zero otherwise all slots will be force charging | | switch.predbat_calculate_fast_plan | False | The fast plan feature reduces accuracy of planning | -You should set **select.predbat_mode** to 'Control Charge & Discharge' +You should set **select.predbat_mode** to 'Control charge & discharge' diff --git a/docs/customisation.md b/docs/customisation.md index 981f22306..71e86ca68 100644 --- a/docs/customisation.md +++ b/docs/customisation.md @@ -44,12 +44,12 @@ both charge and discharge, reset charge and discharge rates to full power and re ### Predbat Monitor mode -In **monitor** mode Predbat will not control or Plan any charging or discharging, inverter balancing will take place if enabled, +In **Monitor** mode Predbat will not control or Plan any charging or discharging, inverter balancing will take place if enabled, and the plan will show just what is expected based on the current inverter configuration alone. -### Predbat Control SOC Only mode +### Predbat Control SOC only mode -In **Control SOC Only** mode Predbat will adjust the target charge percentage (SOC target) according to the Best plan, but the charge +In **Control SOC only** mode Predbat will adjust the target charge percentage (SOC target) according to the Best plan, but the charge window will not be modified. This mode can be useful if you just have one fixed charge slot per day and you only want Predbat to control the percentage the battery is charged based on solar generation @@ -57,17 +57,17 @@ and predicted house load. _CAUTION: You must manually set any charging required on the inverter and if the charge window is disabled then no charging will take place._ -### Predbat Control Charge mode +### Predbat Control charge mode -In **Control Charge** mode Predbat will set the charge times and charge percentages according to the Best plan, charging can be enabled and +In **Control charge** mode Predbat will set the charge times and charge percentages according to the Best plan, charging can be enabled and disabled by Predbat. Predbat will set the inverter into Eco mode when required to enable the battery to support house load, but it will not plan any forced discharging of the battery for export purposes. This mode can be useful if you don't have an export rate, or if you want to preserve the battery for home demand. -### Predbat Control Charge & Discharge mode +### Predbat Control charge & discharge mode -In **Control Charge and Discharge** mode Predbat will set both charge and discharge times and control charge and discharge percentages. +In **Control charge & discharge** mode Predbat will set both charge and discharge times and control charge and discharge percentages. If you have set the **switch.predbat_set_discharge_freeze_only** set to True then forced export won't occur but Predbat can force the export of solar power to the grid when desired. @@ -94,19 +94,19 @@ reduce your CPU load. ## Battery loss options -**input_number.battery_loss** is an assumed percentage figure for energy lost when charging the battery, the default 0.05 is 5%. +**input_number.predbat_battery_loss** is an assumed percentage figure for energy lost when charging the battery, the default 0.05 is 5%. -**input_number.battery_loss_discharge** is an assumed percentage figure for energy lost whilst discharging the battery, the default 0.05 is 5%. +**input_number.predbat_battery_loss_discharge** is an assumed percentage figure for energy lost whilst discharging the battery, the default 0.05 is 5%. -**input_number.inverter_loss** is an assumed percentage figure for energy lost during the conversion within the inverter from DC to AC or AC to DC, +**input_number.predbat_inverter_loss** is an assumed percentage figure for energy lost during the conversion within the inverter from DC to AC or AC to DC, the default is 0% for legacy reasons but please adjust. -**switch.inverter_hybrid** Set to True if you have a hybrid inverter so no inverter losses will be applied for DC charging from Solar generation. +**switch.predbat_inverter_hybrid** Set to True if you have a hybrid inverter so no inverter losses will be applied for DC charging from Solar generation. Set to False if you have an AC coupled battery and inverter losses will be applied when charging from solar. NB: This switch only applies when Predbat is modelling solar charging. All grid charging (regardless of inverter type) has to undergo an AC to DC conversion and so the inverter_loss % will be included in Predbat's model when charging from the grid. -**input_number.metric_battery_cycle** (_expert mode_) This sets a 'virtual cost' in pence per kWh on using your battery for charging and discharging. +**input_number.predbat_metric_battery_cycle** (_expert mode_) This sets a 'virtual cost' in pence per kWh on using your battery for charging and discharging. Higher numbers will reduce battery cycles at the expense of using higher energy costs.
In theory if you think your battery will last say 6000 complete cycles and cost you £4000 and is 9.5kWh then each full charge and discharge cycle is 19kWh and so the cost per cycle is £4000 / 19 / 6000 = 3.5p. @@ -130,27 +130,27 @@ greater than 1.0 will value it more (and hence hold more charge at the end of th ## Scaling and weight options -**input_number.battery_rate_max_scaling** is a percentage factor to adjust your maximum charge/discharge rate from that reported by GivTCP +**input_number.predbat_battery_rate_max_scaling** is a percentage factor to adjust your maximum charge/discharge rate from that reported by GivTCP e.g. a value of 1.1 would simulate a 10% faster charge/discharge rate than reported by the inverter. **switch.predbat_battery_capacity_nominal** - When enabled Predbat uses the reported battery size from the GivTCP 'Battery Nominal Capacity' field rather than from the normal GivTCP reported 'Battery Capacity kWh' size. If your battery size is reported wrongly maybe try turning this on and see if it helps. -**input_number.load_scaling** is a percentage Scaling factor applied to historical load, increase this if you want to be more pessimistic on future consumption. +**input_number.predbat_load_scaling** is a percentage Scaling factor applied to historical load, increase this if you want to be more pessimistic on future consumption. Use 1.0 to use exactly previous load data. A value of 1.1 for example would add 10% to historical load. -**input_number.load_scaling10** is a percentage Scaling factor applied to historical load only for the PV10% scenario (this is in addition to load_scaling above). +**input_number.predbat_load_scaling10** is a percentage Scaling factor applied to historical load only for the PV10% scenario (this is in addition to load_scaling above). This can be used to make the PV10% scenario take into account extra load usage and hence be more pessimistic while leaving the central scenario unchanged. The default is 1.1 meaning an extra 10% load is added. This will only have an impact if the PV 10% weighting is non-zero. -**input_number.load_scaling_saving** is a percentage Scaling factor applied to historical load only during Octopus Saving sessions. +**input_number.predbat_load_scaling_saving** is a percentage Scaling factor applied to historical load only during Octopus Saving sessions. This can be used to model your household cutting down on energy use inside a saving session (e.g. turning off a heat pump, deferring cooking until after the session, etc). -**input_number.pv_scaling** is a percentage scaling factor applied to PV data, decrease this if you want to be more pessimistic on PV production vs Solcast.
+**input_number.predbat_pv_scaling** is a percentage scaling factor applied to PV data, decrease this if you want to be more pessimistic on PV production vs Solcast.
Use 1.0 to use exactly use the Solcast forecast generation data. A value of 0.9 for example would remove 10% from the Solcast generation forecast. -**input_number.pv_metric10_weight** is the percentage weighting given to the Solcast 10% PV scenario in calculating solar generation. +**input_number.predbat_pv_metric10_weight** is the percentage weighting given to the Solcast 10% PV scenario in calculating solar generation. Use 0.0 to disable using the PV 10% in Predbat's forecast of solar generation. A value of 0.1 assumes that 1 in every 10 times we will get the Solcast 10% scenario, and 9 in every 10 times we will get the 'median' Solcast forecast.
Predbat estimates solar generation for each half hour slot to be a pv_metric10_weight weighting of the Solcast 10% PV forecast to the Solcast Median forecast.
@@ -159,7 +159,7 @@ A value of 0.15 is recommended. ## Historical load data The historical load data is taken from the load sensor as configured in `apps.yaml` and the days are selected -using **days_previous** and weighted using ***days_previous_weight** in the same configuration file +using **days_previous** and weighted using **days_previous_weight** in the same configuration file **switch.predbat_load_filter_modal** (_expert mode_) when enabled will automatically discard the lowest daily consumption day from the list of days to use (provided you have more than 1 day selected in days_previous). This can be used to ignore @@ -172,20 +172,20 @@ a single low usage day in your average calculation. By default is feature is ena Car charging hold is a feature where you try to filter out previous car charging from your historical data so that future predictions are more accurate. -When **car_charging_hold** is enabled when for loads of above the power threshold **car_charging_threshold** are -assumed to be car charging and **car_charging_rate** will be subtracted from the historical load data. +When **switch.predbat_car_charging_hold** is enabled when for loads of above the power threshold **input_number.predbat_car_charging_threshold** are +assumed to be car charging and **input_number.predbat_car_charging_rate** will be subtracted from the historical load data. -For more accurate results can you use an incrementing energy sensor set with **car_charging_energy** in the apps.yml -In this case when **car_charging_hold** is enabled historical data will be subtracted from the load data instead of using +For more accurate results can you use an incrementing energy sensor set with **car_charging_energy** in the `apps.yaml` configuration file. +In this case when **switch.predbat_car_charging_hold** is enabled historical data will be subtracted from the load data instead of using the fixed threshold method. -**car_charging_energy_scale** Is used to scale the **car_charging_energy** sensor, the default units are kWh so +**input_number.predbat_car_charging_energy_scale** Is used to scale the **car_charging_energy** sensor, the default units are kWh so if you had a sensor in watts you might use 0.001 instead. -- **input_number.car_charging_rate** - Set to the car's charging rate in kW per hour (normally 7.5 for 7.5kWh), +- **input_number.predbat_car_charging_rate** - Set to the car's charging rate in kW per hour (normally 7.5 for 7.5kWh), but will be pulled automatically from Octopus Energy integration if enabled for Octopus Intelligent. -**car_charging_loss** gives the amount of energy lost when charging the car (load in the home vs energy added to the battery). A good setting is 0.08 which is 8%. +**input_number.predbat_car_charging_loss** gives the amount of energy lost when charging the car (load in the home vs energy added to the battery). A good setting is 0.08 which is 8%. ### Car charging plan options @@ -194,14 +194,14 @@ Car charging planning - is only used if Intelligent Octopus isn't enabled and ca This feature allows Predbat to create a plan for when you car will charge, but you will have to create an automation to trigger your car to charge using **binary_sensor.predbat_car_charging_slot** if you want it to match the plan. -- **car_charging_plan_time** - When using Predbat-led planning set this to the time you want the car to be charged by +- **select.predbat_car_charging_plan_time** - When using Predbat-led planning set this to the time you want the car to be charged by -- **car_charging_plan_smart** - When enabled (True) allows Predbat to allocate car charging slots to the cheapest times, +- **switch.predbat_car_charging_plan_smart** - When enabled (True) allows Predbat to allocate car charging slots to the cheapest times, when disabled (False) all low rate slots will be used in time order. **switch.predbat_octopus_intelligent_charging** when true enables the Intelligent Octopus charging feature which will make Predbat create a car charging plan which is taken from the Intelligent Octopus plan -you must have set **octopus_intelligent_slot** sensor in apps.yaml to enable this feature. +you must have set the **octopus_intelligent_slot** sensor in apps.yaml to enable this feature. If Octopus Intelligent Charging is enabled the switch **switch.predbat_octopus_intelligent_ignore_unplugged** (_expert mode_) can be used to prevent Predbat from assuming the car will be charging when the car is unplugged. This will only work correctly @@ -209,7 +209,7 @@ if **car_charging_planned** is set correctly in apps.yaml to detect your car bei Control how your battery behaves during car charging: -- **car_charging_from_battery** - When True the car can drain the home battery, Predbat will manage the correct level of battery accordingly. +- **switch.predbat_car_charging_from_battery** - When True the car can drain the home battery, Predbat will manage the correct level of battery accordingly. When False home battery discharge will be prevented when your car charges, all load from the car and home will be from the grid. This is achieved by setting the discharge rate to 0 during car charging and to the maximum otherwise, hence if you turn this switch Off you won't be able to change your discharge rate outside Predbat. The home battery can still charge from the grid/solar in either case. Only use this if Predbat knows your car @@ -224,7 +224,8 @@ charging sessions but will not reset it automatically. See the Predbat mode setting as above for basic calculation options -**input_number.forecast_plan_hours** is the number of hours after the next charge slot to include in the plan, default 24 hours is the suggested amount (to match energy rate cycles). +**input_number.predbat_forecast_plan_hours** is the number of hours after the next charge slot to include in the plan, +default 24 hours is the suggested amount (to match energy rate cycles). **switch.predbat_calculate_regions** (_expert mode_) When True the a second pass of the initial thresholds is calculated in 4 hour regions before forming the detailed plan. Is True by default but can be turned off in expert @@ -239,7 +240,7 @@ longer term plan will be less accurate. **switch.predbat_calculate_discharge_oncharge** (_expert mode_) When True calculated discharge slots will disable or move charge slots, allowing them to intermix. When False discharge slots will never be placed into charge slots. -**switch.set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter setups +**switch.predbat_set_discharge_during_charge** - If turned off disables inverter discharge during charge slots, useful for multi-inverter setups to avoid cross charging when batteries are out of balance. **switch.predbat_calculate_tweak_plan** (_expert mode_) When True causes Predbat to perform a second pass optimisation @@ -257,50 +258,50 @@ This can help to slightly improve the plan for tariffs like Agile but can make i ## Battery margins and metrics options -**input_number.best_soc_keep** is the minimum battery level in kWh that Predbat will to try to keep above during the whole period of the simulation time. -This is a soft constraint only so it is possible for your SoC to drop below this - use **input_number.best_soc_min** for a hard SoC constraint that will always be maintained. +**input_number.predbat_best_soc_keep** is the minimum battery level in kWh that Predbat will to try to keep above during the whole period of the simulation time. +This is a soft constraint only so it is possible for your SoC to drop below this - use **input_number.predbat_best_soc_min** for a hard SoC constraint that will always be maintained. It's usually good to have best_soc_keep set to a value above 0 to allow some margin in case you use more energy than planned between charge slots. -**input_number.best_soc_min** (_expert mode_) sets the minimum charge level (in kWh) for charging during each slot and the +**input_number.predbat_best_soc_min** (_expert mode_) sets the minimum charge level (in kWh) for charging during each slot and the minimum discharge level also (set to 0 if you want to skip some slots). If you set this to a non-zero value you will need to use the low rate threshold to control which slots you charge from or you may charge all the time. -**input_number.best_soc_max** (_expert mode_) sets the maximum charge level (in kWh) for charging during each slot. +**input_number.predbat_best_soc_max** (_expert mode_) sets the maximum charge level (in kWh) for charging during each slot. A value of 0 disables this feature. -**switch.combine_charge_slots** Controls if charge slots of > 30 minutes can be combined. When disabled they will be split up, +**switch.predbat_combine_charge_slots** Controls if charge slots of > 30 minutes can be combined. When disabled they will be split up, increasing run times but potentially more accurate for planning. Turn this off if you want to enable ad-hoc import during long periods of higher rates but you wouldn't charge normally in that period (e.g. pre-charge at day rate before a saving session). The default is enable (True) -**switch.combine_discharge_slots** (_expert mode_) Controls if discharge slots of > 30 minute can be combined. When disabled +**switch.predbat_combine_discharge_slots** (_expert mode_) Controls if discharge slots of > 30 minute can be combined. When disabled they will be split up, increasing run times but potentially more accurate for planning. The default is disabled (False) -**input_number.metric_min_improvement** (_expert mode_) sets the minimum cost improvement in pence that it's worth lowering the battery SOC % for. +**input_number.predbat_metric_min_improvement** (_expert mode_) sets the minimum cost improvement in pence that it's worth lowering the battery SOC % for. The default value is 0 which means this feature is disabled and the battery will be charged less if it's cost neutral. -If you use **pv_metric10_weight** then you probably don't need to enable this as the 10% forecast does the same thing better +If you use **input_number.predbat_pv_metric10_weight** then you probably don't need to enable this as the 10% forecast does the same thing better Do not use if you have multiple charge windows in a given period as it won't lead to good results (e.g. Agile) -You could even go to something like -0.1 to say you would charge less even if it cost up to 0.1p more (best used with metric10) +You could even go to something like -0.1 to say you would charge less even if it cost up to 0.1p more (best used with metric10). -**input_number.metric_min_improvement_discharge** (_expert mode_) Sets the minimum pence cost improvement it's worth doing a forced discharge (and export) for. +**input_number.predbat_metric_min_improvement_discharge** (_expert mode_) Sets the minimum pence cost improvement it's worth doing a forced discharge (and export) for. A value of 0.1 is the default which prevents any marginal discharges. If you increase this value (e.g. you only want to discharge/forced export if definitely very profitable), then discharges will become less common and shorter. -**input_number.rate_low_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future import rates in the plan +**input_number.predbat_rate_low_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future import rates in the plan and determine the import rate threshold below which a slot will be considered to be a potential charging slot.
If rate_low_threshold is set to a non zero value this will set the threshold below future average import rates as the minimum to consider for a charge window, e.g. setting to 0.8 = 80% of average rate.
If you set this too low you might not get enough charge slots. If it's too high you might get too many in the 24-hour period which makes optimisation harder. -**input_number.rate_high_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future export rates in the plan +**input_number.predbat_rate_high_threshold** (_expert mode_) When set to 0 (the default) Predbat will automatically look at the future export rates in the plan and determine the threshold above which a slot can be considered a potential exporting slot.
If rate_high_threshold is set to a non zero value this will set the threshold above future average export rates as the minimum export rate to consider exporting for, e.g. setting to 1.2 = 20% above average rate.
If you set this too high you might not get any export slots. If it's too low you might get too many in the 24-hour period. -**input_number.metric_future_rate_offset_import** (_expert mode_) Sets an offset to apply to future import energy rates that are +**input_number.predbat_metric_future_rate_offset_import** (_expert mode_) Sets an offset to apply to future import energy rates that are not yet published, best used for variable rate tariffs such as Agile import where the rates are not published until 4pm. If you set this to a positive value then Predbat will assume unpublished import rates are higher by the given amount. @@ -308,7 +309,7 @@ Setting this to 1 to 1.5p for example results in Predbat being a little more agg Predbat will charge the battery to a higher percentage than it would otherwise as it expects a cost benefit of using today's lower rates. NB: this can lead to higher costs and to some export if solar generation is better than forecast. -**input_number.metric_future_rate_offset_export** (_expert mode_) Sets an offset to apply to future export energy rates that are +**input_number.predbat_metric_future_rate_offset_export** (_expert mode_) Sets an offset to apply to future export energy rates that are not yet published, best used for variable rate tariffs such as Agile export where the rates are not published until 4pm. If you set this to a negative value then Predbat will assume unpublished export rates are lower by the given amount. @@ -316,39 +317,40 @@ If you set this to a negative value then Predbat will assume unpublished export calculate the difference between today's actual load and today's predicated load and adjust the rest of the days usage prediction accordingly. A scale factor can be set with **input_number.predbat_metric_inday_adjust_damping** (_expert mode_) to either scale up or down the impact of the in-day adjustment (lower numbers scale down its impact). The in-day adjustment -factor can be see in **predbat.load_inday_adjustment** and charted with the In Day Adjustment chart (template can be found +factor can be seen in **predbat_load_inday_adjustment** and charted with the In Day Adjustment chart (template can be found in the charts template in Github). ## Inverter control options -**switch.set_status_notify** Enables mobile notification about changes to the Predbat state (e.g. Charge, Discharge etc). On by default. +**switch.predbat_set_status_notify** Enables mobile notification about changes to the Predbat state (e.g. Charge, Discharge etc). On by default. -**switch.set_inverter_notify** Enables mobile notification about all changes to inverter registers (e.g. setting window, turning discharge on/off). +**switch.predbat_set_inverter_notify** Enables mobile notification about all changes to inverter registers (e.g. setting window, turning discharge on/off). Off by default. **switch.predbat_set_charge_low_power** Enables low power charging mode where the max charge rate will be limited to the lowest possible to meet the charge target. Only really effective for charge windows >30 minutes. Off by default. -**switch.set_reserve_enable** (_expert_mode_) When enabled the reserve setting is used to hold the battery charge level +**switch.predbat_set_reserve_enable** (_expert_mode_) When enabled the reserve setting is used to hold the battery charge level once it has been reached or to protect against discharging beyond the set limit. Enabled by default. -**switch.set_charge_freeze** (_expert mode_) When enabled will allow Predbat to hold the current battery level while drawing +**switch.predbat_set_charge_freeze** (_expert mode_) When enabled will allow Predbat to hold the current battery level while drawing from the grid/solar as an alternative to charging. Enabled by default. -**switch.set_discharge_freeze_only** (_expert mode_) When enabled forced discharge is prevented, but discharge freeze can be used +**switch.predbat_set_discharge_freeze_only** (_expert mode_) When enabled forced discharge is prevented, but discharge freeze can be used (if enabled) to export excess solar rather than charging the battery. This is useful with tariffs that pay you for solar exports but don't allow forced export (brown energy). -If you have **switch.inverter_hybrid** set to False then if **switch.inverter_soc_reset** (_expert mode_) is set to True then the +If you have **switch.predbat_inverter_hybrid** set to False then if **switch.predbat_inverter_soc_reset** (_expert mode_) is set to True then the target SOC % will be reset to 100% outside a charge window. This may be required for AIO inverter to ensure it charges from solar. -**input_number.set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, a value of 4 is the minimum and recommended to make use of the full battery.
+**input_number.predbat_set_reserve_min** Defines the reserve percentage to reset the reserve to when not in use, +a value of 4 is the minimum and recommended to make use of the full battery.
If you want to pre-prepare the battery to retain extra charge in the event of a high likelihood of a grid power outage such as storms predicted, you can increase set_reserve_min to 100%, and then change it back afterwards.
(Obviously this is only any use if your inverter is wired to act as an Emergency Power Supply or whole-home backup 'island mode' on the GivEnergy AIO). -**switch.inverter_soc_reset** (_expert mode_) When enabled the target SOC for the inverter(s) will be reset to 100% +**switch.predbat_inverter_soc_reset** (_expert mode_) When enabled the target SOC for the inverter(s) will be reset to 100% when a charge slot is not active, this can be used to workaround some firmware issues where the SOC target is used for solar charging as well as grid charging. When disabled the SOC % will not be changed after a charge slot. This is disabled by default. @@ -358,7 +360,7 @@ This is disabled by default. When you have two or more inverters it's possible they get out of sync so they are at different charge levels or they start to cross-charge (one discharges into another). When enabled, balance inverters tries to recover this situation by disabling either charging or discharging from one of the batteries until they re-align. -The apps.yaml contains a setting **balance_inverters_seconds** which defines how often to run the balancing, 30 seconds is recommended if your +The `apps.yaml` contains a setting **balance_inverters_seconds** which defines how often to run the balancing, 30 seconds is recommended if your machine is fast enough, but the default is 60 seconds. Enable the **switch.predbat_balance_inverters_enable** switch in Home Assistant to enable this feature. @@ -371,31 +373,31 @@ Enable the **switch.predbat_balance_inverters_enable** switch in Home Assistant ## iBoost model options -iBoost model, when enabled with **switch.iboost_enable** tries to model excess solar energy being used to heat -hot water (or similar). The predicted output from the iBoost model is returned in **iboost_best**. +iBoost model, when enabled with **switch.predbat_iboost_enable** tries to model excess solar energy being used to heat +hot water (or similar). The predicted output from the iBoost model is returned in **predbat.iboost_best**. -The following entities are only available when you turn on iboost enable: +The following entities are only available when you turn on iBoost enable: -**iboost_solar** When enabled assumes iBoost will use solar power to boost. +**switch.predbat_iboost_solar** When enabled assumes iBoost will use solar power to boost. -**iboost_min_soc** sets the minimum home battery soc % to enable iboost solar on, default 0 +**input_number.predbat_iboost_min_soc** sets the minimum home battery soc % to enable iBoost solar on, default 0 -**iboost_gas** When enabled assumes IBoost will operate when electric rates are lower than gas rates. -Note: Gas rates have to be configured in apps.yaml with **metric_octopus_gas** +**switch.predbat_iboost_gas** When enabled assumes IBoost will operate when electric rates are lower than gas rates. +Note: Gas rates have to be configured in `apps.yaml` with **metric_octopus_gas** -**iboost_gas_scale** Sets the scaling of the gas rates used before comparing with electric rates, to account for losses +**input_number.predbat_iboost_gas_scale** Sets the scaling of the gas rates used before comparing with electric rates, to account for losses -**iboost_charging** Assume IBoost operates when the battery is charging (can be combined with iboost_gas or not) +**switch.predbat_iboost_charging** Assume iBoost operates when the battery is charging (can be combined with iboost_gas or not) -**iboost_max_energy** Sets the max energy sets the number of kwh that iBoost can consume during a day before turning off - default 3kWh +**input_number.predbat_iboost_max_energy** Sets the max energy sets the number of kWh that iBoost can consume during a day before turning off - default 3kWh -**iboost_max_power** Sets the maximum power in watts to consume - default 2400 +**input_number.predbat_iboost_max_power** Sets the maximum power in watts to consume - default 2400 -**iboost_min_power** Sets the minimum power in watts to consume - default 500 +**input_number.predbat_iboost_min_power** Sets the minimum power in watts to consume - default 500 You will see **predbat.iboost_today** entity which tracks the estimated amount consumed during the day, and resets at night -The **binary_sensor.iboost_active** entity will be enabled when IBoost should be active, can be used for automations to trigger boost +The **binary_sensor.predbat_iboost_active** entity will be enabled when iBoost should be active, can be used for automations to trigger boost If you have an incrementing Sensor that tracks iBoost energy usage then you should set **iboost_energy_today** sensor in apps.yaml to point to it and optionally set **iboost_energy_scaling** if the sensor isn't in kWh. @@ -408,7 +410,7 @@ Using the Home Assistant entity **input_number.predbat_holiday_days_left** you c you will be away for (including today). The number will count down by 1 day at midnight until it gets back to zero. Whilst holiday days left is non-zero, Predbat's 'holiday mode' is active. -When Predbat's 'holiday mode' is active the historical load data will be taken from yesterday's data (1 day ago) rather than from the **days_previous** setting in apps.yaml. +When Predbat's 'holiday mode' is active the historical load data will be taken from yesterday's data (1 day ago) rather than from the **days_previous** setting in `apps.yaml`. This means Predbat will adjust more quickly to the new usage pattern. If you have been away for a longer period of time (more than your normal days_previous setting) then obviously it's going @@ -452,7 +454,7 @@ _CAUTION: If you leave Predbat turned off for a long period of time then the ove ## Debug -**switch.debug_enable** when on prints lots of debug, leave off by default +**switch.predbat_debug_enable** when on prints lots of debug, leave off by default -**switch.plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan - see [Predbat Plan debug mode](predbat-plan-card.md#debug-mode-for-predbat-plan) +**switch.predbat_plan_debug** (_expert mode_) when enabled adds some extra debug to the Predbat HTML plan - see [Predbat Plan debug mode](predbat-plan-card.md#debug-mode-for-predbat-plan) for more details. diff --git a/docs/faq.md b/docs/faq.md index ed2cd005d..a7cbe85b2 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -18,15 +18,15 @@ it's better to charge more and not risk getting stung importing. - Have you checked your energy rates for import and export are correct, maybe check the rates graph and confirm. If you do something like have export>import then Predbat will try to export as much as possible. - Have you tuned Solcast to match your output accurately? -- Have you tuned **best_soc_keep settings** +- Have you tuned **predbat_best_soc_keep settings**? - Do you have predicted car charging during the time period? -- You can also tune **load_scaling** and **pv_scaling** to adjust predictions up and down a bit +- You can also tune **predbat_load_scaling** and **predbat_pv_scaling** to adjust predictions up and down a bit - Maybe your historical data includes car charging, you might want to filter this out using car_charging_hold (see below) ## Why didn't the slot actually get configured? - Are you in read-only mode? -- Do you have the predbat_mode set to Control Charge (or Charge & Discharge)? +- Do you have the predbat_mode set to Control charge (or Control charge & discharge)? ## The charge limit keeps increasing/decreasing in the charge window or is unstable @@ -39,8 +39,8 @@ a script that changes the reserve %, this will cause problems - please disable o ## It's all running but I'm not getting very good results -- You might want to tune **best_soc_keep** to set a minimum target battery level, e.g. I use 2.0 (for 2kWh, which is just over 20% on a 9.5kWh battery). -If you set **best_soc_keep** too high then predbat could need to charge the battery in unfavourable import rates, so try to set it to a fairly low value, +- You might want to tune **input_number.predbat_best_soc_keep** to set a minimum target battery level, e.g. I use 2.0 (for 2kWh, which is just over 20% on a 9.5kWh battery). +If you set **input_number.predbat_best_soc_keep** too high then predbat could need to charge the battery in unfavourable import rates, so try to set it to a fairly low value, especially if you have a small battery. If you set it to zero then predbat may not charge at all, so use 0.1 as a minimum. - Have a read of the [energy rates configuration guide](energy-rates.md) as depending on your tariff different settings maybe required - Check your solar production is well calibrated (you can compare solcast vs actually in the Home Assistant energy tab or on the GivEnergy portal) @@ -94,7 +94,7 @@ as to whether to charge or discharge the battery so could be tweaked. The defaul - If you have a large **input_number.predbat_forecast_plan_hours** then you may see warning messages in the Home Assistant Core log about the size of the predbat.plan_html entity. This is just a warning, the entity isn't stored in the database, but you can suppress it by adding the following -to your configuration.yaml: +to your `configuration.yaml` file: ```yaml # Filter out 'message too large' warnings from Predbat diff --git a/docs/install.md b/docs/install.md index 50e29f3aa..4617ff556 100644 --- a/docs/install.md +++ b/docs/install.md @@ -268,7 +268,8 @@ In order to enable Predbat you must delete the 'template: True' line in `apps.ya You may initially want to set **select.predbat_mode** to *Monitor* to see how Predbat operates, e.g. by studying the [Predbat Plan](predbat-plan-card.md). In *Monitor* mode Predbat will monitor (but not change) the current inverter settings and predict the battery SoC based on predicted Solar Generation and House Load.
-NB: In _Monitor_ mode Predbat will _NOT_ plan any battery charge or discharge activity of its own, it will report on the current inverter charge & discharge settings, house load and solar generation. +NB: In *Monitor* mode Predbat will *NOT* plan any battery charge or discharge activity of its own, +it will report on the predicted battery charge level based on the current inverter charge & discharge settings, predicted house load and predicted solar generation. The recommended next step is to start Predbat planning your inverter charging and discharging activity but not (yet) make any changes to the inverter. This enables you to get a feel for the Predbat plan and [customise Predbat's settings](customisation.md) to meet your needs. @@ -284,7 +285,7 @@ You can see the planned charging and discharging activity in the [Predbat Plan]( ## Updating Predbat Note that any future updates to Predbat will not overwrite the `apps.yaml` configuration file that you have tailored to your setup. -If new Predbat releases introduce new featurs to apps.yaml you may therefore need to manually copy across the new apps.yaml settings from the [Template apps.yaml](apps-yaml.md#templates). +If new Predbat releases introduce new features to apps.yaml you may therefore need to manually copy across the new apps.yaml settings from the [Template apps.yaml](apps-yaml.md#templates). ## HACS Update @@ -297,8 +298,8 @@ Go to Settings, Add-ons, AppDaemon, and click 'Restart'. ## Predbat built-in update -Predbat can now update itself, just select the version of Predbat you want to install from the **select.predbat_update** drop down menu, the latest version will be at the top of the list. -Predbat will update itself and automatically restart. +Predbat can now update itself, just select the version of Predbat you want to install from the **select.predbat_update** drop down menu, +the latest version will be at the top of the list. Predbat will update itself and automatically restart. Alternatively, if you turn on **switch.predbat_auto_update**, Predbat will automatically update itself as new releases are published on Github. diff --git a/docs/predbat-plan-card.md b/docs/predbat-plan-card.md index 45dcce03c..4944b9344 100644 --- a/docs/predbat-plan-card.md +++ b/docs/predbat-plan-card.md @@ -102,7 +102,8 @@ If the SOC is 50% or greater it will be coloured Green, 20% or greater, Yellow, If the cost for the slot is 10p or more it will be coloured Orangey-Red, ½p or more it will be coloured Yellow, -½p or less it will be coloured Green, otherwise it will be coloured White. -- **Total** - The total cumulative cost so far for 'today' at the start of the slot. At midnight tonight this cumulative cost will be reset to zero.
+- **Total** - The total cumulative cost so far for 'today' at the start of the slot, including the standing charge. +At midnight tonight this cumulative cost will be reset to the daily standing charge (or zero if metric_standing_charge wasn't set in `apps.yaml`).
Due to the way Predbat works, total cost is always reported (in Predbat output entities, this HTML plan, in the [Apex charts](creating-charts.md), etc) as starting from midnight today and adding on from there.
Looking at the sample Predbat plan above as an example, the plan starts at 10:00 with total cost today already being £3.13. The house load is then fully met through the day and evening @@ -116,7 +117,7 @@ Total cost is always coloured White. If [Predbat expert mode](customisation.md#expert-mode) is turned on then a number of additional controls and switches are made available in Home Assistant. -If **switch.plan_debug** is then turned on then the Predbat plan shows additional 'debugging' information for the import and export rate columns. +If **switch.predbat_plan_debug** is then turned on then the Predbat plan shows additional 'debugging' information for the import and export rate columns. The Predbat plan will now look like this with plan_debug turned on: @@ -125,6 +126,7 @@ The Predbat plan will now look like this with plan_debug turned on: Import and Export rate will now show the actual rate (according to how you have setup the [energy rates](energy-rates.md)) and also in brackets the *effective* import or export rate. The *effective rate* takes into account [battery and inverter energy losses](customisation.md#battery-loss-options) for charging and discharging and converting from DC to AC and vice-versa. +Note that the Cost and Total columns are always based upon the actual Import and Export rate. Using the above debug plan as an example: From 91629b5a0e700c7ca327d95413cbd346139905fb Mon Sep 17 00:00:00 2001 From: Geoffrey Coan <142018870+gcoan@users.noreply.github.com> Date: Fri, 2 Feb 2024 22:51:02 +0000 Subject: [PATCH 34/34] Expanded predbat freeze charge/discharge statii descriptions #689 --- docs/output-data.md | 3 ++- docs/what-does-predbat-do.md | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/output-data.md b/docs/output-data.md index 1aa5aab1a..6aec0aade 100644 --- a/docs/output-data.md +++ b/docs/output-data.md @@ -18,7 +18,8 @@ A set of Apex Charts can also be created to see graphically what Predbat plans t ## Basic status -- predbat.status - Gives the current status & errors and logs any changes that Predbat makes to your inverter +- predbat.status - Gives the current status & errors and logs any changes that Predbat makes to your inverter. +The different Predbat status values and their meanings are detailed in [what does predbat do](what-does-predbat-do.md#predbat-status). ## Baseline data diff --git a/docs/what-does-predbat-do.md b/docs/what-does-predbat-do.md index d9ee74af6..da321c936 100644 --- a/docs/what-does-predbat-do.md +++ b/docs/what-does-predbat-do.md @@ -55,13 +55,17 @@ exported if the battery is full. This is described as 'ECO' Mode for GivEnergy i - **Charging** - The battery charges from the grid and the grid also covers any load. Solar power will also be used to charge the battery. -- **Freeze charging** - The current battery level is held and the grid/solar covers any load. Solar power will also be used to charge the battery. +- **Freeze charging** - The current battery level (SoC) is held and the grid/solar covers any load. Think of it as a charge to the current battery level. +If there is excess Solar power above house load, the solar will be used to charge the battery, +but if there is a shortfall of Solar power to meet house load, the excess house load is met from grid import. + - **Hold charging** - A type of charge where the target SOC % is the same as the current SOC %, effectively the same as a charge freeze (but without being explicitly selected). - **No Charge** - A charge where the target SOC % is lower than the current battery SOC level so there will be no charging unless the usage is unexpectedly high. - **Discharging** - The battery is being force-discharged. The house load will be covered by the battery and any excess is exported to the grid. Any solar generated will be exported. -- **Freeze discharging** - The battery is covering the load but charging is disabled, thus any solar generated will be exported. +- **Freeze discharging** - This is the same as Idle (Eco) mode but with charging disabled. +The battery is covering the load but as charging is disabled, any solar generated will be exported. - **Error** - There is a configuration error or other problem, you should check the [Predbat AppDaemon log file](output-data.md#predbat-logfile) for more details.

Ol9h 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