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