My question is: How to automate dess to grab obvious opportunities? You made your point you find it easier to operate min soc setpoints manually. But I don’t and want to figure out what can be done not having to pay attention to the system more than at maximum tweaking parameters once a week. Best moment seems to be either Friday afternoon when the Saturday data is in, or Monday evening after tibber published their weekly forecast, and maybe Friday and Monday but not during the other weekdays. Within those constraints I seek first to use a combination of parameters readily available through VRM, such as charge/discharge schedule, min soc and any other that may be suggested. After that I may consider diving into something sort of very basic scripting, be it with node red or home automation. Or alternatively invest some time testing the SaaS GbbOptimizer offer. Bottom line I simply do not want to commit my time to being a system operator, only to research and development.
Tibber announced on Monday that tonight’s storm could bring lower prices, the week before they also forecasted last weekends low price expectations.
I assume I share more nerdy/autistic character trades with quite a few boards members here than not. I just want to make another choice to protect my own agenda by deliberately not tempting myself to spend time on this system instead of on my business. Which involves battery and bms development and manufacturing by the way, closely related and simply much more important to invest my brain space on.
My set-and-forget-method is a HomeAssistant automation that sets Min SoC and Max Charge / Discharge Power based on fixed price thresholds. It’s especially tweaked towards low prices during winter nights which typically have excess wind power.
It works reasonably well so far. Here is the code, but I didn’t use entities so it’s a bit hard to read, see legend below:
alias: MP2 charge control
description: ""
triggers:
- trigger: state
entity_id:
- sensor.electricity_price_unser_zuhause
enabled: false
- trigger: time_pattern
minutes: "1"
- trigger: state
entity_id:
- sensor.mp2_batterie_soc
conditions: []
actions:
- if:
- type: is_value
condition: device
device_id: ba285cb7511f5f5570f5023cc72c1fe2
entity_id: aac1ef4f013551d6c6a51d48cb27ada8
domain: sensor
below: 0.26
then:
- if:
- type: is_battery_level
condition: device
device_id: 37f56a5afbc28ad4765741714bb4d308
entity_id: 2a32d04878f60ba24786cdf0f26e436a
domain: sensor
below: 90
then:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: c1b84c9b89f10e43235a4333ae74464e
type: set_value
value: 0
else:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: c1b84c9b89f10e43235a4333ae74464e
type: set_value
value: -1
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: 91076d9f9580d7dd1a3b67f0e7a8efba
type: set_value
value: 75
else:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: c1b84c9b89f10e43235a4333ae74464e
type: set_value
value: -1
- if:
- type: is_value
condition: device
device_id: ba285cb7511f5f5570f5023cc72c1fe2
entity_id: aac1ef4f013551d6c6a51d48cb27ada8
domain: sensor
above: 0.35
then:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: 91076d9f9580d7dd1a3b67f0e7a8efba
type: set_value
value: 10
else:
- action: number.set_value
metadata: {}
data:
value: >-
{{ [[50.0, states('sensor.mp2_batterie_soc') | float(10) ] |
min, 25.0] | max }}
target:
entity_id: number.mp2_min_soc
enabled: true
- if:
- type: is_value
condition: device
device_id: ba285cb7511f5f5570f5023cc72c1fe2
entity_id: aac1ef4f013551d6c6a51d48cb27ada8
domain: sensor
above: 0.3
- type: is_battery_level
condition: device
device_id: 37f56a5afbc28ad4765741714bb4d308
entity_id: 2a32d04878f60ba24786cdf0f26e436a
domain: sensor
above: 50
- condition: sun
before: sunrise
after: sunset
then:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: 6a5c5712a9c0f6085b2ba56b0c0720f5
type: set_value
value: 0
else:
- device_id: 37f56a5afbc28ad4765741714bb4d308
domain: number
entity_id: 6a5c5712a9c0f6085b2ba56b0c0720f5
type: set_value
value: -1
mode: single
aac1ef4f013551d6c6a51d48cb27ada8
= Tibber price
2a32d04878f60ba24786cdf0f26e436a
= Current SoC
91076d9f9580d7dd1a3b67f0e7a8efba
= Min Soc
c1b84c9b89f10e43235a4333ae74464e
= Max Discharge Power (-1 = unlimited)
6a5c5712a9c0f6085b2ba56b0c0720f5
= Max Charge Power (-1 = unlimited)