christian1980nrw / Spotmarket-Switcher

Shell script that manages Victron Venus OS ESS-Systems and/or Shelly Plug S and/or AVM Fritz!DECT200 and 210 switchable sockets so that it charges/switches, when spot-market prices are low.
Other
49 stars 8 forks source link

Victron charge activation maybe not working at newer Spotmarket-Switcher versions #81

Closed alex90alex closed 11 months ago

alex90alex commented 1 year ago

Hallo zusammen,

ich habe vor einigen Tagen die neue Firmware Venus OS 3.1 bzw. 3.11 aufgespielt. Das dynamische ESS verhält sich bei mir leider nicht so intelligent wie ich es gerne hätte. Mit aktivem dynamischen ESS wird unnötig der Akku entladen oder teilweise der Akku in der Nacht voll gehalten, trotz hohen Stromkosten (Tibber). Die Logik vom dynamischen ESS scheint aktuell noch nicht für mich zu passen. Daher würde ich gerne wieder die Funktionen vom Spotmarketswitcher verwenden. Wenn ich die Einstellung von dynamic ESS wieder auf "off" stelle, erfolgt leider die Ladeplanung über den Spotmarketswitcher nicht mehr. Hat jemand hierfür eine Problemlösung? In den letzten Monaten hat der Spotmarketswitcher super funktioniert. :-)

Danke für eure Hilfe.

Viele Grüße Alex

christian1980nrw commented 1 year ago

Hi, als erstes würde ich Dir empfehlen, die neueste Spotmarket-Switcher Version zu installieren, da seit neuestem auch die Batteriekosten berücksichtigt werden. Dann kannst Du in /tmp/spotmarket-switcher.log kontrollieren ob versucht wurde zu laden. Außerdem könntest Du auf der Shell mal testen ob sich Dein erster ESS Ladeplan aktivieren lässt mit:

"dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/Schedule/Charge/0/Day SetValue -- 7"

sowie wieder deaktivieren mit "dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/Schedule/Charge/0/Day SetValue -- -7"

Gruß! Christian

alex90alex commented 1 year ago

Hi Christian, danke dir. Die neue Version von Spotmarket-Switcher habe ich installiert. In der Log Datei werden wohl die richtigen Befehle gespeichert: (Ich habe als Grenze 19 Cent/kWh) Sat Oct 14 18:00:02 CEST 2023 Current price is 0.3049 EUR/kWh total price. I: Current price is too high. Abort.

Leider wird die Ladeplanung bei teuren Preisen nicht mehr abgebrochen. Über den Befehl: "dbus -y com.victronenergy.settings /Settings/CGwacs/BatteryLife/Schedule/Charge/0/Day SetValue -- -7" lässt sich der Ladeplan deaktivieren. Wenn ich jetzt von Hand den Ladeplan aktiviere müsste das Skript doch spätestens zur nächsten vollen Stunde den Plan wieder deaktivieren, somit heute Abend zu jeder vollen Stunde. Ich werde noch etwas beobachten und melde mich dann wieder.

Viele Grüße Alex

christian1980nrw commented 1 year ago

Wenn zwei aufeinander folgende Stunden die Bedingungen erfüllen, wird nicht mehr zwischendurch kurz abgeschaltet wie es in alten Versionen war.

Gruß Christian

alex90alex commented 1 year ago

Komischerweise scheint sich der Zeitplan beim Unterschreiten der Preisgrenze automatisch zu aktivieren, aber beim Überschreiten wird der Zeitplan nicht beendet. Ich habe die Vermutung, dass ich das Update nicht richtig installiert habe. Wie deinstalliert man den Spotmarketswitcher richtig? Ich habe nur die beiden Befehle aus deiner Beschreibung ausgeführt und als ein Fehler beim Starten erschien (Datei existiert bereits) habe ich die Datei auf die Spotmarketswitcher von Hand gelöscht und den Befehl: "sh victron-venus-os-install.sh" erneut ausgeführt. Sorry meine Linux Kenntnisse sind überschaubar. ;-).

christian1980nrw commented 1 year ago

Ganz einfach:

cd /path/to/save/ mv ./controller.sh ./controller-alt.sh wget https://raw.githubusercontent.com/christian1980nrw/Spotmarket-Switcher/main/scripts/controller.sh chmod +x ./controller.sh

vi /path/to/save/controller.sh und die eigenen Parameter wieder eintragen.

ckvsoft commented 1 year ago

Hast Du schon in der Logdatei geschaut? Da sollte ja stündlich was drinnen stehen was er vor hatte.

Lg Chris

christian1980nrw commented 1 year ago

@alex90alex Es war ein Fehler im Script der Dein Problem vermutlich verursacht hat. Du kannst nochmal neu herunterladen, beachte aber dabei, dass die config nun in einer ausgelagerten Datei erwartet wird. Danke an @ckvsoft fürs Gegenlesen des aktuellen Codes.

christian1980nrw commented 1 year ago

Issue should be fixed at the master and dev branch. Still testing.

alex90alex commented 1 year ago

Alles klar, danke. Sind die Parameter nun in der sample-config Datei einzutragen oder in der Datei "controller.sh"?

ckvsoft commented 1 year ago

Alles klar, danke. Sind die Parameter nun in der sample-config Datei einzutragen oder in der Datei "controller.sh"?

Die sample-config.txt auf config.txt umbenennen/kopieren und darin die Parameter anpassen.

alex90alex commented 1 year ago

Okay. Ich habe nun die unten stehenden Einstellungen übernommen um das Umschalten der Logik zu testen. Komischerweise wird der Ladeplan nicht aktiviert, obwohl der aktuelle Preis weit unter der Grenze von 490 Ct/kWh liegt. Folgende Meldung erscheint wenn ich controller.sh ausführe.

Current price is 0.3602 EUR/kWh total price. Lowest price will be 0.2816 EUR/kWh total price. The average price will be 0.319396 EUR/kWh total price. Highest price will be 0.3919 EUR/kWh total price. Second lowest price will be 0.2836 EUR/kWh total price. Third lowest price will be 0.2888 EUR/kWh total price. Fourth lowest price will be 0.2901 EUR/kWh total price. Fifth lowest price will be 0.293 EUR/kWh total price. Sixth lowest price will be 0.2935 EUR/kWh total price. I: Current price is too high. Abort.

Einstellungen:

Solar Charger Setup (tested with Victron Venus OS)

use_victron_charger=1 # please activate with 1 or deactivate this charger-type with 0 energy_loss_percent=0.0 # Enter how much percent of the energy is lost by the charging and discharging process. battery_lifecycle_costs_cent_per_kwh=0.0 # 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. economic_check=2 # Set to 0 disables the check.

Set to 1 or 2. Current price + energy loss + battery lifecycle costs will be compared with (1 = highest_price / 2 = average_price) and aborted if charging makes no sense.

Please change prices (always use Cent/kWh, no matter if youre using Awattar (displaying Cent/kWh) or Entsoe API (displaying EUR/MWh) / net prices excl. tax).

stop_price=490.0 # stop above this price start_price=490.0 # start below this price feedin_price=18.5 # your feed-in-tariff of your solar system energy_fee=15.3 # proofs of origin, allocations, duties and taxes (in case if stock price is at 0 Cent/kWh) abort_price=490.0 # abort and never charge or switch if actual price is same or higher than this (Energy fees not included)

Zum Verständnis: Da meine EEG-Vergütung bei 18,5 Cent liegt, hatte ich die Grenze für den Spotmarketswitcher immer auf 19 Cent stehen. Somit konnte ich ein Entladen des Akkus bei niedrigen Preisen unterbinden und ggf. sogar günstiger als der entgangene Gewinn durch Solarstromeinspeisung den Hausspeicher laden. Beim Umschalten der Laderegelung meiner Wallbox, sobald der Strompreis von Tibber <19Cent/kWh würde normalerweise mein Hausspeicher leerlaufen. Vor meiner Ausprobiererei mit der Option "Dynamik ESS" bzw. der neuen Venus OS Version hat das mit dem Spotmarketswitcher gut funktioniert. Ist die Logik auch aktuell noch umsetzbar? :-) Das wäre super.

ckvsoft commented 1 year ago

Die Version von Gestern hat bei aWATTar noch einen Fehler, der wurde erst Heute behoben. Kannst mal die Ausgabe mit DEBUG zeigen?

ckvsoft commented 1 year ago

Okay. Ich habe nun die unten stehenden Einstellungen übernommen um das Umschalten der Logik zu testen. Komischerweise wird der Ladeplan nicht aktiviert, obwohl der aktuelle Preis weit unter der Grenze von 490 Ct/kWh liegt. Folgende Meldung erscheint wenn ich controller.sh ausführe.

Current price is 0.3602 EUR/kWh total price. Lowest price will be 0.2816 EUR/kWh total price. The average price will be 0.319396 EUR/kWh total price. Highest price will be 0.3919 EUR/kWh total price. Second lowest price will be 0.2836 EUR/kWh total price. Third lowest price will be 0.2888 EUR/kWh total price. Fourth lowest price will be 0.2901 EUR/kWh total price. Fifth lowest price will be 0.293 EUR/kWh total price. Sixth lowest price will be 0.2935 EUR/kWh total price. I: Current price is too high. Abort.

Einstellungen:

Solar Charger Setup (tested with Victron Venus OS)

use_victron_charger=1 # please activate with 1 or deactivate this charger-type with 0 energy_loss_percent=0.0 # Enter how much percent of the energy is lost by the charging and discharging process. battery_lifecycle_costs_cent_per_kwh=0.0 # 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. economic_check=2 # Set to 0 disables the check. # Set to 1 or 2. Current price + energy loss + battery lifecycle costs will be compared with (1 = highest_price / 2 = average_price) and aborted if charging makes no sense.

Please change prices (always use Cent/kWh, no matter if youre using Awattar (displaying Cent/kWh) or Entsoe API (displaying EUR/MWh) / net prices excl. tax). stop_price=490.0 # stop above this price start_price=490.0 # start below this price feedin_price=18.5 # your feed-in-tariff of your solar system energy_fee=15.3 # proofs of origin, allocations, duties and taxes (in case if stock price is at 0 Cent/kWh) abort_price=490.0 # abort and never charge or switch if actual price is same or higher than this (Energy fees not included)

Zum Verständnis: Da meine EEG-Vergütung bei 18,5 Cent liegt, hatte ich die Grenze für den Spotmarketswitcher immer auf 19 Cent stehen. Somit konnte ich ein Entladen des Akkus bei niedrigen Preisen unterbinden und ggf. sogar günstiger als der entgangene Gewinn durch Solarstromeinspeisung den Hausspeicher laden. Beim Umschalten der Laderegelung meiner Wallbox, sobald der Strompreis von Tibber <19Cent/kWh würde normalerweise mein Hausspeicher leerlaufen. Vor meiner Ausprobiererei mit der Option "Dynamik ESS" bzw. der neuen Venus OS Version hat das mit dem Spotmarketswitcher gut funktioniert. Ist die Logik auch aktuell noch umsetzbar? :-) Das wäre super.

Wie schauen die weiteren Einstellunge aus?

christian1980nrw commented 1 year ago

Bei stop_price=490.0 # stop above this price start_price=490.0 # start below this price kann niemals gestartet werden. Das sind 4,90 EUR. Die Preise sind grundsätzlich in Cent einzugeben, egal was die API anzeigt. Gruß! Christian

alex90alex commented 1 year ago

config.txt

Das ist meine config und log Datei. Die Spotmarketversion habe ich erst heute Abend heruntergeladen und gestartet. spotmarket-switcher.log

Vielleicht lässt sich daraus etwas ableiten. Danke euch beiden.

christian1980nrw commented 1 year ago

Probier mal folgendes: https://github.com/christian1980nrw/Spotmarket-Switcher/commit/7cf49618a2e2c8a96ffa027253ba99ea9bf28bcc

Wahrscheinlich ist es damit behoben.

alex90alex commented 1 year ago

Bei stop_price=490.0 # stop above this price start_price=490.0 # start below this price kann niemals gestartet werden. Das sind 4,90 EUR. Die Preise sind grundsätzlich in Cent einzugeben, egal was die API anzeigt. Gruß! Christian

Ich wollte damit ja erzwingen, dass er auf die Ladeplanung umschaltet. War ja nur als Test gedacht. Normalerweise würde ich hier 19 Cent eintragen.

christian1980nrw commented 1 year ago

Du kannst Du die controller.sh nochmal neu ziehen, ich habe den kleinen Fix jetzt ins Main übernommen. Bei mir wurde der Ladeplan aktiviert.

christian1980nrw commented 1 year ago

Die Ausgabe ist aber noch Unsinn, aber daran nicht stören. Victron scheduled charging is ON. Battery SOC is at 71 %. Charging based on average price comparison makes sense. Turning OFF Fritz sockets.

alex90alex commented 1 year ago

Was mir nun aufgefallen ist, dass die Tibber Preise nun Netto sind. Aber nun aktiviert sich der Ladeplan, aber er deaktiviert sich nicht mehr, wenn ich z.b. die Preisgrenze auf 5 Cent anpasse und das Skript starte müsste der Ladeplan doch aus gehen oder?

christian1980nrw commented 1 year ago

Das kannst Du konfigurieren in der config.txt, ziemlich am Ende. tibber_prices=total # Set to "energy" to use the spotmarket-prices (default), set to "total" to use the total prices including taxes and fees, set to "tax" to use only the taxes and fees

ckvsoft commented 12 months ago

Probier mal folgendes: 7cf4961

Wahrscheinlich ist es damit behoben.

Guten Morgen!

Da bin ich mir nicht sicher.

Der Hauptunterschied zwischen den beiden liegt in der Art und Weise, wie die logische UND-Operation repräsentiert wird:

&&: Dies ist der übliche Weg, um eine logische UND-Operation in vielen Programmiersprachen, einschließlich Bash, darzustellen. Es wird verwendet, um zu überprüfen, ob beide Bedingungen wahr sind.

-a: Dies ist auch eine logische UND-Operation, aber sie wird eher in traditionellen Testkonstrukten in Shell-Skripten verwendet. In Bash ist && innerhalb von doppelten eckigen Klammern [[ ... ]] bevorzugt, während -a innerhalb von einfachen eckigen Klammern [ ... ] oder ohne eckige Klammern in Verbindung mit test genutzt wird.

Im speziellen Kontext, innerhalb der doppelten Klammern (( ... )), ist && der bevorzugte und korrekte Weg, da diese Klammern arithmetische Ausdrücke evaluieren und && hier funktioniert wie in den meisten anderen Sprachen. Der Operator -a wäre in diesem Kontext nicht korrekt und könnte zu unerwarteten Ergebnissen führen.

Zusammengefasst sollte bei der Verwendung von doppelten Klammern in Bash die erste Zeile (&&) verwenden.

christian1980nrw commented 12 months ago

Die Version mit && lief nicht unter Venus OS. Oder man muss es anders bauen. @ckvsoft

Gruß Christian

ckvsoft commented 12 months ago

Die Version mit && lief nicht unter Venus OS. Oder man muss es anders bauen. @ckvsoft

Gruß Christian

Kann ja nicht sein das es solche unterschiede gibt. Ich bau mir grad ein VenusOS Testsystem auf einen RPI4 auf und check das dann.

ckvsoft commented 12 months ago

Testest Du noch? Oder Funktioniert es jetzt bei Dir?

Ich hab es jetzt auf VenusOS 3.11 im Testlauf, auch mit Tibber und es scheint zu funktionieren,

Du kannst aber gerne meine Dev Version Testen Es gibt da auch mehr DEBUG Ausgaben.

EIn aufruf mir DEBUG=1 bash ./controller.sh Zeigt Dir dann mehr Infos und Hilft uns vielleicht weiter

Lg Chris

alex90alex commented 12 months ago

mit der Version von gestern Abend funktioniert es noch nicht. Das aktivieren des Ladeplanes funktioniert, aber eben nicht umgekehrt. Wenn ich deine controller Version von oben verwende startet leider nichtmal der Ladeplan. Bei einem aktuellem Strompreis von 25 Cent und einer Preisgrenze von 29 Cent müsste doch der Ladeplan aktiviert werden oder? Beim Verwenden der Controller-Datei von gestern startet der Ladeplan.

Folgende Ausgabe erhalte ich:

Current price is 0.2553 EUR/kWh total price. Lowest price will be 0.2211 EUR/kWh total price. The average price will be 0.2817 EUR/kWh total price. Highest price will be 0.3632 EUR/kWh total price. Second lowest price will be 0.2407 EUR/kWh total price. Third lowest price will be 0.248 EUR/kWh total price. Fourth lowest price will be 0.2497 EUR/kWh total price. Fifth lowest price will be 0.2553 EUR/kWh total price. Sixth lowest price will be 0.2561 EUR/kWh total price. D: condition_evaluation [ ( charge_at_second_lowest_price (0) == 1 && second_lowest_price_integer (2407000 0000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( charge_at_fourth_lowest_price (0) == 1 && fourth_lowest_price_integer (2497000 0000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( charge_at_solar_breakeven_logic (1) == 1 && feedin_price_integer (185000000000 00000) > current_price_integer (25530000000000004) + energy_fee_integer (15300000000000000) ) evaluates to false ]. D: condition_evaluation [ ( charge_at_third_lowest_price (0) == 1 && third_lowest_price_integer (248000000 00000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( charge_at_sixth_lowest_price (0) == 1 && sixth_lowest_price_integer (256100000 00000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( charge_at_fifth_lowest_price (0) == 1 && fifth_lowest_price_integer (255300000 00000004) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( use_start_stop_logic (1) == 1 && start_price_integer (29000000000000000) > cur rent_price_integer (25530000000000004) ) evaluates to true ]. D: condition_evaluation [ ( switchablesockets_at_solar_breakeven_logic (0) == 1 && feedin_price_integer (1 8500000000000000) > current_price_integer (25530000000000004) + energy_fee_integer (15300000000000000) ) e valuates to false ]. D: condition_evaluation [ ( switchablesockets_at_fifth_lowest_price (0) == 1 && fifth_lowest_price_integer (25530000000000004) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_lowest_price (0) == 1 && lowest_price_integer (2211000000 0000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_third_lowest_price (0) == 1 && third_lowest_price_integer (24800000000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_sixth_lowest_price (0) == 1 && sixth_lowest_price_integer (25610000000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_second_lowest_price (0) == 1 && second_lowest_price_integ er (24070000000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_start_stop (0) == 1 && start_price_integer (2900000000000 0000) > current_price_integer (25530000000000004) ) evaluates to false ]. D: condition_evaluation [ ( switchablesockets_at_fourth_lowest_price (0) == 1 && fourth_lowest_price_integ er (24970000000000000) == current_price_integer (25530000000000004) ) evaluates to false ]. D: is_charging_economical [ 1 - true ]. Victron scheduled charging is OFF. Battery SOC is at 58 %. Considering charging losses and costs, charging is too expensive. D: [ OK ]

alex90alex commented 12 months ago

Wenn ich in Zeile 21 den economic check =0 setze, lädt das dev-Skript bei den oben genannten Bedingungen. Bisher hatte ich hier =2 stehen.

ckvsoft commented 12 months ago

Ja, Bei economic check =0 wird der Check nicht durchgeführt. Somit wird auch ein davor gesetzte wahre Bedingung nicht revidiert. Sonst könnte es sein das geladen werden darf aber der economic check sagt nein weil es doch zu teuer ist.

Sonst funktioniert alles wie gewollt? Oder braucht es noch testst? Hab nochmal ein Update gemacht. Bessere Lesbarkeit der debug Meldungen und ein paar kleinigkeiten gefixed.

Ich Programmiere normal in c++ und in der Bash sind doch einige Dinge anders. Wie zb. in den meisten gängigen Programmiersprachen ist 0 false (falsch) und 1 true (wahr) in der Basch ist es genau umgekehrt. Ein 0 in der Basch bedeutet eben keinen Fehler (0 -> true -> wahr -> ist gut), sowie beim exit code, alle anderen werte sind Fehler

ckvsoft commented 12 months ago

D: condition_evaluation [ ( use_start_stop_logic (1) == 1 && start_price_integer (29000000000000000) > cur rent_price_integer (25530000000000004) ) evaluates to true ].

Du meinst sicher D: condition_evaluation [ ( use_start_stop_logic (1) == 1 && start_price_integer (29000000000000000) > cur rent_price_integer (25530000000000004) ) evaluates to true ].

Hier wird gesagt das geladen werden darf

Der economy check sagt aber dann Nein. Die Frage ist was soll er da machen?

Bei 2 Checkt er ob der Durchschnittspreis höher ist als die Kosten (Batterie Zeugs soweit ich das verstanden habe) Hier wird dann Nein gesagt wenn der Durchschnittspreis größer als die Kosten sind. Soll auch o sein Oder?

Bei 1 wird halt der höchste Preis genommen. Bis jetzt war es so das der economy check meistens nein gesagt hat.

Ich hab noch ein Update in der Dev, da wird im Debug die Preis angezeigt die er vergleicht

ckvsoft commented 12 months ago

Ich habe mir das Log von Heute nacht angesehen, es wurde kein einziges mal geladen Ich versteh irgendwie den Sinn der Abfrage gar nicht. Weil

  1. Der Höchstpreis ist wahrscheinlich immer höher als die Batterie Cost Berechnung

  2. Der Durchschnittpreis ist wahrscheinlich meistens höher als die Batterie Cost Berechnung

Oder verstehe ich da was falsch?

ckvsoft commented 12 months ago

Ok, mit Punkt zwei bin ich mal falsch gelegen ;) Victron scheduled charging is ON. Battery SOC is at 100 %. Charging based on average price (0.243008 €) comparison makes sense. total_cost=0.3195 €

Wobei es ja bei SOC 100% doch wieder weniger Sinn macht, aber egal. Der Victron händelt das ja eh

Ich habe den Check aber wieder aus geschaltet. Der Höchstpreis und der Durchschnittspreis bleibt ja bis zur nächsten neuen Preisliste gleich. Sprich der würde sich den ganzen Tag nicht ausschalten oder wenn es nicht zutrifft den ganzen Tag nicht einschalten

alex90alex commented 12 months ago

Sonst funktioniert alles wie gewollt? Oder braucht es noch testst? Hab nochmal ein Update gemacht. Bessere Lesbarkeit der debug Meldungen und ein paar kleinigkeiten gefixed. Wie gesagt, der Ladeplan wird eben nicht beendet.

Von den Funktionen des Spotmarketswitcher würde mir ja eine einfache Aktivierung und Deaktivierung ausreichen. Die Bedingung wäre: 1) Wenn der Strompreis der aktuellen Stunde < als meine Einspeisevergütung für Solarstrom ist = Ladeplan aktiv. 2) Wenn der Strompreis der aktuellen Stunde > als meine Einspeisevergütung für Solarstrom ist = Ladeplan inaktiv. (Insbesondere im Winter bzw. an windreichen Tagen ist der Strompreis glücklicherweise oft unter 19Cent/kWh.(brutto))

Möglicherweise bin ich auch zu blöd das Skript vernünftig zu installieren. Wenn ich dazu komme, könnte ich nochmal das Venus OS auf einer neuen SD Karte Installieren und testen ob es vielleicht am Venus OS liegt. Am sonst laufenden System von Victron möchte ich ungern weiter rumspielen.

christian1980nrw commented 12 months ago

Beim Economic Check werden die aktuellen Preise plus Ladeverluste (aktuelle kWh Preise mal Verlustprozente) plus Batteriekosten den höchsten oder alternativ durchschnittlichen Preise gegenübergestellt und abgebrochen wenn es zu teuer ist und man den Akku besser leer laufen lassen sollte. Denn wenn der Durschschnittspreis günstiger ist als der aktuelle Preis plus diese Kosten, dann ist das Laden Quatsch und man kann den Strom besser aus dem Netz beziehen. Das hat nichts mit der Einspeisevergütung zu tun, zumindest im Moment nicht. Verbesserungswürdig daran ist, das aktuell der höchste oder durchschnittliche Preis des gesamten Tages betrachtet wird. Da man den höchsten Preis ggf. aber zum jeweiligem Zeitpunkt schon hinter sich gelassen hat, wäre es besser wenn nur der höchste Preis und Durschnitt des restlichen Tages betrachtet würde.

ckvsoft commented 12 months ago

Beim Economic Check werden die höchsten oder alternativ durchschnittlichen Preise plus Ladeverluste (aktuelle kWh Preise mal Verlustprozente) plus Batteriekosten den aktuellen Preisen gegenübergestellt und abgebrochen wenn es zu teuer ist und man den Akku besser leer laufen lassen sollte. Denn wenn der Durschschnittspreis günstiger ist als der aktuelle Preis plus diese Kosten, dann ist das Laden Quatsch und man kann den Strom besser aus dem Netz beziehen. Das hat nichts mit der Einspeisevergütung zu tun, zumindest im Moment nicht. Verbesserungswürdig daran ist, das aktuell der höchste oder durchschnittliche Preis des gesamten Tages betrachtet wird. Da man den höchsten Preis ggf. aber zum jeweiligem Zeitpunkt schon hinter sich gelassen hat, wäre es besser wenn nur der höchste Preis und Durschnitt des restlichen Tages betrachtet würde.

Da muss ich mir mal einen älteren Code ansehen, vielleicht hab ich da was versehentlich weg rationalisiert. So wie es jetzt ist macht es für mich irgendwie keinen sinn

ckvsoft commented 12 months ago

Sonst funktioniert alles wie gewollt? Oder braucht es noch testst? Hab nochmal ein Update gemacht. Bessere Lesbarkeit der debug Meldungen und ein paar kleinigkeiten gefixed. Wie gesagt, der Ladeplan wird eben nicht beendet.

Von den Funktionen des Spotmarketswitcher würde mir ja eine einfache Aktivierung und Deaktivierung ausreichen. Die Bedingung wäre: 1) Wenn der Strompreis der aktuellen Stunde < als meine Einspeisevergütung für Solarstrom ist = Ladeplan aktiv. 2) Wenn der Strompreis der aktuellen Stunde > als meine Einspeisevergütung für Solarstrom ist = Ladeplan inaktiv. (Insbesondere im Winter bzw. an windreichen Tagen ist der Strompreis glücklicherweise oft unter 19Cent/kWh.(brutto))

Möglicherweise bin ich auch zu blöd das Skript vernünftig zu installieren. Wenn ich dazu komme, könnte ich nochmal das Venus OS auf einer neuen SD Karte Installieren und testen ob es vielleicht am Venus OS liegt. Am sonst laufenden System von Victron möchte ich ungern weiter rumspielen.

Ich nehme mal an Du hast tibber. Wo kommen da die Einspeise Preise her? Sind die Fix oder änderst Du das immer in der config. Bei aWATTar bekomme ich monatlich die info über den aktuelle Preis. Ich möchte das natürlich nicht immer in der config umstellen müssen

christian1980nrw commented 12 months ago

Die Einspeisepreise sind in der Regel die Vergütungen des Netzbetreibers für die PV-Einspeisung, die natürlich ohne Ladeverluste sind. Man müsste also den entgangenen Gewinn eigentlich auch noch mit einbeziehen in die Berechnungen. @ckvsoft Schau mal ob Du aus dem historischem Code die Logik ableiten kannst, ich meine das hatte eigentlich schon funktioniert. Ansonsten denken wir es uns nochmal neu aus.

ckvsoft commented 12 months ago

Verbesserungswürdig daran ist, das aktuell der höchste oder durchschnittliche Preis des gesamten Tages betrachtet wird. Da man den höchsten Preis ggf. aber zum jeweiligem Zeitpunkt schon hinter sich gelassen hat, wäre es besser wenn nur der höchste Preis und Durschnitt des restlichen Tages betrachtet würde.

Das könnte evtl für mich mehr Sinn machen. Weil egal was der Akku für kosten hat, möchte ich nicht auf alle fälle mit den höchsten Preis den Strom beziehen. Sollte man da nicht mit den aktuellen Preis gegen rechnen? Das würde für mich mehr sinn machen.

Jetzt schaut es ja so aus wenn der jetzige preis grade auch der günstigste ist dann darf der Ladeplan eigentlich Aktiv werden. Doch dann kommt der economy check der sagt das mein Akku mit allem drum und dran weniger kostet als der höchste Preis und schaltet den Ladeplan ab.

Beispiel: Höchstpreis 30.00 / kWh Akkukosten + Alles 15.00 / kWh Current Preis 2.00 / kWh

Da dürfte ja um 2.00 geladen werden doch es wird nicht weil die 30.00 (was ja schon waren oder irgendwann erst kommt) mehr ist als 20.00

ckvsoft commented 12 months ago

Die Einspeisepreise sind in der Regel die Vergütungen des Netzbetreibers für die PV-Einspeisung, die natürlich ohne Ladeverluste sind. Man müsste also den entgangenen Gewinn eigentlich auch noch mit einbeziehen in die Berechnungen. @ckvsoft Schau mal ob Du aus dem historischem Code die Logik ableiten kannst, ich meine das hatte eigentlich schon funktioniert. Ansonsten denken wir es uns nochmal neu aus. @christian1980nrw Macht eigentlich das gleiche, nur funktionierte ja die charging_conditions Logic davor nicht. Die war ja so und so immer wahr.

Die economic_check abfrage wird ja auch ausgeführt und funktioniert, das sehe ich in den Debug ausgaben Nur hat er die ganze Nacht nicht geladen weil eben bei einstellung 2 der durchschnittspreis höher als der errechnete Batteriekosten Preis war. Hat dadurch nicht eingeschaltet.

Ich habe also in der Nacht "billigen Strom verschenkt" und erst mit der neuen Preisliste als es anscheinend billiger war doch relativ teuer geladen.

ckvsoft commented 12 months ago

@christian1980nrw Eigentlich sollten wir die charging_conditions machen lassen und dann beim check es mit den gerade aktiven preis gegenrechnen. Wenn die charging_conditions nicht anschlagen macht er ja den check so und so nicht weil ja execute_charging 0 ist und erst gar nicht in die abfrage gesprungen wird

ckvsoft commented 12 months ago

@christian1980nrw

Die Einspeisepreise sind in der Regel die Vergütungen des Netzbetreibers für die PV-Einspeisung, die natürlich ohne Ladeverluste sind. Man müsste also den entgangenen Gewinn eigentlich auch noch mit einbeziehen in die Berechnungen.

Ja nur bei aWattar sind die nicht fix. Man kann die zwar in einen Google Spreadsheet anschauen doch da müsste automatisch gehen.

christian1980nrw commented 12 months ago

Nur damit wir nicht aneinander vorbei reden, so wie im Excel war es ursprünglich mal gedacht. Siehe Anlage.

eco_check.xls

ckvsoft commented 12 months ago

@christian1980nrw Ja so hätte ich es auch gemeint. Hab das evtl. etwas blöd ausgedrückt. Nur jetzt macht die abfrage das genau umgekehrt.

Hab grad eine Abfrage gestartet

Victron scheduled charging is ON. Battery SOC is at 100 %. Charging based on average price (0.27175 €) comparison makes sense. total_cost=0.5153 €

Er ladet obwohl er ja nicht laden sollte, Die Gesamtkosten sind ja höher als der Durchschnittspreis Das war es ja was ich schon vom Anfang an gemeint habe ob das -ge nicht ein -le sein sollte,

christian1980nrw commented 12 months ago

@ckvsoft Moin. Habe das Excel vorhin nochmal getauscht, da war noch ein Fehler drin, war schon spät. Wie rechnest Du denn die unterschiedlichen Preiseinheiten der APIs um oder lässt Du die in den jeweiligen Einheiten?

ckvsoft commented 12 months ago

@ckvsoft Moin. Habe das Excel vorhin nochmal getauscht, da war noch ein Fehler drin, war schon spät. Wie rechnest Du denn die unterschiedlichen Preiseinheiten der APIs um oder lässt Du die in den jeweiligen Einheiten?

@christian1980nrw Ich hab das ja belassen wie es war. Das passt schon mit den millicent.

Habe die Abfrage jetzt so gelassen wie sie war, hab aber den rückgabe wert umgedreht. Jetzt sollte es passen

if Durchschnittspreis (22) -ge Totalpreis (20) (Berechnung inkl. Batteriekosten und Verluste) kommt in der bash ja 0 raus was in unseren fall aber mit richtig zu vergleichen wäre. War für mich auch etwas was ich noch nicht wusste

Die bash geht immer davon aus das 0 kein Fehler ist und alles andere ein Fehler

ckvsoft commented 12 months ago

Ihr könnt gerne wieder die DVE Version testen. Sollte jetzt passen wget "https://raw.githubusercontent.com/ckvsoft/Spotmarket-Switcher/dev/scripts/controller.sh"

ckvsoft commented 12 months ago

@ckvsoft Moin. Habe das Excel vorhin nochmal getauscht, da war noch ein Fehler drin, war schon spät.

@christian1980nrw Ja so gehts mir auch. Feile Stundenlang herum um einen Fehler einzugrenzen. Am nächsten Tag schau ich mir das an und denk mir was hab ich da für an Blödsinn gemacht. und schwupp Fehler gefunden ;-)

christian1980nrw commented 12 months ago

@ckvsoft Übernimm bitte noch die beiden Änderungen. Habe an der Entso-E Api noch gefeilt. Besorg Dir da mal einen API-Key (siehe Kommentare in der config.txt), Österreich müsste auch drin sein. https://github.com/ckvsoft/Spotmarket-Switcher/compare/main...christian1980nrw:Spotmarket-Switcher:main

ckvsoft commented 12 months ago

@ckvsoft Übernimm bitte noch die beiden Änderungen. Habe an der Entso-E Api noch gefeilt. Besorg Dir da mal einen API-Key (siehe Kommentare in der config.txt), Österreich müsste auch drin sein. ckvsoft/Spotmarket-Switcher@main...christian1980nrw:Spotmarket-Switcher:main

hab ich gemacht. Ich fang mit den Entso-E Zeugs nicht viel an ;-)

christian1980nrw commented 12 months ago

@ckvsoft Übernimm bitte noch die beiden Änderungen. Habe an der Entso-E Api noch gefeilt. Besorg Dir da mal einen API-Key (siehe Kommentare in der config.txt), Österreich müsste auch drin sein. ckvsoft/Spotmarket-Switcher@main...christian1980nrw:Spotmarket-Switcher:main

hab ich gemacht. Ich fang mit den Entso-E Zeugs nicht viel an ;-)

Falls aWATTar mal ne Störung hat, hättest Du noch ne Alternative. Du musst die API halt nur einmal kurz umkonfigurieren. Steht im Standard auf Deutschland.

ckvsoft commented 12 months ago

Und die Preise sind dann ähnlich oder wie?

Vielleicht könnt ma ja da einen fall-back einbauen ;-)