Hardware Abstraction Layer für OpenEMS (Pi4J, RevPi, etc.)

Servus zusammen,

wir möchten gerne das Konzept eines “Hardware Abstraction Layers (HAL)” für OpenEMS einführen.
Dieser Post soll eine Anregung zur Diskussion sein, also Eure Vorschläge oder Fragen sind gerne willkommen! :slight_smile:

Im Forum habe ich dazu bereits verschiedene Ideen und Ansätze gefunden, u. a. auch von @coolfire, @p.wimmer und @mishbieg.

Unten verlinke ich nochmal die verschiedene Beiträge zum Thema.

Das Ziel der Vereinheitlichung ist, eine API für Hardware zu schaffen. Dies soll unabhängig vom verwendeten Hardware sein, also mit RaspberryPi, RevPi oder auch mit anderen SoCs funktionieren.

Anbei ein grober Plan zur Implementierung:

  1. Gerätespezifische APIs sollen in eigenen Modulen oder als Abhängigkeit eingebunden werden (gelbe Boxen).
  2. Zugriff auf diese soll durch eine einheitliche Oberfläche erfolgen (grüne Boxen)
  3. Spezifische Treiber können dann diese nutzen und Protokolle bzw. konkrete Geräte ansteuern. Bei Bedarf kann auf die gerätespezifische API zugegriffen werden.
  4. Diese sollen durch OpenEMS angesteuert werden können.

Aus den Beiträgen im Forum konnte ich feststellen, dass der Bedarf nach dem RaspberryPi am größten ist.
Aus diesem Grund habe ich eine Pull-Request bei OpenEMS erstellt, die diese Bibliothek einbindet und somit den ersten Schritt auf dem Weg geht.

Viele Grüße aus Zwiesel
Lorant


Links zu Pi4J und RevPi:

1 Like

Hi,
ich habe leider nicht viel Zeit gerade, weil ich Haus baue und unser Projekt erst mal auf Eis liegt. An sich finde ich die Idee super. Die Commits zum HAL habe ich nur grob überflogen. Schaut gut aus.

Ich habe mich beim RevPi mit Tests etwas schwergetan. Das möglichst so zu entkoppeln, dass man gute Tests schreiben kann, ist nicht ganz trivial. Irgendwie muss man die Hardware dann mocken.

Das ist, so wie es ausschaut, zumindest teilweise gelöst. Ich vermute es liegt auch ein wenig dran, dass die APIs von OpenEMS nicht in Richtung große Testabdeckung entwickelt wurden. Die sind da manchmal etwas restriktiv, wenn es um das Thema mocken und testen geht. Hab mich da mit Java-Grundkenntnissen eher schwergetan. Das ist sicher auch Problem, dass irgendwann grundsätzlich eine Lösung braucht. Bei vielen Commits sind nur grundlegende EMS-Component-Startup-Tests implementiert.

Das zweite Problem mit dem ich konfrontiert war, ist gutes Error-Handling und Logging. Man muss das ja von ganz unten bis nach oben weitergeben und möchte nicht lange in einer Fehlermeldung nach der richtigen Zeile suchen. Das stört mich allgemein ein bissel an Java. Die Fehlermeldungen geben sehr viel Unnützes aus. Vielleicht weil mir da auch als Java-Anfänger noch die Kenntnisse fehlen. Weiß nicht wie gut da Pi4J das Problem löst. Hab mir das Pull-Request in Bezug auf das Error Handling noch nicht angeschaut. Wollte aber trotzdem noch einbringen, dass mir das wichtig wäre für später.

Danke auf jeden Fall schon mal für die Arbeit die da drin steckt. Das wird sicher sehr nützlich :).