Hallo Sebastian,
Danke dafür. So sehe ich das auch und es macht immer wieder Mut, dass andere das auch so sehen. Es ist der Grund dafür, warum ich - neben meiner beruflichen Arbeit an dem Thema - auch so viel Freizeit reinstecke.
Für mich ist das Forum eine sehr wertvolle Dokumentation, auch weil sie so niedrigschwellig und praxisorientiert entsteht. “Blind” eine Doku zu schreiben, ist dagegen oft ziemlich schwer. Auch weil viel der Komplexität, der Fragen und Hürden gar nicht von OpenEMS kommen, sondern von anderen Frameworks, die wir verwenden, und die Doku entsprechend über das Internet verteilt ist. Ich nutze deshalb einfach mal deine Fragen hier um auf Threads im Forum, auf Code oder auf andere Doku zu verlinken:
- Was ist ein Kanal? Core concepts & terminology :: Open Energy Management System
- Eigenen Channel in Edge definieren
- Was ist eine Komponente? Core concepts & terminology :: Open Energy Management System
- OpenEMS nutzt OSGi. Und auch wenn eine “Spezifikation” immer erstmal abschreckend und manchmal unkonkret ist - die OSGi Spezifikation a.k.a. “OSGi Compendium” ist ein hervorragendes und detailliertes Dokument: OSGi Specifications | OSGi Docs
- Eine OpenEMS Komponente ist ein “OSGi Service”: 112 Declarative Services Specification - OSGi Compendium 7
- OSGi ist groß und alt. Es gibt im Internet viel veralteten Quellcode. OpenEMS nutzt “Declarative Services” - das ist also ein gutes Keyword für eine Internetrecherche. Beispiel:
- OSGi Component Life Cycle: 112 Declarative Services Specification - OSGi Compendium 8
- Am besten startet man mit der
activate()
- Methode. Diese wird normalerweise direkt nach dem Konstruktor aufgerufen. - Darüber hinaus gibt es einige vordefinierte Möglichkeiten, um Code regelmäßig an der richtigen Stelle auszuführen, z. B.
- Bei Controllern in der
run()
-Methode- Definition: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.controller.api/src/io/openems/edge/controller/api/Controller.java#L19-L24
- Beispiel “Fix Active Power”-Controller: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.controller.ess.fixactivepower/src/io/openems/edge/controller/ess/fixactivepower/EssFixActivePowerImpl.java#L75-L88
- Bei eine Stromspeicher in der
applyPower()
-Methode- Definition: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.ess.api/src/io/openems/edge/ess/api/ManagedSymmetricEss.java#L611-L625
- Beispiel: “FENECON Pro 9-12”: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.fenecon.pro/src/io/openems/edge/fenecon/pro/ess/FeneconProEssImpl.java#L97-L106
- Bei allgemeinen Implementierungen nach einem Event im
handleEvent()
- Dokumenation: 113 Event Admin Service Specification - OSGi Compendium 8
- Beispiel: “Webasto Next Ladesäule”:
- Subscribe auf das Event: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.evcs.webasto.next/src/io/openems/edge/evcs/webasto/next/EvcsWebastoNextImpl.java#L55-L57
implements EventHandler
: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.evcs.webasto.next/src/io/openems/edge/evcs/webasto/next/EvcsWebastoNextImpl.java#L59- Event-Handler: https://github.com/OpenEMS/openems/blob/develop/io.openems.edge.evcs.webasto.next/src/io/openems/edge/evcs/webasto/next/EvcsWebastoNextImpl.java#L329-L340
- Bei Controllern in der
-
Im UI sind wir immer noch auf der Suche nach der perfekten Trennung zwischen Darstellung Logik um fehleranfällige Code-Wiederholungen zu vermeiden. Deshalb gibt es leider verschiedene Lösungen für ähnliche Probleme im Code. Einen neuen Ansatz mit klarer Trennung und ordentlichem Unit-Testing erproben wir gerade hier: https://github.com/OpenEMS/openems/pull/2123
-
Ein gutes Beispiel für ein modernes Live-Widget im UI ist die Anzeige für die Heizstabsteuerung. Dort wird auch
oe-flat-widget-line
verwendet.- Code: https://github.com/OpenEMS/openems/tree/develop/ui/src/app/edge/live/Controller/Io/HeatingElement
- So sieht das ‘in echt’ aus: Heizstab :: FENECON Dokumente
-
Übersetzungen nutzen ngx-translate:
- Github: GitHub - ngx-translate/core: The internationalization (i18n) library for Angular
- Website: http://www.ngx-translate.com/
- Übersetzungsdateien liegen im Code hier: https://github.com/OpenEMS/openems/tree/develop/ui/src/assets/i18n
- Übersetzungen verwalten/synchronisieren geht schön mit i18n-ally für Visual Studio Code: GitHub - lokalise/i18n-ally: 🌍 All in one i18n extension for VS Code
- Change default language for UI - #7 by p.wimmer
Gruß,
Stefan