Fehler beim lokalen Start von OpenEMS

Hallo allerseits,

Kurzes Feedback vorab: Es sollte kein deutsches Entwicklungsforum geben. Entwickler müssen eh alle englisch sprechen können, um den code zu verstehen. Die Zersplitterung der Entwicklungsthemen auf 2 getrennte Foren ist der Diskussion nicht zuträglich. Last but not least: Entwickler, die der deutschen Sprache nicht mächtig sind, nutzen die Unterstützung von LLM basierten Tools, um die Diskussionen hier zu nutzen, oder auch daran teilzunehmen. Das macht es unnötig kompliziert

Nun zu meinem eigentlichen Problem: Ich habe OpenEMS lokal wie hier beschrieben aufgesetzt. Einziger relevanter Unterschied: Ich nutze die Standard Java21 JRE, die Ubuntu liefert und nicht “OpenJDK Temurin builds by the Adoptium project”.

Wenn ich das Edge starte, erscheinen permanent Fehler der Art:

FrameworkEvent ERROR

org.osgi.framework.ServiceException: Service factory returned null

Ich gehe davon aus, dass diese ein Folgefehler der folgenden Execption gleich zu Beginn des Starts sind:

java.lang.VerifyError: Inconsistent stackmap frames at branch target 273
Exception Details:
  Location:
    io/openems/edge/core/componentmanager/EdgeConfigWorker.readConfigurations(Lio/openems/common/types/EdgeConfig$ActualEdgeConfig$Builder;Ljava/lang/String;)Z @273: aload
  Reason:
    Type 'java/lang/Object' (current frame, locals[10]) is not assignable to 'java/lang/String' (stack map, locals[10])
  Current Frame:
    bci: @203
    flags: { }
    locals: { 'io/openems/edge/core/componentmanager/EdgeConfigWorker', 'io/openems/common/types/EdgeConfig$ActualEdgeConfig$Builder', 'java/lang/String', '[Lorg/osgi/service/cm/Configuration;', 'java/util/Set', 'org/osgi/service/cm/Configuration', integer, integer, '[Lorg/osgi/service/cm/Configuration;', 'java/util/Dictionary', 'java/lang/Object' }
    stack: { 'java/lang/Object' }
  Stackmap Frame:
    bci: @273
    flags: { }
    locals: { 'io/openems/edge/core/componentmanager/EdgeConfigWorker', 'io/openems/common/types/EdgeConfig$ActualEdgeConfig$Builder', 'java/lang/String', '[Lorg/osgi/service/cm/Configuration;', 'java/util/Set', 'org/osgi/service/cm/Configuration', integer, integer, '[Lorg/osgi/service/cm/Configuration;', 'java/util/Dictionary', 'java/lang/String' }
    stack: { }

Kann mir jemand einen Tipp geben, wie ich das Problem lösen kann?

EDITED by Sn0w3y: Backend wurde durch Edge ersetzt, Backend ist alles i.O. - Fehler tritt bei EDGE ohne config.d Ordner auf.

Hallo @Scritch,

Generell funktioniert OpenEMS auch mit einer Standard 21 JRE.
Scheint mir als ob in einer deiner Edge Komponenten-Konfigurationen ein Sonderzeichen/Binärcode enthalten ist, irgendetwas was nicht in ein String-Objekt umgewandelt werden kann.

Type ‘java/lang/Object’ (current frame, locals[10]) is not assignable to ‘java/lang/String’ (stack map, locals[10])

Vielleicht kannst du die erstellt Konfiguration unter c:/openems/config mal vollständig kopieren, das Verzeichtnis löschen, und den Getting Started nochmal durchgehen. Wenn es danach funktioniert, kannst du die beiden Konfigurationssets diffen und schauen, was die Ursache für das Problem war.

VG Christian

Hallo,

da OpenEMS aber eben ein 99% deutsches Projekt ist und vor allem deutsche Entwickler (wenn nicht nur, aber meistens) daran arbeiten, macht es auch Sinn, das Forum aufzusplitten. Jeder hat Zugriff auf das Englische Forum.

Zudem sind hier auch viele User aus dem FEMS Bereich von Fenecon, welche nicht Englisch schreiben und auch nicht aktiv mitentwickeln.

Ich würde dir eine Mitgliedschaft bei der OpenEMS Association ans Herz legen, wenn du OpenEMS kommerziell nutzt (aufsetzen des Backends hat mich zu der Annahme geführt).

Zu deinem Problem hat dir ja @c.lehne bereits eine Hilfestellung gegeben.

Grüße !

Und dennoch gibt es derzeit 85 Threads im englischen und nur 51 Threads im deutschen Bereich. Wenn die 99% Prozent deutschen Entwickler bereits heute zwei Drittel ihrer Beiträge auf Englisch verfassen, könnte das an Anreiz sein, deine Überzeugung künftig zu überdenken. Aber wirklich auch garkein Problem. Ist ja nur meine persönliche Meinung. Alles gut.

Zum Problem (erstmal: großes Danke für die superschnelle Reaktion):
Ich habe das Verzeichnis abgeändert (also geleert). Das Verhalten ist unverändert. Noch irgendeine andere Idee?

@stefan.feilmeier : Das Laden der Config und insb der Strings wurde erst vor ein paar Tagen durch einen commit von FEMS geändert:

Habt ihr die Änderungen dahingehend getestet, dass sie auch mit einer leeren Config beim lokalen Start funktionieren?

Hallo @Scritch,

ganz kurz zur Sprache: ich lese und schreibe englische Texte fast so gut wie deutsche Texte. Aber: wenn ich z. B. mit @klinki über Konfigurationen schreibe, mache ich das nach Möglichkeit gern auf deutsch. Bitte das “Deutsche Forum” behalten.

Viele Grüße

Andreas

1 Like

@stefan.feilmeier: Das Problem ist tatsächlich dein oben verlinkter Commit von gestern abend. git checkout 79650cb40 löst das Problem.

Scheinbar ist die openems Nutzerbasis noch nicht groß genug, das ein derartiger Schnitzer zu einem größeren Aufschrei führt. :smiley:

Edit: Ich habe soeben eine Bug Report angelegt: FEMS Backports 2025-01-20 breaks local deployment with empty config · Issue #2984 · OpenEMS/openems · GitHub

Habe einen PR erstellt, der dieses Problem behebt.