reinhard-brandstaedter / solarflow-control

A tool to automatically control Zendure's Solarflow hub with more flexibility to match home power demand
53 stars 9 forks source link

Recommended full charge interval #268

Open sturowski opened 1 week ago

sturowski commented 1 week ago

Dear Contributors, I'm completly new in solar (since 3 weeks). Can you tell me what is the beste interval for fully charge my battaries? I mean the config param: full_charge_interval And why :-) Thanks! Sven

reinhard-brandstaedter commented 1 week ago

Hi Sven,

it’s not that important, but to keep the batteries well calibrated (also in winter) I’d say a couple days. It also depends on your peak panel power. I’m using 5 days for example.

sturowski commented 1 week ago

I have 2kwp with an AB2000 battary. So a good start is to set full_charge_interval to 120?

sturowski commented 1 week ago

My current config looks so, is this good:

[global]
# DTY Type: either OpenDTU or AhoyDTU
dtu_type = OpenDTU
# Smartmeter Type: either Smartmeter (generic, Tasmota, Hichi, ...), PowerOpti, ShellyEM3
smartmeter_type = Smartmeter

[solarflow]
# The product ID specifies the model of Solarflow hub to use: Hub-1200: "73bkTV" Hub-2000: "A8yh63"
# defaults to 73bkTV
product_id = A8yh63
# The device ID of your Solarflow Hub (typically 8 characters), you can get these either with solarflow-bt-manager or the solarflow-statuspage
device_id = *******

# The time interval in hours that solarflow-control will try to ensure a full battery
# (i.e. no discharging if battry hasn't been at 100% for this long)
full_charge_interval = 120

# Let solarflow-control take over enabling/disabling the bypass of the hub (direct solarinput to hub output when battery is full)
# this overrides the automatic switching by the hub's firmware, which is sometimes a bit wierd
control_bypass = true

[mqtt]
# Your local MQTT host configuration
mqtt_host = *****
#mqtt_port = 
mqtt_user = *****
mqtt_pwd = ******

[opendtu]
# The MQTT base topic your OpenDTU reports to (as configured in OpenDTU UI)
base_topic = solar
# your Inverters serial number
inverter_serial = *****

# List of indices of the inverter channels/ports (as reported in the DTU) that the Solarflow Hub is connected to
# typically the index starts at 1 as 0 is the output channel of the inverter
# e.g. 1,3 or 3 or [1,3]
sf_inverter_channels = [1,2]

[smartmeter]
# The MQTT base topic your Hichi, Tasmota, generic smartmeter reader reports to
base_topic = sensors/sml/******
# if the published value at the base_topic is a JSON type then these accessors are used to get the power values
# e.g. if Smartmeter reader posts { "Power": {"Power_curr": 120, "Total_in": 12345.6} }
cur_accessor = smartmeter_wirkleistung_w
total_accessor = smartmeter_wirkarbeit_verbrauch_total_wh
# rapid change difference defines the difference in W that has to be detected on the smartmeter readings to consider it a fast drop or rise in demand.
# this helps a faster adjustment in switching various limits e.g. when a water boiler is turned on/off
rapid_change_diff = 500
zero_offset = 20

[control]
min_charge_power = 0
max_discharge_power = 150
max_inverter_limit = 800                                                
limit_inverter = true
inverter_min_limit = 10
battery_low = 10
sturowski commented 1 week ago

I think there's something wrong with my configuration. The sun ist mostly gone, battery is full but it's not using the battery. What is wrong:

2024-06-24 14:34:09,224:INFO: HUB: S:60.0W [ 60.0,60.0 ], B:100% (100), V:50.5V (50.5), C: 0W, P:True (manual, not possible), F:0.0h, E:-1.0h, H: 57W, L: 0W
2024-06-24 14:34:09,224:INFO: INV: AC:106.4W, DC:208.2W (33.1|33.0|73.6|74.3), L:799W (199.8W/channel) [ -1W]
2024-06-24 14:34:09,224:INFO: SMT: T:Smartmeter P:338.0W [ 338.0,338.0 ]
2024-06-24 14:34:09,225:INFO: Direct connected panels (80.4W) can't cover demand (434.4W), trying to get 354.0W from hub.
2024-06-24 14:34:09,225:INFO: Based on time, solarpower (60.0W) minimum charge power (0W) and bypass state (True), hub could contribute 400.0W - Decision path: 0.2.
2024-06-24 14:34:09,225:INFO: Hub should contribute more (400.0W) than what we currently get max from panels (40.4W), we will use the inverter for fast/precise limiting!
2024-06-24 14:34:09,225:INFO: Hub has recently adjusted limit, need to wait until it is set again! Current limit: 0, new limit: 0.0
2024-06-24 14:34:09,225:INFO: Not setting inverter output limit as it is identical to current limit!
2024-06-24 14:34:09,225:INFO: Sun: 05:19 - 21:53 Demand: 434.4W, Panel DC: (80.4W), Hub DC: (36.0W), Inverter Limit: 800.0W, Hub Limit: 0.0W
2024-06-24 14:34:09,226:INFO: SMT triggers limit function: 338.0 -> 338.0: executed
2024-06-24 14:34:17,310:INFO: Reading last full time: 2024-06-24 14:34:17
2024-06-24 14:34:17,352:INFO: Reading battery target mode: discharging
welli2009 commented 1 week ago

Your Bypass is still activated. Bypass means all solar input is delivered straight into your home. It is triggered, when the hub reaches 100%. There are a few possibilities: 

sturowski commented 1 week ago

What do you recommend, activate or not bypass control?

welli2009 commented 1 week ago

I would recommend activating it or controlling it over home assistant, for me it works best with a home assistant automation.

sturowski commented 1 week ago

I dont have Home Assistant, it's my next project after solar is working I expect :-) What are the benefits of activating it? For me my solarpanels are on my garage and at 18:00 the sun is over there. But sunset is 21:53 atm in solarflow-control so it dont uses the battery power. So I have two options, setting the sunset offset more to 18:00 or disable bypass I'm right?

reinhard-brandstaedter commented 1 week ago

You have a Hub2k. Hub2k has issues with reporting the bypass state properly (behaves different when in auto mode or in manual mode). Let the hub control the bypass by it's own logic. Set control_bypass = false

reinhard-brandstaedter commented 1 week ago

Also you haven't set the sunrise/sunset offset. So sfcontrol will by default only start discharging after sunset. To change that you can adjust these offset times:

# Offset in minutes after sunrise/before sunset. Can be used to set the duration of what is considered "night"
#sunrise_offset = 
#sunset_offset = 
sturowski commented 1 week ago

Thanks for your help :-)

sturowski commented 6 days ago

@reinhard-brandstaedter I have a confusing Problem. If my battery ist full, my Hub stops Solarinput and sf-control Help the hub. I found some other people with this Problem on Facebook. Do you have some Tipps or fixed IT?

sturowski commented 6 days ago

@reinhard-brandstaedter ich wechsel mal kurz auf Deutsch, weil das jetzt gerade leichter ist für mich :D Ich habe den SunsetOff mal auf 6h gesetzt. Durchdurch greift das bei mir jetzt. Dann gelange ich in den Pfad 2.1 wodurch ich aus dem Akku ziehe. Und dann damit wieder den Solar Input aktiviere. Meine Überlegung ist, ob man nicht eine Art "virtuellen Bypass" versucht zu erkennen. Das bedeutet für mich, der HUB Schaltet den Solar-Input bei 100% Ladung ab. Wenn wir ab z.b. 95% (konfigurierbar) Ladung nichts mehr in den Akku lassen, außer mal alle paar Tage zum voll laden, dann müsste der den Solar-Input nicht mehr abschalten und wir hätten das Problem gelöst. Wäre das eine Überlegung?

Kurz zu mir, ich bin Softwareentwickler für hochverfügbare Systeme aus Mönchengladbach.

reinhard-brandstaedter commented 6 days ago

Hi @sturowski, in einer typischen bypass situation wird der SolarInput nicht abgeschaltet sondern nur temporär runtergeregelt. Dann schaltet das Bypass Relais und trennt den SolarInput damit von der Batterie, alles geht direkt an den Ausgang/Wechselrichter. Diese Vorgehensweise soll wohl das Relais schonen damit es nicht unter Volllast geschalten wird. SolarInput lässt sich leider nicht über den MQTT regeln wie z.b. HomeOutput.

Ein typischer Bypass switch sollte also so aussehen: (btw. hier handelt es sich um einen manuellen switch, das tatsächliche schalten des Relais erfolg erst ca. 5min nach dem Kommando für das Schalten)

image

Mich wundert dass Verhalten dass quasi der ByPass nicht anspringt. Das gabs am Anfang (ältere Firmware) mal, aber in einer aktuellen Version sollte das nicht mehr passieren. Hast du mal verschiedene Kombinationen von Bypass auto-recover und bypassMode auto versucht? wenn der bypass im auto mode ist sollte das eigentlich relativ gut gehen, obwohl ich auch da schon gehört habe dass das Umschalten manchmal 30-60 min gedauert hat.

Das mit dem "virtuellen bypass" wird IMO auch nicht so zuverlaessig funktionieren. Entweder man setzt dann die Ladegrenze auf 95% und den Bypass auf off. Dann wuerde der Hub trotzdem den SolarInput runterregeln wenn z.b. kein Demand vom Wechselrichter kommt (z.b. der WR auf > SolarInput des hubs geregelt ist). Eigentlich müsste es ja dann reichen den ByPass auf permanent off zu stellen, der Hub sollte dann nicht versuchen irgendwas runterzuregeln fuer einen potentiellen Relais switch.

sturowski commented 6 days ago

Hey @reinhard-brandstaedter, ich habe meinen Bypass auf Off. Der Wechsel von Akku 100% auf Bypass geht wunderbar. Aber zurück dauert ewig auch wenn schon lange keine Sonne mehr da ist, deswegen habe ich den aus geschaltet. Dann tritt aber das Problem auf, dass er dennoch den SolarInput runter regelt, aber dann nicht das Relais schaltet sondern einfach gar nichts mehr macht. Das ist anscheinend ein Softwarefehler im HUB. Ich habe in deinen Code mal eine Erkennung von mein Szenario eingebaut. Sobald ich auf 100% Akku bin, der Hub-Solar-Input auf 0 ist und am Wechselrichter directDCPower aber was kommt, dann ziehe ich kurz Ladung aus dem Akku, das würde wegen dem Sunset if Statement ja sonst nicht gehen. Sobald ich aus dem Akku gezogen habe, öffnet der HUB wieder den SolarInput. Ich habe das gestern mit dem SunsetOffset probiert und ging wunderbar. Nur dann war der auf MAX_DISCHARGE_POWER geregelt, das ist blöd. Ich muss dann in den "virtuellen bypass" gehen und sf_contribution immer auf min(hub_solarpower, hub.getInverseMaxPower()) stellen, so wie beim normalen Bypass. Ich werde das dann heute mal testen bei uns, soll wieder viel Sonne scheinen. Wenn es klappt, stelle ich einen PullRequest, dann kannst du dir das mal angucken.

reinhard-brandstaedter commented 6 days ago

Hi @sturowski , wie genau ist dein setup? Lt. dem oben nehme ich an du hast Panele am Hub, aber auch direkt am WR?

ich habe meinen Bypass auf Off. Der Wechsel von Akku 100% auf Bypass geht wunderbar. Aber zurück dauert ewig auch wenn schon lange keine Sonne mehr da ist, deswegen habe ich den aus geschaltet.

Was heisst bei dir "keine Sonne mehr"? Den Bypass schaltet er (im auto modus) wirklich erst wieder aus wenn ca. < 15W (hub Eigenbedarf) anliegt. Da muss es schon sehr dunkel sein.

sturowski commented 6 days ago

Erstmal mein Setup: 2 Module gehen in den HUB und der HUB dann am WR (Hoymiles HMS-18004t). 2 Module gehen in eine Anker e1600 und von da aus in den WR.

Die Anker war im Set mit dabei bei den Modulen und dem WR, das Zendure habe ich nachgekauft, weil steuerbar.

Da habe ich nicht so genau drauf geachtet, kann sein, dass da noch über 15W waren.

Sprich man würde dann in kauf nehmen, dass in der Zeit, wo der Bypass an ist viel Strom eingekauft wird und der Akku wird dann in der Nacht nur verwendet?

reinhard-brandstaedter commented 6 days ago

Tatsaechlich ist es so dass es ein Zeitfenster gibt (sunset - offset) ab dem Einspeisen aus der Batterie erlaubt wird. Wenn der Bypass an ist und den Bedarf noch decken kann wird dieser nicht ausgeschalten. Wenn allerdings der Bedarf in diesem Fenster höher ist als was mit Bypass reinkommt dann wird dieser ausgeschalten. (natürlich vorausgesetzt dass die bypass Steuerung funktioniert - was ja im falle des hub2k immer noch fraglich ist). Allerdings wird der Bypass nicht wieder angeschalten sollte der input in diesem Fenster doch nochmal steigen um möglichst wenig unnötige Schaltungen durchzuführen (was übrigens ein Manko bei der SF eigenen Steuerung ist, den diese kann schon zigmal on/off gehen wenn batterie voll, ein bischen entladen, wieder voll, wieder entladen wird.

Darum sieht man im log auch soetwas wie possible|not possible:

HUB: S:234.3W ... C: 235W, P:False (manual, possible), F:40.1h, E:76.0h
sturowski commented 5 days ago

@reinhard-brandstaedter das Problem hat sich jetzt in soweit gelöst, wir haben unseren Pool jetzt aufgebaut und die Pumpe läuft in Summe 14h am Tag, der Akku wird gar nicht mehr voll :D außer halt dann alle paar Tage.

reinhard-brandstaedter commented 5 days ago

Naja, im winter wirst du dann das Thema wieder haben.

sturowski commented 5 days ago

Produziere ich da trotzdem so viel Solarstrom, dass das passiert? Wie sind denn da so deine Erfahrungen? Wenn es im Winter/Herbst wieder auftritt, dann habe ich ja immer noch meinen Fix, den ich dann testen kann :-)