Edge-Module - Programmierstil

Hallo Community und Team

Ich würde gerne besser verstehen, nach welchem Paradigma man Edge-Module implementiert.
Wenn beispielsweise ein ESS implementiert wird, zu dem eine Batterie und ein WR gehören:

Besitzt das ESS einen WR oder implementiert das ESS einen WR, indem es von ihm ableitet, bzw dessen Interface implementiert?

Zweite Frage;
Wenn mein ESS die Hardware-Daten aus einer proprietären Quelle abfragt (http-Server → Json):

Sollte das per Zeitintervall geschehen und wenn ja, muss ich dafür einen eigenen Timer implementieren?

Oder

Sollte das auf Anforderung von Edge erfolgen und überschreibe ich dafür eine Methode des ESS oder erwarte einen Event?

Oder

Muss ich die http-Abfrage und das Json-Resultat 1:1 mit einem Channel verknüpfen und Edge holt sich einzelne Parameter nach eigenem Gutdünken.

Letzteres wäre elegant aber uneffizient weil alle Hardware-Parameter in einem Json-Paket von http-Server kommen.

Vielen Dank!
Sebastian

Hallo Sebastian,

danke für deine Fragen. Ich hoffe, dass ich sie einigermaßen zufriedenstellend beantworten kann.

Zu 1.)
Vor einigen Jahren hatte ich dazu mal die Grafik unter Architecture scheme erstellt. Hier ein neuer Versuch, um die Beziehung zwischen Natures (gelb) und Implementierungen (blau), sowie zwischen Controllern, Ess, Battery und BatteryInverter zu erklären. Ich habe versucht mich an UML anzulehnen; ich hoffe das ist verständlich.

  • Im Beispiel ist der Ess.SMA.SunnyIsland ein vollständiges Stromspeichersystem (ESS), d.h. es kennt die Daten von der Batterie und vom Batteriewechselrichter. Diese Kombination findet sich überlichweise bei ‘traditionellen’ Heimspeichern - z. B. Kombination von einem SMA mit BYD Battery Box, etc. Hier kommuniziert OpenEMS nicht direkt mit der Batterie, sondern nur mit dem Wechselrichter.

  • Bei den meisten Gewerbe- und Industriespeichern und einigen Heimspeichern nutzt OpenEMS eine generische ESS-Implementierung (Ess.Generic.ManagedSymmetric), die wiederum einen ManagedSymmetricBatteryInverter und eine Battery benötigt.

Zu 2.)

Hier gibt es leider noch keinen Standard, deshalb wird das aktuell noch je nach Implementierung unterschiedlich gelöst. Beispiele:

Ansätze zur Standardisierung gibt es hier:

Gruß,
Stefan

Hallo Stefan

Das hast Du ja heute eine Menge zu tun gehabt durch mich. Danke für Deine Zeit.

Zu 1:
Das Schaubild sieht lehrreich aus, das werde ich mir morgen in Ruhe anschauen.

Zu 2, der externen http-Quelle:
Du hast das ja im anderen Post schon mit dem “BEFORE_PROCESS_IMAGE” event beantwortet.

Wenn dann das Code-FAQ von Euch eingerichtet wird :wink: , kann ich einen schön kurzen async Request als Beispiel vorstellen.

Schönen Abend
Sebastian