Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Steuerung S10 aus Homematic, z.B. Setzen Ladeleistung #67

Closed
bs0001 opened this issue Sep 6, 2021 · 10 comments
Closed

Steuerung S10 aus Homematic, z.B. Setzen Ladeleistung #67

bs0001 opened this issue Sep 6, 2021 · 10 comments

Comments

@bs0001
Copy link

bs0001 commented Sep 6, 2021

Hallo Nico,

bezugnehmend auf Deinen Vorschlag auf Issue #58 lege ich diesen Punkt hier separat an.

Hier der direkte Link auf die Beschreibung: Link

Hier noch einige weitere Anmerkungen:

1. "actionCheckHM.c"
Das war nur eine Idee, um des von der Wallbox-Implementierung zu separieren. M.E. muss das aber auch gar nicht sein. Wenn es eine Möglichkeit gibt, jegliche Befehle (Wallbox oder Homematic direkt) auszuführen, um so besser. Dann vielleicht sogar über den allgemeineren Namen hier mit actionCheckHM. Dann hat es nicht den Touch, dass man meinen könnte, es wären nur Wallbox-Funktionen ausführbar. Aber sehr cool geregelt mit diesem Mechanismus!

2. RscpMain_20210826_1415.txt

2.1. Ladeleistung setzen
So wie es in Zeile 174-215 drinnen steht, funktioniert das Senden der maximalen Ladeleistung an den E3DC. Ist zwar unschön von der Örtlichkeit aber zumindest für mich temporär schon mal so nutzbar. Unter Punkt Nr. 4 noch ein paar Gründe bzgl. dem Wunsch der flexiblen Anpassung der Ladeleistung.

2.2. Auslesen der Ladeleistung
In Zeile 802-878 sind die TAG-Aufrufe ja enthalten. Aber irgendwie funktioniert es nicht mit dem Auslesen. Es erscheint immer eine Fehlermeldung.
TAG_EMS_GET_POWER_SETTINGS/TAG_EMS_SET_POWER_SETTINGS Durchlauf # 1
TAG_EMS_GET_POWER_SETTINGS 0x01000100 received error code 3.
TAG_EMS_GET_POWER_SETTINGS - Fehler beim Durchlauf!

3. Anpassung RWData.h
Mein Workaround mit der RWData.h mit readHM könntest Du ggf. auch ändern, damit Redundanzen an Funktionen vermieden werden.

4. Ladeleistungsoptimierung
Ich benötige dies, da ich über 24kWp auf dem Dach habe (Ost/West), der S10 E Pro 20kW DC-Eingangsleistung verarbeiten kann jedoch "nur" 12kW an AC-Ausgangsleistung ins Hausnetz geben kann. Das Delta von 8kW kann nur über vorhandenen Platz im Akku (ist ja der einzige DC-Verbraucher im Haus) kompensiert werden. Ist der Akku voll werden sonst "nur" 12kW vom Dach geholt obwohl mehr gehen würde.
Klar, man könnte dies mittels eines weiteren Wechselrichters auch lösen (wäre dann aber zusätzliche Hardware) und ich könnte meine Auswertungen (MPP1 = Ost, MPP2 = West) evtl. nicht mehr so schön machen. Von daher wollte ich dies vermeiden. Mit der Spezifikation 10/2021 kommt wohl ein leistungsstärkerer Wechselrichter bei E3DC zum Einsatz in den S10-Geräten. Habe die technischen Daten mal angefordert.
Evtl. kann ich mein Gerät ja upgraden. Nun aber noch zu der Ladeleistungsoptimierung, wie ich diese in Homematic (HM) implementiert (zumindest etwas vereinfacht) habe, für alle Interesierten:
Wetter-Forecast mit u.s. Sonnenscheindauer und Schnee hab ich in der HM. Morgens gegen 5h läuft ein Programm um zu ermitteln, was heute für ein Tag ist. SUNNY, CLOUDY, AWFUL.
Entsprechend der aktuellen Jahreszeit (bei mir gibts Jahreszeit früh und spät, also Frühling früh, Frühling spät, Sommer früh ...) ivm. mit dem Wetter heute wird festgelegt, wie hoch die minimale Ladeleistung sein soll (damit kann man vermeiden, dass die Ladung an wolkigen Tagen ständig unterbrochen wird sondern zumindest auf einem definierten Level läuft) und wie schnell die Ladeleistung bei über 12kW PV-Leistung nach oben geregelt werden soll. Um die Mittagszeit wird dann geprüft, wie das Wetter morgen sein soll. 2 Stunden (im Winter 3 Stunden) vor Sonnenuntergang wird dann festgelegt anhand des SoC-Levels wie stark zum Tagesende die Akkus geladen werden sollen. Ist das Wetter topp, dann nur gering, ist das Wetter furchtbar, dann je nach Jahreszeit recht hohe Ladeleistung. Ich lasse das Programm tagsüber alle 20 Sekunden laufen und die Ladeleistung anpassen. Die Ansteuerung an den S10 nehme ich nur dann vor, wenn sich die Ladeleistung zum aktuell eingestellten Wert verändert hat.
Aktuell ist in der HM noch einiges fest an Werten programmiert. Sollte mein Versuch positiv verlaufen (und so sieht es aus), dann werde ich mir noch diverse Variablen anlegen, so dass ich die Anpassung meines Ladeleistungswunsches direkt in der App vornehmen kann ohne das Coding anzupassen.
Ich hatte vorher festgestellt, wenn die Akkus voll waren, dass die PV-Leistung schlagartig auf 12kW reduziert wurde. Da bin ich auf die Suche nach Gründen gegangen (E3DC-Support hat mich da aufgeklärt) und habe nach einer kreativen Lösung gesucht.
Mit diesem Szenario ist es mir gelungen, dann etwas über 20.000W an PV-Power vom Dach zu holen.

5. Batterieentladung
Ich fürchte dieses Szenario lässt sich aktuell nicht realisieren. Ich habe keinen TAG gefunden, mit dem eine bestimmte Menge an SoC ins Netz entladen werden kann. Habe hierzu ein Ticket bei E3DC eröffnet und nachgefragt sowie den Wunsch geäußert. Gerade im Hochsommer, wenn ohnehin sehr viel Helligkeit und Sonne da ist, kann es daher sinnvoll sein, bestimmte Verbraucher (z.B. Auto teilweise laden, Spülmaschine ...) einzuschalten, um den SoC zu reduzieren, damit man tagsüber genügend Puffer hat, die Leistung über 12kW auch einfangen zu können.

Es wäre generell sehr cool, wenn Du die Implementierung so vornehmen würdest, dass diese so allgemeingültig ist, dass man sich selbst Parameter in der Homematic definieren kann, um später dann im E3DC entsprechende Aktionen auszuführen. Dies habe ich mit der Variable "hmSendNowAction" schon mal so vorbereitet.

Bei Bedarf bin ich gerne behilflich oder versuche Fragen zu beantworten.
Gerne stelle ich Dir meine Lösung auch mal vor, wie ich das Ganze in der App visualiert habe.

Beste Grüße
Bernd

@bs0001
Copy link
Author

bs0001 commented Sep 14, 2021

Hallo Nico,

bezugnehmend auf Punkt Nr. 4 hätte ich noch eine Ergänzung.

Aktuell ist es so (für mich nicht nachvollziehbar, bin hier mit E3DC in Kontakt), dass der S10 E Pro oftmals Abends gegen 20.45h oder morgens gegen 6.30h plötzlich umschaltet auf Netzbezug, obwohl der SoC in den Batterien noch genügend Leistung hat.

Momentan habe ich vereinbart, dass ich tagsüber die manuelle Steuerung einstelle und nach Sonnenuntergang bis direkt nach Sonnenaufgang den automatischen Lademodus aktivieren. Ist natürlich etwas lästig. Ich hoffe mal, der Grund findet sich bald, warum das so ist.

Aber nun zum Thema. Es wäre prima, wenn auch die Umstellung von automatischem und manuellem Lademodus mit dem o.g. Szenario möglich ist.
Habe mal die Portalseite debuggt und bin auf folgendes gestoßen:
function switchManLoadActiv(x) {
dataProxy.rscp.request(
dataProxy.rscp.containerFactory("EMS_REQ_SET_POWER_SETTINGS",
dataProxy.rscp.dataFactory("EMS_POWER_LIMITS_USED", "Bool", (x) ? "true" : "false")
))
.then(function (data) {
(controlvalues.cb_manload()) ? $('#powerEConfig').show() : $('#powerEConfig').hide();
}, function (data) {
console.error("Fail send powersave");
});
}

Bei der Umstellung von automatisch auf manuell wird der Wert "untere Lade-/Entladeschwelle" standardmäßig auf 65W gesetzt. Meist setze ich in auf 5W runter.
Folgende Stelle habe ich im Debugging gefunden:
if (typeof objs.EMS_MAX_CHARGE_POWER === 'object') {
controlvalues.ip_maxla(objs.EMS_MAX_CHARGE_POWER.value);
$('#maxChargePowerValue').text(objs.EMS_MAX_CHARGE_POWER.value);
} else {
console.error("missing: EMS_MAX_CHARGE_POWER");
}

if (typeof objs.EMS_MAX_DISCHARGE_POWER === 'object') {
	controlvalues.ip_maxent(objs.EMS_MAX_DISCHARGE_POWER.value);
	$('#maxDischargePowerValue').text(objs.EMS_MAX_DISCHARGE_POWER.value);
} else {
	console.error("missing: EMS_MAX_DISCHARGE_POWER");
}

if (typeof objs.EMS_DISCHARGE_START_POWER === 'object') {
	controlvalues.ip_unent(objs.**EMS_DISCHARGE_START_POWER**.value); // gibt es nicht mehr
	$('#lowerDischargeLimitValue').text(objs.EMS_DISCHARGE_START_POWER.value);
} else {
	console.error("missing: EMS_DISCHARGE_START_POWER ");
}

Warum der Hinweis "// gibt es nicht mehr" da steht, weiß ich nicht. Vielleicht wird dieser Regler in naher Zukunft aus dem Portal rausgenommen. Durch das, dass ich ja mit dem ersten in der Abfrage genannten TAG (EMS_MAX_CHARGE_POWER) arbeite, um die maximale Ladeleistung zu setzen, sollte das kein so großes Problem sein, auch den Wert der EMS_DISCHARGE_START_POWER mitzugeben.

Ich muss mal schauen, wie ich dazu komme. Vielleicht gehe ich auch schon mal ran und versuche es zu integrieren, damit Du es übernehmen kannst.

Viele Grüße
Bernd

@nischram
Copy link
Owner

Hallo Bernd,

das ist ja interessant, dass man die TAGs auch im Portal auslesen kann. Deine Info stimmt mit meiner Vermutung über ein, nur scheint der Schalter (bool) true und false zu sein, was ja irgendwie bei bool auch logisch ist.
Wie schon erwähnt habe ich aktuell wenig Zeit mich um das Thema zu kümmern. Ich werde aber mal schauen ob ich in der nächsten Zeit wenigstens die TAGs mal testen kann. Irgendwie muss das doch gehen und klappen. Oder du bekommst es schon hin, dann wird das einbauen wohl nicht so ein Problem sein. Zumindest wenn ich erstmal nur auf die "Action" Datei setzte.

VG Nico

@bs0001
Copy link
Author

bs0001 commented Sep 18, 2021

Hallo Nico,
ich habe es hinbekommen, dass man zwischen manuell und automatisch umschalten kann, die StartPower vergibt, Wetterprognose und Energiesparen ein- und ausschalten kann sowie die Werte, die man auch im Portal direkt einstellen kann nun aus dem S10 in die HM schreibt.
Ich muss nur noch alles zusammenschreiben und etwas Code aufräumen, dann stelle ich es hier rein.
Du kannst anschließend ja bei Gelegenheit mal schauen (eilt ja nicht), dass das Coding an den richtigen Ort platziert wird. Am aktuellen Ort gefällt es mir nicht so gut, aber als Interimslösung passt es.
Viele Grüße
Bernd

@bs0001
Copy link
Author

bs0001 commented Sep 19, 2021

Hallo Nico,

wie angekündigt hier die aktuelle Version mit folgenden Updates zu den bisher benannten Punkten:

1. actionCheckHM.c
In der RscpMain_20210920_0852.txt habe ich ab Zeile 171 einige Punkte beschrieben.
Ich denke zukünftig sollten diese Zeilen in die actionCheckHM.c und RscpSet.cpp überführt werden, so dass nur noch die elementaren Punkte in der RscpMain.cpp enthalten sind.
Wäre gut, wenn Du das bei Gelegenheit überführen könntest. Eilt aber nicht, da ich erst mal uneingeschränkt mit dieser Lösung arbeiten kann.
Es würde aber die Updatefähigkeit verbessern, wenn ein Großteil meiner Punkte in die zukünftige Lösung überführt werden.
Anbei die Datei.
actionCheckHM_20210824_1754.txt

2. RscpMain.cpp
Sowohl das Setzen der Werte (Zeile 171-247) als auch das Schreiben der Werte in die Homematic (Zeile 120, Zeile 805-892, insbesondere mit den printsendHM-Befehlen) funktioniert nun.
Ich habe gleich alle möglichen Variablen noch mitgenommen, welche unter den SmartFunktionen im E3DC-Portal enthalten sind.
Also auch Wetterprognosen, Werte aus Manuelle Speicher-Ladeleistung und Speicher-Entladeleistung incl. Einschaltung manuelle oder automatische Ladung sowie die PowerSave-Funktion.
Konnte alles im S10 beschreiben als auch auslesen und in die Homematic schreiben.
Ich musste etwas ausprobieren, um herauszufinden, wann der S10 gewillt ist meine Werte anzunehmen. Beispiele mit fixen Werten (auskommentiert) findest Du in Zeile 234-240. In den Zeilen obendrüber werden meine festgelegten Werte korrekt übermittelt.
Die "parameter_20210920_0852.txt" habe ich ebenfalls mit angehängt, falls interessant.
Habe versucht (ich denke es müsste auch überall passen) meine Anpassungen mit BS im Coding gekennzeichnet, damit Du siehst, was ich so verändert habe.
Für das Wegschreiben der Wallbox-Einstellungen in die Homematic habe ich noch die Zeilen 424 und 432 aufgenommen.
RscpMain_20210920_0852.txt
parameter_20210920_0852.txt

3. Anpassung RWData.h
Mein Workaround mit der RWData.h mit readHM könntest Du ggf. auch ändern, damit Redundanzen an Funktionen vermieden werden.
RWData_20210826_1414.txt

4. Ladeleistungsoptimierung
Habe in der Homematic noch weitere Einstellmöglichkeiten und Anpassungen vorgenommen. Vom Funktionsprinzip ist aber alles gleich geblieben. Letztendlich steuere ich die maximale Ladeleistung des Akkus.
Ich hatte allerdings mehrfach schon festgestellt, dass der S10 bei der manuellen Einstellung Abends oder früh morgens (jeweils, wenn keine PV-Leistung vorhanden war) einfach umgestellt hat und Strom aus dem Netz bezogen hat statt aus dem Akku, obwohl noch genügen Batterieleistung vorhanden gewesen wäre. Hierzu läuft nach wie vor ein Ticket bei E3DC, da ich gerne wüsste, was zu diesem Verhalten führt.
E3DC sagte, ich soll bis zur endgültigen Analyse auf automatische Ladung umstellen, was ich wiederrum nicht möchte, da sonst die Ladeleistungsoptimierung ja nicht funktioniert. Bin so mit ihnen verblieben, dass ich tagsüber mit der manuellen Einstellung und abends bis früh morgens mit der automatischen Einstellung arbeitet. Das war ja auch der Grund, dass ich diese Einstellung gerne automatisch setzen würde.
Das klappt nun. Mittels zweier Homematic Programme wird der automatische Modus zum Sonnenuntergang gesetzt und zum Sonnenaufgang die Parameter für den manuellen Lademodus.

5. Batterieentladung
Ich denke mal, dafür gibt's derzeit keine Funktion (TAG). Als Verbesserungsvorschlag habe ich das bei E3DC bereits eingereicht.

Bei Fragen melde Dich gerne. Ansonsten wie gesagt, wäre es toll, wenn meine Punkte in Deinem Projekt ein Plätzchen finden würden.

Viele Grüße
Bernd

@nischram
Copy link
Owner

Hallo Bernd,

wie schon erwähnt, super Vorarbeit! Aber wie auch bei mir, wenn Eigeninteresse besteht ist man einfach mit Hochdruck dabei.
Ich werde deine Ansätze auf jeden Fall mal einbauen, eventuell auch mit Einstellmöglichkeiten auf meinem Display.

Gut das du schreibst, dass es nicht eilt, denn ich bin ja ehrlich, aktuell fehlt die Lust mich um das Projekt zu kümmern. Aber es wird gemacht, wobei ich wohl erst sortieren muss was alles umgesetzt werden soll/muss. Ich habe aber Hoffnung für das Projekt, denn die Terrassensaison ist vorbei und die Sofazeit beginnt 😉!

Danke soweit und viele Grüße
Nico

@nischram
Copy link
Owner

nischram commented Oct 3, 2021

Hallo Bernd,
ich bin bis jetzt ganz zufrieden. Ich bekomme die Limits alle ausgelesen und Teilweise gesetzt.
Hast du das setzen vom Powersave oder der Wetterprognose hinbekommen?
Die Variable muss wohl als uchar8 übergeben werden, aber da weiß ich nicht wie ich die deklarieren oder füllen soll.
Ansonsten lasse ich die Punkte aus, denn so wichtig sind die ja auch nicht. Powersave würde ich immer anlassen, denn warum soll wenn keine Sonne da ist und die Batterien leer sind der WR weiter Strom verbrauchen. Die Wetterprognose kann schon mal geändert werden aber laufend macht man das auch nicht.

VG Nico

@bs0001
Copy link
Author

bs0001 commented Oct 3, 2021

Hallo Nico,
habs gerade mal geprüft. Derzeit lese ich Powersave und Wetterprognose nur aus. Ich dachte, ich hätte die Werte auch schon mal gesetzt, konnte aber nichts dazu finden. Ich versuche die nächsten Tage den Wert mal zu setzen. Heute komme ich wahrscheinlich nicht dazu.
Viele Grüße
Bernd

nischram added a commit that referenced this issue Oct 3, 2021
- Issue #58 Mit der "Rscp/actionCheckHM.c" kann nun auch die Notstromreserve von der HM aus geändert werden.
- Issue #67 Auf dem Display so wie mit der "Rscp/actionCheckHM.c" können sie BAtterie-Limits des S10 geändert werden.
- Issue #66 Auf dem Display werden einige Sonderinformationen angezeigt.
- "Rscp/wbCheckHM.c" umgebaut nach "Rscp/actionCheckHM.c".
@nischram
Copy link
Owner

nischram commented Oct 3, 2021

Hallo Bernd,

danke für die schnelle Rückmeldung. Somit verschiebe ich die Funktion für Powersave und Wetterprognose.
Denn der Rest ist erstmal fertig.
Ich habe mich bemüht soviel wie möglich von deinen, Ideen und Wünschen aufzunehmen.
Nur den Punkt mit der HM-Variable mit der Funktion und nicht je Funktion eine Variable habe ich erstmal nicht übernommen.
Ich denke immer noch das es für viele nicht so einfach sein wird es selber einzubauen. Auf Tastendruck eine Variable auf "true" setzen geht einfach aber mit einen definierten Text ist schon nicht so einfach. Klar im Script geht das genauso einfach.

Aber bis auf Powersave und Wetterprognose fällt mir auch nicht viel mehr ein was noch möglich wäre zu steuern.

Wie angekündigt habe ich alles auf dem Display auch eingebaut. Die Steuerung läuft dann über die Datei "Rscp/RscpSet". Für die Parameter will ich den Wiki Beitrag noch Verbesser, mal sehen ao ich das gleich noch mache.

Da jetzt wieder andere Projekte auf mich warten, kannst du dir mit der Integration und der Rückmeldung Zeit lassen, ich komme für weitere Idee nicht sofort dazu. Natürlich wenn es einen Fehler gibt schiebe ich es dazwischen.

Viele Grüße Nico

PS: Diesen Issue schleiße ich erst einmal, wenn es nicht läuft kannst du ihn ja wieder öffnen.

@nischram
Copy link
Owner

nischram commented Oct 3, 2021

Hier noch der Link zur Erklärung der actionCheckHM: HM abfragen und S10 steuern
Oder die Funktion der RscpSet: Aufruf der RscpSet

@bs0001
Copy link
Author

bs0001 commented Nov 6, 2021 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants