[Script] Tibber / aWATTar usw. : Victron, Sonnenbatterie, Shelly Plug S & AVM-Fritz-DECT200-210 Spotmarket-Switcher

@christian1980 Eine Frage hab ich noch ... Er schaltet mir die Steckdose wunderbar Preisabhängig an --- aber leider nicht wieder aus wenn ich einen höheren Preis eingebe... Evtl.macht er das nach 60 min. .. aber sollte in der Zeit der Rechner z.b. neu gestartet werden .. oder das skript stoppen .. dann bleibt die Steckdose eingeschaltet ...

Kann ich das evtl. einstellen das er auch ausschaltet ?

@zx6r

Aktuell ist vorgesehen, dass die gesamte günstigste Stunde eingeschaltet bleibt. Eventuell mache ich das in zukünftigen Versionen konfigurierbar.

Du kannst aber in Zeile 962 die Wartezeit bis abgeschaltet wird von 3560 Sekunden heruntersetzen wenn du nur eine Steckdose hast.
Allerdings muss Dein Raspberry natürlich immer an sein, das stimmt.
Wenn Du irgendwann fertig getestet hast wird das ja sowieso durch die Contab stündlich automatisch gestartet.

1 „Gefällt mir“

@christian1980 OKi :slight_smile: Nochmals vielen Dank für die Hilfe ..

1 „Gefällt mir“

@christian1980
Nur mal zur Info .. Ich sehe in deinem Programm enormes Potenzial!!

(wenn es ausgereift ist {green}:wink: insofern das Dummis wie ich {green}:scared: es Problemlos verstehen, Installieren und benutzen können)

Nicht nur das man damit Akkus Laden kann zu bei Preiswerten Strompreisen .. und damit dann die teuren Phasen mit relativ geringer Akku Leistung überbrücken könnte.

Zusätzlich kann man auch noch auf einfache Art Stromintensive Geräte z.b. eine Spülmaschine zu den Preiswerten Phasen einschalten oder Mähroboter etc. .. im Prinzip alles was nicht Zeitgebunden ist.

Ich finde die Idee TOP und bleibe dran … im Moment scheint es für mich zu funktionieren .. bevor es aber in den echtlauf geht brauch ich noch ein wenig Zeit

Nochmals vielen Dank für deine Arbeit {green}:lovekiss: und bleib dran das könnte richtig gut werden {green}:pray:

1 „Gefällt mir“

Hi,

kann ich das auch mit einem Deye WR nutzen? Mein Deye ist bereits ein Hybrid WR, daher brauche ich kein Victron-Gerät.

Dafür muss ich auch zu Tibber wechseln oder?

Wird der jetztige Stromanbieter von Tibber automatisch gekündigt?

Hi, ich kann Dir nicht sagen ob Deye über die Shell mit Befehlen zum Laden oder Entladen gebracht werden kann.

Falls es möglich ist, kann man das Script ganz einfach dafür anpassen.
In der aktuellen Version findest du die entsprechende Stelle ab Zeile 321 in der controller.sh.

  charger_command_turnon="dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/Schedule/Charge/0/Day SetValue -- 7"
charger_command_turnoff="dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/Schedule/Charge/0/Day SetValue -- -7"
SOC_percent=$(dbus-send --system --print-reply --dest=com.victronenergy.system /Dc/Battery/Soc com.victronenergy.BusItem.GetValue | grep variant | awk '{print $3}') # This will get the battery state of charge (SOC) from a Victron Energy system

Testen kannst Du das Script auch erstmal ohne Tibber. Wenn Du Dir sicher bist das es funktioniert, kannst Du dann über die App den Wechsel auslösen.

Tibber kündigt dann bei Deinem bisherigem Anbieter.
Gruß! Christian

Hallo zusammen,

ich habe heute die neueste Version auf meine Raspberry PI installiert um das einfach zu testen. Aktuell bin ich noch kein Tibber Kunde.

Vielleicht bin ich als normaler User zu doof, aber ich habe einige Probleme:

  1. Führe ich die controller.sh datei aus, so bekomme ich folgende Meldungen.

root@raspberrypi4:~# sh /data/etc/Spotmarket-Switcher/controller.sh
I: Bash Version: GNU bash, version 5.0.18(1)-release (arm-ve-linux-gnueabi)
I: Spotmarket-Switcher - Version 2.4.7
[-] Loading...Config validation passed.
I: aWATTar today-data is up to date.
I: aWATTar tomorrow-data is up to date.
Data available for 48 hours.
I: Please verify correct system time and timezone:
Thu Jan 4 20:31:13 CET 2024
I: Current price is 10.35900 Cent/kWh energy price.
I: The average price will be 8.83902 Cent/kWh energy price.
I: Highest price will be 14.46500 Cent/kWh energy price.
I: Sorted prices: 1:2.54800 2:3.50000 3:4.00000 4:5.04600 5:5.73000 6:5.77300 7:7.26500 8:7.32100 9:7.40500 10:7.60300 11:7.70100 12:8.05100
13:8.10000 14:8.50200 15:8.59600 16:8.60800 17:8.63000 18:8.68000 19:8.70000 20:8.88300 21:8.95700 22:9.00300 23:9.14700 24:9.15400
25:9.16100 26:9.21100 27:9.22400 28:9.41900 29:9.42000 30:9.48600 31:9.49200 32:9.49300 33:9.62800 34:9.64100 35:9.82200 36:9.86200
37:10.00100 38:10.00500 39:10.00900 40:10.29700 41:10.35900 42:10.39600 43:10.57300 44:10.73800 45:10.84500 46:12.50000 47:13.32300 48:14.46500
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1224: [: -ge: unary operator expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
/data/etc/Spotmarket-Switcher/controller.sh: line 1259: [: : integer expression expected
I: Charge at prices: 1 2 3 4 5 6
I: Dynamic ESS discharge (depending SOC) at prices:
I: Switchable sockets at prices: 1 2 3 4 5 6
W: skip Solarweather. not activated
W: skip Victron Charger. not activated
D: skip Fritz DECT. not activated
D: skip Shelly Api. not activated

Die nächsten Probleme sind Verständnisprobleme.

  1. Wenn ich es richtig verstehe, dann gebe ich die meine Preisgrenzen unter: "Start/Stop Logic Settings" ein. Muss ich dort "use_start_stopp" auf 1 stellen? Theoretisch sollte das so sein. Wann schaltet der die Ladung des Speichers dann wieder aus? Wenn nach einer Stunde der Einschaltwert wieder überschritten wird? Oder muss der Ausschaltwert überschritten werden? Dann müsste ich die ja (fast) identisch einstellen, wenn das die Grenze sein soll.

Aktuell kann ich dort einstellen was ich will und er fängt aber auch bei geringeren Strompreisen als in der Schwelle eingestellt nicht an zu laden. Ein einziges Mal hat er das getan, aber ich weiß nicht warum. Ich meine, dass ich im "Venus OS Solar Charger Setup" einschalten musste. Aber dann kam das Problem aus Punkt 3

  1. Was stelle ich unter "Venus OS Solar Charger Setup ein"? Wenn ich diesen aktiviere, dann schaltet der mein ESS ab und der Speicher entlädt nicht mehr um meinen Hausanschlusspunkt auf 0 zu regeln? Im Venus OS ist die Wechselrichterleistung dann auf 0W begrenzt.

  2. Was genau ist unter dem Punkt "Config Matrices for Charging/Discharging/Switching" einzustellen? Der SOC-Wert gibt hier an, wie weit der Speicher entladen wird, wenn er sich im ESS Modus befindet? Hier verweise ich aber auf Punkt 3. Der Wechselrichter wird immer begrenzt und entlädt nicht.

Die weiteren Punkte habe ich im wesentlichen Verstanden. Ich weiß aber nicht, ob es bei an den Fehlermeldungen liegt oder ob ich die Bedienung noch nicht ausreichend verstanden habe.

Gruß

Matthias

Hi, damit ich die Fehlermeldungen prüfen kann, magst Du mir bitte Deine Venus OS Version verraten und Deine config.txt ohne API-Keys posten?
Auf den ersten Blick sieht es so aus als ob das Script Deinen SOC nicht auslesen kann.
Gib mal auf der Shell mal ein:

(dbus-send --system --print-reply --dest=com.victronenergy.system /Dc/Battery/Soc com.victronenergy.BusItem.GetValue | grep variant | awk '{print $3}')

Gibt er damit den SOC als Ganzzahl bei Dir aus?
Falls nicht gib mir bitte mal die Ausgabe von und ich schaue was ich für Dich tun kann.

dbus-send --system --print-reply --dest=com.victronenergy.system /Dc/Battery/Soc com.victronenergy.BusItem.GetValue
start_stopp brauchst Du nicht verwenden, die Verwendung der 24 und 48 Preisstunden Matrix reicht aus und füht zu besseren Ergbnissen.
Wenn ich diesen aktiviere, dann schaltet der mein ESS ab...
Das ist ein Feature, denn es wird auf höhere Preise gewartet bis entladen wird (je nach Akkufüllstand, Konfiguration in mitterer Spalte der 24 und 48 Matrix).
Gruß!
Christian

@christian1980 Hi, danke für die schnelle Antwort.

Also meine Version ist die v3.13

Dies bekomme ich als Antwort auf den Befehl:

root@raspberrypi4:~# dbus-send --system --print-reply --dest=com.victronenergy.s ystem /Dc/Battery/Soc com.victronenergy.BusItem.GetValue
method return time=1704400183.048412 sender=:1.19 -> destination=:1.143 serial=3 056 reply_serial=2
variant double 64.52

Den Inhalt der config.txt poste ich sofort

@christian1980 Oh man, wie schicke ich das am besten? Da kommt eine Fehlermeldung des Forums. "Malcare Firewall" irgendwas

Hab nun den ganzen Part der API Keys rausgelassen. dann geht es.

Spotmarket-Switcher Configuration File

This configuration file is essential for setting up the Spotmarket-Switcher system.

It controls various aspects like energy management, device control, and API integration.

Each setting is explained in detail for easy understanding and configuration.

#######################

General Settings

#######################

Timezone setting: Essential for correct timing of operations based on your geographic location.

TZ="Europe/Amsterdam"

Configuration file version: Used to ensure compatibility with the Spotmarket-Switcher software.

You'll see a warning while running the Spotmarket-Switcher if you are using an outdated config version.

config_version=5
#######################

Economic Logic Settings

#######################

Economic Check (economic_check):

This setting determines whether the system should consider the economic feasibility of charging the battery based on current and projected electricity prices.

Options:

0 = Disable economic checks. The system will charge the battery regardless of the cost implications according to the config matrix.

1 = Enable economic checks against the highest price. Charging will only occur if the total cost (current price + energy loss + battery lifecycle costs) is lower than the highest price observed in the current price set.

2 = Enable economic checks against the average price. Charging will only occur if the total cost is lower than the average price of electricity.

Example: If set to 1, and the highest price of the day is lower than the sum of the current price, energy loss, and battery lifecycle costs, charging will be aborted as it would not be economically feasible.

economic_check=0

Feed-in Tariff (feedin_price):

This is the price you receive for feeding electricity back into the grid, typically from a solar PV system.

The value is in cents per kWh and is used in calculations to determine if it's more economical to store energy in the battery or to sell it back to the grid.

Example: If your feed-in tariff is 9.87 cents per kWh, set this value to 9.87.

feedin_price=9.87
#######################

Start/Stop Logic Settings

#######################

Enable or disable specific logic controls:

These settings control whether certain operations are based on start/stop logic or solar breakeven logic.

Set to 1 to activate start/stop logic (depending start_price).

use_start_stop_logic=0
#Note: This functionality will be removed in the future in favour of economic_check and the price matrices.

Price thresholds in cents/kWh:

These values determine the price points at which different operations are triggered (net prices excl. tax).

Note: Always use Cent/kWh, no matter if youre using Awattar (displaying Cent/kWh) or Entsoe API (displaying EUR/MWh).

start_price=11.0 # Start operations below this price.
abort_price=11.1 # Abort operations if price exceeds this value (energy fees not included).

This setting allows you to control additional devices (like a water heater) using AVM Fritz DECT200/210 or Shelly switchable sockets.

0 = Do not control additional devices based on start/stop logic.

1 = Enable control of additional devices based on start/stop logic.

When enabled, this will activate or deactivate the switchable sockets based on the start/stop charging logic.

switchablesockets_at_start_stop=0

This setting determines whether to charge your battery system when the cost of energy (including fees) is lower than your solar feed-in tariff.

0 = Do not charge based on solar breakeven logic.

1 = Enable charging when energy cost is lower than solar feed-in tariff.

Enabling this will initiate charging when it's more economical to charge the battery than to feed the solar energy back into the grid.

charge_at_solar_breakeven_logic=0

Similar to 'charge_at_solar_breakeven_logic', but for controlling switchable sockets.

0 = Do not control switchable sockets based on solar breakeven logic.

1 = Enable control of switchable sockets when energy cost is lower than solar feed-in tariff.

When enabled, this will activate or deactivate the switchable sockets based on the comparison of current energy cost and solar feed-in tariff.

switchablesockets_at_solar_breakeven_logic=0
#######################

Victron Venus OS Solar Charger Setup

#######################

Enable or disable Victron Venus OS Solar Charger control:

1 = Control the charger, 0 = Do not control the charger.

use_victron_charger=0

Energy loss percentage in the charging/discharging process:

This value accounts for energy lost during charging and discharging of the battery.

energy_loss_percent=23.3

Battery lifecycle cost per kWh in cents:

Represents the cost associated with the battery's lifespan and usage.

battery_lifecycle_costs_cent_per_kwh=4.444444

Note: If you are using a chinese 5KWh LifePo4 battery (4.5 KWh useable) with 6000 cycles and

the rebuying price is at 1200 EUR, the calculation will be 1200*100/6000/4,5.

disable_inverting_while_only_switching

This setting controls the inverter's operation when switching (controlling additional loads) is active, but charging is deemed too expensive.

0 = Keep inverting enabled even when only switching is active. This means the inverter will continue to convert DC (battery) power to AC (household) power.

1 = Disable inverting when only switching is active and charging is too expensive. This helps to preserve the battery's full charge by not using it for inverter operation.

Essentially, when set to 1, the system prioritizes maintaining battery charge over supplying AC power from the battery when charging is not economically feasible.

disable_inverting_while_only_switching=1

limit_inverter_power_after_enabling

This setting specifies a power limit for the inverter when it is re-enabled after being disabled.

-1 = No limit. The inverter will operate at its full capacity when re-enabled.

Any positive value (e.g., 1000) = Set a specific limit (in watts). For example, setting this to 1000 will limit the inverter's output to 1000 watts.

This is useful if you have a 'Limit inverter power' setting configured in the Energy Storage System (ESS) menu and want to ensure it's respected after the inverter is re-enabled.

Note: If 'disable_inverting_while_only_switching' is used, this setting ensures that your preferred inverter power limit is reinstated after inverting is re-enabled.

limit_inverter_power_after_enabling=-1
#######################

Switchable Sockets Setup (Fritz DECT and Shelly Wifi Plugs)

#######################

Fritz DECT Sockets:

use_fritz_dect_sockets=0 # please activate with 1 or deactivate this socket-type with 0
fbox="192.168.178.1"
user="fritz1234"
passwd="YOURPASSWORD"
sockets=("YOURSOCKETID" "0" "0" "0" "0" "0") # add multiple switches if you like

Shelly Wifi Plugs:

use_shelly_wlan_sockets=0 # please activate with 1 or deactivate this socket-type with 0
shelly_ips=("192.168.178.89" "0" "0") # add multiple Shellys if you like, dont forget to make the ips static in your router
shellyuser="admin"
shellypasswd="YOURPASSWORD" # only if used
#######################

Config Matrices for Charging/Discharging/Switching

#######################

Config Matrix for 24-hour Pricing:

Each row represents an sorted price (from low to high) of the day and contains three values:

1st value: Enable (1) or disable (0) charging.

2nd value: Minimum SoC (%) for discharging.

3rd value: Enable (1) or disable (0) switchable sockets.

config_matrix24_price=(
"Charge Discharge_min_SOC Switch" # [0] Header
"1 95 1" # [1] Price 1
"1 95 1" # [2] Price 2
"1 95 1" # [3] Price 3
"0 95 0" # [4] Price 4
"0 95 0" # [5] Price 5
"0 95 0" # [6] Price 6
"0 95 0" # [7] Price 7
"0 95 0" # [8] Price 8
"0 95 0" # [9] Price 9
"0 90 0" # [10] Price 10
"0 85 0" # [11] Price 11
"0 80 0" # [12] Price 12
"0 75 0" # [13] Price 13
"0 70 0" # [14] Price 14
"0 65 0" # [15] Price 15
"0 60 0" # [16] Price 16
"0 55 0" # [17] Price 17
"0 50 0" # [18] Price 18
"0 45 0" # [19] Price 19
"0 40 0" # [20] Price 20
"0 35 0" # [21] Price 21
"0 30 0" # [22] Price 22
"0 25 0" # [23] Price 23
"0 10 0" # [24] Price 24
)

Config Matrix for 48 prices (if include_second_day is enabled):

Similar to the 24-price matrix but for 48-prices.

config_matrix48_price=(
"Charge Discharge_min_SOC Switch" # [0] Header
"1 95 1" # [1] Price 1
"0 95 0" # [2] Price 2
"0 95 0" # [3] Price 3
"0 95 0" # [4] Price 4
"0 95 0" # [5] Price 5
"0 95 0" # [6] Price 6
"0 95 0" # [7] Price 7
"0 95 0" # [8] Price 8
"0 95 0" # [9] Price 9
"0 95 0" # [10] Price 10
"0 95 0" # [11] Price 11

"0 95 0" # [12] Price 12
"0 95 0" # [13] Price 13
"0 95 0" # [14] Price 14
"0 95 0" # [15] Price 15
"0 95 0" # [16] Price 16
"0 93 0" # [17] Price 17
"0 91 0" # [18] Price 18
"0 89 0" # [19] Price 19
"0 87 0" # [20] Price 20
"0 85 0" # [21] Price 21
"0 83 0" # [22] Price 22
"0 81 0" # [23] Price 23
"0 79 0" # [24] Price 24
"0 77 0" # [25] Price 25
"0 75 0" # [26] Price 26
"0 73 0" # [27] Price 27
"0 71 0" # [28] Price 28
"0 69 0" # [29] Price 29
"0 67 0" # [30] Price 30
"0 65 0" # [31] Price 31
"0 63 0" # [32] Price 32
"0 61 0" # [33] Price 33
"0 59 0" # [34] Price 34
"0 57 0" # [35] Price 35
"0 55 0" # [36] Price 36
"0 53 0" # [37] Price 37
"0 51 0" # [38] Price 38
"0 49 0" # [39] Price 39
"0 47 0" # [40] Price 40
"0 45 0" # [41] Price 41
"0 43 0" # [42] Price 42
"0 41 0" # [43] Price 43
"0 38 0" # [44] Price 44
"0 35 0" # [45] Price 45
"0 30 0" # [46] Price 46
"0 25 0" # [47] Price 47
"0 10 0" # [48] Price 48
)

Mini-Matrix for Dynamic SOC Based on Solar Energy:

This matrix defines target SoC values based on expected solar energy (in MJ/m²).

config_matrix_target_soc_weather=(
"1.5 90" # At 1.5 MJ/m², target SoC is 90%
"3.5 15" # At 3.5 MJ/m², target SoC is 15%
)

Note: # All the other values between this will be calculated automatically.

If the sun will be more than 3.5 megajoule, the 15% will still be used as calculation result.

If there will be enough sun, the battery capacity will be reserved for solar energy.

Die Ursache ist, dass Dein BMS für den SOC keine Ganzzahlen ausgibt wie ich es bisher gewohnt war.
Auf der Shell kann man nicht (so einfach) mit Nachkommastellen arbeiten.

Kann sein das in der neuen Venus OS Version da was geändert wurde.
Ich hab Dir mal eben einen Fix gebaut der das beheben sollte:

https://github.com/christian1980nrw/Spotmarket-Switcher/releases/tag/v2.4.8
Gruß!

Christian

@christian1980 Das ist Mega cool von dir.

Ich schaue Mir das morgen an. Muss leider früh raus und daher gleich ins Bett.

Ich melde mich! Schönen Abend noch.

Gruss

Matthias

OK, an Deiner Stelle würde ich wie gesagt den start_stop Kram deaktiviert lassen,
die Fixkosten für Deine Postleitzahl ändern um mit total prices arbeiten zu können,
dann die Wetter API mit API-Key aktivieren,
dann next day prices aktiviert lassen,
sowie ein bisschen mit den beiden Matrixen rumspielen wenn Dir die Defaultwerte nicht gefallen.
Economic logic auf highest prices.
Du wirst sehen das er Deinen Solarertrag dann im Akku speichert und nur bei höchsten Netzpreisen entlädt,
außerdem wird der Akku (nur wenn es sich lohnt, also bei Preisschwankungen oberhalb Deines Ladeverlustes zuzüglich Akkukosten)
bis zu einem errechnetem SOC Ladeziel aufgeladen und ebenfalls nur zu höchsten Kursen entladen.
Das ist mein Resultat von heute.
Nachts wurde aufgeladen auf 90% (dynamisch errechnet gemäß Wetter-Mini-Matrix, nicht wundern das Wetter hat sich später geändert, im Screenshot werden für heute nur noch 68% errechnet) (morgen wird nicht geladen, Preise sind zu ähnlich) und zu Höchstpreisen entladen.

Jetzt habe ich noch 26% im Akku die wohl morgen Nachmittag oder Abend entladen werden.
Gemäß Matrix wird nun unterhalb 30% SOC nur noch bei den zwei höchsten verfügbaren Preisen entladen, bei allen anderen wird das ESS abgeschaltet.
Deshalb wurde im Beispiel um 19 Uhr nicht mehr weiter entladen.
"0 30 0" # [46] Price 46

Wenn es sich nicht lohnt kann es sein das der Akku dann erstmal nicht benutzt wird, je nach Folgepreisen von übermorgen, die Preise von übermorgen werden aber erst morgen Nachmittag veröffentlicht.

Viel Erfolg!

Gruß!

Christian

@christian1980 Moin Christian,

zwei, drei kleine Fragen hätte ich noch, bevor ich mich da nun dran mache.

  1. Kann ich den downloadlink einfach erneut ausführen?
wget https://raw.githubusercontent.com/christian1980nrw/Spotmarket-Switcher/main/victron-venus-os-install.sh

Und dann einfach die neu heruntergeladene "victron-venus-os-install.sh ausführen. Überschreibt er dann die alten Dateien? Ich gehe davon aus, dass ich dann aus der "neuen" sample.config.txt wieder anpassungen machen und dann als neue config.txt speichere?

  1. Bei den Matrixen z.B. (1 95 1) stellen sich mir noch folgende Fragen:

a) den SOC Wert auf den maximal aufgeladen werden soll stelle ich im Venus OS als Zeitplan ein, korrekt?

b) Ich habe noch nicht verstanden, warum ich mehrere verschiedene Matrixen auswählen kann. Wie ist das gemeint, wenn z.B. bei den Preisen 1-6 immer der gleiche Wert steht z.B. (1 95 1). Heißt das, dass bei den ersten 6 günstigsten Werte geladen wird? D.h. ich sage nciht, dass er unter xx ct/kWh laden soll, sondern ich sage: "Lade bei den 6 günstigsten Preisen an diesem Tag" (natürlich nur, wenn nicht zu erwarten ist, dass die PV-Anlage alles voll lädt).

c) Wo stelle ich ein, dass z.B. nur bei Preis Nr. 47 und 48 tiefer als der eingestellte SOC entladen werden darf? Bei dir steht in dem Screenshot:

"Dynamic ESS discharge (depending SOC) at prices: 47 48".

Wo gibt man an, dass diese beiden Werte berücksichtigt werden? Bei mir stand dort kein Wert.

Wenn du mir dies beantworten könntest, fange ich mal an zu testen.

@matzedonien2
> sample.config.txt wieder anpassungen machen und dann als neue config.txt speichere?
Nein das brauchst Du so nicht machen. Tausch einfach die controller.sh aus und mach sie mit dem chmod Befehl nach Anleitung ausführbar.
Die config muss nur getauscht werden wenn sich die config Version ändert, z.B. wenn neue Parameter oder Features hinzukommen.

> (1 95 1)
Die erste 1 steht für Laden zu dem Preis, die 95 steht dafür das der Akku erst zu 95 % voll sein muss bis er zu dem Preis entlädt, die zweite 1 steht dafür das zu dem Preis geschaltet wird falls Du Steckdosen nutzt.

Es gibt 2 Matrixen weil Du je nach Tageszeit entweder 24 oder 48 Preise vorliegen hast.

> den SOC Wert auf den maximal aufgeladen werden soll stelle ich im Venus OS als Zeitplan ein, korrekt?

Nein, die Ladehöhe wird anhand der Wettervorhersage errechnet und der Wert überschrieben. Wird genug Sonne erwartet, wird nicht so hoch aufgeladen.
Eingestellt wird das mit der Mini-Matrix ganz am Ende der config.txt. Die Wetter API muss dafür aktiviert werden.

> Wo stelle ich ein, dass z.B. nur bei Preis Nr. 47 und 48 tiefer als der eingestellte SOC entladen werden darf? Bei dir steht in dem Screenshot:

"Dynamic ESS discharge (depending SOC) at prices: 47 48".

Das wird automatisch errechnet anhand Deines Akkufüllstandes, abgeleitet aus der 24 / 48 Matrix. Je leerer er wird, desto mehr Preise werden deaktiviert. Am Ende wird nur noch zu ganz teuren Preisen entladen.

Gruß!

Christian

@christian1980 Vielen Dank,

Ein paar Fragen habe ich dann aber noch zu den Matrixen, die mir immer noch unklar sind.

  1. Was bringt es mir (egal in welcher Matrix) die ersten 6 Zeilen mit gleichen Werten z.B. 1 95 1 auszuwählen? Heißt das dann, dass das für die 6 günstigsten Preisstufen gilt?

  2. Was macht der Automatismus, wenn ich dort folgendes eintragen würde?

1 95 1 # Preis 1

1 95 1 # Preis 2

1 80 1 # Preis 3

1 75 1 # Preis 4

1 70 1 # Preis 5

1 65 1 # Preis 6

Die Klärung letzterer Frage erklärt vermutlich auch die Frage 1.

Vielen Dank!

Gruß

Matthias

Wenn Du das auf die vorgeschlagenen Werte änderst, verlagerst Du die Entladung mehr hin zu günstigen Preisen, außerden wird bei allen 6 Preisen versucht zu laden und zu schalten, es macht so also keinen Sinn.
Man muss ein wenig testen bis man optimale Werte für seine Anlage findet.
Für den Anfang würde ich es an Deiner Stelle auf Default lassen bis Du die Funktionsweise komplett verstanden hast.
Die jeweiligen Resultate werden in /tmp/spotmarket-switcher.log gespeichert.
Gruß!

Christian

@christian1980 so werde ich es tun! Vielen Dank für deine Zeit!

@christian1980 Hallo Christian,

leider funktioniert es noch nicht. Ich gehe davon aus, dass ich nun richtigerweise den neuen Code verwende. Denn nun kommt die gleiche Meldung wie zuvor für Zeile 1224 und 1259. Aber nun in Zeile 1229 und 1264. Ich glaube im Code als absolut unwissender Laie zumindest erkannt zu haben, dass du offenbar 5 Zeilen eingefügt hast, denn der Fehler ist in der selben Textzeile, diese ist aber nun 5 Zeilen verschoben.

Achso und das mit dem CHMOD Befehl habe ich noch nicht verstanden. Du schreibst "gemäß Anleitung". Ich finde das da nicht und habe die gesamte Installationsprozedur neu gemacht und die alten Ordner unter Data/etc/ und unter /service zuvor gelöscht.

Gruß Matthias