openEMS Backend & Edge + UI Device Setup

Hallo zusammen,

folgendes Setup:

  • Raspberry Pi mit openEMS Edge und UI
  • Raspberry Pi mit openEMS Backend + Odoo14

Hab es erfolgreich geschafft Odoo auf meinem Pi zu installieren und zu konfogurieren (denke ich). Wie kann ich denn die TimescaleDB Datenbank rifhtig konfigurieren?

Ich bekomme immer folgende Fehler im Log…:

Jan 28 05:57:52 h2998083 java[40885]: 2023-01-28T05:57:52,059 [thread-1] ERROR [ta.timescaledb.TimescaledbImpl] [Timedata.TimescaleDB] Unable to cache Schema: FEHLER: unbekannter Parameter-Namensraum »timescaledb«
Jan 28 05:57:53 h2998083 java[40885]: 2023-01-28T05:57:53,577 [riodic-5] INFO [o.postgres.PeriodicWriteWorker] [Metadata.Odoo] PeriodicWriteWorker. Time since last run: [120s]
Jan 28 05:57:54 h2998083 java[40885]: 2023-01-28T05:57:54,058 [thread-1] INFO [ta.timescaledb.TimescaledbImpl] [monitor] TimescaleDB Pool: 0, Active: 0, Pending: 0, Completed: 0, QueuedPoints: 0,

Zudem stellt sich mir die Frage, ob die “Backend.jar” das einzige is, welches auf dem “Backend-Pi” laufen muss?

@stefan.feilmeier vielleicht können Sie mir da ein wenig Hilfestellung geben ?

Herlzliche Grüße und Danke für Informationen !!

Hallo,

vorweg: die TimescaleDB implementierung ist noch nicht final fertig und kann sich noch ändern. Leider mussten wir unsere Produktiv-Migration auf TimescaleDB aufgrund von Performance-Problemen abbrechen, so dass ich aktuell kein Datum nennen kann, wann die TimescaleDB-Integration ‘final’ ist. Ich würde aktuell weiterhin InfluxDB 1.8 empfehlen (allerdings eher nicht auf einem Rapsberry Pi… siehe Historische Daten werden nicht angezeigt, aber an InfluxDB übertragen - #3 by Sn0w3y)

Ansonsten stimmt es, dass für das Backend nicht mehr benötigt wird als die Backend.jar - siehe hier: Deploy OpenEMS Backend :: Open Energy Management System. Für eine echte Produktivumgebung sollte natürlich noch ein TLS-Proxy (z. B. NGINX) davor geschaltet werden.

Darf ich fragen was das Gesamtziel des Vorhabens ist? Geht es um eine echte Produktentwicklung oder einen privaten Test?

Gruß,
Stefan

PS: hier sind alle per Du :slight_smile:

Hallo Stefan,

erst einmal danke für die extrem ausführliche Antwort!

Es geht hier um einen privaten Test in erster Linie.
Hab jetzt folgendes laufen:

  • Raspi mit openEMS Edge und UI (keine Probleme)
  • Linux Ubuntu Server mit Backend und Odoo (das einloggen in der Backend UI macht Probleme…)
  • Linux Ubuntu Server mit InfluxDB (läuft ohne Probleme)

Bekomme beim Einloggen die Meldung:

Jan 31 14:26:15 h2998083 java[524388]: 2023-01-31T14:26:15,772 [socket-2] WARN [mon.websocket.OnRequestHandler] [Ui.Websocket] JSON-RPC Error Response “Verbindungsaufbau abgelehnt (Connection refused)” for Request {“method”:“authenticateWithPassword”,“params”:{“username”:“ems4”,“password”:“owner”}}

Kannst du mir eventuell kurz erklären, was und wie der Backend Server korrekt eingerichtet wird? Ich glaube, ich hab da einen Dreher drin :smiley:
Danke !

Hallo,

die Authentifizierung läuft ja über den Metadata Service im Backend (ich weiß… der Name ist verbesserungswürdig - das ist ein offenes ToDo split backend metadata interface into edge and auth metadata by simonfey · Pull Request #1795 · OpenEMS/openems · GitHub ;-))

Für die ersten Tests würde ich es mal mit der Dummy-Metadata (openems/io.openems.backend.metadata.dummy at develop · OpenEMS/openems · GitHub) versuchen. Diese akzeptiert jede Benutzername/Passwort-Kombination; aber dann hat man zumindest die anderen Punkte schon mal ausgeschlossen.

Aktuell bin ich mir nicht sicher, ob die Odoo-Anbindung einwandfrei funktioniert. Wir haben das intern zwischenzeitlich auch deutlich weiter entwickelt und noch nicht alles zurück upstream gespielt. In deinem Beispiel müsste es aber im Odoo einen User “ems4” mit dem Passwort “owner” geben. Das sind nicht die gleichen Zugangsdaten wie am lokalen Monitoring!

Nur zur Sicherheit bzw. der Vollständigkeit halber angemerkt: ein OpenEMS Backend ist nicht unbedingt notwendig. OpenEMS UI kann sich auch direkt lokal mit einem OpenEMS Edge verbinden und braucht dafür kein Backend dazwischen. Backend ist vor allem dann sinnvoll, wenn es auf einem (Cloud-)Server läuft um (mehrere) Edges über das Internet erreichbar zu machen.

Gruß,
Stefan

1 Like

Solange es verständlich ist ;D Ich habs verstanden :smiley:

Danke für die Info ! Ich denke aber, dass ich das bereits versucht habe, dann funktioniert es auch nicht…

Ich glaube, dass es nicht wirklich funktioniert, der Grund dafür ist mir aber leider aktuell noch unersichtlich. Ja, ich weiss, da ich aber mehrere Anlagen habe, die ich Besitze an verschiedenen Standorten wäre es toll für mich, wenn das mit dem Backend klappt :wink:
Die Standorte werden vermietet, das bedeutet, dass meine Mieter Zugriff auf die PV-Daten haben sollen, sollten Probleme auftreten, können diese mir dies mitteilen, da bietet sich natürlich das ganze super an… (so die theorie) :wink:

Leider ist mir die Authentifizierung noch unklar. Der Server meldet ja im systemlog, dass eine Anfrage gestellt wurde. Leider wird dann meiner Meinung nach diese JSON-RPC Anfrage nicht richtig verarbeitet. Im Log des Apache Felix Webservers taucht ja die meldung auf…

Hi,
ich denke das ist eher eine Webserver fehlkonfiguration.
“Verbindungsaufbau abgelehnt (Connection refused)” klingt sehr nach Standardverbindungsfehler. D.h. das wäre noch “unabhängig” von openems.
Versuch doch mal odoo selbst direkt über den Browser/api zu erreichen. dann sollte der selbe Fehler kommen.
ggf. Firewall einstellung, oder falscher Port oder ähnliches.

Schönen Gruß

Paul

1 Like

Hallo,

danke! Soweit läuft jetzt alles. allerdings bekomme ich noch 2 Dinge nicht hin…

1.:

  • |12.2.2023, 23:05:46|WARN|[Ui.Websocket] JSON-RPC Error Response “Unhandled JSON-RPC method [subscribeEdges]” for Request {“method”:“subscribeEdges”,“params”:{“edges”:[“EMS4”]}}||OpenEMS Common||
    | — | — | — | — | — | — |
    |12.2.2023, 23:05:46|WARN|[Ui.Websocket] Unhandled Request: {“jsonrpc”:“2.0”,“method”:“subscribeEdges”,“params”:{“edges”:[“EMS4”]},“id”:“0e4eb7b6-514b-4347-8678-f5ef7ae9c2a7”}||OPS4J Pax Logging - API|

2.:

  • wird mir die “lastmessage” nicht übertragen. Ich habe im UI-Code mal eine Debugging line hinzugefügt:

      this.service.metadata.next({
        user: response.user,
        edges: response.edges.reduce((map, edge) => {
          map[edge.id] = new Edge(
            edge.id,
            edge.comment,
            edge.producttype,
            ("version" in edge) ? edge["version"] : "0.0.0",
            Role.getRole(edge.role),
            edge.isOnline,
            edge.lastmessage
          );
    
          if ('lastmessage' in edge && edge.lastmessage) {
            console.log('edge.lastmessage exists and is:', edge.lastmessage);
          } else {
            console.log('edge.lastmessage does not exist or is falsy', edge);
          }
    
    
          return map;
        }, {})
      });
    

Da erhalte ich folgendes:

  • edge.lastmessage does not exist or is falsy: {
    “id”: “EMS4”,
    “comment”: “EMS4”,
    “producttype”: “openEMS-edge”,
    “version”: “2023.2.0”,
    “role”: “admin”,
    “isOnline”: false
    }