404
+ +Page not found
+ + +diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/404.html b/404.html new file mode 100644 index 000000000..646e73502 --- /dev/null +++ b/404.html @@ -0,0 +1,161 @@ + + +
+ + + + +Page not found
+ + +The basic Predbat configuration is defined in the apps.yaml
file.
Depending on how you installed Predbat the apps.yaml
file will be held in one of three different directories in Home Assistant:
if you have used the Predbat add-on installation method, apps.yaml will be in the directory /addon_configs/6adb4f0d_predbat
,
with the HACS, Appdaemon add-on then Predbat installation method, it's in /config/appdaemon/apps/batpred/config/
, or
if the combined AppDaemon/Predbat add-on installation method was used, it's in /addon_configs/46f69597_appdaemon-predbat/apps
.
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 edit the apps.yaml
file - see editing configuration files within Home Assistant if you need to install an editor.
This section of the documentation describes what the different configuration items in apps.yaml
do.
When you edit apps.yaml
, the change will automatically be detected and Predbat will be reloaded with the updated file.
+You don't need to restart the Predbat or AppDaemon add-on for your edits to take effect.
When editing the apps.yaml
file you must ensure that the file remains correctly formatted. YAML files are especially finicky about how the file contents are indented
+and its very easy to end up with an incorrectly formatted file that will cause problems for Predbat.
The YAML Basics from This Smart Home is a good introduction video to how YAML should be correctly structured, but as a brief introduction, +YAML files consist of an entity name, colon then the entity value, for example:
+timezone: Europe/London
+
+Or the entity can be set to a list of values with each value being on a new line, two spaces, a dash, then the value. For example:
+car_charging_now_response:
+ - 'yes'
+ - 'on'
+
+The two spaces before the dash are especially critical. Its easy to mis-edit and have one or three spaces which isn't valid YAML.
+NB: the sequence of entries in apps.yaml
doesn't matter, as long as the YAML itself is structured correctly you can move things and edit things anywhere in the file.
You can find template configurations in the following location: https://github.com/springfall2008/batpred/tree/main/templates
+The GivEnergy GivTCP template will be installed by default but if you are using another inverter please copy the correct template into the directory
+where your apps.yaml
is stored, replacing the existing apps.yaml file, and modify it from there.
Please read Inverter Setup for inverter control software and details of setting apps.yaml for non-GivEnergy inverters
+Syntax errors will be highlighted by the Home Assistant editor or via other YAML aware editors such as VSCode.
+Once you have completed your apps.yaml and started Predbat you may want to open the Predbat Web Interface and click on 'apps.yaml'. Review any items shown +in a red background as those do not match (its okay for a 2nd inverter not to match if you only have one configured). Regular expressions that do not +match can be ignored if you are not supporting that feature (e.g. Car SOC if you don't have a car).
+As an example these do not match and are shown in the web interface in red, I'm ignoring them as I only have one inverter and I'm using +the Predbat internal Solcast rather than the external integration:
+ +Basic configuration items
+Set to the prefix name to be used for all entities that Predbat creates in Home Assistant. Default 'predbat'. Unlikely that you will need to change this.
+prefix: predbat
+
+Set to your local timezone, default is Europe/London. It must be set to a +valid Python time zone for your location
+timezone: Europe/London
+
+Sets your symbol to use for your main currency e.g. £ or $ and for 1/100th unit e.g. p or c
+currency_symbols:
+ - '£'
+ - 'p'
+
+Initially set to True, this is used to stop Predbat from operating until you have finished configuring your apps.yaml. +Once you have made all other required changes to apps.yaml this line should be deleted or commented out:
+template: True
+
+Predbat can speak directly to Home Assistant rather than going via AppDaemon.
+If you are using a standard add-on then this will be automatic and you do not need to set this.
+If you run AppDaemon/Predbat in a Docker then you will need to set the URL or IP address of Home Assistant and the access key which is the long +lived access token you can create inside Home Assistant.
+Currently if this communication is not established Predbat will fallback to AppDaemon, however some users have experienced failures due to a 10-second timeout set by AppDaemon.
+In future versions of Predbat, AppDaemon will be removed.
+ha_url: 'http://homeassistant.local:8123'
+ha_key: 'xxxxxxxxxxx'
+
+
+TIP: You can replace homeassistant.local with the IP address of your Home Assistant server if you have it set to a fixed IP address. +This will remove the need for a DNS lookup of the IP address every time Predbat talks to Home Assistant and may improve reliability as a result.
+If defined sets the number of threads to use during plan calculation, the default is 'auto' which will use the same number of threads as you have CPUs in your system.
+Valid values are:
+threads: auto
+
+A list of device names to notify when Predbat sends a notification. The default is just 'notify' which contacts all mobile devices
+notify_devices:
+ - mobile_app_treforsiphone12_2
+
+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 Predbat to assume the house load on a particular day is the same as the same day of last week:
+days_previous:
+ - 7
+
+Or if you want Predbat to take the average of the same day for the last two weeks:
+days_previous:
+ - 7
+ - 14
+
+Further details and worked examples of 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:
recorder:
+ purge_keep_days: 14
+
+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:
+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:
+days_previous_weight:
+ - 1
+
+the number of hours 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.
+forecast_hours: 48
+
+The template apps.yaml
comes pre-configured with regular expressions that should auto-discover the GivTCP Home Assistant entity names.
+If you have more than one inverter or entity names are non-standard then you will need to edit apps.yaml for your inverter entities
The number of inverters you have. If you increase this above 1 you must provide multiple of each of the inverter entities
+num_inverters: 1
+
+Only for GE inverters, this is a helper regular expression to find your inverter serial number, if it doesn't work edit it manually or change individual entities to match. +If you have more than one inverter you will need one per inverter to be used in the later configuration lines
+geserial: 're:sensor.givtcp_(.+)_soc_kwh'
+geserial2: 're:sensor.givtcp2_(.+)_soc_kwh'
+
+If you are running GivTCP v3 and have an AIO or a 3 phase inverter then the helper regular expression will not correctly work +and you will need to manually set geserial in apps.yaml to your inverter serial number, e.g.:
+geserial: 'chNNNNgZZZ'
+
+TIP: If you have a single GivEnergy AIO, all control is directly to the AIO and the gateway is not required.
+Check the GivTCP configuration to determine whether inverter 1 (the givtcp sensors) is the AIO or the gateway, or inverter 2 (the givtcp2 sensors) is the AIO or gateway.
+Then in apps.yaml comment out the lines corresponding to the gateway, leaving just the givtcp or givtcp2 lines for the AIO.
+Also delete the appropriate givtcp_rest inverter control line corresponding to the gateway so that Predbat controls the AIO directly.
TIP2: If you have multiple GivEnergy AIO's, all the AIO's are controlled by the AIO gateway and not controlled individually.
+geserial should be manually configured to be your AIO gateway serial number 'gwNNNNgZZZ' and all the geserial2 lines should be commented out in apps.yaml.
+You should also delete the second givtcp_rest inverter control line so that Predbat controls the AIO's via the gateway.
GivTCP version 3 is required for multiple AIO's or a 3 phase inverter.
+Predbat can either get historical data (house load, import, export and PV generation) directly from GivTCP or it can obtain it from the GivEnergy cloud. +Unless you have a specific reason to not use the GivTCP data (e.g. you've lost your GivTCP data), its recommended to use GivTCP.
+The following configuration entries in apps.yaml
are pre-configured to automatically use the appropriate sensors.
If you have a 3-phase electricity supply and one inverter (and battery) on each phase then you will need to add one line for the load, import, export and PV sensors +for each of the 3 phases.
+If you have a single phase electricity supply and multiple inverters on the phase then you will need to add one line for each of the load and PV sensors. +You don't need multiple lines for the import or export sensors as each inverter will give the total import or export information.
+Edit if necessary if you have non-standard sensor names:
+See the Workarounds section below for configuration settings for scaling these if required.
+If you have multiple inverters then you may find that the load_today figures are incorrect as the inverters share the house load between them. +In this circumstance one solution is to create a Home Assistant template helper to calculate house load from {pv generation}+{battery discharge}-{battery charge}+{import}-{export}.
+e.g.
+{{ ( states('sensor.givtcp_XXX_pv_energy_today_kwh')|float(0) + <inverter 2>...
+ + states('sensor.givtcp_XXX_battery_discharge_energy_today_kwh')|float(0) + <inverter 2>...
+ - states('sensor.givtcp_XXX_battery_charge_energy_today_kwh')|float(0) - <inverter 2>...
+ + states('sensor.givtcp_XXX_import_energy_today_kwh')|float(0)
+ - states('sensor.givtcp_XXX_export_energy_today_kwh')|float(0) ) | round(1) }}
+
+If you have an issue with the GivTCP data, Predbat can get the required historical data from the GivEnergy cloud instead. This data is updated every 30 minutes. +Obviously connecting to the cloud is less efficient and means that Predbat will be dependent upon your internet connection and the GivEnergy cloud to operate.
+By default if Predbat sees a gap in the historical load data it will fill it with average data. This is to help in the cases of small amounts of lost data. +For entire lost days you should change days_previous to point to different days(s) or include 3 or more days and if you set switch.predbat_load_filter_modal to true, +the lowest day's historical load will be discarded.
+NB: inverter_limit is ONLY used by Predbat to improve the quality of the plan, any solar clipping is done by the inverter and is not controlled by Predbat.
+NB: export_limit is ONLY used by Predbat to improve the quality of the plan, any export limit is done by the inverter and is not controlled by Predbat.
+There are a few different ways to control your inverter:
+Predbat can control inverters by updating Home Assistant entities.
+The template apps.yaml
for is pre-configured with regular expressions for many configuration items, but some of them may need updating to match your system.
If you only have a single inverter then the second inverter lines can be commented out if so desired or left in place (as they are ignored).
+The givtcp_rest line should be commented out/deleted on anything but GivTCP REST mode.
+If you are using REST control the configuration items should still be kept as not all controls work with REST.
+See section below on creating the battery charge power curve.
+For GivEnergy inverters Predbat can control the inverter directly via REST instead of via the Home Assistant GivTCP inverter controls detailed above.
+When configured in apps.yaml, control communication from Predbat to GivTCP is via REST which bypasses some issues with MQTT.
+TIP: You can replace homeassistant.local with the IP address of your Home Assistant server if you have it set to a fixed IP address. +This may improve reliability of the REST connection as it doesn't need to lookup the HA server IP address each time.
+To check your REST is working open up the readData API point in a Web browser e.g: http://homeassistant.local:6345/readData
+If you get a bunch of inverter information back then it's working!
+Note that Predbat will still retrieve inverter information via REST, this configuration only applies to how Predbat controls the inverter.
+Some inverters have the Service API enabled, this allows the configuration to call an arbitrary Home Assistant service to start/stop charging and discharging
+charge_stop_service - Should be set to a service that is called when charging/charge freeze stops
+discharge_start_service - Should be set to a service that is called when force export (discharge) starts
+Services that are not configuration will not be called.
+Example service is below:
+ charge_start_service:
+ service: switch.turn_off
+ entity_id: "switch.sunsynk_inverter_use_timer"
+
+See Service API for details.
+Note that device_id will be passed to the service automatically, it can be set in apps.yaml.
+Some Inverters are enabled with an MQTT API, in this case certain MQTT messages are send via the HA MQTT service.
+The mqtt_topic in apps.yaml set in the root of the MQTT topic (shown as topic below).
+Called when the reserve is changed
+topic: topic/set/reserve +payload: reserve
+Called when the target (charge %) SOC is set.
+topic: topic/set/target_soc +payload: soc
+Called to change the charge rate in Watts
+topic: topic/set/charge_rate +payload: charge_rate
+Called to change the discharge rate in Watts
+topic: topic/set/discharge_rate +payload: discharge_rate
+Called when a charge is started
+topic: topic/set/charge +payload: charge_rate
+Called when a forced export (discharge) is started
+topic: topic/set/discharge +payload: discharge_rate
+Called when a charge/discharge is cancelled and the inverter goes back to home demand mode.
+topic: topic/set/auto +payload: true
+As described in the Predbat installation instructions, Predbat needs a solar forecast +in order to predict solar generation and battery charging which can be provided by the Solcast integration.
+By default the template apps.yaml
is pre-configured to use the Solcast forecast integration for Home Assistant.
+The apps.yaml
contains regular expressions for the following configuration items that should auto-discover the Solcast forecast entity names.
+They are unlikely to need changing although a few people have reported their entity names don't contain 'solcast' so worth checking, or edit if you have non-standard names:
If you do not have a PV array then comment out or delete these Solcast lines from apps.yaml
.
Alternatively, Predbat can obtain the solar forecast directly from Solcast and the Solcast integration is thus not required.
+Uncomment the following Solcast cloud interface settings in apps.yaml
and set the API key correctly:
solcast_host: 'https://api.solcast.com.au/'
+solcast_api_key: 'xxxx'
+solcast_poll_hours: 8
+
+Note that by default the solcast API will be used to download all sites (up to 2 for hobby accounts), if you want to override this set your sites manually using +solcast_sites as an array of site IDs:
+solcast_sites:
+ - 'xxxx'
+
+If you have more than 2 array orientations and thus more than one Solcast API key, enter each key in a list, i.e.:
+api_key:
+ - xxxx_API_key_1
+ - yyyy_API_key_2
+
+Keep in mind hobbyist accounts only have 10 polls per day so you need to ensure that the solcast_poll_hours refresh period is set so that you do not exceed the 10 poll limit. +If you have two arrays then each Solcast refresh will consume 2 polls. +If you use the same Solcast account for other automations the total polls needs to be kept under the limit or you will experience failures.
+If you have multiple PV arrays connected to hybrid inverters or you have AC-coupled inverters, then ensure your PV configuration in Solcast covers all arrays.
+If however you have a mixed PV array setup with some PV that does not feed into the inverters that Predbat is managing
+(e.g. hybrid GE inverters with an older firmware but a separate older FIT array that directly feeds AC into the house),
+then it's recommended that Solcast is only configured for the PV connected to the inverters that Predbat is managing.
+NB: Gen2, Gen3 and Gen1 hybrid inverters with the 'fast performance' firmware are able to charge their batteries from excess AC that would be exported,
+so for these inverters you should configure Solcast with your total solar generation capability.
Solcast produces 3 forecasted PV estimates, the 'central' (50% or most likely to occur) PV forecast, the '10%' (1 in 10 more cloud coverage 'worst case') PV forecast,
+and the '90%' (1 in 10 less cloud coverage 'best case') PV forecast.
+By default Predbat will use the central (PV50) estimate and applies to it the input_number.predbat_pv_metric10_weight weighting of the 10% (worst case) estimate.
+You can thus adjust the metric10_weight to be more pessimistic about the solar forecast.
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 over the 30 minute slot 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.
+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!).If pv_estimate is set to 10 then input_number.predbat_pv_metric10_weight in Home Assistant should be set to 1.0.
+See also PV configuration options in Home Assistant.
+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 and are listed here just for completeness:
+Predbat is able to include electric vehicle charging in its plan and manage the battery activity so that the battery isn't discharged into your car when the car is charging +(although you can over-ride this if you wish by setting the switch.predbat_car_charging_from_battery to True in Home Assistant).
+There are two different ways of planning car charging into cheap slots with Predbat, either by the Octopus Energy integration or by Predbat identifying the cheapest slots. +These approaches and the set of settings that need to be configured together are described in Car Charging.
+The full list of car charging configuration items in apps.yaml
that are used to plan car charging activity within Predbat are described below.
+The Home Assistant controls (switches, input numbers, selectors, etc) related to car charging are described in Car Charging configuration within Home Assistant,
+with brief mention of pertinent controls included here alongside the apps.yaml configuration items where relevant for context.
num_cars should be set in apps.yaml to the number of cars you want Predbat to plan for.
+Set to 0 if you don't have an EV (and the remaining car sensors in apps.yaml can safely be commented out or deleted as they won't be required).
+NB: num_cars must be set correctly regardless of whether you are using Octopus Intelligent Go to control your EV charging or Predbat to control the charging;
+or else Predbat could start discharging your battery when the EV is charging.
car_charging_exclusive should be set to True for each car in apps.yaml if you have multiple cars configured in Predbat, but only one car charger. +This indicates that only one car may charge at once (the first car reporting as plugged in will be considered as charging). +If you set this to False for each car then it is assumed that the car can charge independently, and hence two or more cars could charge at once. +One entry per car.
+car_charging_exclusive:
+ - True
+ - True
+
+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.predbat_car_charging_hold - A Home Assistant switch that when turned on (True) tells Predbat to remove car charging data from your historical house load +so that Predbat's battery prediction plan is not distorted by previous car charging.
+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 that should 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.
+TIP: 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.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 sensor data by if required (e.g. set to 0.001 to convert Watts to kW).
+If you do not have a suitable car charging energy kWh sensor in Home Assistant then comment the car_charging_energy line out of apps.yaml
+and configure the following Home Assistant entity:
These features allow Predbat to know when you plan to charge your car.
+If you have Intelligent Octopus tariff then planning of charging is done via the Octopus app and Predbat obtains this information through the Octopus Energy integration in Home Assistant.
+The following apps.yaml
configuration items are pre-defined with regular expressions to point to appropriate sensors in the Octopus Energy integration.
+You should not normally need to change these if you have the Octopus Intelligent tariff:
octopus_intelligent_slot - Points to the Octopus Energy integration 'intelligent dispatching' sensor that indicates +whether you are within an Octopus Energy "smart charge" slot, and provides the list of future planned charging activity.
+octopus_ready_time - Points to the Octopus Energy integration sensor that details when the car charging will be completed by.
+octopus_charge_limit - Points to the Octopus Energy integration sensor that provides the car charging limit.
+octopus_slot_low_rate - Default is True, meaning any Octopus Intelligent Slot reported will be at the lowest rate if at home. If False the existing rates only will be used +which is only suitable for tariff's other than IOG.
+If you don't use Intelligent Octopus then the above 3 Octopus Intelligent configuration lines in apps.yaml
can be commented out or deleted,
+and there are a number of other apps.yaml configuration items that should be set:
car_charging_planned - Optional, can be set to a Home Assistant sensor (e.g. from your car charger integration)
+which lets Predbat know the car is plugged in and planned to charge during low rate slots.
+Or manually set it to 'False' to disable this feature, or 'True' to always enable.
+The apps.yaml
template supplied with Predbat comes pre-configured with a regular expression that should automatically match Zappi or Wallbox car chargers.
+If you have a different type of charger you will need to configure it manually.
car_charging_planned_response - An array of values for the above car_charging_planned sensor which indicate that the car is plugged in and will charge in the next low rate slot.
+The template apps.yaml
comes with a set of pre-defined sensor values that should match most EV chargers.
+Customise for your car charger sensor if it sets sensor values that are not in the list.
car_charging_now - For some cases finding details of planned car charging is difficult to obtain.
+The car_charging_now configuration item can be set to point to a Home Assistant sensor that tells you that the car is currently charging.
+Predbat will then assume this 30 minute slot is used for charging regardless of the plan.
+If Octopus Intelligent Charging is enabled and car_charging_now indicates the car is charging then Predbat will also assume that this is a
+low rate slot for the car/house (and might therefore start charging the battery), otherwise electricity import rates are taken from the normal rate data.
CAUTION: Do not use car_charging_now with Predbat led charging or you will create an infinite loop. Do you use car_charging_now with Octopus intelligent +unless you can't make it work any other way as it will assume all car charging is at low rate.
+To make planned car charging more accurate, configure the following items in apps.yaml
:
car_charging_battery_size - Set this value in apps.yaml
to the car's battery size in kWh. If not set, Predbat defaults to 100kWh.
+It will be used to predict when to stop car charging.
car_charging_limit - You should configure this to point to a sensor that specifies the % limit the car is set to charge to. +This could be a sensor on the EV charger integration or a Home Assistant helper entity you can set as you wish. +If you don't specify a sensor Predbat will default to 100% - i.e. fill the car to full.
+car_charging_soc - You should configure this to point to a sensor (on the HA integration for your EV charger) that specifies the car's current charge level +expressed as a percentage - it must NOT be set to a sensor that gives the car's current kWh value as this will cause Predbat to charge the car to an incorrect level. +If you don't specify a sensor, Predbat will default to 0%.
+Multiple cars can be planned with Predbat, in which case you should set num_cars in apps.yaml
to the number of cars you want to plan
car_charging_limit, car_charging_planned, car_charging_battery_size and car_charging_soc must then be a list of values (i.e. 2 entries for 2 cars)
+If you have Intelligent Octopus then Car 0 will be managed by the Octopus Energy integration, if its enabled
+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
+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 or via Predai
+For example:
+
Or
+ +apps.yaml
should be configured to point to the forecast sensor and attribute (in the above formats) like this:
load_forecast:
+ - sensor_name$attribute_name
+
+So if using Predheat it would be configured as:
+load_forecast:
+ - predheat.heat_energy$external
+
+Set load_forecast_only to True if you do not wish to use the Predbat forecast but instead want to use this as your only forecast data e.g using PredAi:
+load_forecast_only: True
+load_forecast:
+ - sensor.givtcp_{geserial}_load_energy_today_kwh_prediction$results
+
+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.
+Most of the Predbat configuration for balancing inverters is through a number of Home Assistant controls for Balancing Inverters,
+but there is one configuration item in apps.yaml
:
balance_inverters_seconds: seconds
+
+Defines how often to run the inverter balancing, 30 seconds is recommended if your machine is fast enough, but the default is 60 seconds.
+There are a number of different configuration items in apps.yaml
that can be used to tweak the way Predbat operates and workaround
+weirdness you may have from your inverter and battery setup.
clock_skew: minutes
+
+Skews the local (computer) time that Predbat uses (from the computer that Predbat is running on).
+Set to 1 means add a minute to the Predbat computer time, set to -1 means take a minute off the Predbat computer time.
+This clock adjustment will be used by Predbat when real-time actions happen e.g. triggering a charge or discharge.
If your inverter's time is different to the time on the computer running Home Assistant, you may need to skew the time settings made on the inverter when you trigger charging or discharging. +Again 1 means the inverter is 1 minute fast and -1 means the inverter is 1 minute slow.
+Separate start and end options are applied to the start and end time windows, mostly as you want to start battery activity late (not early) and finish early (not late).
+You can adjust the charge and discharge times written to the inverter by setting the following in apps.yaml
:
inverter_clock_skew_start: minutes
+inverter_clock_skew_end: minutes
+
+Skews the setting of the charge slot registers vs the predicted start time
+inverter_clock_skew_discharge_start: minutes
+inverter_clock_skew_discharge_end: minutes
+
+Skews the setting of the discharge slot registers vs the predicted start time
+battery_scaling:
+ - scale
+
+Default value 1.0. Multiple battery size scales can be entered, one per inverter on separate lines.
+This setting is used to scale the battery reported SoC kWh to make it appear bigger or larger than it is. +As the GivEnergy inverters treat all batteries attached to an inverter as in effect one giant battery, +if you have multiple batteries on an inverter that need scaling you should enter a composite scaling value for all batteries attached to the inverter.
+TIP: If you have a GivEnergy 2.6 or 5.2kWh battery then it will have an 80% depth of discharge but it will falsely report its capacity as being the 100% size, +so set battery_scaling to 0.8 to report the correct usable capacity figure to Predbat.
+TIP: Likewise, if you have one or multiple GivEnergy All in One (AIO)'s, +it will incorrectly report the 13.5kWh usable capacity of each AIO as 15.9kWh, so set battery_scaling to 0.85 to correct this.
+If you are going chart your battery SoC in Home Assistant then you may want to use predbat.soc_kw_h0 as your current SoC +rather than the usual givtcp_SERIAL_NUMBER_soc GivTCP entity so everything lines up.
+import_export_scaling: scale
+
+Default value 1.0. Used to scale the import & export kWh data from GivTCP if the inverter information is incorrect.
+inverter_battery_rate_min: watts
+
+One per inverter (optional), set in Watts, when set models a "bug" in the inverter firmware +in some models where if charge or discharge rates are set to 0 you actually get a small amount of charge or discharge. +Recommended setting is 200 for Gen 1 hybrids with this issue.
+inverter_reserve_max: percent
+
+Global, sets the maximum reserve % that may be set to the inverter, the default is 98, as some Gen 2 & Gen 3 inverters and +AIO firmware versions refuse to be set to 100. Comment the line out or set to 100 if your inverter allows setting to 100%.
+If the add-on that is providing the inverter control stops functioning it can prevent Predbat from functioning correctly. +In this case you can tell Predbat how to restart the add-on using a service.
+Right now only communication loss with GE inverters is detectable but in future other systems will be supported.
+When enabled if communication is lost then the service configured will be triggered and can cause a restart which may restart the connection. +This maybe useful with GivTCP if you have time sync errors or lose the REST service every now and again.
+The auto_restart itself is a list of commands to run to trigger a restart.
+auto_restart:
+ - shell: 'rm -rf /homeassistant/GivTCP/*.pkl'
+ - service: hassio/addon_restart
+ addon: 533ea71a_givtcp
+
+NB: If you are running GivTCP v2 then the line '533ea71a_givtcp' must be replaced with 'a6a2857d_givtcp' +as the slug-id (Home Assistant add-on identifier) is different between GivTCP v2 and v3.
+Some batteries tail off their charge rate at high SoC% or their discharge rate at low SoC%, and these optional configuration items enables you to model this tail-off in Predbat. +Note that the charge/discharge curves only affect the accuracy of the charging/discharging model Predbat applies in the forward battery plan, +Predbat will still instruct the inverter to charge/discharge at full rate regardless of the charging curve.
+If you know the battery charge or discharge curves (e.g. manufacturer info or your own testing) then you can manually configure this in apps.yaml, +or Predbat can calculate the curves based upon historical inverter charging/discharging data in Home Assistant.
+If the battery has not recently been fully charged or fully discharged then Predbat will not be able to calculate the curves and you'll get a warning in the logfile.
+Enter the charging curve as a series of steps of % of max charge rate for each SoC percentage.
+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. 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).
+If the battery_charge_power_curve option is not set in apps.yaml and Predbat performs an initial run (e.g. due to restarting the Predbat/AppDaemon add-on, +or an edit being made to apps.yaml), then Predbat will automatically calculate the charging curve for you from historical battery charging information.
+You should look at the Predbat logfile to find the predicted battery charging curve and copy/paste it into your apps.yaml
file.
+The logfile will also include a recommendation for how to set your battery_rate_max_scaling setting in HA.
The YouTube video charging curve and low power charging +explains how the curve works and shows how Predbat automatically creates it.
+Setting this option to auto will cause the computed curve to be stored and used automatically. This is not recommended if you use low power charging mode as your +history will eventually not contain any full power charging data to compute the curve, so in this case it's best to manually configure the charge curve in apps.yaml.
+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. +These must be configured in apps.yaml to point to Home Assistant entities that have appropriate history data for your inverter/battery.
+If you have a GivEnergy inverter and are using the recommended default REST mode to control your inverter
+then you will need to uncomment out the following entries in apps.yaml
:
charge_rate:
+ - number.givtcp_{geserial}_battery_charge_rate
+battery_power:
+ - sensor.givtcp_{geserial}_battery_power
+soc_kw:
+ - sensor.givtcp_{geserial}_soc_kwh
+
+Example charging curve from a GivEnergy 9.5kWh battery with latest firmware and Gen 1 inverter:
+battery_charge_power_curve:
+ 91 : 0.91
+ 92 : 0.81
+ 93 : 0.71
+ 94 : 0.62
+ 95 : 0.52
+ 96 : 0.43
+ 97 : 0.33
+ 98 : 0.24
+ 99 : 0.24
+ 100 : 0.24
+
+Enter the discharging curve as a series of steps of % of max discharge rate for each SoC percentage.
+The default is 1.0 (full power) discharge all the way to 0%.
+If the battery_discharge_power_curve option is not set in apps.yaml and Predbat performs an initial run (e.g. due to restarting the Predbat/AppDaemon add-on, +or an edit being made to apps.yaml), then Predbat will automatically calculate the discharging curve for you from historical battery discharging information.
+You should look at the Predbat logfile to find the predicted battery discharging curve and copy/paste it into your apps.yaml
file.
Setting This option to auto will cause the computed curve to be stored and used automatically. This may not work very well if you don't do regular discharges to empty the battery.
+In the same way as for the battery charge curve above, Predbat needs to have access to historical Home Assistant data for battery_discharge_rate, battery_power and soc_kw. +These must be configured in apps.yaml to point to Home Assistant entities that have appropriate history data for your inverter/battery.
+If you are using REST mode to control your GivEnergy inverter then the following entries in apps.yaml
will need to be uncommented :
discharge_rate:
+ - number.givtcp_{geserial}_battery_discharge_rate
+battery_power:
+ - sensor.givtcp_{geserial}_battery_power
+soc_kw:
+ - sensor.givtcp_{geserial}_soc_kwh
+
+The triggers count export energy until the next active charge slot only.
+For each trigger give a name, the minutes of export needed, and the energy required in that time.
+Multiple triggers can be enabled by Predbat at once so in total you could use too much energy if multiple triggered automations all run.
+Each trigger specified in apps.yaml
will create a Home Assistant entity called 'binary_sensor.predbat_export_trigger_name'
+which will be turned on when the predicted trigger conditions are valid.
+Connect this binary sensor to your automation to start whatever you want to trigger.
Set the name for each trigger, the number of minutes of solar export you need, and the amount of energy in kWh you will need available during that time period in apps.yaml:
+For example:
+export_triggers:
+ - name: "large"
+ minutes: 60
+ energy: 1.0
+ - name: "small"
+ minutes: 15
+ energy: 0.25
+
+Note: Predbat will set an export trigger to True if in the plan it predicts
+that there will be more than the specified amount of excess solar energy over the specified time period.
+In the example above, the 'large' trigger will be set to True for the 1 hour period where Predbat predicts
+that there will be a total of 1kWh of excess solar generation over that time period.
+For clarity the trigger is not set based on actual excess solar generation or export.
+It should also be recognised that this prediction could be wrong; there could be less solar generation or more house load than was predicted in the plan.
If you wish to trigger activities based on Predbat charging or discharging the battery rather than spare solar energy you can instead use the following binary sensors in Home Assistant:
+binary_sensor.predbat_charging - Will be True when the home battery is inside a charge slot (either being charged or being held at a level). +Note that this does include charge freeze slots where the discharge rate is set to zero without charging the battery.
+binary_sensor.predbat_exporting - 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.
+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:
+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:
+days_previous:
+ - 2
+
+If right now today it's Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours:
+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:
+days_previous:
+ - 1
+
+Today its still Monday 3:15pm and Predbat is predicting the forward plan for the next 48 hours:
+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:
+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:
+days_previous:
+ - 2
+ - 3
+ - 4
+ - 5
+ - 6
+ - 7
+ - 8
+
+
+ As a bare minimum a HA-controllable smart plug with a granny charger could be used, +but do consider there could be an electrical spike to the car if the smart plug is turned off when the car is charging. A proper car charger and HA integration is preferable.
+You will firstly need to have installed the appropriate Home Assistant integration for your car charger.
+Start by configuring the Car charging settings in apps.yaml.
+There are two ways that Predbat can plan the slots for charging your car:
+If you have the Intelligent Octopus import tariff, have completed enrollment of your car/charger to Intelligent Octopus (requires a compatible charger or car), +and you have installed the Octopus Energy integration - in which case Predbat will use the car charging slots allocated by Octopus Energy in battery prediction. +The Octopus Energy integration supports Octopus Intelligent, +and through that Predbat gets most of the information it needs.
+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 to confirm that it has found your Octopus account detailsapps.yaml
to point to a Home Assistant 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 car's current charge level is 0%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%.Predbat-led charging - Here Predbat plans and can initiate the car charging based on the upcoming low import rate slots
+apps.yaml
to point to the appropriate sensors from your EV (see Car charging config in apps.yaml)alias: Car charging
+description: "Start/stop car charging based on Predbat determined slots"
+triggers:
+ - trigger: state
+ entity_id:
+ - binary_sensor.predbat_car_charging_slot
+actions:
+ - choose:
+ - conditions:
+ - condition: state
+ entity_id: binary_sensor.predbat_car_charging_slot
+ state: "on"
+ sequence:
+ <commands to turn on your car charger, e.g.>
+ - service: select.select_option
+ data:
+ option: Eco+
+ target:
+ entity_id: select.myenergi_zappi_charge_mode
+ - conditions:
+ - condition: state
+ entity_id: binary_sensor.predbat_car_charging_slot
+ state: "off"
+ sequence:
+ <commands to turn off your car charger, e.g.>
+ - service: select.select_option
+ data:
+ option: Stopped
+ target:
+ entity_id: select.myenergi_zappi_charge_mode
+mode: single
+
+NOTE: Multiple cars can be planned with Predbat.
+If you have one charger and multiple cars configured in Predbat then set car_charging_exclusive in apps.yaml to True to indicate that only one +car may charge at once (the first car reporting as plugged in will be considered as charging). If you set this to False then it is assumed each car +can charge independently and hence two or more could charge at once
+car_charging_exclusive:
+ - True
+ - True
+
+See Car charging filtering and Planned car charging +in the apps.yaml settings section of the documentation.
+switch.predbat_car_charging_from_battery - When set to True the car can drain the home battery, Predbat will manage the correct level of battery accordingly. +When set to 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 battery discharge rate to 0 during car charging and to the maximum otherwise. +The home battery can still charge from the grid/solar in either case. Only use this if Predbat knows your car charging plan, +e.g. you are using Intelligent Octopus or you use the car slots in Predbat to control your car charging.
+input_number.predbat_car_charging_loss gives the percentage 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%.
+Sample setup and Predbat automation to use the cheapest charging slots with no/limited Home Assistant Integration.
+MG4 EV Vehicle with a Hypervolt Car Charger. There is no 3rd party integration with the MG, and the Hypervolt car charger doesn't understand when an EV is plugged in.
+Yet it can be stopped and started with a 3rd party integration.
+In Home Assistant, create two helper entities (Settings / Devices & Services / Helpers) of type 'Number', and for each set 'Unit of Measurement' to 'kWh':
+Create a 'Dropdown' helper entity that has two options 'true' and 'false' (in lower case):
+Within the apps.yaml
configuration file specify the following configuration settings:
Find the line for car_charger_battery_size and enter the Car Battery Size in kWh:
+Example
+ car_charging_battery_size:
+ - 61.7
+
+Specify the Car Charging Limit to use the Car Max Charge helper entity created earlier:
+ car_charging_limit:
+ - 'input_number.car_max_charge'
+
+Find car_charging_planned and replace the template Wallbox and Zappi regular expression with your new dropdown helper entity:
+ car_charging_planned:
+ - 'input_select.car_charger_plugged_in'
+
+Find car_charging_planned_response and add 'true' to the list:
+ car_charging_planned_response:
+ - 'yes'
+ - 'on'
+ - 'true'
+
+If possible, add an entity keeping track of the kWh used for car charging to car_charging_energy.
+If your charging device doesn't keep track of kWh but you can measure the power sent to the car charger +(e.g. from the EV charger integration or an energy monitor/smart plug for the EV charger) then you can create another helper entity to convert kW power into kWh:
+Create a helper entity (Settings / Devices & Services / Helpers) of type 'Integration - Riemann Sum integral':
+Please look into Integration - Riemann sum integral to convert kW into kWh.
+And add your custom car charging energy sensor in apps.yaml in place of the template Wallbox and Zappi regular expression:
+Example
+car_charging_energy: 'sensor.car_energy_used'
+
+car_charging_now must be commented out (hashed out) in apps.yaml
:
#car_charging_now:
+ # - off
+
+Save the apps.yaml
file and exit.
In Home Assistant, turn on the following Predbat control switches:
+And turn off the Predbat control switch:
+HA Charging Slot Automation
+In Home Assistant (Settings / Automation & Scenes), create an automation to monitor the Predbat car charging slot sensor and turn the charger on and off according to the Predbat plan +(the numeric entity id's below would need replacing with the appropriate sensor name for your car charger):
+alias: Car Charging Slot
+description: ""
+triggers:
+ - trigger: state
+ entity_id:
+ - binary_sensor.predbat_car_charging_slot
+actions:
+ - if:
+ - condition: state
+ entity_id: binary_sensor.predbat_car_charging_slot
+ state: "off"
+ then:
+ - type: turn_off
+ entity_id: f6de2df0758744aba60f6b5f
+ domain: switch
+ - if:
+ - condition: state
+ entity_id: binary_sensor.predbat_car_charging_slot
+ state: "on"
+ then:
+ - type: turn_on
+ entity_id: f6de2df0758744aba60f6b5f
+ domain: switch
+mode: single
+
+Finally, for simplicity, add the below entities to your HA Dashboard so you can set them when needed:
+Annoyingly, you have to calculate the kWh your vehicle has in total by taking the Percentage left in the car / 100 * Total Car Battery capacity.
+For example:
65/100*61.7=40.1
+
+Enter '40.1' into 'Car Manual SoC' and '80%' into 'Car Max charge'.
+Once the charger is switched to true and your Car Max charge (target SoC) % is higher than the kWh currently in the car, +Predbat will plan and charge the car with the kW that are needed to reach the target SoC.
+ +Predbat is a powerful hobbyist system that can control many home battery and solar systems. While every attempt has been made to make it as easy to use as possible it does require +a certain amount of technical skills.
+While Predbat normally will save you money an incorrectly configured Predbat can cause your battery to be badly managed and thus increase your electricity bills, I'd recommend carefully changing what you install is doing +once you have enabled it for the first time.
+Some inverters have a flash memory which has a limited lifespan and so depending on the way register writes are managed controller your inverter can act to reduce this lifespan. +In normal operation this should not be an issue but if you have a setup that performs large number of register writes all the time its possible you could eventually run into +this issue.
+Given different inverter designs may have different limits it is a wise precaution to avoid your plan being too busy if it doesn't gain you very much. +Things you can do to have a less complex plan include:
+Avoid using balance inverters which can make register changes one or twice a minute unless you are sure this is not an issue
+Predbat creates an entity called predbat.inverter_register_writes which can be used to check the total number of writes across all inverters, if you divide this by the time period of use +and by the number of inverters you will be able to figure out the actual rate of register writes.
+ +First get the basics set up, ensure you have the inverter controls configured, +you have configured apps.yaml to your setup, and the solar forecast is in place. +Make sure your energy rates are configured correctly for import and export.
+If you have an EV try to set up the car charging sensor correctly so Predbat can tell what part of your historical load is EV charging. +You might want to also set the car charging plan so you can predict when your car is plugged in and how much it will charge.
+It is recommended that you create a dashboard page 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 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.
+For a Hybrid inverter the inverter loss includes the loss on inverting PV as well going AC to DC when importing. Battery loss charge and discharge are factors to account for the loss +in charging and discharging the battery as DC.
+For a AC coupled inverter the inverter loss is just the loss of the battery inverter, if you need to model the loss of your PV inverter then use input_number.predbat_pv_scaling +or adjust your Solcast output. Battery loss charge and discharge are factors to account for the loss in charging and discharging the battery as DC.
+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.
+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 0.5p (meaning charging and discharging the battery would effectively cost an extra 1p per kWh) but can be set to 0 if you want to turn this feature off.
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.
+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'.
+In this scenario you will want to charge overnight based on the next day's solar forecast and don't want Predbat to force export (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 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 | +
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_metric_min_improvement | +0 | +Charge less if it's cost neutral | +
input_number.predbat_metric_min_improvement_export | +5 | +Export only if there is a profit | +
You should set select.predbat_mode to 'Control charge'
+Follow the instructions from the Cheap Night rate above, but also you will also want to have automatic export occurring when the export rates are profitable.
+Item | +Value | +Comment | +
---|---|---|
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 | +
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 | +
input_number.predbat_metric_min_improvement | +0 | +Charge less if it's cost neutral | +
input_number.predbat_metric_min_improvement_export | +5 | +Export only if there is a profit | +
input_number.predbat_metric_battery_cycle | +0-2 | +Higher numbers mean less charging and discharging but higher costs | +
input_number.predbat_best_soc_min | +0 | +Can be set non-zero if you want to force a minimum charge level | +
You should set select.predbat_mode to 'Control charge & discharge'
+Follow the instructions from Cheap Night rate above, but also you will want to have automatic export 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 Predbat to calculate and control charging and discharging | +
input_number.predbat_best_soc_keep | +0.5 | +Use the full battery without going empty | +
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 | +
input_number.predbat_metric_min_improvement | +0 | +Charge less if it's cost neutral | +
input_number.predbat_metric_min_improvement_export | +5 | +Export only if there is a profit | +
input_number.predbat_metric_battery_cycle | +0-2 | +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'
+Recommended settings - these must be changed in Home Assistant once Predbat is running:
+Item | +Value | +Comment | +
---|---|---|
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 | +
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.predbat_metric_min_improvement | +0 | +Charge less if it's cost neutral | +
input_number.predbat_metric_min_improvement_export | +5 | +Export only if there is a profit | +
input_number.predbat_metric_battery_cycle | +0-2 | +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'
+ +There are a number of fancy Apex charts that can be produced from Predbat data - things like Home Battery SoC prediction, Cost prediction, Energy Rates, etc.
+There's a Video Guide to the different charts available on YouTube.
+To install the charts:
+Install Apex Charts https://github.com/RomRider/apexcharts-card:
+Next, on a Home Assistant dashboard you create the charts you want.
+If you get an error 'Custom element doesn't exist: apexcharts-card' then you've not installed the Apex Charts card correctly from HACS.
+See the video guides for a walkthrough of what the different charts show.
+Example charts:
+ + + + + + + + + + +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' configuration items that have to be edited with a file editor).
+See Displaying output data +for information on how to view and edit these entities within +Home Assistant.
+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 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 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.
+ +The mode that Predbat operates in will change the operation, this can be configured with select.predbat_mode drop down menu as follows:
+If the switch.predbat_set_read_only is set to True then this prevents Predbat from making modifications to the inverter settings (regardless of the configuration). +Predbat will continue making and updating its prediction plan every 5 minutes, but no inverter changes will be made. +This is useful if you want to over-ride what Predbat is planning to do (e.g. your own automation), or whilst you are learning how Predbat works prior to turning it on 'in anger'.
+NOTE: Changing the Predbat mode or the read only switch will cause Predbat to reset the inverter settings to default, this will disable +both charge and discharge, reset charge and discharge rates to full power and reset the reserve to the default setting
+ +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.
+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 +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.
+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, you have a 'no export' limitation from your electricity supplier, or if you want to preserve the battery for home demand.
+In Control charge & discharge mode Predbat will set both charge and force export (discharge) times and control charge and force export percentages.
+If you have set the switch.predbat_set_export_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.
+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.
+By default Predbat controls the inverter and updates the plan every 5 minutes, this can however use a lot of CPU power +especially on more complex tariffs like Agile when run on lower power machines such as Raspberry PIs and some thin clients.
+You can tweak input_number.predbat_calculate_plan_every (expert mode) to reduce the frequency of replanning while +keeping the inverter control in the 5 minute slots. E.g. a value of 10 or 15 minutes should also give good results.
+If you have performance problems leave switch.predbat_calculate_second_pass (expert mode) turned Off as it's +quite CPU intensive and provides very little improvement for most systems.
+You can can enable combine_charge_slots and combine_export_slots in order to speed up planning. +Note: Combining export slots may prevent optimal forced export. Combining charge slots is usually fine for tariffs with +longer periods of fixed rates but can limit the planning ability in some cases.
+The number of threads you use can change your performance, you can set threads in apps.yaml
to 0 to disable threading
+if you don't have multiple CPUs available or set it to 'auto' (the default) to use one thread per CPU. Its recommended you don't set this to an odd number of threads.
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.predbat_battery_loss_discharge is an assumed percentage figure for energy lost whilst discharging the battery, the default 0.05 is 5%.
+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.
+TIP: Make sure you set the losses correctly, they are decimal percentages, don't set to '4' thinking it'll be 4%, Predbat will take this as being 400% and your plan will be very strange!
+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.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 have a 9.5kWh battery and think it will last say 6000 complete cycles and it cost you £4000, then each full charge and discharge cycle is 19kWh
+and so the cost per complete cycle is £4000 / 19 / 6000 = 3.5p.
Taking the 3.5p per cycle example, if you set predbat_metric_battery_cycle to 1.75 (half of 3.5) then Predbat will apply the "virtual cost" of 1.75p
+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.
+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 0p-2p are recommended, the default is 0p per kWh.
+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).
+input_number.metric_self_sufficiency (expert mode) A price in pence per kWh used to skew the calculations towards self sufficiency. Effectively saying to Predbat to +account for imports at a higher price than reality in the calculation and thus selecting plans with less import. If you want to be as self sufficient as possible then set +this to the difference between your lowest import rate and the highest export rate to take exports that require additional import appear unprofitable. This setting will not +impact the real calculated costs and is only used for plan selection. Values of 5-10p maybe worth trying if you prefer to avoid importing even if it saves you money.
+input_number.predbat_battery_rate_max_scaling is a percentage factor to adjust your maximum charge rate from that reported by the inverter. +For example a value of 0.95 would be 95% and indicate charging at 5% slower than reported. For GE inverters the charge rate reports the max +AC rate and thus needs to be reduced by inverter losses. +You can try computing your discharge curve and check recommendations for changing this figure in the logfile.
+input_number.predbat_battery_rate_max_scaling_discharge is a percentage factor to adjust your maximum discharge rate from that reported by the inverter. +For GE inverters the discharge rate is reported as the max AC rate and thus is fairly accurate. +You can try computing your discharge curve and check recommendations for changing this figure in the logfile.
+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.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.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.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).
+See also PV configuration options in apps.yaml including explanation of PV10, PV50 and PV90 terminology.
+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.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.
+A value of 0.15 is recommended.
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 +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 +a single low usage day in your average calculation. By default is feature is enabled but can be disabled only in expert mode.
+There are a number of configuration items in Home Assistant for Predbat to control your car charging.
+These are described in detail in Car Charging and are listed here just for completeness:
+See the Predbat mode setting as above for basic calculation options
+input_number.predbat_forecast_plan_hours is the minimum length of the Predbat charge plan, and is the number of hours after the first charge slot to include in the plan. +The default of 24 hours is the recommended value (to match energy rate cycles). Note that the actual length of the Predbat plan will vary depending upon when the first charge slot is.
+switch.predbat_calculate_export_oncharge (expert mode) When True calculated export slots will +disable or move charge slots, allowing them to intermix. When False export slots will never be placed into charge slots.
+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_inverter_set_charge_before - (expert_mode) When True charge slots will be programmed before their start time, when False they will only be +configured when the charging time starts.
+switch.predbat_calculate_tweak_plan (expert mode) When True causes Predbat to perform a second pass optimisation +across the next 8 charge and export windows in time order.
+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 force export late.
+switch.predbat_calculate_second_pass (expert mode) When True causes Predbat to perform a second pass optimisation +across all the charge and export windows in time order.
+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 force export late.
+switch.calculate_import_low_export (expert_mode) When True import slots of the same value are sorted by export price. +When False they are sorted just by price and then time. The default is True.
+By default with this option enabled if there are multiple charge slots of the same price Predbat will try to charge when the export rates are lowest +thus leaving the higher export slots available.
+switch.calculate_export_high_import (expert_mode) When True export slots of the same value are sorted by import price (to avoid the low import slots for export). +When False they are sorted just by price and then time. The default is False.
+By default with this option disabled the latest export slot of the same value will be picked, this is useful for fixed price export tariffs where +you want to export as late in the day as you can.
+input_number.predbat_best_soc_keep is the minimum battery level in kWh that Predbat will to try to keep the battery above for the Predbat plan. +This is a soft constraint only that's used for longer term planning and is ignored for the forthcoming first 4 hours of the plan. +As this is not used for short-term planning it's possible for your SoC to drop below this - use input_number.predbat_best_soc_min +if you want to force all charges to be above a set level. +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.predbat_best_soc_keep_weight (expert_mode) Is used to tune how strongly you want the keep metric to apply. +A value of 0 would essentially ignore keep while higher values will make it more important to always stay above your keep threshold even if it costs +more money to do so.
+The default is 0.5 - this is the recommended setting.
+input_number.predbat_best_soc_min (expert mode) sets the minimum charge level (in kWh) for charging during each slot and the +minimum force export 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.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.
+input_number.combine_rate_threshold (expert mode) sets a threshold (in pence) to combine charge or export slots together into a single larger average rate slot. +The default is 0p which disables this feature and all rate changes result in a new slot.
+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 disabled (False)
+switch.predbat_combine_export_slots (expert mode) Controls if export 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.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 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).
+input_number.predbat_metric_min_improvement_export (expert mode) Sets the minimum pence cost improvement it's worth doing a forced export for. +A value of 5 is the default which prevents any marginal exports as they must be worth at least 5 pence for a 30 minute slot (less for shorter slots. +If you increase this value (e.g. you only want to force export if definitely very profitable), then exports will become less common. +The value is in pence per 30 minutes of export time.
+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.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.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.
+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.
+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.
+switch.predbat_calculate_inday_adjustment (expert mode) Enabled by default with damping of 0.95. When enabled will +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 seen in predbat.load_inday_adjustment and charted with the In Day Adjustment chart (template can be found +in the charts template in Github).
+input_number.predbat_carbon_metric (carbon enable) When Carbon footprint tracking is enabled (switch.predbat_carbon_enable) +you can specify a cost per Kg of CO2 used to weight the selection of plans. Values of around 10-200 will give varying outcomes to trade off +cost vs carbon footprint of your system.
+Note: Carbon footprint tracking can only be enabled if apps.yaml is configured to point to the correct CO2 cost sensor
+switch.predbat_set_status_notify Enables mobile notification about changes to the Predbat state (e.g. Charge, Export etc). On by default.
+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 automatically determined by Predbat to be the +lowest possible rate to meet the charge target. This is only really effective for charge windows >30 minutes. +If this setting is turned on, its strongly recommended that you create a battery_power_charge_curve in apps.yaml +as otherwise the low power charge may not reach the charge target in time. +This setting is off by default.
+The YouTube video low power charging and charging curve +explains how the low power charging works and shows how Predbat automatically creates it.
+input_number.predbat_charge_low_power_margin (set_charge_low_power) Controls how many minutes before the completion time to target finishing charging, this defaults to 10 +but can be changed between 0 and 30.
+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.predbat_set_export_freeze When enabled will allow Predbat to export Solar to the grid rather than charging the battery. +Enabled by default on those inverters that have this support.
+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.predbat_set_export_freeze_only (expert mode) When enabled forced export is prevented, but export 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.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 of a charge window. This may be required for the AIO inverter to ensure it charges from solar. The default for +this switch is True but it can be disabled in expert mode if need be.
+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.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.
+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
+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.
+Predbat tries to model passing clouds by modulating the PV forecast data on a 5 minute interval up and down while retaining the same predicted total. +The amount of modulation depends on the difference between the PV50% (default) and PV10% scenario produced by Solcast.
+You can disable this feature (expert mode only) using switch.predbat_metric_cloud_enable
+Predbat tries to model changes in your household load by modulating the historical data on a 5 minute interval up and down while retaining the same predicted total. +The amount of modulation depends on the standard deviation of your load predictions over the coming period (currently 4 hours).
+You can disable this feature (expert mode only) using switch.metric_load_divergence_enable
+Predbat has an 'iBoost model' that can be used to model using excess solar energy to heat hot water (or similar) instead of it being exported to the grid.
+This model can be used to control any solar diverter device, for example an iBoost (e.g. using a Fingerbot or similar device to physically press the 'boost' button on the iBoost), +a MyEnergy Eddi (using the MyEnergy integration), or it can be used with a high power smart switch to turn on the hot water cylinder immersion heater when there is excess solar.
+So although Predbat refers to controlling an iBoost, you are not limited to just an iBoost device when using this model within Predbat.
+To turn the model on, switch.predbat_iboost_enable needs to be enabled.
+The predicted output from the iBoost solar diverter model is returned in predbat.iboost_best and is populated in the 'iBoost' column of the Predbat plan.
+When you turn on predbat_iBoost_enable the following additional Home Assistant entities are created by Predbat:
+input_number.predbat_iboost_max_energy Sets the maximum energy in kWh that the solar diverter can consume during a day before turning off - default 3kWh.
+input_number.predbat_iboost_max_power Sets the maximum power in watts that the solar diverter will consume - default 2400.
+input_number.predbat_iboost_min_power Sets the minimum power in watts that the solar diverter will consume - default 500.
+input_number.predbat_iboost_value_scaling Sets how to account for the value of iBoost units of energy. +The default value of 0.75 means that each kWh of energy diverted is accounted for a 0.75 x The lowest future import rate.
+Higher values will generate plans with more solar diversion while lower values will generate less. +A value of 0 means all diverted energy should be ignored in planning (assumed to be zero value).
+Different boost modes can be selected:
+switch.predbat_iboost_solar When enabled assumes the diverter will use solar power to boost the hot water heating. +Only excess solar will be used, this is solar that will be otherwise exported and not stored in your battery.
+input_number.predbat_iboost_min_soc sets the minimum home battery SoC percentage that must be in the battery before the solar diverter is turned on. +The default is 0 meaning hot water heating can occur regardless of what SoC level the battery is at.
+If both of the above are off, but iBoost is enabled then boost will happen solely based on energy rates (see below).
+Only slots of at or below the rate threshold will be selected.
+Note this option only applies when iboost_solar and iboost battery are both off.
+input_number.predbat_iboost_smart_min_length Sets the minimum slot length in minutes to iBoost for (only applies for energy rate only modes). +The default is 30 minutes but can be set in multiples of 30. Increasing this slot size could increase costs depending on your tariff.
+switch.predbat_iboost_on_export If set to on allows iBoost to run even if the battery is force exporting to the grid, otherwise it won't run in these circumstances.
+switch.iboost_prevent_discharge When set will stop your battery from discharging when iBoost is active and thus prevent your battery from draining to the diverter. +This switch will it will work in all modes is not recommended to be used when iBoost Solar is enabled as it will prevent your battery from discharging during excess solar periods +which could cause additional imports due to passing clouds.
+input_number.predbat_iboost_rate_threshold_export Sets the maximum export rate (in pence) that the diverter will trigger on, defaults to 100.
+switch.predbat_iboost_gas When enabled will control the diverter to only operate when import electric rates are lower than gas rates.
+These can be useful if you have the choice to heat your hot water by immersion heater or by gas boiler.
+Note: Gas rates have to be configured in apps.yaml
using metric_octopus_gas.
apps.yaml
)used before comparing with electric rates, to account for gas boiler losses and efficiency.It should be set to the reciprocal of the boiler efficiency, i.e. for an 80% efficient gas boiler, set to 1.25.
+You will see input_number.predbat_iboost_today entity which tracks the estimated kWh consumed by the solar diverter during the day, and resets at midnight every night.
+The binary_sensor.predbat_iboost_active entity will be enabled when the solar diverter should be active, can be used for automations to trigger the immersion heater boost.
+The attributes within this sensor include 'solar' which includes Solar diversion should be active and 'full' which indicates iboost should run at maximum rate (could be +during a charge cycle or grid import).
+Example template automation for controlling the solar diverter:
+alias: Solar Diverter
+description: "Start/stop solar diverter based on Predbat determined slots"
+trigger:
+ - platform: state
+ entity_id:
+ - binary_sensor.predbat_iboost_active
+action:
+ - choose:
+ - conditions:
+ - condition: state
+ entity_id: binary_sensor.predbat_iboost_active
+ state: "True"
+ sequence:
+ <commands to turn on your solar diverter>
+ - conditions:
+ - condition: state
+ entity_id: binary_sensor.predbat_iboost_active
+ state: "False"
+ sequence:
+ <commands to turn off your solar diverter>
+mode: single
+
+If you have an incrementing sensor that tracks the solar diverter energy usage then to make your predictions more accurate you should set the iboost_energy_today sensor in
+apps.yaml
to point to it, and optionally set iboost_energy_scaling if the sensor isn't in kWh (e.g. set to 0.001 if the sensor is in Watts).
+The sensor should be an incrementing sensor which can reset at midnight or not.
When you go away you are likely to use less electricity and so the previous load data will be quite pessimistic.
+Using the Home Assistant entity input_number.predbat_holiday_days_left you can set the number of full days that +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
.
+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 +to take longer for the historical data to catch up, you could then enable holiday mode for another 7 days after your return.
+In summary:
+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 you should then +control it yourself using GivTCP or the App appropriate to your inverter.
+A better alternative in some cases is to tell Predbat what you want it to do using the manual force features:
+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 with an upside down 'F' symbol.
+You can cancel a force slot by selecting the slot time again (it will be shown in square brackets to indicate its already selected).
+ +The select.predbat_manual_export selector can be used to manually force an export within a 30 minute slot in the same way as the manual force charge feature. +The force export takes priority over force charging.
+The select.predbat_manual_demand selector is used to force Predbat to demand mode during a 30 minute slot, this implies no forced grid charging or exporting of the battery. +House load will be supplied from solar, or from the battery if there is insufficient solar, or grid import if there is insufficient battery charge. +This is described as 'ECO' Mode for GivEnergy inverters but other inverters use different terminology.
+The select.predbat_manual_freeze_charge selector is used to force Predbat to freeze charge during a 30 minute slot, this implies the battery will not discharge and +hold at the current level. The grid maybe used if solar is not enough to cover the load.
+The select.predbat_manual_freeze_export selector is used to force Predbat to freeze export during a 30 minute slot, this implies the battery will not charge but will +still discharge for the house load. Any solar will be exported to the grid.
+When you use the manual override features you can only select times in the next 18 hours, the overrides will be removed once their time +slot expires (they do not repeat).
+_NOTE: once you select a time slot from any of the select.predbat_manual_ selectors the selected time slot is immediately marked on the drop-down and you can then make another change. +Predbat still has to update the plan which it will be doing so in the background, +and this can take a few minutes to run (depending on the speed and power of the PC you are running Home Assistant on) so don't be surprised why the +Predbat plan doesn't change immediately - remember you can see the date/time the plan was last updated on the first row of the plan.
+CAUTION: If you leave Predbat turned off for a long period of time then the override timeslots could end up repeating when you restart
+ +switch.predbat_debug_enable when on prints lots of debug, leave off by default
+switch.predbat_plan_debug (expert mode) when enabled adds some extra debug to the Predbat HTML plan - see Predbat Plan debug mode +for more details.
+ +Using GitHub, take a fork of Predbat - effectively, this creates +a copy of the main repository, but in your personal space. +There, you can create branches to develop on.
+Once you've completed your work on your branch, you can create a
+pull request (PR) to merge your work back in to the main
branch
+of Predbat.
This PR should describe the work you've done in a way that +makes it easy for someone to review your work, and either +add comments or approve it.
+Note you will need to install python_matplotlib (e.g. brew install python_matplotlib or pip install matplotlib)
+Predbat now has some unit level tests, to run them on your local machine:
+If the tests fail then debug them.
+For coverage analysis installed the 'coverage' library with Python
+There are at least a couple of ways of working on the code, outlined here.
+Especially if you don't need to have a running Home Assistant system +to make the changes you're interested in (e.g. for documentation, +quick fixes etc.) a really easy way to work on the code is using +GitHub Codespaces.
+GitHub Codespaces gives you a full featured development environment. +This includes:
+pre-commit
to run the automatic code quality checks, linting files, etc.mkdocs
to re-generate the documentation files (and other software we may include)
+pre-installed in itThe Codespaces environment is entirely separate from your HA +installation, so does not require any modification to your HA +setup to work with it.
+However, you are modifying code in an environment where you +can't see HA running, so it's great for things like +updating documentation, or writing automated tests, but not +if you need to see your changes live within HA.
+You may with to first install VS Code +on your machine, which does offer some benefits compared to running +Codespaces in the cloud, but this is certainly not essential, and +you'll see the same code editor and terminal, and you'll have the +same commands and Python packages available in the terminal. +The local installation is better in a small number of +scenarios e.g. if you need to connect from your browser to a specific port +on the VM, such as if you're working on the documentation.
+Importantly, even if you do a local install of VS Code and use that
+to edit your code within GitHub, the terminal, the code you're editing
+any commands that you run, and any processes like mkdocs
that you
+may browse to are all running in the Codespaces VM. Your local
+VS Code is connected to the VM through SSH. It will appear as if
+the code, the terminal etc. are local, but they are not. Running
+a local VS Code install connected to Codespaces will not install
+Python, Python packages or anything else on your local machine.
Now, from your fork or branch, click on the Code button, and select the Codespaces tab. +You can create multiple environments, or use a single environment and swap +between branches in it.
+ +Once you start your Codespaces environment, it'll take a minute to +create a VM for you, and to install the software we've asked it to +install in there. It will also clone your repository and chosen +branch into it for you, and the VM will be authenticated with GitHub +so you can commit and push straight back to your fork of Predbat on GitHub.
+You can choose between running the IDE in the browser, or having +your local installation of VS Code connect to the environment that GitHub +Codespaces has created for you.
+The Codespaces will be already set up with Python, along with various
+Python packages (as defined in requirements.txt
). The environment
+is configured through the config in .devcontainer/devcontainer.json
.
To be documented later.
+The documentation site at https://springfall2008.github.io/batpred/ +is built from Markdown files in this repo.
+The Markdown files used to build the documentation are in the docs/
folder,
+with additional config for building the documentation site in mkdocs.yml
.
If you're making minor changes to the documentation e.g. fixing a spelling,
+you can just edit the Markdown files directly, and it will be pushed to the
+main documentation site as outlined in the documentation build process
+section below, once your changes are merged into main
and released.
However, if you're doing more than that, e.g. adding new sections, working +with lists etc. we recommend you follow the instructions in +working locally on the documentation +below, as this will give you a live preview of what the documentation +will look like once it's build and published. This will avoid any +unexpected results appearing in the main documentation site.
+If you are adding a new file, please ensure you add that file to
+mkdocs.yml
, so it will be linked from the menu in the sidebar.
The documentation for the site is built using mkdocs
, which will
+already be installed if you're using a GitHub Codespaces environment.
For a detailed explanation of mkdocs
features, please read the
+mkdocs
documentation.
As briefly covered above, mkdocs.yml
contains the config for defining the documentation site,
+and the documentation is built by mkdocs
reading the Markdown files in the docs/
folder,
+and creating HTML files from those files. mkdocs
can be used locally for previewing,
+but is also used as part of the documentation build process that publishes
+the official documentation site.
The publishing of the documentation is triggered by a GitHub action,
+as defined in .github/workflows/main.yml
.
In short, after configuring the build environment, mkdocs
builds the
+site, then pushes the HTML produced to the gh-pages
branch,
+overwriting whatever was there previously.
GitHub will then detect a new commit on the gh-pages
branch,
+and that will trigger another action to run (as defined by GitHub).
+This action will take the HTML files on the gh-pages
branch,
+and will make it available at https://springfall2008.github.io/batpred/.
The documentation will be published as it is, with no further +review process, so please ensure you check the documentation +that will be built before merging it in.
+If you are making changes to the documentation, you can see +a live preview version of the documentation as it will be +built and deployed.
+This preview version is local to your environment, is +temporary, and does not impact the published version in any way.
+It's recommended for anything other than simple changes +like fixing spellings, adding a sentence or two. Things like +new sections, lists, new pages etc. are best previewed +due to the complications of various Markdown standards, +as what works on GitHub READMEs, for example, does not +necessarily work with the published documentation site +(which follows a more strict Markdown standard).
+There are a number of terminal commands that you can use in the Codespaces environment. Open a terminal window in Codespaces by choosing menu > Terminal > New Terminal.
+To run the live preview, enter mkdocs serve
in the terminal window - this will cause mkdocs
to build a
+local temporary version of the documentation site,
+and to temporarily publish it on port 8000 - it will
+show the link where you can access the documentation.
Also, it will watch the docs/
folder, and any time you change the
+files, it will rebuild the site, allowing you to see changes to
+the Markdown files in your browser within a few seconds.
The site will continue being served until you press CTRL-C
to
+end the mkdocs serve
command.
Note, accessing the site published by mkdocs serve
is not
+possible if you are using Codespaces to run VS Code in the browser,
+but it is possible if you're using it via VS Code running locally,
+due to the way in which ports on your environment are shared.
This section will be enhanced following discussions as we go.
+However, here's a starting point:
+lower_case_with_underscores
- this fits
+with most existing variables, is a common standard for Python code,
+and also allows the spell checking to check individual words within
+the variable name.Certain coding standards are enforced within the repository. +Some of them can be auto-fixed, if you do a commit that +fails one of those standards; other issues will need fixing +first, as your pull request won't merge in GitHub until it passes.
+These standards are enforced by pre-commit, +a tool which is able to run other tools to check, and potentially fix +(for certain types of issues) any mistakes you've made.
+The .pre-commit-config.yaml
file lists all checks that are
+currently carried out within the repository. Bear in mind that
+these checks are done according to the config within that file
+in the branch that you are working in,
+so if someone adds a new check, or changes some of the related settings,
+it won't apply on your branch until you've merged in their changes.
Some of the tools have their own related config files:
+.cspell.json
and .cspell/custom-dictionary-workspace.txt
pyproject.toml
.markdownlint.jsonc
Additional notes on some of the standards:
+.cspell/custom-dictionary-workspace.txt
and stage those changes.
+The spell-check should then pass. Note, the dictionary file will get
+re-sorted alphabetically when you run pre-commit
, so you'll need to
+re-stage the file after it's been sorted.If you are using a Codespaces environment, you'll already have pre-commit
+installed automatically. You can run it manually, or automatically.
Running pre-commit
manually:
In a terminal window, running pre-commit
will run all the checks against any files that you
+have modified and staged.
Alternatively, running pre-commit run --all-files
will run all the checks
+against all files within the repository.
Note that if pre-commit
makes any changes to any files when it runs,
+those changes will not be staged. You will need to stage those changes too
+before committing.
You may notice pre-commit
mentioning about stashing changes - this is
+because when it runs, any changes that aren't staged are stashed (saved
+away temporarily) so it runs against only the staged changes;
+after it has run, it pulls back those stashed changes, so they appear
+again (still unstaged).
Running pre-commit
automatically:
If you run pre-commit install
in a terminal window it will install a pre-commit hook -
+this is a file which tells git
to run some code each type you do a
+particular action (a pre-commit hook runs at the start of processing
+a commit, but there are other hooks e.g. pre-push).
Now, any time you perform a commit, pre-commit
will run
+automatically on the staged files - this is a handy way of making sure
+that you don't accidentally commit code which will fail checks later.
You can still run it manually as outlined above, in addition to the +automated checks that it will do on commits.
+When commits are done on pull requests, and in any other scenarios
+added to the on
section of.github/workflows/linting.yml
,
+the GitHub Actions in that file will run.
In particular, the pre-commit.ci lite
+action will run. This uses the code here
+to run the same checks that get run locally
+(as described in the .pre-commit-config.yaml
file).
This will cause your commit, branch or pull request to get either a green tick +or a red cross against it, to show whether the code passed the checks or not. +This will happen automatically, when you push code on a branch that has a +pull request.
+In addition, if pre-commit
finds any errors that it is able to fix
+(e.g. a missing blank line at the end of a file, or trailing whitespace),
+it will do a commit of its own to fix those problems, and will push that
+commit back to your branch on GitHub. This will then trigger another run,
+which should now pass.
Note: This means that pre-commit
will be adding commits to
+your branch - this will need you to be pulling changes from GitHub
+so you pick up the changes that have been added by pre-commit
+otherwise you will hit a problem when you next try to push a commit
+on your branch. You can pull in those changes by running git pull
+, which is the equivalent of running git fetch
then git merge
.
+This is no different to working on the same branch with another developer,
+but it will be different to the workflow most of us have when working
+on Predbat.
https://www.home-assistant.io/integrations/wallbox/
+Can be used both for Car Charging Hold feature (to filter out previous car charging) and to determine if the car is plugged in
+car_charging_energy: 're:sensor.wallbox_portal_added_energy'
+car_charging_planned:
+ - 're:sensor.wallbox_portal_status_description'
+
+Wallbox works with Octopus Intelligent GO, and can be triggered via Octopus themselves or via a HA automation linked to the Predbat slot sensor
+https://github.com/CJNE/ha-myenergi
+Can be used both for Car Charging Hold feature (to filter out previous car charging) and to determine if the car is plugged in
+car_charging_energy: 're:sensor.myenergi_zappi_[0-9a-z]+_charge_added_session'
+car_charging_planned:
+ - 're:sensor.myenergi_zappi_[0-9a-z]+_plug_status)'
+
+https://github.com/alandtse/tesla
+Can be used to extract the cars current SOC and Charge limit. Also can be used to control the cars charging with an automation linked to the Predbat slot sensor
+car_charging_limit:
+ - 're:number.xxx_charge_limit'
+car_charging_soc:
+ - 're:sensor.xxx_battery'
+
+https://github.com/DurgNomis-drol/ha_toyota - For Toyota EU cars only
+Can be used to extract the cars current SOC.
+car_charging_soc:
+ - 'sensor.toyota_XXX_battery_level'
+
+Example sensor name for BZ4X - sensor.toyota_bz4x_battery_level
https://www.home-assistant.io/integrations/renault
+Can be used to extract the cars current SoC.
+car_charging_soc:
+ - 'sensor.battery'
+
+https://github.com/dan-r/HomeAssistant-Ohme
+Can be used both for Car Charging Hold feature (to filter out previous car charging) and to determine if the car is plugged in. +Also can be used with Octopus Intelligent GO to map out the cars charging slots into Predbat
+car charging energy
+car_charging_energy: 'sensor.ohme_session_energy'
+
+Octopus Intelligent GO
+octopus_intelligent_slot: 'binary_sensor.ohme_slot_active'
+octopus_ready_time: 'time.ohme_target_time'
+octopus_charge_limit: 'number.ohme_target_percent'
+
+Note: You should turn on switch.predbat_octopus_intelligent_ignore_unplugged as the Ohme charger does not clear its schedule when unplugged.
+Using Ohme car charging plans on other tariff's e.g. Agile
+octopus_intelligent_slot: 'binary_sensor.ohme_slot_active'
+octopus_ready_time: 'time.ohme_target_time'
+octopus_charge_limit: 'number.ohme_target_percent'
+octopus_slot_low_rate: False
+
+Note: You should turn on switch.predbat_octopus_intelligent_ignore_unplugged as the Ohme charger does not clear its schedule when unplugged.
+Determine if the car is charging now
+Normally not recommended if you are on Intelligent GO, but can be useful for ad-hoc charging not planned via Predbat
+car_charging_now:
+ - 'binary_sensor.ohme_car_charging'
+
+https://github.com/mattrayner/pod-point-home-assistant-component
+Can be used both for Car Charging Hold feature (to filter out previous car charging) and to determine if the car is plugged in.
+car_charging_energy: 're:(sensor.psl_[0-9]+_current_energy)'
+car_charging_planned:
+ - 're:(sensor.psl_[0-9]+_status)'
+car_charging_planned_response:
+ - 'plugged in'
+ - 'connected-waiting-for-schedule'
+ - 'suspended-evse'
+ - 'pending'
+ - 'charging'
+car_charging_now:
+ - 're:(sensor.psl_[0-9]+_status)'
+car_charging_now_response:
+ - 'charging'
+
+Also can be used to control the cars charging with an automation linked to the Predbat slot sensor.
+The device needs to be set to 'Smart' mode in the PodPoint app. Your automation trigger should then set the switch.psl_XXXXXX_charging_allowed
to on. And off to stop charging. This uses the PodPoint schedule override setting to start/stop the charge.
https://github.com/gndean/home-assistant-hypervolt-charger
+Can be used both for Car Charging Hold feature (to filter out previous car charging) and to determine if the car is plugged in (only V3 models).
+For plugged in detection on V2 models, see guidance https://springfall2008.github.io/batpred/car-charging/#example-ev-and-charger-setup.
+car_charging_energy: 're:(sensor.hypervolt_session_energy_total_increasing)'
+car_charging_planned:
+ - 're:(binary_sensor.hypervolt_car_plugged)'
+car_charging_planned_response:
+ - 'on'
+car_charging_now:
+ - 're:(sensor.hypervolt_charging_readiness)'
+car_charging_now_response:
+ - 'charging'
+
+Note: sensor.hypervolt_session_energy_total_increasing defaults to 'unknown' between charging sessions.
+Agile Tariff
+To automate the schedule charging with Predbat, setup the automation to detect when there is a change to binary_sensor.predbat_car_charging_slot
.
Ensure that select.hypervolt_charge_mode
is in 'Boost', when predbat charging slot is 'on', set select.hypervolt_activation_mode
to 'Plug and Charge', when it is 'off' set the 'Schedule', this is the recommended method for start/stop charging.
https://github.com/BottlecapDave/HomeAssistant-OctopusEnergy
+Can be used for energy rates, car charging and saving sessions
+For energy rate
+metric_octopus_import: 're:(sensor.(octopus_energy_|)electricity_[0-9a-z]+_[0-9a-z]+_current_rate)'
+metric_octopus_export: 're:(sensor.(octopus_energy_|)electricity_[0-9a-z]+_[0-9a-z]+_export_current_rate)'
+
+For Octopus Intelligent GO
+octopus_intelligent_slot: 're:(binary_sensor.octopus_energy([0-9a-z_]+|)_intelligent_dispatching)'
+octopus_ready_time: 're:(time.octopus_energy([0-9a-z_]+|)_intelligent_ready_time)'
+octopus_charge_limit: 're:(number.octopus_energy([0-9a-z_]+|)_intelligent_charge_limit)'
+
+For Octopus Saving sessions
+octopus_saving_session: 're:(binary_sensor.octopus_energy([0-9a-z_]+|)_saving_session(s|))'
+octopus_saving_session_octopoints_per_penny: 8
+
+This is built into Predbat, see the apps.yaml configuration guide
+https://github.com/custom-components/nordpool/
+Can be linked to Predbat to provide energy rates in your region e.g:
+metric_octopus_import: 'sensor.nordpool_kwh_oslo_eur_3_10_025'
+
+https://github.com/BJReplay/ha-solcast-solar
+For solar forecast data
+pv_forecast_today: re:(sensor.(solcast_|)(pv_forecast_|)forecast_today)
+pv_forecast_tomorrow: re:(sensor.(solcast_|)(pv_forecast_|)forecast_tomorrow)
+pv_forecast_d3: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_3|d3))
+pv_forecast_d4: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_4|d4))
+
+
+ Predbat needs to know what your Import and (optionally) Export rates are so it can plan the optimal way to use your battery. +Your Import and Export rates can be simple flat rates, +more complex time of day tariffs (e.g. Economy 7, Octopus Flux), +or daily/half-hourly rates that track electricity market prices (e.g. Octopus Agile or Tracker).
+Energy rates are all configured in the apps.yaml
file that's stored in either the directory /addon_configs/6adb4f0d_predbat
or /config/appdaemon/apps/batpred/config/
directory
+depending on what type of Predbat installation method you have used.
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 edit this file - see editing configuration files within Home Assistant if you need to install an editor.
+There are three different ways of configuring your Energy rates in apps.yaml
, using the Octopus Energy Integration, using Octopus Rates URL's,
+or manually defining your rates and time periods.
At least one of these methods must be used to define your import and export rates. If you don't then Predbat will assume zero for your energy rates.
+If your electricity supplier is Octopus Energy then the simplest way to provide Predbat with your electricity pricing information +is to use the Octopus Energy integration.
+The Octopus Energy integration connects to your Octopus Energy account and retrieves the tariffs you are on, and the current tariff rates. +If you change tariff within Octopus the integration will automatically retrieve the updated tariff information, and as tariff prices change, again they are automatically retrieved.
+The integration also provides support for Intelligent Octopus charging to support car charging.
+Follow the instructions provided in the Octopus Energy integration documentation to install and setup the integration.
+Once installed, you will need to configure the integration (go to Settings / Devices & Services / Integrations / Octopus Energy then click 'Configure') +and provide the integration with your 'Octopus API key' (that you obtain from your Octopus account : Personal Details / API access).
+CAUTION To get detailed energy rates needed by Predbat you need to go into Home Assistant and manually enable the following +Octopus Energy events which are disabled by default when the integration is installed:
+ event.octopus_energy_electricity_xxxxxxxx_previous_day_rates
+ event.octopus_energy_electricity_xxxxxxxx_current_day_rates
+ event.octopus_energy_electricity_xxxxxxxx_next_day_rates
+
+ event.octopus_energy_electricity_xxxxxxxx_export_previous_day_rates
+ event.octopus_energy_electricity_xxxxxxxx_export_current_day_rates
+ event.octopus_energy_electricity_xxxxxxxx_export_next_day_rates
+
+ event.octopus_energy_gas_xxxxxxxx_previous_day_rates
+ event.octopus_energy_gas_xxxxxxxx_current_day_rates
+ event.octopus_energy_gas_xxxxxxxx_next_day_rates
+
+To enable the above events:
+Repeat this for the other events.
+The gas rates are only required if you have a gas boiler, an iBoost, and are using Predbat to determine whether it's cheaper to heat your hot water with the iBoost or via gas.
+Verify that the integration is working correctly in Home Assistant by going to Developer Tools / States, and enter 'octopus' in the 'Filter entities' box. +Confirm that the Octopus entities are being populated correctly.
+The following configuration items in apps.yaml are used to configure Predbat to use the Octopus Energy integration. +They are set to a regular expression and should be auto-discovered so that Predbat automatically uses the Octopus Energy integration, +but you can comment out the regular expression lines to disable, or you set them manually.
+metric_octopus_gas is (as above) only required to be configured if you are using Predbat to determine whether to heat your hot water via your iBoost or gas.
+If you do not have an export rate, or are not on the Octopus Go tariff, then the appropriate lines can be commented out in apps.yaml.
+Predbat can also (optionally) include the daily standing charge in cost predictions. +The following configuration item in apps.yaml defaults to obtaining the standing charge from the Octopus Energy integration:
+You can manually change this to a standing charge in pounds, e.g. 0.50 is 50p, or delete this line from apps.yaml, or set it to zero +if you don't want the standing charge (and only have consumption usage) to be included in Predbat charts and output data.
+Predbat is able to automatically join you to Octopus saving sessions and plan battery activity for the saving session period to maximise your income.
+For Predbat to automatically manage Octopus saving sessions the following additional configuration item in apps.yaml is used. +Like the electricity rates this is set in the apps.yaml template to a regular expression that should auto-discover the Octopus Energy integration.
+When a saving session is available it will be automatically joined by Predbat and should then appear as a joined session within the next 30 minutes.
+In the Predbat plan, for joined saving sessions the energy rates for import and export will be overridden by adding the assumed saving rate to your normal rate. +The assumed rate will be taken from the Octopus Energy integration and converted into pence +using the octopus_saving_session_octopoints_per_penny configuration item in apps.yaml (default is 8).
+If you normally cut back your house usage during a saving session then you can change input_number.predbat_load_scaling_saving to allow Predbat to assume an energy +reduction in this period. E.g. setting to a value of 0.8 would indicate you will use 80% of the normal consumption in that period (a 20% reduction).
+As the saving session import and export rates are very high compared to normal Predbat will plan additional export during the saving session period. +If necessary, a pre-charge may happen at some point during the day to maintain the battery right level for the session.
+Note that Predbat's operational mode select.predbat_mode must be set to either 'Control charge' +or 'Control charge & discharge' for Predbat to be able to manage the battery for the saving session.
+If you do not have an export tariff then forced export will not apply and Predbat will just ensure you have enough battery charge to see you through the saving session period.
+If you do not want Predbat to automatically join Octopus saving sessions and manage your battery activity for the session, +simply delete or comment out the octopus_saving_session entry in apps.yaml.
+Predbat can automatically detect Octopus free events and adjust your battery plan according.
+For Predbat to automatically manage Octopus free sessions the following additional configuration item in apps.yaml is used.
+Note: You must have signed up to Octoplus to benefit from these events
+Like the electricity rates this is set in the apps.yaml template to a regular expression that should auto-discover the Octopus Energy integration.
+octopus_free_session - Will point to the free event sensor that is exposed by the Octopus Energy Integration. This event sensor contains the dates/times of +all the free events.
+ octopus_free_session: 're:(event.octopus_energy_([0-9a-z_]+|)_octoplus_free_electricity_session_events)'
+
+Note: This event may need to be enabled in Home Assistant first How to Enable Octopus events
+If you normally increase your house usage during a free session then you can change input_number.predbat_load_scaling_free to allow Predbat to assume an energy +increase in this period. E.g. setting to a value of 1.2 would indicate you will use 20% more energy that normal during this period. (Default is 1.2)
+If you do not want Predbat to see these sessions then comment out the octopus_free_session setting.
+Note: If the above is not working due to lack of data (via a 3rd party service) Predbat can scrape directly from the Octopus Web Site, this may +have its own issues due to change of format. If you enable this then sessions will be considered even if you forget to sign-up so be careful!
+octopus_free_url: 'http://octopus.energy/free-electricity'
+
+If you do not wish to use the Octopus Energy integration and are an Octopus Energy customer then you can configure Predbat to get the electricity rates +directly online from the Octopus website.
+In apps.yaml configure the following lines:
+e.g.
+ rates_import_octopus_url : "https://api.octopus.energy/v1/products/FLUX-IMPORT-23-02-14/electricity-tariffs/E-1R-FLUX-IMPORT-23-02-14-A/standard-unit-rates"
+ rates_import_octopus_url : "https://api.octopus.energy/v1/products/AGILE-FLEX-BB-23-02-08/electricity-tariffs/E-1R-AGILE-FLEX-BB-23-02-08-A/standard-unit-rates"
+
+ rates_export_octopus_url: "https://api.octopus.energy/v1/products/FLUX-EXPORT-BB-23-02-14/electricity-tariffs/E-1R-FLUX-EXPORT-BB-23-02-14-A/standard-unit-rates"
+ rates_export_octopus_url: "https://api.octopus.energy/v1/products/AGILE-OUTGOING-BB-23-02-28/electricity-tariffs/E-1R-AGILE-OUTGOING-BB-23-02-28-A/standard-unit-rates/"
+ rates_export_octopus_url: "https://api.octopus.energy/v1/products/OUTGOING-FIX-12M-BB-23-02-09/electricity-tariffs/E-1R-OUTGOING-FIX-12M-BB-23-02-09-A/standard-unit-rates/"
+
+If you configure the rates_import_octopus_url then Predbat will use this instead of metric_octopus or rates_import. +Similarly rates_export_octopus_url takes precedence over metric_octopus_export or rates_export.
+Configuring the Octopus rates URL is an expert feature and for most users the Octopus Energy integration is a simpler solution to use.
+If you are not an Octopus Energy customer, or you are but your energy rates repeat in a simple manner, you can configure your rate bands in apps.yaml using rates_import/rates_export/rates_gas.
+Add the following entries to apps.yaml to define the pattern of rates over a 24-hour period:
+rates_import:
+ - start: "HH:MM:SS"
+ end: "HH:MM:SS"
+ rate: pence
+rates_export:
+ - start: "HH:MM:SS"
+ end: "HH:MM:SS"
+ rate: pence
+rates_gas:
+ - start: "HH:MM:SS"
+ end: "HH:MM:SS"
+ rate: pence
+
+start and end are in the time format of "HH:MM:SS" e.g. "12:30:00" and should be aligned to 30 minute slots normally. +rate is in pence e.g. 4.2
+start and end can be omitted and Predbat will assume that you are on a single flat rate tariff.
+If there are any gaps in the 24-hour period then a zero rate will be assumed.
+The gas rates are only required if you have a gas boiler, an iBoost, and are using Predbat to determine whether it's cheaper to heat your hot water with the iBoost or via gas.
+You can also override the import or export energy rates (regardless of whether they are set manually or via the Octopus Energy integration) by using the override feature in apps.yaml.
+Rate override is used to set the specific date and time period where your rates are different, e.g. an Octopus Power Up session (zero rate for an hour or two), +or the British Gas half-price electricity on Sunday's.
+Unfortunately there aren't any API's available to feed this information automatically into Predbat so you will have to edit apps.yaml
manually
+to set the appropriate rate over-ride dates and times:
rates_import_override:
+ - date: "YYYY-MM-DD"
+ start: "HH:MM:SS"
+ end: "HH:MM:SS"
+ rate: pence
+rates_export_override:
+ - date: "YYYY-MM-DD"
+ start: "HH:MM:SS"
+ end: "HH:MM:SS"
+ rate: pence
+
+Optionally you can add a predicted load scaling factor for these periods using load_scaling, for example:
+rates_import_override:
+ - date: '2024-01-21'
+ start: '17:30:00'
+ end: '18:30:00'
+ rate: 150
+ load_scaling: 0.8
+
+This instructs Predbat 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 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.
+rates_export_override:
+ - start: '17:00:00'
+ end: '19:00:00'
+ rate_increment: -10
+
+You can also use a similar but opposite approach of setting a positive export rate_increment to encourage Predbat to discharge the battery at certain time periods.
+If you have a very low overnight rate (such as Octopus Go) and want to ensure your battery is discharged just before the low rate period, +but you don't want to risk the battery running out too early (and importing at a higher rate), +you can add a rate export override for the period you want to discharge just before the low rate period:
+rates_export_override:
+ - start: '22:30:00'
+ end: '23:30:00'
+ rate_increment: 10
+
+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.
+If you are on an Agile or Tracker tariff you can tune future unknown energy rates by adjusting the entities input_number.predbat_metric_future_rate_offset_import (expert mode) +and input_number.predbat_metric_future_rate_offset_export (expert mode) inside Home Assistant to set the predicted offset for future unknown rates.
+In the energy market it's possible to calculate the Octopus Agile rates from around 10am UK time using public data, you can +enable this in apps.yaml for Import, Export or both. This will approximate next day's rates based on the spot prices. +The approximation is only used until the real Octopus Agile rates are released around 4pm.
+CAUTION: You may violate the terms and conditions of the Nordpool site if you use this data and as such the authors of +Predbat accept no responsibility for any violations:
+https://www.nordpoolgroup.com/en/About-us/terms-and-conditions-for-useofwebsite/
+futurerate_url: 'https://dataportal-api.nordpoolgroup.com/api/DayAheadPrices?date=DATE&market=N2EX_DayAhead&deliveryArea=UK¤cy=GBP'
+futurerate_adjust_import: True
+futurerate_adjust_export: False
+futurerate_peak_start: "16:00:00"
+futurerate_peak_end: "19:00:00"
+
+Predbat can also track Carbon intensity by linking it to an integration which provides this data.
+The National Grid provides this data, please install this integration: https://github.com/jfparis/sensor.carbon_intensity_uk
+Once it is active update apps.yaml to link Predbat to the Sensor (if its not already in your template):
+# Carbon Intensity data from National grid
+carbon_intensity: 're:(sensor.carbon_intensity_uk)'
+
+By enabling switch.predbat_carbon_enable you can view Carbon Intensity in the predbat plan.
+Predbat can also optimise your grid charging based on the Carbon footprint by setting input_number.predbat_carbon_metric.
+ + +apps.yaml
config to match your own names
+(some people don't have the solcast_ bit in their names)appdaemon.yaml
?Some inverters e.g. GE AIO inverter won't allow the reserve to be set too 100, in which case set in apps.yaml
+inverter_reserve_max : 98
+
+And this should prevent the issue
+Predbat can only work on the information its given, although it does run every 5 minutes when it re-evaluates the plan and adjusts if necessary.
+The plan Predbat produces assumes that your average load and PV forecasts are accurate and Predbat will aim to give you the maximum return.
+Make sure you have setup your Solcast solar forecast correctly with the number of panels, orientation, output, etc.
+Projected daily load is determined from historical load information so make sure you have set days_previous and days_previous_weight in apps.yaml +to give appropriately representative load history to Predbat, and read the longer explanation of how days_previous works.
+You could adjust input_number.predbat_load_scaling to 1.2 so the plan will incorporate 20% more expected load if you want to be more pessimistic about historical load, +and input_number.predbat_pv_scaling to similarly adjust the PV forecast - these and other adjustment options are described in the Scaling and Weight options.
+It is very important to correctly set Predbat's Battery Loss Options +and Battery Margins 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 their Predbat configuration to suit their needs.
+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. +Conversely if you find Predbat is letting the battery exhaust too early, set predbat_best_soc_keep to 1.0 so Predbat will aim to keep 1kWh available for unexpected load.
+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.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%.
+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 then you can see the +effective import and export rates after losses that Predbat calculates in the Predbat plan.
+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.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 its cost beneficial to charge or discharge the battery +so could be tweaked if you feel Predbat is charging or discharging with marginal benefits. The defaults (0p and 0.1p respectively) should however give good results for most users.
+Finally, it could be worth considering adding import or export rate increments to apps.yaml
if you want to direct Predbat
+to avoid or encourage charging or discharging in certain time periods - e.g. avoiding exporting in the time period saving sessions normally fall in,
+or to encourage discharging just before import rates fall overnight.
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 a number of Predbat entities, +the message will be "State attributes for predbat.XXXX exceed maximum size of 16384 bytes".
+This is just a warning, the Predbat entity attributes aren't stored in the database anyway,
+but you can suppress these warnings by adding the following to your configuration.yaml
file:
# Filter out 'message too large' warnings from Predbat entities
+logger:
+ default: warning
+ filters:
+ homeassistant.components.recorder.db_schema:
+ - "State attributes for predbat.base10_export_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.base10_import_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.base10_metric exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.base10_pv_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.battery_cycle exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.battery_cycle_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.battery_power exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.battery_power_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_charge_limit exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_export_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_import_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_load_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_metric exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best_pv_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best10_export_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best10_import_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best10_metric exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.best10_pv_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.cost_today_export exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.cost_today_import exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.export_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.grid_power exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.grid_power_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_energy_actual exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_energy_adjusted exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_energy_predicted exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_power exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.load_power_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.metric exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.plan_html exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.pv_energy exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.pv_power exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.pv_power_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.rates exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.soc_kw exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.soc_kw_base10 exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.soc_kw_best exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+ - "State attributes for predbat.soc_kw_best10 exceed maximum size of 16384 bytes. This can cause database performance issues; Attributes will not be stored"
+
+If you get this error in the Predbat log file:
+If you get this warning message in the Predbat log file or you see that the 'PV kWh' column in the Predbat plan card is completely blank:
+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 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:
+ charge_rate:
+ - number.givtcp_{geserial}_battery_charge_rate
+ discharge_rate:
+ - number.givtcp_{geserial}_battery_discharge_rate
+ battery_power:
+ - sensor.givtcp_{geserial}_battery_power
+ soc_kw:
+ - sensor.givtcp_{geserial}_soc_kwh
+
+If you see the message "WARN: Inverter is in calibration mode, Predbat will not function correctly and will be disabled" in the logfile, +then Predbat has identified that your inverter is currently calibrating your battery. Predbat's status will also be set to 'Calibration'.
+Predbat will set the inverter charge and discharge rates to maximum (if they are not already), SoC target to 100% and battery reserve to minimum (usually 4%), +and will not execute the plan nor enable battery charge or discharge.
+Once the inverter finishes calibrating the battery, Predbat will resume normal operations.
+If the predbat.status gives a warning error about the inverter time:
+ +Then it indicates that there is a mis-match between the clock that Predbat is using and the inverter time clock, and clearly with a clock mis-match, +charging and discharging your battery at specific times may not work as expected.
+There are several potential causes of this problem:
+If you have checked the above and keep getting “time is skewed” warnings then it means Home Assistant/predbat isn’t getting the same time from the inverter as it is expecting. +Either GivTCP has lost communications with the inverter or the inverter is stopped talking to the world.
+If you look at the Logbook in Home Assistant you should see a steady stream of entities changing in HA. +In particular you will see the GivTCP inverter time entity changing every polling period, e.g. every 20 seconds.
+Possible fixes:
+If you keep getting the warning message, even sporadically, then this points to an underlying issue in your home network between Home Assistant and the inverter. +You may need to add a Wi-Fi repeater or ideally a fixed Ethernet connection to your inverter to improve signal strength if this keeps happening.
+There is a Home Assistant automation that will alert you if GivTCP stops sending data to predbat.
+If you are still having trouble feel free to raise a Github ticket for support
+ +Home battery prediction and automatic charging for Home Assistant supporting multiple inverters including:
+Also known by some as Batpred or Batman!
++
Copyright (c) Trefor Southwell April 2024 - All rights reserved
+This software maybe used at not cost for personal use only
+No warranty is given, either expressed or implied
+
+For support please raise a Github ticket or use the Facebook Group: Predbat and +watch my YouTube Channel
+Some inverters have their own groups also e.g:
+ +If you want to buy me a beer then please use Paypal - tdlj@tdlj.net +
+Once you are up and running you will get a chart that predicts your battery levels over time:
+ +And you can also see this in a plan format predicting your overall costs and your carbon footprint (if enabled, UK only for now):
+ + +You can see a cost over time for the plan that Predbat has made and also how it might turn out if your solar production (should you have solar) +is lower than expected or if you use a bit more energy than planned (10% scenario):
+ +You can see your energy rates over time and where the battery is being charged:
+ +Power charts can show you how the prediction maps to your inverter:
+ +You can model iBoost or similar solar diverters, this will be shown on your plan and you can even use it to trigger smart devices e.g. +an emersion heater based on energy rates.
+ +You can predict when your car will charge and use Predbat to schedule the cheapest car charging slots:
+ +Charts can track your cost saving using Predbat and from having a PV and Battery system
+ +The calibration chart is useful for tuning the model for things like inverter losses until it matches reality:
+ +Predbat can track your actual vs predicted energy usage and make real time adjustments to the predictions if you use more or less:
+ +You can tune lots of parameters to match your system and needs:
++
+You can also override the plan on a temporary basis if you have a particular reason to:
+ +Please read the documentation for more information!
+ +These instructions will take you through the process of installing and configuring Predbat for first time use.
+If you have a working Predbat installation using AppDaemon and are changing to use the Predbat add-on, +the AppDaemon to Predbat add-on upgrade process is described below.
+It's recommended that you watch the Predbat Video Guides before you start.
+We have tried to make the documentation as comprehensive as possible but a level of familiarity with the basics of +Home Assistant, Add-on's, Integrations, Entities, File Editing and YAML is assumed. +There are plenty of "Home Assistant basics" tutorials on YouTube, but here are a few useful videos to introduce you to Home Assistant and displaying inverter data:
+If you get stuck, please read the FAQ's and if necessary raise a Github ticket for support.
+You will need to install an integration to communicate with and control your inverter. The specific integration you need will depend on the brand of inverter you have:
+Brand | +Integration | +Github Link | +
---|---|---|
GivEnergy | +GivTCP | +https://github.com/britkat1980/ha-addons | +
GivEnergy | +GivEnergy Cloud | +https://github.com/springfall2008/ge_cloud | +
GivEnergy EMS | +GivEnergy Cloud | +https://github.com/springfall2008/ge_cloud | +
Solis | +SolaX ModBus | +https://github.com/wills106/homeassistant-solax-modbus | +
Solax Gen4 | +Solax Modbus | +https://github.com/wills106/homeassistant-solax-modbus | +
Sofar | +Sofar MQTT | +https://github.com/cmcgerty/Sofar2mqtt | +
Huawei | +Huawei Modbus | +https://github.com/wlcrs/huawei_solar | +
SolarEdge | +SolarEdge Modbus | +https://github.com/WillCodeForCats/solaredge-modbus-multi | +
SunSynk | +SunSynk Modbus | +https://github.com/kellerza/sunsynk | +
Fox | +Fox Modbus | +https://github.com/nathanmarlor/foxess_modbus | +
LuxPower | +LuxPython | +https://github.com/guybw/LuxPython_DEV | +
Predbat was originally written for GivEnergy inverters controlled by the GivTCP add-on but has been extended for other inverter types.
+Please see Inverter Setup for details on installing and configuring the appropriate inverter control software +so that Home Assistant is able to 'see' and manage your inverter.
+You will need at least 24 hours history in Home Assistant for Predbat to work correctly, the default is 7 days (but you configure this back to 1 day if you need to).
+NB: If you have multiple GivEnergy AIO's or a 3-phase inverter, GivTCP version 3 is required.
+The basic configuration for Predbat is stored in a configuration file called apps.yaml
.
+A standard template apps.yaml file will be installed as part of the Predbat installation and you will need to edit and customise this configuration file for your own system setup.
You will therefore need a method of editing configuration files within your Home Assistant environment.
+There are severals ways to achieve this in Home Assistant, but two of the simplest are to use either the File Editor or Studio Code Server add-on's. +Whichever you use is a personal preference. File Editor is a bit simpler, Studio Code Server is more powerful +but does require HACS (the Home Assistant Community Store) to be installed first.
+If you do not have one of these file editors already installed in Home Assistant:
+Thereafter whenever you need to edit a configuration file in Home Assistant you can navigate to Settings / Add-on's / editor_you_chose_to_use / 'OPEN WEB UI'. +You can also turn the 'Show in sidebar' option on to give a quicker way to directly access the editor.
+If you are using the File Editor to edit Predbat's configuration files, you will need to turn OFF the Enforce Basepath option +in order to access files in different directories (i.e. within the appdaemon directory):
+If you are using Studio Code Server it will default to showing just files and folders in the /config directory. +To access the entire HA directory structure, click the three horizontal bars to the left of 'Explorer', File, Open Folder, type '/' (root) and click OK.
+Recommended
+The simplest way to install Predbat now is with the Predbat add-on.
+Go to settings, add-ons, select Add-on Store, three dots on the top right, Repositories, then add the following repo +'https://github.com/springfall2008/predbat_addon' to the list and click close. Now refresh the list and find Predbat, click on it and click 'install'. +Ensure 'start on boot' is enabled and click 'start'.
+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 /addon_configs/6adb4f0d_predbat
which contains:
You can use your file editor (i.e. 'File editor' or 'Studio Code Server' add-on) to open the directory /addon_configs/6adb4f0d_predbat
and view these files.
If you have used the Predbat add-on installation method you do not need to install HACS or AppDaemon so you can skip directly to Solcast install below.
+The Predbat web interface will work through the Predbat add-on, you can click on the 'Web UI' button to open it once Predbat is running.
+If you wish to use Docker with Predbat its recommended you read the Docker installation instructions inside the Predbat add-on rather than going down the AppDaemon route +listed below.
+Not Recommended
+NOTE: The Predbat web interface will not work with the AppDaemon installation method.
+This is the old way of installing Predbat, to firstly install HACS (the Home Assistant Community Store), then install the AppDaemon add-on, +and finally install Predbat from HACS to run within AppDaemon.
+NOTE: If you are using AppDaemon you now must set ha_key and ha_url in apps.yaml to point to your Home Assistant. The key can be obtained from HA by creating an access token.
+Predbat and AppDaemon are available through the Home Assistant Community Store (HACS). You can install Predbat manually (see below) but its usually easier to install it through HACS.
+Predbat is written in Python and runs on a continual loop (default every 5 minutes) within the AppDaemon add-on to Home Assistant. +The next task therefore is to install and configure AppDaemon.
+appdaemon.yaml
configuration file for AppDaemon and so will need to have either
+the File Editor or Studio Code Server add-on's installed firstappdaemon.yaml
file in the directory /addon_configs/a0d7b954_appdaemon
: appdaemon.yaml
configuration file:/homeassistant/appdaemon/apps
where Predbat will be installed/homeassistant/appdaemon/appdaemon.log
and increase the logfile maximum size and number of logfile generations to capture a few days worth of logs.Example AppDaemon config in appdaemon.yaml
:
appdaemon:
+ latitude: 52.379189
+ longitude: 4.899431
+ elevation: 2
+ time_zone: Europe/London
+ thread_duration_warning_threshold: 120
+ plugins:
+ HASS:
+ type: hass
+ app_dir: /homeassistant/appdaemon/apps
+http:
+ url: http://homeassistant.local:5050
+admin:
+api:
+hadashboard:
+
+# write log records to a file, retaining 9 versions, rather than the standard appdaemon log
+logs:
+ main_log:
+ filename: /homeassistant/appdaemon/appdaemon.log
+ log_generations: 9
+ log_size: 10000000
+
+CAUTION: If you are upgrading AppDaemon from an older version to version 0.15.2 or above you need to follow these steps to ensure Predbat continues working. +These are only required if you are upgrading AppDaemon from an old version, they're not required for new installations of AppDaemon:
+/addon_configs/a0d7b954_appdaemon
and edit appdaemon.yaml
. You need to add app_dir (see above) to point to the
+old location and update your logfile location (if you have set it). You should remove the line that points to secrets.yaml
+(most people don't use this file) or adjust it's path to the new location (/homeassistant/secrets.yaml
)/addon_configs/a0d7b954_appdaemon
(new location) to /config/appdaemon
(the old location)If you install Predbat through HACS, once installed you will get automatic updates for each new release of Predbat!
+NOTE: Throughout the rest of the Predbat documentation you will find reference to the Predbat configuration file apps.yaml
and the Predbat logfile.
As you are following the 'install Predbat through HACS' installation method these are located under the Home Assistant directory /config/appdaemon/
which contains:
A manual install is suitable for those running Docker type systems where HACS does not function correctly and you had to manually install AppDaemon.
+Note: Not recommended if you are using HACS
+/config/appdaemon/apps/
directory in Home Assistant (or wherever you set appdaemon app_dir to)/config/appdaemon/apps/
directory in Home Assistant (or wherever you set appdaemon app_dir to)Edit in Home Assistant the /config/appdaemon/apps/apps.yaml
file to configure Predbat
If you later install with HACS then you must move the apps.yaml
into /config/appdaemon/apps/predbat/config
Predbat needs a solar forecast in order to predict solar generation and battery charging. +If you do have solar panels its recommended to use the Solcast integration to retrieve your forecast solar generation.
+If you don't have one already, register for a free Solcast hobbyist account and enter the details of your system. +You can create 2 sites maximum under one (free hobbyist) account, if you have more aspects then its suggested you average the angle based on the number of panels +e.g. 7/10 240 degrees + 3/10 120 degrees.
+Hybrid inverters only: If your hybrid inverter capacity is smaller than your array peak capacity, tell Solcast that your AC capacity is equal to your DC capacity +(both equal to your array peak kW). Otherwise, Solcast will provide forecast data clipped at your inverter capacity. Let Predbat handle any necessary clipping instead. +When supplied with the unclipped Solcast forecast data, Predbat can allow in its model for PV in excess of the inverter capacity going to battery charging +(bypassing the hybrid inverter).
+You will need your API key for the next steps:
+ +Predbat can obtain the solar forecast directly from Solcast and the Solcast integration described below is not required.
+First get your API key from the Solcast web site, then as described in the Solcast apps.yaml documentation,
+uncomment the Solcast cloud interface settings in apps.yaml
and set the API key correctly:
solcast_host: 'https://api.solcast.com.au/'
+solcast_api_key: 'xxxx'
+solcast_poll_hours: 8
+
+NB: If you use Predbat to obtain your solcast solar forecast then you can't
+include the Solar Forecast within the Home Assistant Energy dashboard
+as you can with the Solcast integration described below.
+The Solcast integration also contains a 'solar dampening' feature that may be useful to reduce the solar forecast that Predbat receives at certain times of day,
+e.g. if your panels are shaded by trees or buildings.
Install the Solcast integration (https://github.com/BJReplay/ha-solcast-solar), create a free Solcast account, +configure details of your solar arrays, and request an API key that you enter into the Solcast integration in Home Assistant.
+Predbat is configured in apps.yaml
to automatically discover the Solcast forecast entities created by the Solcast integration in Home Assistant.
If you don't have any solar generation then use a file editor to comment out the following lines from the Solar forecast part of the apps.yaml
configuration:
pv_forecast_today: re:(sensor.(solcast_|)(pv_forecast_|)forecast_today)
+ pv_forecast_tomorrow: re:(sensor.(solcast_|)(pv_forecast_|)forecast_tomorrow)
+ pv_forecast_d3: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_3|d3))
+ pv_forecast_d4: re:(sensor.(solcast_|)(pv_forecast_|)forecast_(day_4|d4))
+
+Note that Predbat does not update Solcast integration for you so you will need to create your own Home Assistant automation that updates the solar +forecast a few times a day (e.g. dawn, dusk, and just before your nightly charge slot). Keep in mind hobbyist accounts only have 10 polls per day +so the refresh period needs to be less than this. If you use the same Solcast account for other automations the total polls needs to be kept under the limit or you will experience failures.
+Due to the popularity of the Solcast Hobbyist service, Solcast have introduced rate limiting for Hobbyist (free) accounts. If your update gets a 429 error then this is due to rate limiting. +Solcast recommend that you poll for updated solar forecasts at random times, i.e. don't poll at precisely X o'clock and zero seconds. +The Solcast integration will auto-retry if it gets a 429 error, +but to minimise potential rate limiting the sample Solcast automation below contains non-precise poll times for just this reason.
+Example Solcast update automation script:
+alias: Solcast update
+description: "Update Solcast solar forecast"
+triggers:
+ - trigger: time
+ at:
+ - "06:02:34"
+ - "12:07:47"
+ - "18:09:56"
+ - "23:11:18"
+conditions: []
+actions:
+ - action: solcast_solar.update_forecasts
+ data: {}
+mode: single
+
+Manually run the automation and then make sure the Solcast integration is working in Home Assistant by going to Developer Tools / States, filtering on 'solcast', +and checking that you can see the half-hourly solar forecasts in the Solcast entities.
+Predbat needs to know what your electricity import and export rates are in order to optimise battery charging and discharging to minimise your expenditure.
+These rates are configured in Predbat's apps.yaml
configuration file. Follow the instructions in the Energy Rates document.
Note: that if you are using the Octopus integration the 'sensor.octopus_xxx' and 'event.octopus_xxx' entities must have a similar pattern of +names for Predbat to work correctly - see the FAQ's if they are not.
+You will need to use a file editor (either the File editor or Studio Code Server add-on) to edit the apps.yaml
file in Home Assistant
+to configure Predbat - see Configuring apps.yaml.
When Predbat starts up initially it will perform a sanity check of itself and the configuration and confirm the right files are present. +You will see this check in the log, should it fail a warning will be issued and predbat.status will also reflect the warning. +While the above warning might not prevent Predbat from starting up, you should fix the issue ASAP as it may cause future problems.
+Note: if you are running the Predbat through the Predbat add-on or via Docker you will get a logfile warning message +"Warn: unable to find /addon_configs/6adb4f0d_predbat/appdaemon.yaml skipping checks as Predbat maybe running outside of AppDaemon" - this is normal and can be ignored.
+As described above, the basic configuration of Predbat is held in the apps.yaml
configuration file.
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 section describes these points in more detail including using the auto-generated predbat_dashboard.yaml
dashboard file.
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.
+The Predbat Configuration Guide 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 detailed Predbat Customisation Guide details all the Predbat configuration items (switches, input numbers, etc) in Home Assistant, and what each of them does.
+By now you should have successfully installed and configured Predbat and the other components it is dependent upon +(e.g. an inverter controller such as GivTCP, Solcast solar forecast, Octopus Energy integration, etc).
+ +You have checked the Predbat log file 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 some dashboard pages to control and monitor Predbat, +and are ready to start Predbat generating your plan.
+You may initially want to set select.predbat_mode to Monitor to see how Predbat operates, e.g. by studying the Predbat Plan.
+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 predicted battery charge level based on the current inverter charge & discharge settings, predicted house load and predicted solar generation.
In order to enable Predbat to start generating your plan you must delete the 'template: True' line in apps.yaml
once you are happy with your configuration.
Predbat will automatically run, analyse your house load, battery status, solar prediction, etc and produce a plan based upon the current battery settings.
+Check the Predbat logfile again for errors. Voluminous output is quite normal but any errors or warnings should be investigated. +Read the Predbat FAQ's for answers to common questions you may have. +Also check the Predbat status predbat.status - major errors will also be flagged here.
+Once Predbat is running successfully 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 further customise Predbat's settings to meet your needs.
+Set select.predbat_mode to the correct mode of operation 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.
+You can see the planned solar and grid charging and discharging activity in the Predbat Plan. +Another set of views can be seen in the detailed Apex Charts showing Predbat's predictions.
+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.
+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 features to apps.yaml you may therefore need to manually copy across the new apps.yaml settings from the Template apps.yaml.
Recommended
+Predbat can now be updated using the Home Assistant update feature. When a new release is available you should see it in the Home Assistant settings:
+ +Click on the update and select install:
+ +Recommended for manual selection of versions or automatic updates
+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.
+ +Once Predbat has been installed and configured you should update Predbat to the latest version by selecting the latest version in the select.predbat_update selector, +or by enabling the switch.predbat_auto_update to auto-update Predbat.
+Please note that using the internal update mechanism of Predbat will not inform HACS that Predbat has been updated. If you used HACS to install Predbat you do not need +to use it again unless your system is in need of repair.
+Not Recommended
+HACS checks for updates and new releases only once a day by default, you can however force it to check again, or download a specific version +by using the 'Redownload' option from the top-right three dots menu for Predbat in the HACS Automation section.
+NOTE: If you update Predbat through HACS you may need to restart AppDaemon as it sometimes reads the config wrongly during the update.
+(If this happens you will get a template configuration error in the entity predbat.status).
+Go to Settings, Add-ons, AppDaemon, and click 'Restart'.
If you update Predbat via Home Assistant or via Predbat's build-in update then HACS will not know about this and you'll continue to get messages in HACS about updating Predbat.
+Expert only
+You can go to Github and download all the .py files from the releases tab and then manually copy these files
+over the existing version in /config/appdaemon/apps/batpred/
manually.
These steps assume you already have a working Predbat system and want to upgrade to using the Predbat add-on instead of using either the AppDaemon or the AppDaemon-predbat add-on.
+Using the Predbat add-on is the strategic direction for Predbat and resolves some performance and data load issues that can occur with AppDaemon. +The Predbat code that runs is exactly the same and the configuration is exactly the same, its just changing the 'container' that Predbat runs within.
+Before starting, watch the installing Predbat add-on video
+Although the upgrade steps are low risk, take a full backup of Home Assistant before starting
+Install a file editor if you don't have one already installed - either File Editor or Studio Code Server, it doesn't matter
+Shutdown your existing AppDaemon or AppDaemon-predbat add-on:
+Briefly start the new Predbat add-on so that it creates the addon_config folder and the template apps.yaml
file:
Open your file editor and open your existing apps.yaml
file:
If you are using the old 'combined AppDaemon/Predbat add-on installation method' it's in the directory /addon_configs/46f69597_appdaemon-predbat/apps
,
+or
with the HACS, Appdaemon add-on then Predbat installation method, it's in /config/appdaemon/apps/batpred/config/
Select all the contents of the apps.yaml file and 'copy' (control-C, command-C, etc as appropriate)
+Now open the template apps.yaml
file that's supplied with the Predbat add-on and has been created in the directory /addon_configs/6adb4f0d_predbat
,
+select all the contents of the template apps.yaml file, and paste in the contents of your existing apps.yaml, overwriting the template with your specific configuration
Now you are ready to swap from running the AppDaemon or AppDaemon-predbat add-on to the Predbat add-on:
+If you are using the Predbat automatic monitor then you will need to enable the predbat_running binary sensor and change the automation, +replacing the AppDaemon add-on id (a0d7b954_appdaemon) with 'a06adb4f0d_predbat', and 'binary_sensor.appdaemon_running' with 'binary_sensor.predbat_running'.
+And that's it.
+You should check the Log tab to ensure it all starts properly, but it should do as you've copied over your existing configuration.
+Note that if you are using the Predbat direct connection to Solcast then the Predbat add-on will need to download your solar forecast +so will use up one or two of your daily API calls (hobbyist accounts have a 10 API a day limit). +If you are using the Solcast integration then this won't be required.
+You may find that the Predbat add-on installed with an older version of Predbat than you were previously using, +which might require you to update Predbat to the correct version.
+It's strongly recommended that you implement an automatic mechanism to backup your Home Assistant and Predbat system.
+There are several ways of backing up Home Assistant but one of the simplest is the Home Assistant Google Drive Backup +which is an add-on that runs every night, automatically makes a backup of Home Assistant (including Predbat), and copies that backup to a Google Drive for safe keeping.
+If you create a new Google account specifically for your Home Assistant backups you will automatically get 15Gb of free Google Drive storage, enough for a couple of weeks of backups.
+As well as the full Home Assistant backup you manually copy the contents of Predbat's apps.yaml
configuration file to somewhere safe so that if you accidentally mis-edit it,
+you can get Predbat working quickly again by copying it back again.
Please see the sections below for how to achieve each step. This is just a checklist of things:
+apps.yaml
configuration file to to match your system - apps.yaml settings/addon_configs/6adb4f0d_predbat
or /config/appdaemon/apps/predbat/config/
depending on which Predbat install method you used.Overview of the key configuration elements:
+ + +PredBat was originally written for GivEnergy inverters using the GivTCP integration but this is now being extended to other inverter models:
+Name | +Integration | +Template | +
---|---|---|
GivEnergy with GivTCP | +GivTCP | +givenergy_givtcp.yaml | +
Solis Hybrid inverters | +Solax Modbus integration | +ginlong_solis.yaml | +
Solax Gen4 inverters | +Solax Modbus integration in Modbus Power Control Mode | +solax_sx4.yaml | +
Sofar inverters | +Sofar MQTT integration | +sofar.yaml | +
Huawei inverters | +Huawei Solar | +huawei.yaml | +
SolarEdge inverters | +Solaredge Modbus Multi | +solaredge.yaml | +
Givenergy with GE Cloud | +ge_cloud | +givenergy_cloud.yaml | +
Givenergy with GE Cloud EMC | +ge_cloud | +givenergy_ems.yaml | +
SunSynk | +Sunsynk | +sunsynk.yaml | +
Fox | +Foxess | +fox.yaml | +
LuxPower | +LuxPython | +luxpower.yaml | +
Growatt with Solar Assistant | +Solar Assistant | +solar_assistant_growatt.yaml | +
Note that support for all these inverters is in various stages of development. Please expect things to fail and report them as Issues on Github.
+NB: By default the apps.yaml template for GivTCP is installed with Predbat. +If you are using a different inverter then you will need to copy the appropriate apps.yaml template from the above list and use it to replace the GivTCP apps.yaml - if +you copy but don't replace the standard template then Predbat will not function correctly.
+Its recommended that you firstly watch the Installing GivTCP and Mosquitto Add-on's video from Speak to the Geek. +Although the video covers GivTCP v2 and v3 has been recently released, the install and setup process is very similar.
+The below instructions assume you are installing GivTCP v3, with changes highlighted against GivTCP v2 as covered in the video.
+The rest of the Predbat installation instructions should now be followed, +but its worth highlighting that there are a few specific settings that should be set for certain GivEnergy equipment. +These settings are documented in the appropriate place in the documentation, but for ease of identification, are repeated here:
+NB: GivTCP and Predbat do not currently yet work together for 3 phase inverters. +This is being worked on by the author of GivTCP, e.g. see GivTCP issue: unable to charge or discharge 3 phase inverters with predbat
+To run PredBat with Solis hybrid inverters, follow the following steps:
+Name | +Description | +
---|---|
sensor.solisx_rtc |
+Real Time Clock | +
sensor.solisx_battery_power |
+Battery Power | +
apps.yaml
use ginlong_solis.yaml
from this Repo as your starting template.
+ The majority of settings should be correct but please check.
+ You will need to un-comment the template
line to enable it. Save it to the appropriate Predbat software directory.
+ Set solax_modbus_new in apps.yaml to True if you have integration version 2024.03.2 or greaterTimed Charge/Discharge
.
+ If you want to use the Reserve
functionality within PredBat you will need to select Backup/Reserve
(code 51) instead but be aware that
+ this is not fully tested. In due course these mode settings will be incorporated into the code.Use the template configuration from: solax.sx4.yaml
+Please see this ticket in Github for ongoing discussion: https://github.com/springfall2008/batpred/issues/259
+For this integration the key elements are:
+Predbat configuration - sofar.yaml template for Predbat (in templates directory). +This file should be copied to apps.yaml
+Please note that the inverter needs to be put into "Passive Mode" for the sofar2mqtt to control the inverter.
+Please see this ticket in Github for ongoing discussions: https://github.com/springfall2008/batpred/issues/395
+Discussion ticket is here: https://github.com/springfall2008/batpred/issues/684
+Discussion ticket is here: https://github.com/springfall2008/batpred/issues/181
+Power Control Options, as well as Enable Battery Control, must be enabled in the Solaredge Modbus Multi integration configuration, +and switch.solaredge_i1_advanced_power_control must be on.
+For pv_today, pv_power and load_power sensors to work you need to create this as a template within your Home Assistant configuration.yml +Please see: https://gist.github.com/Ashpork/f80fb0d3cb22356a12ed24734065061c. These sensors are not critical so you can just comment it out in apps.yaml +if you can't get it to work
+template:
+ - sensor:
+ - name: "Solar Panel Production W"
+ unique_id: solar_panel_production_w
+ unit_of_measurement: "W"
+ icon: mdi:solar-power
+ state: >
+ {% set i1_dc_power = states('sensor.solaredge_i1_dc_power') | float(0) %}
+ {% set b1_dc_power = states('sensor.solaredge_b1_dc_power') | float(0) %}
+ {% if (i1_dc_power + b1_dc_power <= 0) %}
+ 0
+ {% else %}
+ {{ (i1_dc_power + b1_dc_power) }}
+ {% endif %}
+ availability: >
+ {{ states('sensor.solaredge_i1_dc_power') | is_number and states('sensor.solaredge_b1_dc_power') | is_number }}
+
+ - name: "Solar House Consumption W"
+ unique_id: solar_house_consumption_w
+ unit_of_measurement: "W"
+ icon: mdi:home
+ state: >
+ {% set i1_ac_power = states('sensor.solaredge_i1_ac_power') | float(0) %}
+ {% set m1_ac_power = states('sensor.solaredge_m1_ac_power') | float(0) %}
+ {% if (i1_ac_power - m1_ac_power <= 0) %}
+ 0
+ {% else %}
+ {{ (i1_ac_power - m1_ac_power) }}
+ {% endif %}
+ availability: >
+ {{ states('sensor.solaredge_i1_ac_power') | is_number and states('sensor.solaredge_m1_ac_power') | is_number }}
+
+sensor:
+ - platform: integration
+ source: sensor.solar_panel_production_w
+ method: left
+ unit_prefix: k
+ name: solar_panel_production_kwh
+
+This is experimental system, please discuss on the ticket: https://github.com/springfall2008/batpred/issues/905
+Experimental
+Template is in the templates area, give it a try
+This requires the LuxPython component which integrates with your Lux Power inverter
+You need to have a Solar Assistant installation https://solar-assistant.io
+Copy the template solar_assistant_growatt.yaml from templates into your apps.yaml and edit inverter and battery settings as required (the template has growatt, yours might/will have different entity ids on Home Assistant)
+See: https://github.com/springfall2008/batpred/issues/1331
+Copy into your HA automations
+alias: Predbat Charge / Discharge Control
+description: ""
+trigger:
+ - platform: state
+ entity_id:
+ - binary_sensor.predbat_charging
+ to: "on"
+ id: predbat_charge_on
+ - platform: state
+ entity_id:
+ - binary_sensor.predbat_charging
+ to: "off"
+ id: predbat_charge_off
+ - platform: state
+ entity_id:
+ - binary_sensor.predbat_exporting
+ to: "on"
+ id: predbat_discharge_on
+ - platform: state
+ entity_id:
+ - binary_sensor.predbat_exporting
+ to: "off"
+ id: predbat_discharge_off
+condition: []
+action:
+ - choose:
+ - conditions:
+ - condition: trigger
+ id:
+ - predbat_charge_on
+ sequence:
+ - service: switch.turn_on
+ metadata: {}
+ data: {}
+ target:
+ entity_id: switch.sunsynk_grid_charge_timezone1
+ - conditions:
+ - condition: trigger
+ id:
+ - predbat_charge_off
+ sequence:
+ - service: switch.turn_off
+ target:
+ entity_id:
+ - switch.sunsynk_grid_charge_timezone1
+ data: {}
+ - conditions:
+ - condition: trigger
+ id:
+ - predbat_discharge_on
+ sequence:
+ - service: switch.turn_on
+ metadata: {}
+ data: {}
+ target:
+ entity_id: switch.sunsynk_solar_sell
+ - conditions:
+ - condition: trigger
+ id:
+ - predbat_discharge_off
+ sequence:
+ - service: switch.turn_off
+ target:
+ entity_id:
+ - switch.sunsynk_solar_sell
+ data: {}
+mode: single
+
+alias: PredBat - Copy Charge Limit
+description: Copy Battery SOC to all time slots
+trigger:
+ - platform: state
+ entity_id:
+ - number.sunsynk_set_soc_timezone1
+ to: null
+condition: []
+action:
+ - service: number.set_value
+ data_template:
+ entity_id:
+ - number.sunsynk_set_soc_timezone2
+ - number.sunsynk_set_soc_timezone3
+ - number.sunsynk_set_soc_timezone4
+ - number.sunsynk_set_soc_timezone5
+ - number.sunsynk_set_soc_timezone6
+ value: "{{ states('number.sunsynk_set_soc_timezone1')|int(20) }}"
+mode: single
+
+Copy into your template/sensor area of configuration.yaml
+template:
+ sensor:
+ xxxxx
+
+- name: "sunsynk_max_battery_charge_rate"
+ unit_of_measurement: "w"
+ state_class: measurement
+ state: >
+ {{ [8000,[states('input_number.sunsynk_battery_max_charge_current_limit')|int,states('sensor.sunsynk_battery_charge_limit_current')|int]|min
+ * states('sensor.sunsynk_battery_voltage')|float]|min }}
+
+- name: "sunsynk_max_battery_discharge_rate"
+ unit_of_measurement: "w"
+ state_class: measurement
+ state: >
+ {{ [8000,[states('input_number.sunsynk_battery_max_discharge_current_limit')|int,states('sensor.sunsynk_battery_discharge_limit_current')|int]|min
+ * states('sensor.sunsynk_battery_voltage')|float]|min }}
+
+- name: "sunsynk_charge_rate_calc"
+ unit_of_measurement: "w"
+ state_class: measurement
+ state: >
+ {{ [8000,[states('input_number.test_sunsynk_battery_max_charge_current')|int,states('sensor.sunsynk_battery_charge_limit_current')|int]|min
+ * states('sensor.sunsynk_battery_voltage')|float]|min }}
+
+- name: "sunsynk_discharge_rate_calc"
+ unit_of_measurement: "w"
+ state_class: measurement
+ state: >
+ {{ [8000,[states('input_number.test_sunsynk_battery_max_discharge_current')|int,states('sensor.sunsynk_battery_discharge_limit_current')|int]|min
+ * states('sensor.sunsynk_battery_voltage')|float]|min }}
+
+ inverter_type: MINE
+ inverter:
+ name : "My Shiny new Inverter"
+ has_rest_api: False
+ has_mqtt_api: False
+ output_charge_control: "power"
+ has_charge_enable_time: False
+ has_discharge_enable_time: False
+ has_target_soc: False
+ has_reserve_soc: False
+ charge_time_format: "S"
+ charge_time_entity_is_option: False
+ soc_units: "%"
+ num_load_entities: 1
+ has_ge_inverter_mode": False
+ time_button_press: False
+ clock_time_format: "%Y-%m-%d %H:%M:%S"
+ write_and_poll_sleep: 2
+ has_time_window: False
+ support_charge_freeze: False
+ support_discharge_freeze": False
+
+ # Services to control charging/discharging
+ charge_start_service:
+ service: select.select_option
+ entity_id: "select.solaredge_i1_storage_command_mode"
+ option: "Charge from Solar Power and Grid"
+ charge_stop_service:
+ service: select.select_option
+ entity_id: "select.solaredge_i1_storage_command_mode"
+ option: "Charge from Solar Power"
+ discharge_start_service:
+ service: select.select_option
+ entity_id: "select.solaredge_i1_storage_command_mode"
+ option: "Maximize Self Consumption"
+
+
+The follow options are supported per inverter:
+When True the REST API will be used to fetch data/control the inverter. This is currently only for GivEnergy inverters with GivTCP and givtcp_rest must be set in apps.yaml
+When True the MQTT API to Home Assistant will be used to issue control messages for the inverter
+The mqtt/publish service is used with the topic as defined by mqtt_topic in apps.yaml
+Messages will be sent these controls:
+Values that are updated:
+These three change between battery charge/discharge and auto (idle) mode:
+When True a Home Assistant service will be used to issue control messages for the inverter
+For each service you wish to use it must be defined in apps.yaml.
+There are two ways to define a service, the basic mode:
+charge_start_service: my_service_name_charge
+
+Will call my_service_name_charge for the charge start service.
+Or the custom method:
+charge_start_service:
+ - service: my_charge_start_service
+ device_id: {device_id}
+ power: {power}
+ soc: {target_soc}
+
+Here you can define all the values passed to the service and use the default values from the template or define your own.
+You can also call more than one service e.g:
+charge_start_service:
+ - service: my_charge_start_service
+ device_id: {device_id}
+ power: {power}
+ soc: {target_soc}
+ - service: switch.turn_off
+ entity_id: switch.tsunami_charger
+
+Called to start a charge
+The default options passed in are:
+If defined will be called for freeze charge, otherwise charge_start_service is used for freeze charge also.
+Called to start a discharge
+The default options passed in are:
+If defined will be called for Discharge freeze, otherwise discharge_start_service is used for freeze discharge also.
+Called to stop a charge
+device_id - as defined in apps.yaml by device_id
+Called to stop a discharge, if not set then charge_stop_service will be used instead
+Set to power, current or none
+When power the inverter has a charge_rate and discharge_rate setting in watts defined in apps.yaml
+When current the inverter has timed_charge_current and timed_discharge_current setting in amps defined in apps.yaml
+When True the inverter timed_charge_current or timed_discharge_current is used to control charging or discharging as/when it starts and stops rather than using a timed method.
+Sets the number of decimal places when setting the current in Amps, should be 0 or 1
+When True the inverter has a setting defined in apps.yaml called scheduled_charge_enable when can be used to enable/disable timed charging.
+When True the inverter has a setting defined in apps.yaml called scheduled_discharge_enable when can be used to enable/disable timed discharging.
+When True the inverter has a target soc setting in apps.yaml called charge_limit, when False charging must be turned on and off by Predbat rather +than the inverter doing it based on the target %
+When True the inverter has a reserve soc setting in apps.yaml called reserve
+When True the inverter has a setting in apps.yaml called pause_mode and settings pause_start_time and pause_end_time which can be used to pause the inverter from +charging and discharging the battery - this is for GivEnergy systems only right now.
+When set to "HH:MM:SS" the inverter has:
+charge_start_time charge_end_time +discharge_start_time discharge_end_time
+Which are option selectors in the format HH:MM:SS (e.g. 12:23:00) where seconds are always 00.
+When set to "H M" the inverter has:
+charge_start_hour charge_end_hour charge_start_minute charge_end_minute +discharge_start_hour discharge_end_hour discharge_start_minute discharge_end_minute
+Settings in apps.yaml which can be used to set the start and end times of charges and discharges
+When True charge_start_time charge_end_time discharge_start_time and discharge_end_time are all Options, when false they are number values.
+Defines the time format of the inverter clock setting inverter_time in apps.yaml
+Defines the units of the SOC setting (currently not used)
+When true the inverter has a button press which is needed to update the inverter registers from the Home Assistant values.
+The apps.yaml setting charge_discharge_update_button is the entity name of the button that must be pressed and polled until it updates after each inverter register change.
+When True the inverter supports charge freeze modes
+When True the inverter supports discharge freeze modes
+When True the inverter as the GivEnergy inverter modes (ECO, Timed Export etc).
+Sets the number of load_power_n settings in apps.yaml are present in addition to load_power (the default)
+Sets the number of seconds between polls of inverter settings
+When True the inverter has an idle time register which must be set to the start and end times for ECO mode (GivEnergy EMC)
+When True start and end times for charge and discharge can span midnight e.g. 23:00:00 - 01:00:00 is a 2 hour slot.
+When True when charging discharge rate must be 0 and visa-versa. When false the rate does not have to change.
+ +CAUTION This is an expert feature only, you can break Predbat if you set the wrong things here.
+While for most people Predbat will do what you want without any adjustments there are some special cases where users wish to write some more complex +automations which override Predbat settings
+For settings inside Home Assistant e.g. switch.predbat_, select.predbat_ and input_number.predbat_* you can already use an automation to change these values
+For settings in apps.yaml its very difficult or impossible to update them via an automation.
+For this reasons there is a selector called select.predbat_manual_api which works a bit like the manual override ones but this can have new values added using the select API in Home Assistant. +The only function the selector itself serves is to store override commands, you can clear from the selector but you have to set them using a service call.
+Certain settings from apps.yaml maybe overridden using this method.
+Each override is in a string format and works a bit like a web URL, setting the command and the values.
+The data for overrides is kept inside the Home Assistant selector itself and so will survive a reboot. There is likely a limit to the size of this data so be sure to remove +old overrides when you are done with them. Keep in mind its easy to lose all of the overrides with the 'off' option so do not keep important data here only use it for short term +automations.
+The supported formats are:
+off
+<command>=<value>
+<command>(index)=<value>
+<command>?<name>=<value>
+<command>(index)?<name>=<value>
+<command>?<name>=<value>&<name2>=<value2>
+<command>(index)?<name>=<value>&<name2>=<value2>
+
+Commands are disabled again by putting them in square brackets e.g:
+[<command>?<name>=<value>&<name2>=<value2>]
+````
+
+Below is an example of setting a rate override, you can clear all overrides by calling 'off' or this specific one only by calling the same thing again but in square brackets []
+
+For the rates you can use **rates_export_override** or **rates_import_override** with all the same options as apps.yaml but in a URL type format
+
+```text
+rates_export_override?start=17:00:00&end=19:00:00&rate=0
+
+If you override a single value item in a list with something like:
+inverter_limit(0)=4000
+
+To disable this override again:
+[inverter_limit(0)=4000]
+
+If you omit the index then all entries in the list will be overridden.
+To disable all overrides
+off
+
+The following settings can be overridden with this method:
+Each time Predbat runs it outputs a lot of information about the current performance of your solar/battery system and the predicted load, PV, cost, CO2, car charging, etc.
+This section of the documentation explains the different output and logging data that Predbat produces and gives an overview of how to display that information within Home Assistant. +There can never be a single Predbat dashboard that suits every user, so instead Predbat gives a starter-set of displays that can be adapted to your individual needs.
+NOTE: The Predbat web interface will not work with the AppDaemon or the Predbat-appdaemon installation methods.
+Predbat has a Web interface active can be opened via the Predbat Add on by clicking on 'Web UI'. The web interface can be added to your sidebar by turning on the 'Show in Sidebar' toggle.
+If you are not using the Predbat Add on then you may be able to access the Web Interface directly on port 5052 (e.g. with a Docker Container or Native on your Linux/MAC).
+The Web interface can allow you to view the current plan, adjust the configuration, view the charts, check your apps.yaml and view the logfiles. You can change your view using +the top menu bar.
+ +Each Predbat configuration item is named input_number.predbat_xxx, switch.predbat_yyy or select.predbat_zzz depending on the control type.
+Each time Predbat runs it auto-generates a dashboard with the filename predbat_dashboard.yaml that can be used as a starter for your own Predbat dashboard. +Depending on how you installed Predbat this predbat_dashboard.yaml file will be held in one of three different directories in Home Assistant:
+if you have used the Predbat add-on installation method, it will be in the directory /addon_configs/6adb4f0d_predbat/
,
if the combined AppDaemon/Predbat add-on installation method was used, it's in /addon_configs/46f69597_appdaemon-predbat/
,
+or
with the HACS, Appdaemon add-on then Predbat installation method, it's /config/appdaemon/apps/batpred/config/
.
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 open +the predbat_dashboard.yaml file - see editing configuration files within Home Assistant if you need to install an editor.
+Once opened, select and copy all the contents of the predbat_dashboard.yaml file and add the contents into a new dashboard page:
+Go to System/Dashboards, click 'Open' against an existing dashboard or 'Add Dashboard'/'New dashboard from scratch'/enter a name/click Create, then click 'Open'
+Click the pencil icon in the top right corner, click the blue 'Add card', scroll down the list of cards to the bottom and click 'Manual', +delete the template card configuration and paste the contents of the predbat_dashboard.yaml file copied earlier, then 'Save'.
+This will give you a simple Predbat control and output dashboard that you can then resequence and customise as you wish.
+ +You can also create a dashboard page that's dynamically generated to automatically include all the Predbat control and output entities, +so when new entities are added in future Predbat releases, you don't have to edit the dashboard.
+Firstly you need to install HACS if it isn't already installed, and then install two HACS front end components:
+Installation steps:
+https://github.com/RossMcMillan92/lovelace-collapsable-cards
, choose Category of 'Lovelace', and click AddNow create the dynamic dashboard:
+type: vertical-stack
+title: Predbat 🦇
+cards:
+ - type: entities
+ entities:
+ - entity: predbat.status
+ - type: weblink
+ name: Predbat Web Console
+ url: /hassio/ingress/6adb4f0d_predbat
+ - entity: update.predbat_version
+ - entity: select.predbat_update
+ - entity: select.predbat_mode
+ - entity: select.predbat_saverestore
+ - entity: switch.predbat_active
+ - type: custom:collapsable-cards
+ title: 🔀 Control
+ defaultOpen: false
+ cards:
+ - type: custom:collapsable-cards
+ title: 🔢 Input Variables
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: input_number.predbat*
+ exclude: []
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: 🔀 Switches
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: switch.predbat*
+ exclude: []
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: 🔢 Selectors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: select.predbat*
+ exclude: []
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: '#️⃣ Sensors'
+ defaultOpen: false
+ cards:
+ - type: custom:collapsable-cards
+ title: 💷 Cost Sensors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: predbat.*cost*
+ - entity_id: predbat.*rate*
+ - entity_id: predbat.*metric*
+ exclude:
+ - entity_id: predbat.*start*
+ - entity_id: predbat.*end*
+ - entity_id: predbat.*duration*
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: 💷 Saving Sensors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: predbat.*saving*
+ exclude:
+ - entity_id: predbat.*start*
+ - entity_id: predbat.*end*
+ - entity_id: predbat.*duration*
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: 🕛 Time/Duration Sensors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: predbat.*start*
+ - entity_id: predbat.*end*
+ - entity_id: predbat.*duration*
+ - entity_id: predbat.*record*
+ exclude: []
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: ⚡ Power Sensors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: predbat.*soc*
+ - entity_id: predbat.*energy*
+ - entity_id: predbat.*load*
+ - entity_id: predbat.*battery*
+ - entity_id: predbat.*kw*
+ - entity_id: predbat.*power*
+ - entity_id: predbat.*charge*
+ - entity_id: predbat.*iboost*
+ - entity_id: predbat.*grid*
+ - entity_id: sensor.predbat_pv*
+ exclude:
+ - entity_id: predbat.*savings*
+ - entity_id: predbat.*start*
+ - entity_id: predbat.*end*
+ - entity_id: predbat.*duration*
+ - entity_id: predbat.*record*
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+ - type: custom:collapsable-cards
+ title: 1️⃣ Binary Sensors
+ defaultOpen: false
+ cards:
+ - type: custom:auto-entities
+ card:
+ type: entities
+ filter:
+ include:
+ - entity_id: binary_sensor.predbat*
+ exclude: []
+ unique: true
+ sort:
+ method: friendly_name
+ numeric: false
+
+This will give you a compact dynamically created list of all Predbat entities which groups the entities by type and is collapsed by default to prevent screen clutter.
+ +Credit @DJBenson for the code.
+Its recommended to Create the Predbat Plan card as an easy way to see the plan that Predbat has created.
+If you are using the Predbat add-on then the predbat plan can also be viewed via the 'Plan' tab of the Predbat web console.
+A set of Apex Charts can also be created to see graphically what Predbat plans to do - Creating the charts.
+switch.predbat_active - Automatically set by Predbat to On when Predbat is busy calculating or controlling your inverter, +or Off when Predbat is waiting for the next time it needs to perform a plan calculation update. +If you toggle this switch in Home Assistant it will force Predbat to perform an update now (useful for automations).
+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.
+predbat.status additionally has the following attributes that are automatically populated:
+Predbat outputs the following sensors to predict what your battery is expected to do over the forecast_hours duration of the plan with no changes made by Predbat. +This is considered to be the 'baseline' plan:
+NB: All of Predbat's forecasts are from midnight today to the forecast_hours duration (set in apps.yaml) into the future and shouldn't be confused with 'today' figures.
+e.g. predbat.pv_energy is the actual PV energy from midnight today, and for the predicted forecast_hours (typically 48) ahead +so will be much larger than sensor.solcast_pv_forecast_today which is today's Solcast PV forecast.
+Predbat outputs the following baseline results under the PV 10% scenario for the forecast_hours duration of the plan, these are known as the 'base10' predictions:
+Predbat outputs the following 'best' entities from the forecast (for the forecast_hours duration) based on the lowest cost consumption plan. +The 'best' plan in Predbat parlance is simply Predbat's lowest cost predicted plan:
+Predbat outputs the following best results under the PV 10% scenario for the forecast_hours duration, these are known as the 'best10' prediction:
+The following sensors are used in the in-day adjustment chart - see creating the Predbat charts and in day load adjustment:
+The following sensors output by Predbat give the 'today' energy readings. +They mirror input sensors fed into Predbat in apps.yaml and are used in the data prediction chart - see creating the Predbat charts:
+The following sensors are set based upon what Predbat is currently controlling the battery to do:
+These are useful for automations if for example you want to turn off car charging when the battery is being exported.
+The following sensors output by Predbat give historic and predicted carbon data. +They are used in the carbon chart - see creating the Predbat charts:
+predbat.carbon - Predicted Carbon energy in g at the end of the plan with attributes giving the breakdown of predicted Carbon impact by half hour time slots +predbat.carbon_best - Predicted Carbon intensity in g for your home under the best plan based on grid imports, grid exports and the grid's projected carbon intensity +predbat.carbon_now - A sensor that gives the current Grid Carbon intensity in g/kWh +predbat.carbon_today - A sensor that tracks your home's Carbon impact today in g based on your grid import minus your grid export
+The following sensors output by Predbat give cost saving data that Predbat achieved, i.e. the financial benefits of using Predbat. +They are used in the daily cost saving and total cost savings charts - see creating the Predbat charts:
+The following sensors give the forecast Solar data from Solcast. +Predbat populates these sensors irrespective of whether you are using the Predbat direct Solcast or Solcast integration method to get your Solar forecast, +but if you are using the Solcast integration then the Predbat sensors mirror the similarly named Solcast integration sensors so could be disabled if you so wish.
+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!
+If you are using the Predbat add-on then the logfile can easily be viewed via the 'Log' tab of the Predbat web console.
+To directly view the physical logfile, it can be found in one of three different directories in Home Assistant with slightly different filenames depending on how you installed Predbat:
+if you have used the Predbat add-on installation method, the logfile will be /addon_configs/6adb4f0d_predbat/predbat.log
,
if the HACS, Appdaemon add-on then Predbat installation method, it's /homeassistant/appdaemon/appdaemon.log
, or
if the combined AppDaemon/Predbat add-on installation method was used, it's /addon_configs/46f69597_appdaemon-predbat/predbat.log
.
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 if you are not using the Predbat add-on. +See editing configuration files within Home Assistant if you need to install an editor.
+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 running the Home Assistant Companion app.
+To create a new automation:
+This automation will raise an alert if any of the following occur:
+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 by duplicating the triggers and adding appropriate battery and inverter id's.
+alias: GivTCP activity monitor
+description: Alert when communications to GivTCP have ceased for 15 minutes
+triggers:
+ - trigger: state
+ entity_id: sensor.givtcp_<inverter id>_last_updated_time
+ to: "null"
+ for:
+ minutes: 15
+ variables:
+ alert_text: No GivTCP update received from inverter <id>
+ restart_app: GivTCP
+ - trigger: state
+ entity_id:
+ - sensor.givtcp_<inverter id>_status
+ from: online
+ for:
+ minutes: 15
+ variables:
+ alert_text: No GivTCP update received from inverter <id>
+ restart_app: GivTCP
+ - trigger: numeric_state
+ entity_id:
+ - sensor.givtcp_<inverter id>_invertor_temperature
+ for:
+ minutes: 15
+ below: 10
+ variables:
+ alert_text: No GivTCP update received from inverter <id>
+ restart_app: GivTCP
+ - trigger: state
+ entity_id:
+ - sensor.givtcp_<battery id>_battery_cells
+ to: unknown
+ for:
+ minutes: 15
+ variables:
+ alert_text: Battery <battery_id> is offline to GivTCP
+ restart_app: GivTCP
+ - trigger: state
+ entity_id:
+ - binary_sensor.givtcp_running
+ to: "off"
+ for:
+ minutes: 15
+ variables:
+ alert_text: GivTCP add-on is not running
+ restart_app: GivTCP
+ - trigger: state
+ entity_id:
+ - binary_sensor.mosquitto_broker_running
+ to: "off"
+ for:
+ minutes: 15
+ variables:
+ alert_text: Mosquitto Broker add-on is not running
+ restart_app: Mosquitto
+actions:
+ - action: notify.mobile_app_<your mobile device id>
+ alias: Send a notification
+ data:
+ title: GivTCP communication issue
+ message: |
+ {{now().strftime('%-d %b %H:%M')}} ISSUE:
+ {{ alert_text }} for the past 15 minutes, restarting
+ {{ restart_app }}
+ data:
+ visibility: public
+ persistent: true
+ push:
+ sound:
+ name: default
+ critical: 1
+ volume: 0.8
+ sticky: true
+ color: red
+ - choose:
+ - conditions:
+ - condition: template
+ value_template: "{{ restart_app == 'GivTCP' }}"
+ sequence:
+ - alias: Restart GivTCP add-on
+ action: hassio.addon_restart
+ data:
+ addon: 533ea71a_givtcp
+ - conditions:
+ - condition: template
+ value_template: "{{ restart_app == 'Mosquitto' }}"
+ sequence:
+ - alias: Restart Mosquitto add-on
+ action: hassio.addon_restart
+ data:
+ addon: core_mosquitto
+trace:
+ stored_traces: 20
+mode: single
+
+The last two triggers (GivTCP and Mosquitto running) trigger if any of these add-ons that Predbat is dependent upon are not running. +You will need to enable a binary sensor for each add-on to be able to use these triggers in the automation:
+Repeat these steps for the 'Mosquitto' add-on.
+As an extension to the above, if you don't want the automation to restart the failing add-on and instead just send an alert that there is a problem, delete the 'choose' code above. +Restarting GivTCP does however lose the current GivTCP log in Home Assistant.
+NB: If you are using GivTCP v2 rather than v3, replace the '533ea71a_givtcp' with 'a6a2857d_givtcp'.
+This automation will raise an alert if Predbat's status turns to Error for more than 5 minutes.
+In normal operation Predbat will automatically run and update its forecast every 5 minutes. If the automation detects that Predbat has not done this for 20 minutes, +then an alert will be raised and the automation will restart the Predbat add-on to try to resolve a 'hung Predbat' issue.
+In the same way for the GivTCP and Mosquitto add-on's above, the last trigger requires you to enable a binary sensor that detects that the Predbat/AppDaemon add-on is running. +Follow the same steps to enable the binary sensor for either the 'Predbat', 'AppDaemon' or 'AppDaemon-predbat' add-on depending on which Predbat installation method you followed.
+The script will need to be customised for your mobile details.
+alias: Predbat error monitor
+description: Alert when Predbat has raised an exception
+trace:
+ stored_traces: 20
+triggers:
+ - trigger: template
+ alias: Predbat status contains 'Error' for 5 minutes
+ value_template: "{{ 'Error' in states('predbat.status') }}"
+ for:
+ minutes: 5
+ variables:
+ alert_text: >-
+ predbat status is {{ states('predbat.status') }}, error={{
+ state_attr('predbat.status', 'error') }}
+ - trigger: state
+ alias: Predbat is in error status for 5 minutes
+ entity_id: predbat.status
+ attribute: error
+ to: "true"
+ for:
+ minutes: 5
+ variables:
+ alert_text: >-
+ predbat status is {{ states('predbat.status') }}, error={{
+ state_attr('predbat.status', 'error') }}
+ - trigger: state
+ alias: Predbat status.last_updated has not changed for 20 minutes
+ entity_id: predbat.status
+ attribute: last_updated
+ for:
+ minutes: 20
+ variables:
+ alert_text: >-
+ Predbat stalled? Restarting. last_updated=' {{
+ state_attr('predbat.status','last_updated')|as_timestamp|timestamp_custom('%a
+ %H:%M') }}', unchanged for 20 mins; Status='{{ states('predbat.status')
+ }}'
+ restart_predbat: "Y"
+ - trigger: state
+ entity_id: binary_sensor.predbat_running
+ to: "off"
+ for:
+ minutes: 15
+ variables:
+ alert_text: Predbat add-on is not running
+ restart_predbat: "Y"
+actions:
+ - action: notify.mobile_app_<your mobile device id>
+ alias: Send alert message
+ data:
+ title: Predbat status issue
+ message: |
+ {{now().strftime('%-d %b %H:%M')}} ISSUE:
+ {{ alert_text }}
+ data:
+ visibility: public
+ persistent: true
+ push:
+ sound:
+ name: default
+ critical: 1
+ volume: 0.8
+ sticky: true
+ color: red
+ - if:
+ - condition: template
+ value_template: "{{ restart_predbat == 'Y' }}"
+ then:
+ - action: hassio.addon_restart
+ data:
+ addon: 6adb4f0d_predbat
+ alias: Restart Predbat add-on
+mode: single
+
+NB: If you are using AppDaemon rather than the Predbat add-on, replace '6adb4f0d_predbat' with 'a0d7b954_appdaemon' and change 'binary_sensor.predbat_running' to 'binary_sensor.appdaemon_running'.
+An error alert looks like this:
+ + +Predbat can create its own plan card which can be added to your Home Assistant dashboard.
+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.
+Firstly install the HTML template card in HACS:
+NB: Do not install the very similarly named 'Lovelace Html card', it won't work! You must install 'HTML Jinja2 Template card'.
+Next, on a Home Assistant dashboard, click the blue 'Add card', scroll down the list of cards to the bottom and click 'Manual', +delete the template card configuration and copy/paste the following to display the Predbat plan:
+type: custom:html-template-card
+title: Predbat plan
+ignore_line_breaks: true
+content: |
+ {{ state_attr('predbat.plan_html', 'html') }}
+
+You should see something like this:
+ +If you get an error 'Custom element doesn't exist: html-template-card' then you've not installed the Jinja2 template card correctly from HACS.
+For every half hour period (slot) that Predbat has planned for (the forecast_hours setting in apps.yaml
), the Predbat plan shows:
Rate symbols (import and export):
+Battery SoC symbols:
+Cost symbols:
+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 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.
+If battery charging is planned by Predbat for a particular slot, the import rate for that slot will be highlighted in bold text.
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.
+If battery discharging is planned by Predbat for a particular slot, the export rate for that slot will be highlighted in bold text.
State - Predbat's status controls whether the battery is charging, discharging to support house load (Demand 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).
+If Predbat's plan has been over-ridden and the slot has been manually controlled 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, Dark Grey for Freeze Discharging, 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_export_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 Exporting 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 'Exp↘ 4%' is force exporting the battery to the 4% reserve level.
+PV kWh - The predicted solar forecast for the half hour slot, estimated from the Solcast Forecast.
+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
+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 solar diverter immersion heating such as iBoost or MyEnergi Eddi.
+This column will only be shown if switch.predbat_iboost_enable is set to True.
+If the solar diverter 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, 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, 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.
CO2 (g/kWh) - The estimated CO2 Carbon intensity emitted by the grid when generating electricity at the start of the 30 minute slot.
+This column will only be shown if switch.predbat_carbon_enable is set to True.
+The CO2 value will be coloured according to how high the carbon footprint intensity is: greater or equal to 450g/kWh it will be deep red; greater or equal to 290, dark red;
+then golden orange from 200 upwards; yellow from 120; green from 40 and light green if less than 40.
CO2 (kg) - The estimated CO2 Carbon footprint that the grid will emit generating electricity at the start of the slot and the direction of travel over the slot.
+This column will only be shown if switch.predbat_carbon_enable is set to True.
+The carbon amount in kg will be coloured according to the direction of travel over the slot; if the carbon value is rising by 10kg or more it will be orange with an upwards arrow;
+if falling by 10kg or more it will green with a downwards arrow, and in the middle, white with a horizontal arrow.
If Predbat expert mode is turned on then a number of additional controls and switches are made available in Home Assistant.
+If switch.predbat_plan_debug is then turned on then the Predbat plan shows additional 'debugging' information for the import rate, export rate, load and PV columns.
+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) and also in brackets the effective import or export rate.
+The effective rate takes into account battery and inverter energy losses 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:
+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 exported 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 exports the battery in the same slot to generate that profit.
+With debug mode turned on, the Load column shows the predicted load in kWh for the half hour slot and in brackets the modelled load variance value using the load variance model.
+The PV column in debug mode changes shows the predicted PV generation in kWh for the half hour slot and the Solcast 10% forecast in brackets. +Note that Predbat's forecasted PV generation already contains a input_number.predbat_pv_metric10_weight weighted value of the Solcast 10% forecast.
+Note that the values in brackets in the load and PV columns are each only shown if they are non-zero.
+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 force export the battery. +There's a further explanation of the Predbat forecast and plan in the FAQ's.
+An additional independent front-end Home Assistant component the 'Predbat Table Card' is available on HACS that gives a number of additional customisation and configuration options +to tailor how the Predbat plan looks:
+See the Predbat Table Card repository for more details.
+ +Predheat attempts to model water based central heating systems based on a boiler or a heat pump.
+The app runs every 5 minutes and it will automatically update its prediction for the heating system for the next period, up to a maximum of 48 hours.
+The inputs are as follows
+The outputs are:
+Future versions will also offer Predbat to run in master mode, controlling your homes heating in the same way as a smart thermostat (e.g. Nest)
+Predheat is now part of Predbat, first you will need to configure it using apps.yaml and then enable it by turning on switch.predbat_predheat_enable
+See: https://www.home-assistant.io/integrations/openweathermap
+First create an OpenWeather account and then register for a "One Call by Call" subscription plan. This does need a credit/debit card but won't cost anything. +You get 1000 API calls a day for free, so edit your limit in the account to 1000 to avoid ever being charged.
+Then add in the Home Assistant service and connect up your API key to obtain hourly weather data. Use the v3.0 API and ensure you have a 2024 version of Home Assistant.
+Use HACS to install Apex Charts (Lovelace frontend add-on) - https://github.com/RomRider/apexcharts-card
+There is a template for the Predheat charts in: https://raw.githubusercontent.com/springfall2008/batpred/refs/heads/main/templates/example_chart_predbat.yaml_template
+Create a new Apex chart for each chart in this template and copy the YAML code into the chart.
+First you need to edit apps.yaml to configure your system.
+Copy the following template into The Predbat apps.yaml and edit the settings: predheat.yaml
+Set the mode (mode) to 'gas' or 'pump' depending on if you have a gas boiler or heat pump +Set the external temperature sensor (external_temperature) either to a real sensor or create one from the open weather map by adding this sensor to your configuration.yaml file for HA:
+template:
+ - sensor:
+ - name: "external_temperature"
+ unit_of_measurement: 'c'
+ state_class: measurement
+ state: >
+ {{ state_attr('weather.openweathermap', 'temperature') }}
+
+Set internal_temperature to point to one or more internal temperature sensors, if you have a heating thermostat then ideally link it to this or to a sensor at least in a similar area of the house.
+The weather configuration points to the Open Weather Map sensor by default so should work as-is.
+Set the target_temperature to point to a sensor that indicates what your boiler thermostat is set to, or manually enter the temperature setting here.
+Set smart_thermostat to True if your thermostat starts the boiler ahead of time for the new target temperature or False for regular options.
+Set heating_energy To point to a sensor that indicates the energy consumed by your boiler/heat-pump in kWh. If the sensor isn't accurate then using heating_energy_scaling to adjust it to the actually energy consumed. +You can also comment this line out if you don't have a sensor, but no historical cost information will be produced.
+Now you need to make a list of all your radiators in the house, measure them and look up their BTU output at Delta 50 and their volume in Litres. The links below maybe useful for various standard radiators:
+Add up all the BTUs and divide by 3.41 to gain the heat output in Watts and set that in heat_output configuration option. +Add up all the litres of water, add in some extra for the piping and an expansion vessel if present (e.g. 5-10 litres) and set heat_volume accordingly.
+Set the heat_max_power and heat_min_power to the minimum and maximum power output of your boiler/heat-pump in watts. This should be specified as the maximum output power +and not the maximum input energy. E.g. a heat pump with a COP of 4 might output 7kW but could only consume 1.7kW.
+Set heating_cop to the nominal COP of your system. For a gas boiler use 1.0 (as the efficiency will be based on flow temperature) or for a heat pump set it to the best value which is likely around 4.0 (it will be scaled down for cold weather).
+Set flow_temp To the target flow temperature of your system, either via a sensor or as a fixed value. E.g. gas boilers are often set to say 60 or 70 degrees while heat pumps are much lower e.g. 30 or 40.
+Set flow_difference_target to be the difference in flow temperature (in vs out) where your heating system will run at full power if it is above. e.g. for gas boilers this maybe something around 40 while on a heat pump it could be much lower e.g. 10.
+Set volume_temp If you have a sensor on your radiators which can confirm the water temperature, this must not be near the heat pump/boiler but instead as close to the +interior temperature sensor as possible. If you do not have a sensor then instead PredHeat will calculate the next temperature and store it in next_volume_temp for use +in the next calculation cycle.
+For energy rates, they will come from the Predbat configuration, ensure you have your electric or gas rates set correctly.
+Note you can also change the tables for gas_efficiency, heat_pump_efficiency and delta_correction in the Predheat configuration but the defaults should be fine to get going.
+Now comes the tricky part, we need to calculate the heat loss for your house:
+What will help here is historical temperature data, find a time period in the last few weeks when your heating was turned off (for a few hours beforehand) and the house is cooling down. +Measure the number of degrees the house drops by in a given time period. Divide that figure (e.g. 1.5 degrees) by the time period e.g. (3 hours) and then again divide it by the +average difference between the inside and outside temperature +(e.g. 19 degrees inside, 9 degrees outside, so a temperature difference of 4 degrees) = 1.5 degrees / 3 hours / 10 degrees difference = 0.05. Set that figure to heat_loss_degrees. +It maybe best to compute this when it's cold out and if you have your heating turned off overnight.
+Note in future versions of Predheat I might make this calculation automatic.
+Next we need to work out the number of watts of heat loss in the house, this can be done by looking at the energy consumed when the heating comes on. Pick a period of heating, +ideally from the time the temperature starts increasing for a complete hour of increase, looking at the increase in temperature in degrees, +add to that static heat loss which is heat_loss_degrees (internal temp - external temp) 1 hours to get the total degrees accounted for. +Now divide that by the external temperature difference again / (internal_temp - external_temp) and multiply the final figure by the energy your system consumed in Watts +during that period (can be found either from your sensor or just by looking at your energy bill for the same 1 hour period).
+The final figure should be the number of watts your house loses per 1 degree of external temperature difference and be set to heat_loss_watts
+Then you can set heat_gain_static to be the static heat output of other things in your house eg. computers and people. You can figure this out by looking at how many degrees of +temperature difference your house can maintain without any heating and multiply up your heat loss watts figure by this.
+If your heat source makes use of weather compensation then add the following to the configuration to map out your heat curve. The example has a flow temp of 45C at -3C outside and 25C at 15C outside:
+yaml weather_compensation:
+ -20: 45.0
+ -3: 45.0
+ 15: 25.0
+ 20: 25.0
Predheat will fill in the gaps between the points provided.
+ +' + escapeHtml(summary) +'
' + noResultsText + '
'); + } +} + +function doSearch () { + var query = document.getElementById('mkdocs-search-query').value; + if (query.length > min_search_length) { + if (!window.Worker) { + displayResults(search(query)); + } else { + searchWorker.postMessage({query: query}); + } + } else { + // Clear results for short queries + displayResults([]); + } +} + +function initSearch () { + var search_input = document.getElementById('mkdocs-search-query'); + if (search_input) { + search_input.addEventListener("keyup", doSearch); + } + var term = getSearchTermFromLocation(); + if (term) { + search_input.value = term; + doSearch(); + } +} + +function onWorkerMessage (e) { + if (e.data.allowSearch) { + initSearch(); + } else if (e.data.results) { + var results = e.data.results; + displayResults(results); + } else if (e.data.config) { + min_search_length = e.data.config.min_search_length-1; + } +} + +if (!window.Worker) { + console.log('Web Worker API not supported'); + // load index in main thread + $.getScript(joinUrl(base_url, "search/worker.js")).done(function () { + console.log('Loaded worker'); + init(); + window.postMessage = function (msg) { + onWorkerMessage({data: msg}); + }; + }).fail(function (jqxhr, settings, exception) { + console.error('Could not load worker.js'); + }); +} else { + // Wrap search in a web worker + var searchWorker = new Worker(joinUrl(base_url, "search/worker.js")); + searchWorker.postMessage({init: true}); + searchWorker.onmessage = onWorkerMessage; +} diff --git a/search/search_index.json b/search/search_index.json new file mode 100644 index 000000000..d368f0f52 --- /dev/null +++ b/search/search_index.json @@ -0,0 +1 @@ +{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Introduction Home battery prediction and automatic charging for Home Assistant supporting multiple inverters including: GivEnergy Hybrid, AC and AIO Solis Solax Sunsynk Huawei SolarEdge Fox Sofar LuxPower Solar Assistant Also known by some as Batpred or Batman! Copyright (c) Trefor Southwell April 2024 - All rights reserved This software maybe used at not cost for personal use only No warranty is given, either expressed or implied For support please raise a Github ticket or use the Facebook Group: Predbat and watch my YouTube Channel Some inverters have their own groups also e.g: GivTCP Solis If you want to buy me a beer then please use Paypal - tdlj@tdlj.net Taster Once you are up and running you will get a chart that predicts your battery levels over time: And you can also see this in a plan format predicting your overall costs and your carbon footprint (if enabled, UK only for now): You can see a cost over time for the plan that Predbat has made and also how it might turn out if your solar production (should you have solar) is lower than expected or if you use a bit more energy than planned (10% scenario): You can see your energy rates over time and where the battery is being charged: Power charts can show you how the prediction maps to your inverter: You can model iBoost or similar solar diverters, this will be shown on your plan and you can even use it to trigger smart devices e.g. an emersion heater based on energy rates. You can predict when your car will charge and use Predbat to schedule the cheapest car charging slots: Charts can track your cost saving using Predbat and from having a PV and Battery system The calibration chart is useful for tuning the model for things like inverter losses until it matches reality: Predbat can track your actual vs predicted energy usage and make real time adjustments to the predictions if you use more or less: You can tune lots of parameters to match your system and needs: You can also override the plan on a temporary basis if you have a particular reason to: Please read the documentation for more information!","title":"Introduction"},{"location":"#introduction","text":"Home battery prediction and automatic charging for Home Assistant supporting multiple inverters including: GivEnergy Hybrid, AC and AIO Solis Solax Sunsynk Huawei SolarEdge Fox Sofar LuxPower Solar Assistant Also known by some as Batpred or Batman! Copyright (c) Trefor Southwell April 2024 - All rights reserved This software maybe used at not cost for personal use only No warranty is given, either expressed or implied For support please raise a Github ticket or use the Facebook Group: Predbat and watch my YouTube Channel Some inverters have their own groups also e.g: GivTCP Solis If you want to buy me a beer then please use Paypal - tdlj@tdlj.net","title":"Introduction"},{"location":"#taster","text":"Once you are up and running you will get a chart that predicts your battery levels over time: And you can also see this in a plan format predicting your overall costs and your carbon footprint (if enabled, UK only for now): You can see a cost over time for the plan that Predbat has made and also how it might turn out if your solar production (should you have solar) is lower than expected or if you use a bit more energy than planned (10% scenario): You can see your energy rates over time and where the battery is being charged: Power charts can show you how the prediction maps to your inverter: You can model iBoost or similar solar diverters, this will be shown on your plan and you can even use it to trigger smart devices e.g. an emersion heater based on energy rates. You can predict when your car will charge and use Predbat to schedule the cheapest car charging slots: Charts can track your cost saving using Predbat and from having a PV and Battery system The calibration chart is useful for tuning the model for things like inverter losses until it matches reality: Predbat can track your actual vs predicted energy usage and make real time adjustments to the predictions if you use more or less: You can tune lots of parameters to match your system and needs: You can also override the plan on a temporary basis if you have a particular reason to: Please read the documentation for more information!","title":"Taster"},{"location":"apps-yaml/","text":"apps.yaml settings The basic Predbat configuration is defined in the apps.yaml file. Depending on how you installed Predbat the apps.yaml file will be held in one of three different directories in Home Assistant: if you have used the Predbat add-on installation method , apps.yaml will be in the directory /addon_configs/6adb4f0d_predbat , with the HACS, Appdaemon add-on then Predbat installation method , it's in /config/appdaemon/apps/batpred/config/ , or if the combined AppDaemon/Predbat add-on installation method was used, it's in /addon_configs/46f69597_appdaemon-predbat/apps . 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 edit the apps.yaml file - see editing configuration files within Home Assistant if you need to install an editor. This section of the documentation describes what the different configuration items in apps.yaml do. When you edit apps.yaml , the change will automatically be detected and Predbat will be reloaded with the updated file. You don't need to restart the Predbat or AppDaemon add-on for your edits to take effect. Warning! apps.yaml file format When editing the apps.yaml file you must ensure that the file remains correctly formatted. YAML files are especially finicky about how the file contents are indented and its very easy to end up with an incorrectly formatted file that will cause problems for Predbat. The YAML Basics from This Smart Home is a good introduction video to how YAML should be correctly structured, but as a brief introduction, YAML files consist of an entity name, colon then the entity value, for example: timezone: Europe/London Or the entity can be set to a list of values with each value being on a new line, two spaces, a dash, then the value. For example: car_charging_now_response: - 'yes' - 'on' The two spaces before the dash are especially critical. Its easy to mis-edit and have one or three spaces which isn't valid YAML. NB: the sequence of entries in apps.yaml doesn't matter, as long as the YAML itself is structured correctly you can move things and edit things anywhere in the file. Templates You can find template configurations in the following location: https://github.com/springfall2008/batpred/tree/main/templates The GivEnergy GivTCP template will be installed by default but if you are using another inverter please copy the correct template into the directory where your apps.yaml is stored, replacing the existing apps.yaml file, and modify it from there. Please read Inverter Setup for inverter control software and details of setting apps.yaml for non-GivEnergy inverters Checking your apps.yaml Syntax errors will be highlighted by the Home Assistant editor or via other YAML aware editors such as VSCode. Once you have completed your apps.yaml and started Predbat you may want to open the Predbat Web Interface and click on 'apps.yaml'. Review any items shown in a red background as those do not match (its okay for a 2nd inverter not to match if you only have one configured). Regular expressions that do not match can be ignored if you are not supporting that feature (e.g. Car SOC if you don't have a car). As an example these do not match and are shown in the web interface in red, I'm ignoring them as I only have one inverter and I'm using the Predbat internal Solcast rather than the external integration: Basics Basic configuration items prefix Set to the prefix name to be used for all entities that Predbat creates in Home Assistant. Default 'predbat'. Unlikely that you will need to change this. prefix: predbat timezone Set to your local timezone, default is Europe/London. It must be set to a valid Python time zone for your location timezone: Europe/London currency_symbols Sets your symbol to use for your main currency e.g. \u00a3 or $ and for 1/100th unit e.g. p or c currency_symbols: - '\u00a3' - 'p' template Initially set to True, this is used to stop Predbat from operating until you have finished configuring your apps.yaml. Once you have made all other required changes to apps.yaml this line should be deleted or commented out: template: True Home assistant connection Predbat can speak directly to Home Assistant rather than going via AppDaemon. If you are using a standard add-on then this will be automatic and you do not need to set this. If you run AppDaemon/Predbat in a Docker then you will need to set the URL or IP address of Home Assistant and the access key which is the long lived access token you can create inside Home Assistant. Currently if this communication is not established Predbat will fallback to AppDaemon, however some users have experienced failures due to a 10-second timeout set by AppDaemon. In future versions of Predbat, AppDaemon will be removed. ha_url: 'http://homeassistant.local:8123' ha_key: 'xxxxxxxxxxx' TIP: You can replace homeassistant.local with the IP address of your Home Assistant server if you have it set to a fixed IP address. This will remove the need for a DNS lookup of the IP address every time Predbat talks to Home Assistant and may improve reliability as a result. threads If defined sets the number of threads to use during plan calculation, the default is 'auto' which will use the same number of threads as you have CPUs in your system. Valid values are: 'auto' - Use the same number of threads as your CPU count '0' - Don't use threads - disabled 'N' - Use N threads, recommended values are between 2 and 8 threads: auto notify_devices A list of device names to notify when Predbat sends a notification. The default is just 'notify' which contacts all mobile devices notify_devices: - mobile_app_treforsiphone12_2 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 Predbat to assume the house load on a particular day is the same as the same day of last week: days_previous: - 7 Or if you want Predbat to take the average of the same day for the last two weeks: days_previous: - 7 - 14 Further details and worked examples of 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: recorder: purge_keep_days: 14 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: 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: days_previous_weight: - 1 forecast_hours the number of hours 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. forecast_hours: 48 Inverter information The template apps.yaml comes pre-configured with regular expressions that should auto-discover the GivTCP Home Assistant entity names. If you have more than one inverter or entity names are non-standard then you will need to edit apps.yaml for your inverter entities num_inverters The number of inverters you have. If you increase this above 1 you must provide multiple of each of the inverter entities num_inverters: 1 geserial Only for GE inverters, this is a helper regular expression to find your inverter serial number, if it doesn't work edit it manually or change individual entities to match. If you have more than one inverter you will need one per inverter to be used in the later configuration lines geserial: 're:sensor.givtcp_(.+)_soc_kwh' geserial2: 're:sensor.givtcp2_(.+)_soc_kwh' If you are running GivTCP v3 and have an AIO or a 3 phase inverter then the helper regular expression will not correctly work and you will need to manually set geserial in apps.yaml to your inverter serial number, e.g.: geserial: 'chNNNNgZZZ' TIP: If you have a single GivEnergy AIO, all control is directly to the AIO and the gateway is not required. Check the GivTCP configuration to determine whether inverter 1 (the givtcp sensors) is the AIO or the gateway, or inverter 2 (the givtcp2 sensors) is the AIO or gateway. Then in apps.yaml comment out the lines corresponding to the gateway, leaving just the givtcp or givtcp2 lines for the AIO. Also delete the appropriate givtcp_rest inverter control line corresponding to the gateway so that Predbat controls the AIO directly. TIP2: If you have multiple GivEnergy AIO's, all the AIO's are controlled by the AIO gateway and not controlled individually. geserial should be manually configured to be your AIO gateway serial number 'gwNNNNgZZZ' and all the geserial2 lines should be commented out in apps.yaml. You should also delete the second givtcp_rest inverter control line so that Predbat controls the AIO's via the gateway. GivTCP version 3 is required for multiple AIO's or a 3 phase inverter. Historical data Predbat can either get historical data (house load, import, export and PV generation) directly from GivTCP or it can obtain it from the GivEnergy cloud. Unless you have a specific reason to not use the GivTCP data (e.g. you've lost your GivTCP data), its recommended to use GivTCP. Data from Home Assistant The following configuration entries in apps.yaml are pre-configured to automatically use the appropriate sensors. If you have a 3-phase electricity supply and one inverter (and battery) on each phase then you will need to add one line for the load, import, export and PV sensors for each of the 3 phases. If you have a single phase electricity supply and multiple inverters on the phase then you will need to add one line for each of the load and PV sensors. You don't need multiple lines for the import or export sensors as each inverter will give the total import or export information. Edit if necessary if you have non-standard sensor names: load_today - Entity name for the house load in kWh today (must be incrementing) import_today - Imported energy today in kWh (incrementing) export_today - Exported energy today in kWh (incrementing) pv_today - PV energy today in kWh (incrementing). If you have multiple inverters, enter each inverter PV sensor on a separate line. If you have an AC-coupled inverter then enter the Home Assistant sensor for your PV inverter. If you don't have any PV panels, comment or delete this line out of apps.yaml. See the Workarounds section below for configuration settings for scaling these if required. If you have multiple inverters then you may find that the load_today figures are incorrect as the inverters share the house load between them. In this circumstance one solution is to create a Home Assistant template helper to calculate house load from {pv generation}+{battery discharge}-{battery charge}+{import}-{export}. e.g. {{ ( states('sensor.givtcp_XXX_pv_energy_today_kwh')|float(0) +All the video guides are now available on my YouTube channel: Springfall2008
+Playlist of Predbat installation videos
+Predbat installation - Predbat, Solcast, Dashboard, Charts and Plans - Add On Method
+Playlist of other Predbat configuration videos
+Playlist of Predbat feature videos
+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.
+Loss - Refers to energy lost in your system due to heat or other factors.
+PV10 - A prediction of the 10% scenario for solar, this is like a worst case, occurs 1 in 10 days
+When you first install Predbat it will be in '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 in the Customisation Guide.
+Once you are ready for Predbat to take control move this setting to one of the active control modes.
+The current Predbat status is reported in the Home Assistant entity predbat.status:
+Demand - 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 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 battery is charging but the current battery level (SoC) is is frozen (held). Think of it as a charge to the current battery level. +The grid or solar covers any house load. If there is a shortfall of Solar power to meet house load, the excess house load is met from grid import, +but if there is excess Solar power above house load, the excess solar will 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.
+Exporting - 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 exporting - The battery is in demand mode, but with charging disabled. +The battery or solar covers the house load. As charging is disabled, if there is excess solar generated, the current SoC level will be held and the excess solar will be exported. +If there is a shortfall of generated solar power to meet house load, the battery will discharge to meet the extra load.
+Hold exporting - The plan was to force export but the minimum battery level was reached and thus the battery is kept in Demand mode. +If the battery level again gets above the threshold it will be changed back to Export mode.
+Calibration - The inverter is calibrating the batteries. +On GivEnergy systems the battery state of charge (SoC) level has to be calibrated by performing a full battery discharge then a full charge +so that the voltage levels associated with empty and full SoC can be determined. +Predbat will pause executing the plan until the calibration automatically finishes - see Calibration FAQ.
+Error - There is a configuration error or other problem, you should check the Predbat log file for more details.
+