Giter VIP home page Giter VIP logo

7energy-backend's Introduction

7energy backend

Beschreibung

Hier findet sich der Zwischenstand der Entwicklung eines Backend-Systems für die Verwaltung von Energiegemeinschaften (EGs).
Kern der Applikation bilden eine objektrelationale Datenbank (vorerst auf sqlite-Basis) und eine auf express.js basierende Rest-API.

Das grundlegende Datenmodell sieht so aus:

data model

Es wurden 4 zentrale Modelle und ihre Beziehungen definiert und auf Basis des ORM Sequelize implementiert.
Die im Detail abzubildenden Informationen je Modell (z.B. Adressdaten für Mitglieder, Datentypen für Netz-Segment und Zähler-Messungen) sind noch offen, können aber recht einfach erweitert werden. Um die Komplexität der API niegrig zu halten bzw. Erweiterungen des Datenmodells ohne die Notwendigkeit von API-Anpassungen zu ermöglichen, könnten solche Informationen auch einfach in die Felder namens metadata serialisiert werden.

Für die Implementierung eines Zugriffsberechtigungs-Systems wurden folgende Rollen identifiziert:

  • Systemadministrator: kann z.B. neue Energiegemeinschaften anlegen
  • Energiegemeinschafts-Administrator: hat Sonderrechte innerhalb einer EG
  • Mitglied einer Energiegemeinschaft: kann die eigene Mitgliedschaft verwalten
  • Messwert-Orakel: kann Verbrauchsdaten einer EG einspielen

Die weitere Entwicklung sollte in etwa folgendermaßen aussehen:

  • Implementierung von Rollen-spezifischen Zugriffsberechtigungen für die API-Endpunkte
  • Verifikation der Messpunkt-Daten über die digitale Signatur (benötigt in Haushalten installierte Hardware, welche digital signierte Daten liefert)
  • Verfeinerung der API, z.B. durch Update-Methoden, Möglichkeit zum Blättern usw.
  • Implementierung von Tests für alle Funktionen

Eine prototypische Implementierung einer Komponente für die Einspeisung von Energiedaten in Echtzeit von einem MQTT-Broker befindet sich in src/mqttListener.ts.
Um diese Anwendung auszuführen, müssen in der Konfigurationsdatei .env Zugangsdaten zu einem MQTT-Broker hinterlegt werden.
Wenn auch die Umgebungsvariable API gesetzt ist und auf einen laufenden API-Server zeigt, werden von der Anwendung gelesene Energiedaten über die API laufend persistiert.

Entwicklung

node.js v14+ und eine dazu passende Version von npm müssen bereits installiert sein.

Um das Projekt für lokale Entwicklung einzurichten, sind folgende Schritte nötig:

Eine Kopie beziehen

git clone http://github.com/d10r/7energy-backend

Ins Projekt-Verzeichnis wechseln

cd 7energy-backend

Abhängigkeiten installieren

npm ci

Dies installiert die zur Auführung nötigen Komponenten, insbesondere auch sqlite, ein leichtgewichtiges DMBS.

Nun kann eine Server-Instanz gestartet werden mit

npm start

Dies legt beim 1. Aufruf eine leere Datenbank in db.sqlite mit dem oben abgebildeten Schema an und stellt eine Rest-API auf Port 8001 zur Verfügung.
Jetzt kann z.B. auf der Adresse http://localhost:8001/recs eine Liste der EGs im System abgefragt werden. Anfangs ist diese Liste leer.

Es liegt ein Skript bei, um beispielhaft das Einspielen und Auslesen von Daten über die API zu demonstrieren.
(Vor der Ausführung sollte sichergestellt werden, dass das Paket jq installiert ist, z.B. mit apt install jq auf Debian-basierten Systemen.)
Nachdem der Server gestartet und dadurch die Datenbank initialisiert wurde, kann dieses Skript ausgeführt werden:

./init-db-with-example-data.sh

Dadurch wird eine EG mit einem Mitglied mit einem Zählpunkt angelegt und für diesen Zählpunkt ein Messwert eingetragen.
Anschließend erfolgt eine Abfrage dieser Daten über die API und eine Ausgabe auf der Konsole.

Lizenz

CC-BY-SA 3.0 AT

7energy-backend's People

Contributors

d10r avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.