Backend mit UI keine Verbindung

Hallo Forum

Ich bekomme meine Backend mit UI einfach nicht zum laufen. Es kommt die Meldung Verbindung unterbrochen. Versuche die Verbindung wiederherzustellen.

Die genaue Meldung in der Browserconsole ist WebSocket connection to ‘ws://192.168.5.70/openems-backend-ui2’ failed:

Bitte um Hilfe

Berni

Hallo Bernhard,
für mich sieht es aus, als liegt dein Problem nicht im UI sondern im Backend. Bist du bei der Backend-Konfiguration vorgegangen, wie im GettingStarted Guide Kapitel 6 beschrieben? In diesem Fall müsstest du deinen Websocket in der UI von
url: "ws://192.168.5.70:8082"
folgendermassen auf localhost umbiegen (siehe Kapitel 6.3):
url: "ws://localhost:8082"
Ich kann es gerade nicht genau sagen, ich vermute aber, das Backend installiert den Server-Port vom Backend Bundle Ui.Websocket nicht systemweit, sondern bindet ihn an localhost.
Viele Grüße,
Christian

1 Like

Hallo Christian

Danke für die Info. Habe das aber auch schon probiert. Die Verbindung geht nicht. Ich habe die Konfig nochmals neugemacht. Meldung bleibt die gleiche.
Die Meldung in der Konsole ist WebSocket connection to ‘ws://192.168.5.70/openems-backend-ui2’ failed:

Anbei auch noch der Screenshot von den offenen Ports

LG Berni

Das Backend sieht doch schon mal gut aus. Du hast einen Java-Prozess, der auf allen Interfaces von Port 8082 lauscht. Daher vermute ich, dass dein OpenEMS-Backend läuft und das dein Bundle Ui.Websocket aktiv ist.
Damit bleibt das Problem der falschen Websocket URL. Ich kann anhand deiner Angaben nicht erkennen, wie du die UI gebaut hast. Im Verzeichnis ui\src\environments liegen drei für die URL relevante Konfigurationsdateien:

  • environment.ts
  • openems-backend.ts
  • openems-edge.ts

Du musst schauen, dass du die richtige Datei abgeändert hast und das du danach die App auch neu gebaut hast. In deiner letzten Websocket URL fehlt der Port (es müsste so aussehen: ws://192.168.5.70:8082/openems-backend-ui2). Ich vermute daher, dass du nicht die richtige Datei editiert hast, den Port ausgelassen hast oder das du nach dem Editieren der Datei die App nicht oder mit falschen Parametern compiliert hast. Am besten du startest das OpenEMS-Backend wie gehabt und gehst danach Punkt für Punkt so vor, wie im Getting Started Kap 6.3 beschrieben.

Anbei einige Screenshots von meinen Einstellungen. Die App habe ich mit ng build -c backend gebaut und diese dann auf den Webserver übertragen.

Ich habe in der Journalausgabe einen Fehler, wird sehr wahrscheinlich mein Problem sein.

Apr 22 10:49:21 ems java[25033]: io.openems.backend.application [io.openems.backend.application.BackendApp] INFO : ==========================================
Apr 22 10:49:21 ems java[25033]: io.openems.backend.application [io.openems.backend.application.BackendApp] INFO : OpenEMS Backend version [2021.7.0] started
Apr 22 10:49:21 ems java[25033]: io.openems.backend.application [io.openems.backend.application.BackendApp] INFO : ==========================================
Apr 22 10:49:21 ems java[25033]: [Start Level: Equinox Container: b7ee1c67-664a-4a5d-bb58-c38720760db8] ERROR io.openems.backend.application.BackendApp - bundle io.openems.backend.application:1.0.0.202104220738 (6)[io.openems.backend.application.BackendApp(0)] : The activate method has thrown an exception
Apr 22 10:49:21 ems java[25033]: java.lang.NullPointerException

Wenn ich auf dem Server wo das Backend installiert ist auch Egde installiere funktioniert es. Brauche ich für ein funktionierendes Backend auch Edge auch?

Danke

Hallo Bernhard,

die environment.ts sagt dem UI, ob es sich mit einem Edge oder Backend verbinden soll und definiert die Websocket-Adresse.

Zur Verbindung mit einem OpenEMS Edge sollte die Datei so aussehen:

import { Environment } from "../app/shared/type/environment";
export const environment: Environment = {
  production: false,
  debugMode: true,
  url: "ws://" + location.hostname + ":8085", 
  backend: "OpenEMS Edge"
};

8085 ist dabei der Port, der in der Konfiguration für Controller.Api.Websocket angegeben wurde.

Zur Verbindung mit einem OpenEMS Backend sollte die Datei so aussehen:

import { Environment } from "../app/shared/type/environment";
export const environment: Environment = {
  production: false,
  debugMode: true,
  url: "ws://" + location.hostname + ":8082", 
  backend: "OpenEMS Backend"
};

8082 ist dabei der Port, der in der Konfiguration für Ui.Websocket angegeben wurde.

Um in der Praxis einfach verschiedene Varianten für Edge und Backend zu bauen, kann beim ng serve oder ng build auch eine andere Environment-Datei eingespielt werden. Die Logik dafür liegt in der Datei angular.json und kann z. B. so genutzt werden: ng serve -c backend-dev-local (openems/README.md at develop · OpenEMS/openems · GitHub). Für die ersten Gehversuche empfehle ich aber, die environment.ts-Datei direkt anzupassen.

Damit sich das UI mit dem Backend verbinden kann ist nicht unbedingt ein verbundenes Edge notwendig. Der Fehler mit der NullPointerException wurde vor kurzem behoben: ConfigurationAdmin: avoid NullPointerException by sfeilmeier · Pull Request #1441 · OpenEMS/openems · GitHub

Gruß,
Stefan

Hallo Stefan

Danke für die ausführliche Anleitung. Die Verbindung haut jetzt hin. Backend hat Zugriff auf entferntes Edge. Als nächstes kommt Odoo dran.

Danke und LG Berni