Aller Anfang ist schwer

Liebe Entwickler, liebe Community,

hallo zusammen, ich bin neu hier und hätte ein paar Verständnisfragen und Anregungen.

Kurz zu mir, ich komme beruflich aus dem Eventtechnik Bereich und bin da eher in der Hardwareecke, weniger in der Softwareentwicklung Zuhause.
Aktuell installiere ich mir gerade, als Autodidakt und DIYler, meine erste PV-Anlage 10kWp inkl. Niedervoltspeicher und Wallbox mit Fokus auf Eigenverbrauchsoptimierung und zukünftiger Anbindung weiterer steuerbare Verbraucher.

Aufgrund dieses Vorhabens kommt man kurz oder lang um das Thema EMS nicht herum. Ich betreibe fürs Smarthome iobroker womit man sicherlich das ein oder andere gut direkt Umsetzen könnte, das Themenfeld hat aber auch so seine Komplexität welche nur mit ordentlich Zeiteinsatz sinnvoll zu realisieren wäre. Warum also das Rad neu erfinden…?
Bei meinen Recherchen nach EMS Systemen welche meine Hardwareliste unterstützen könnte bin ich dann auf openEMS gestoßen.

Ich selbst bin jemand der nicht besonders auf geschlossene Systeme steht und es nicht scheut sich mit der Materie tiefer auseinanderzusetzten.
Plug & Play bringt erfahrungsgemäß Flexibilätseinschränkungen oder einen erhöhten Kostenumfang mit sich. Kurzum ich bin ein Fan von OpenSource und sehe dies als eine der besten Methoden diverse Systeme miteinander betreiben zu können.

Die Möglichkeit bei Fenecon und opernikus sich Live-Demo Anwendungen ansehen zu können hat mich direkt überzeugt das System ausprobieren zu wollen.
Hier schonmal ein großes Lob an die Entwickler!

Meine ersten Gehversuche mit openEMS habe ich bereits hinter mir und hab ein teilweise lauffähiges System mit einem funktionierenden Smartmeter und einem Wechselrichter vor mir.
Jedoch bedurfte es bis hierhin einer doch recht steilen Lernkurve, womit ich zu meiner ersten Frage komme:

Wie möchte das OpenSource Projekt „openEMS“ zu welchem Nutzerkreis verortet werden?
Dient es als Grundlage für eher kommerzielle/industrielle/professionelle Projekte also als Basis für Programmierer und Systementwickler (der Projektursprung durch Fenecon ist mir bekannt) oder möchte man auch breiter in die Masse in Form von DIYuser usw. gehen?

Subjektiv gesehen habe ich das Gefühl der Fokus geht in Richtung Professionalisierung jedoch denke ich das man hier ein gewisses Potential einer wachsenden/größeren Community in Form von Privatleuten & DIYler zu wenig bedient.
großer Nutzerkries=große Community=potentiell neue Entwicklungsressourcen

Um den Nutzerkreis außerhalb von Nutzern mit Entwicklungserfahrung auszuweiten sehe ich da jedoch noch einige Defizite und diese liegen primär an der Strukturierung der Doku.
Wenn sich jemand mit mäßigen Entwicklungskenntnissen wie ich sich an das Projekt openEMS wagt, sind die anfänglichen Hürden doch sehr groß. Dies fängt bei „Getting Started“ an, ich würde mich wetten trauen, dass 75% der Interessenten im DIY Bereich bis zum Punkt zwei lesen und spätestens mit dem Punkt eine Entwicklungsumgebung zu installieren zu müssen resignieren und es dann frustriert lassen.
Meiner Meinung nach spiegelt dies genau auch die Tatsache dar dass man auf Youtube nahezu keine Infos über openEMS (außer jene von openEMS selbst) geschweige irgendwelche howto`s finden kann wie dass System aufgesetzt und benützt wird.

In Wahrheit ist es aber doch so, wenn man weiß wie es geht kann man mit den fertigen Builds (entsprechende Infrastruktur vorausgesetzt Proxmox, Raspberry o.ä.) in etwa 10 min ein spielendes System (Edge + UI für zu Hause ausreichend) aufsetzen. Weitere 10 min später hat man ein Smartmeter und Datenspeicherung zu einer vorhandenen InfluxDB eingerichtet.
àErgebnis: Schon hat der Interessent ein Erfolgserlebnis und ist angefixt um damit weiterarbeiten zu wollen.

Bitte folgende Punkte als konstruktive Kritik eines Endanwenders betrachten, ich bin mir der Arbeit die in so einem Projekt inkl. Doku stecken sehr bewusst. Meine Intuition ist hier evlt. etwas Feedback zu geben um die bisher tolle Arbeit etwas bekannter zu machen. Leider fehlt es mir an Programmierkenntnissen um hier konstruktiv aktiv beitragen zu können.

Vorschläge meinerseits und Fallstricke die ich noch so erfahren habe:

-Vorschlag würde es nicht Sinn machen in der Doku zwischen Endanwender und Entwickler zu unterscheiden/leiten? Getting Stated ist ja eher für Entwickler interessant, der Endanwender braucht „Deploy OpenEMS Edge“ jedoch bis dahin werden die Wenigsten lesen.

-die Doku ist für eine Installation der UI wenig aussagekräftig, hier scheitert Ottonormalo schon am Webserver, hier half mir nur das Forum und die Doku von @klinki Edge + UI Deployment - ein grober Leitfaden, Raspberry Pi

-als nächstes das schon sehr oft im Forum angesprochene Thema Websocket mit unterschiedlichen Ports für die UI,
dies konnte ich auch wieder nur durch Forumsinfos lösen.

Wenn dies in der fertigen Build schon gesetzt wäre, gäbe es hier einen Fallstrick weniger (Leute die wissen was sie tun löschen das Modul für die API einfach und gut ist‘s als reiner Edge.
-dann wäre da noch der Tip mit der gehosteten Version der UI, wenn hier auch eine UI antworten würde wäre man hier nicht mit der nächsten Fehlersuche beschäftigt

-Eine detailliertere Beschreibung der Module und Funktionsumfang wäre nicht schlecht, hier meine ich explizit welche Module welche Abhängigkeiten brauchen um zu funktionieren und deren genauen Funktionen. Hier haben mir die Fenecon Dokumente am meisten weitergeholfen.

-Abhängigkeiten von Programmversionen z.B. welche Java Version aktuell benutzt werden sollte, war für mich nicht findbar.

Zusammenfassend denke ich würde man bei einer speziell auf Endanwender ausgerichteten Doku sehr viel Reichweite generieren können. Gerade im DIY Bereich gibt es viele Leute die dann auch extrem viel Zeit in Debugging & Weiterentwicklung stecken.
Evlt. wäre hier auch eine Art „Install Sript“ für die fertigen Builds hilfreich um noch schneller zu einem Ergebnis zu kommen.

Als weiteres Thema hätte ich noch gerne die Möglichkeit von „Universelle Geräte Module“ angesprochen.
Im Hinblick das System für Endanwender attraktiver zu machen steht man irgendwann vor dem Problem „wie bringe ich meine Geräte da rein?“ Wenn man jetzt nicht Hardware besitzt zu welcher es Module gibt ist hier die nächste Hürde erreicht.

Meiner bisherigen Erfahrung nach sprechen sehr viele wenn nicht sogar fast alle Geräte ModbusRTU bzw. ModbusTCP, wäre es nicht denkbar hier universale Module anzubieten mit welchen man schnell ohne explizite Codeanpassung per UI zu einem Ergebnis kommt?
Als Beispiel möchte ich Meter und Inverter Module nennen, eigentlich braucht es hier doch „nur“ eine Mapping Maske in welcher
-must have Datenpunkte,
-die Info in welchen Register diese zu finden sind
-einen Faktor um diese Daten für openEMS in die benötigte Einheit umzurechnen
-eina Angabe um welchen Datentyp es sich handelt
verknüpft werden?
Alle Meter Module sind doch lesender Natur?
Wenn man hier dann noch für das Mapping ein importieren/exportieren einbaut, bin ich mir sicher das hier sehr schnell neue Gerätebibliotheken entstehen.
Oder übersehe ich hier noch etwas grundlegendes?

Ähnliche Frage für das Sunspec Protokoll, das ist doch in openEMS bereits universal implementiert, wieso aber gibt es dazu kein Geräte Modul pv_inverter_Sunspec_unversal? Es dauert etwas bis man rausgefunden hat das man einfach mal andere Herstellermodule testet und feststellt das dies funktioniert warum also nicht gleich was universelles bauen bzw. so benennen. Hier bräuchte es für einphasige Umrichter analog zu Modul SMS Sunny Tripower auch die Möglichkeit die Einspeisende Phase zu definieren.
Einen schreibenden Wert für Leistungsreduktion sollte hier doch auch leicht umzusetzen sein da durch Sunspec definiert?

Für Speicher und Wallboxen sehe ich etwas mehr Entwicklungsbedarf jedoch ist die Logik hier hinter den Modbus Registern ähnlich bis immer die gleiche.

Ich entschuldige mich für Wörter wie „nur“ „einfach“ usw. ziemlich wahrscheinlich Ist es nicht so einfach wie man es sich als Laie vorstellt. Sollte jemand meine Gedanken gut finden und probieren wollen davon was umzusetzen, ich bin hier gerne mit im Boot und für Testzwecke immer zu haben.

Leider ist dieser Text jetzt etwas länger geworden, danke für alle die bis hierhin gelesen haben und sorry für die Ausschweifung!

Ich freue mich auf Feedback

Hallo mrdomek und willkommen,

erstmal danke für dein ausführliches Feedback! Es ist super, dass du dich so tief in OpenEMS eingearbeitet hast und deine Erfahrungen teilst. Ich kann viele deiner Punkte nachvollziehen, aber ein paar Dinge möchte ich doch etwas anders einordnen.

Dokumentation & Einstiegshürden

Ja, OpenEMS hat definitiv eine steile Lernkurve – keine Frage. Aber man darf dabei nicht vergessen: Wir sind fast alle Hobbyentwickler, die das Projekt in ihrer Freizeit vorantreiben. OpenEMS ist kein kommerzielles Produkt mit einem professionellen Support-Team, sondern ein Open-Source-Projekt, an dem jeder mitarbeiten kann. Auch die Doku wurde nicht „von oben herab“ geschrieben, sondern tatsächlich zusammen mit Laien beim letzten Hackathon erarbeitet – genau mit dem Ziel, den Einstieg für Nicht-Entwickler zu erleichtern.

Es gibt mittlerweile viele Anleitungen und Hilfestellungen im Forum, die viele der Themen abdecken. Natürlich könnte die Doku noch strukturierter sein, aber der klassische Open-Source-Gedanke ist eben: Wenn du eine Hürde überwunden hast, dann hilf anderen, indem du die Doku verbesserst! Ein Pull Request wäre also eine super Möglichkeit, aktiv beizutragen.

Dass es Leute gibt, die beim Punkt „Entwicklungsumgebung installieren“ aussteigen, ist nachvollziehbar. Aber OpenEMS ist kein Plug & Play-System – ein gewisses Maß an technischem Verständnis ist einfach nötig. Und seien wir ehrlich: Wer schon an der Einrichtung scheitert, wird auch beim Betrieb nicht weit kommen. OpenEMS ist hochflexibel, aber eben auch komplex. Wer eine komplett fertige Lösung sucht, wird mit OpenEMS (zumindest aktuell) nicht glücklich.

Sunspec & Universelle Geräte-Module

Zu deiner Idee mit den universellen Sunspec- oder Modbus-Modulen: So einfach, wie du es dir vorstellst, ist es leider nicht.

Sunspec ist kein einheitlicher Standard, der für alle Geräte gleich funktioniert. Jeder Hersteller interpretiert und implementiert es ein bisschen anders.

Manche Geräte haben z. B. abweichende Register, andere Einheiten oder spezielle Herstellerfunktionen, die nicht standardisiert sind.

Sunspec sagt auch nicht aus, ob ein Gerät einphasig oder dreiphasig ist, welche Steuerfunktionen es unterstützt oder wie genau die Datenpunkte zu interpretieren sind.

Deshalb gibt es keine „universellen“ Sunspec-Module – die müssten immer wieder angepasst und erweitert werden. Das ist auch der Grund, warum es spezifische Module für verschiedene Hersteller gibt. Einfach ein „Sunspec Universal“-Modul anzubieten, würde eher zu Frust führen, weil es eben nicht für alle Geräte funktionieren würde.

Genauso ist es mit Modbus: Ja, viele Geräte sprechen ModbusTCP oder ModbusRTU, aber jedes Gerät hat eigene Registerbelegungen, Skalierungsfaktoren und Funktionsweisen. Ein universelles Mapping-Tool wäre also extrem aufwendig und würde nie für alle Geräte passen. Hier ist es oft einfacher, für bestimmte Geräte ein eigenes Modul zu schreiben – genau das machen ja viele Hersteller, die OpenEMS nutzen.

Fazit

Ich finde es super, dass du dir Gedanken machst, wie OpenEMS für Endanwender zugänglicher werden könnte. Aber man muss auch realistisch bleiben: OpenEMS ist und bleibt eine entwicklergetriebene Lösung, die nicht einfach „out of the box“ läuft. Wir arbeiten daran, es einfacher zu machen, aber ein bisschen „Schmalz“ muss aktuell einfach noch investiert werden.

Wenn du konkrete Verbesserungsvorschläge hast, wäre ein Pull Request für die Doku eine klasse Möglichkeit, das Projekt zu unterstützen. Und falls du tiefer in die Entwicklung einsteigen willst – die Community freut sich immer über neue Mitstreiter!

Beste Grüße,
Hannes

Kurzer Nachtrag zur Java Version :slight_smile:

Ich habe 2 Orte gefunden, an denen klar wird, welche Version genutzt wird (eigentlich 3 - die ist aber schwerer zu finden)

  1. Changelog (schwer)
  2. und 3. im Anhang:

Moin zusammen,
hallo @Sn0w3y,
Danke für die netten Willkommensgrüße und ebenso danke für Deine ausführliche Antwort.

Ich möchte hiermit nochmal darum bitten meine Ausführung oben rein als konstruktive Kritik aus dem Blickwinkel eines Anfängers zu betrachten, mir ist der Arbeits und zeitliche Aufwand in seiner Gänze mehr als bewusst!

Mein Punkt ist dieser, ich kenne es von mir selbst, in gewissen Situation sind die ersten Erfahrungen Maßgebend. So auch der Start in ein Projekt wie dieses. Wenn der Start schon sehr holprig verläuft, dann ist die Lust weiterzumachen recht gering. Wenn aber die ersten Gehversuche recht schnell zu einem Ergebnis führen dann sind die Leute angefixt und im Fiber, folglich ist dann die Motivation hier weiterzukommen eine andere.
Als positives Beispiel möchte ich hier Proxmox erwähnen, im Ganzen doch ein sehr komplexes Thema aber super schnell aufgesetzt. Und alle weiteren Probleme werden durch die riesige Community bewältigt.

Daher denke ich, man würde hier viel Reichweite gewinnen wenn es zu den fertigen Builds für z.B. ein Debian basiertes System eine ordentliche Anleitung gibt, noch besser ein Installscript womit Anfänger einfach viel schneller zum „ersten anfassen“ kommen.
Ich gebe dir recht für Leute die dann damit so einer „Starthilfe“ nicht zurechtkommen für die ist das ganze Projekt dann nichts.

Daher Resultierte auch meine Frage, ob der Fokus des Projekts auf Professionalisierung oder Breite gelegt wird? Es ist ja so, mehr Masse bedeutet nicht zwingend mehr Klasse was die Skills im Bereich der Programmierkenntnisse betrifft. Das kann man ja wie man das Projekt verkauft gewissermaßen steuern. Durch mehr Masse holt man sich sicherlich neue Problematiken jedoch auch viel mehr potenzielle Ressourcen.

Deinen Punkt „Pull Request“ habe ich zur Kenntnis genommen und versuche hier wenn Zeit ist mal was beizusteuern, jedoch könnte das noch etwas dauern da mein Fokus jetzt erstmal darauf liegt meine Anlage an den Start zu bekommen.

Thema Sunspec:
Hmm ich glaube da muss ich mich nochmal besser schlau machen, so wie ich es verstanden hatte macht doch genau Sunspec dies, einen gewissen Standard setzen? Beispiel Wechselrichter, durch die Model Typen wird doch definiert ob 1 Phasig oder 3 Phasig .
Ebenso werden doch die musthave Datenpunkt vordefiniert?
Achtung auch hier geht es mir primär darum Geräte schneller für Anfänger im EMS anlegen zu können, Grundfunktionen reichen hier ja erstmal, wenn dann jemand Spezialfunktionen im EMS abbilden möchte der muss natürlich dann in die Entwicklung gehen.
Desweiteren wollte ich auch ausdrücken, die Namensgebung spielt eine Rolle, wie gesagt ich bin nur durch Spielen darauf gekommen ein Bestandsgerät für meinen Wechselrichter zu probieren, wenn es hier einen „pvinverter_sunspec“ gegeben hätte wäre ich auch hier schneller am Ziel gewesen.

Thema Universelles Modbus Mapping:
Die Idee habe ich aus dem iobroker übernommen dort gibt es einen Modbusadapter bei welchem die Modbusregister lediglich per Tabelle definiert werden. Diese sind dann mit deren Naturen im iobroker les und beschreibbar. Gerade für Gerätetypen wie Meter Relaisboard usw. wäre das doch der easy way.

Natürlich je mehr Geräte über die Zeit in openEMS eingepflegt werden desto weniger ist universell dann irgendwann interessant, aber momentan sehe ich hier für Anwender ohne Programmierkenntnissen den meisten Benefit.

Thema Java Version:
Danke für die Aufklärung. Jedoch wieder mein Argument des Anfängers, ins Repository wird sich ein Anfänger erstmal nicht hinwagen.
Den Hinweis aus dem „Getting Started“ hab ich wohl übersehen, kann es sein dass es hier seit Ende 2024 Änderungen gab, ich hatte die Anleitung damals mehrfach durchgelesen?
Aber auch hier wieder mein Punkt, wenn ich als Anfänger mit „SourceCode downloaden“ „IDE einrichten“ konfrontiert werde sagt das groß „Danke, auf Wiedersehen“

Mein Vorschlag
 Getting Started einen Edge aufsetzen
 Getting Started „entwickeln“

Schönen Tag!

Moin mrdomek,

alles gut, ich habe dein Feedback auch als konstruktiv verstanden – und es ist ja auch absolut wertvoll, weil es genau die Perspektive eines Einsteigers widerspiegelt! Ich stimme dir in vielen Punkten zu, gerade was den schnellen „Erstkontakt“ mit OpenEMS angeht.

Zum Thema fertige Builds + Installscript: Ja, das wäre sicherlich hilfreich und würde viele erste Hürden abbauen. Ein gut dokumentiertes „Quick Start“-Setup für Debian könnte einiges erleichtern. Da OpenEMS aber flexibel auf unterschiedlichsten Systemen läuft, ist das nicht ganz trivial – aber vielleicht wäre das ja mal eine coole Community-Aufgabe.

Sunspec: Der Standard setzt zwar gewisse Strukturen, aber die Praxis ist leider komplexer. Hersteller implementieren ihn oft mit kleinen, aber entscheidenden Unterschieden. Sunspec gibt zwar Modell-Typen und Must-Have-Datenpunkte vor, aber es gibt genügend Fälle, wo das nicht zuverlässig funktioniert. Deshalb ist ein „pvinverter_sunspec“ als universelles Modul nicht so einfach machbar, auch wenn eine klarere Namensgebung sicher hilfreich wäre.

Modbus Mapping: Der Ansatz aus ioBroker ist natürlich interessant. Für OpenEMS müsste das aber anders umgesetzt werden, da die Anforderungen hier etwas komplexer sind – Modbus ist eben nicht gleich Modbus. Aber vielleicht lässt sich eine Art „Custom-Modbus-Template“ als Community-Projekt weiterdenken.

Und ja, wenn du irgendwann Zeit hast, einen PR für die Doku beizutragen – das wäre super! Aber erst mal viel Erfolg mit deiner Anlage. :wink:

MUSS man ja nicht, wenn man es nicht selber kompilieren will.

https://github.com/OpenEMS/openems/releases/download/2025.1.0/openems-ui.tar.xz

Schönen Tag dir auch!
Hannes

Hallo,
ich hänge mich mal hier dran.
Auf einem Raspberry habe ich openEMS mit den fertigen Builds (zuletzt 2025.2.0 plus entsprechendes UI) installiert, und das lief auch problemlos.
Heute habe ich einen eigenen Build erstellt, um eine Zähler-Komponente zu testen. Er läuft, das Log sieht gut aus, im UI wird alles angezeigt, aber wenn ich die Config Konsole aufrufe, bekomme ich den Fehler

HTTP ERROR 404 Not Found

URI: /
STATUS: 404
MESSAGE: Not Found
SERVLET: org.apache.felix.http.base.internal.dispatch.DispatcherServlet-2bec0ae5

Wenn ich auf das 2025.2.0 jar zurück gehe, mit dem es vorher funktioniert hat, bekomme ich den Fehler auch.

Woran kann das liegen? Ich habe nur das openems.jar in /usr/lib/openems ausgetauscht und es neu gestartet.

In der VM, worin ich entwickle, funktioniert natürlich alles.

Stefan

Probier mal die URL http://<hostname>:<port>/system/console/configMgr zu öffnen…

1 Like

Ich bin mir ziemlich sicher, dass es genau das ist eine index Seite alá “/” gibt es nämlich nicht.

Die Ursache habe ich gefunden:
Der Build lief unter Windows, Deployment in Linux, die falschen Pfade sind in den Runtime Properties drin. Es wundert mich nur, dass der richtige Pfad in /etc/systemd/system/openems.service konfiguriert ist, aber anscheinend nicht berücksichtigt wird.

Das hat nichts mit dem:

zu tun!

Ja, ich habe es jetzt auch gemerkt, war mein Fehler.
Danke für die Hilfe.

Stefan

1 Like

Noch eine Anfängerfrage: warum werden meine Verbräuche nicht aufsummiert?
Es sind vier Modbus Zähler (CONSUMPTION_METERED) konfiguriert, die einzelnen Werte werden angezeigt, jedoch nicht in der Gesamtsumme berücksichtigt:

Wird dagegen der Typ auf PRODUCTION oder PRODUCTION_AND_CONSUMPTION geändert und die Werte invertiert, stimmt die Sume, aber die Zähler verschwinden aus der Ansicht:

Was mache ich falsch?