Ich habe eine kurze Frage:
Ist ACTIVE_POWER der Kanal auf dem die aktuelle Leistung des ESS liegt
und wird in diesen Kanal geschrieben wenn man_setActivePower() aufruft?
Der Kanal gehört ja SymmetricEss.ChannelId.
Das ist nämlich etwas verwirrend, weil viele ESS-Implementierungen in den Kanal SET_ACTIVE_POWER die geforderte Leistung schreiben.
ACTIVE_POWER ist read-only, also die von der Ess gelesene Leistung, und SET_ACTIVE_POWER die geforderte Leistung, und sollte auch nur im ManagedSymmetricEss zu finden sein (bzw. eher SET_ACTIVE_POWER_EQUALS,…). Die Methode _setActivePower ist zur internen Benutzung, um den von der Ess gelesenen Wert in den OpenEMS-Channel zu schreiben und wird nicht genutzt, um eine Vorgabe an das Ess zu machen.
m.W. wird die geforderte Leistung ausschließlich der applyPower()-Methode übergeben. Ein ManagedSymmetricEss setzt die Implementierung der Methode vorraus.
Stefan hatte das hier schon ganz gut aufgedröselt.
Ich bin (natürlich) auch darüber gefallen
Ja, ihr habt recht. Ich fasse das mal so zusammen:
SymmetricEss stellt den Channel ACTIVE_POWER bereit, in dem man die tatsächliche Leistung seines eigenen ESS schreiben muss (sonst weiß z.B. UI, oder ein Controller nichts davon)
Dazu stellt SymmetricEss die (Convenience-) Funktion _setActivePower() bereit.
Analog dazu: ManagedSymmetricEss stellt den Channel SET_ACTIVE_POWER_EQUALS bereit, in dem man die geforderte Leistung schreiben kann.
Dazu stellt ManagedSymmetricEss die (Convenience-) Funktion setActivePowerEquals() bereit.
Die Verwirrung entsteht, weil viele Implementierungen den definierten Channel SET_ACTIVE_POWER_EQUALS ignorieren und einen eigenen Channel definieren.
Der heißt dann oft SET_ACTIVE_POWER.
@Stefan, falls Du mitgelesen hast.
Kannst Du das so bestätigen?