OpenEMS und openhab

Hallo,
seit heute funtioniert meine PV Anlage mit der Steuerung von Fenecon. Ein Hauptgrund für die Entscheidung war das offene System.
Was ich jetzt machen möchte, ist die OpemEMS Steuerung mit meinem openhab System zu verbinden um Daten auszulesen und in meinem Home Automation zu integrieren.
Hat jemand einen Tip wie das am besten geht?

Hallo Jochen,

willkommen in der OpenEMS Community. Für die Einbindung in OpenHAB gibt es ein “Issue” auf GitHub. Leider hat aber noch niemand ein fertiges OpenHAB-Modul entwickelt.

Der Weg zur Einbindung dürfte über die offenen Schnittstellen am FEMS funktionieren:

Gruß,
Stefan

1 Like

Hallo zusammen,

ich bin gerade dabei eine FENECON Anbindung für OpenHAB zu schreiben, um auf die wichtigsten Daten in OpenHAB zugreifen zu können.

Dazu greife ich auf FENECON Home (FEMS Version[2024.7.2]) über die REST-API zu. Leider funktioniert das nicht bei mehreren Abfragen hintereinander.

Der Ablauf ist wie folgt - alle X Sekunden werden folgende REST-API Aufrufe hintereinander abgesetzt:

  1. REST-Call → Systemstatus
  2. REST-Call → Batteriestatus
  3. REST-Call → …
  4. REST-Call → …
  5. REST-Call → …
  6. REST-Call → …

Bereits nach zwei bis drei Durchläufen kommt es bei einzelnen REST-Calls zu Request-Timeouts.
Ich weiß, dass das Connection-Limit für die REST-API bei 5 Verbindungen liegt, aber da die REST-Calls nacheinander erfolgen, sollte das doch kein Problem sein, oder?
Gibt es hier ein Rate-Limiting oder Throttling?

Viele Grüße
Philipp

Ich hab das AcceptRateLimit gefunden und dadurch mein Fehler beim Http-Client.

Jetzt funktioniert alles :slight_smile: .

Wenn alles gut geht, dann könnte mit OpenHab 4.3 das FENECON Binding veröffentlicht werden.

Hallo @nixoso
ich bin auch seit kurzem Besitzer einer Fenecon-Anlage und wäre sehr interessiert an einer Einbindung via OpenEMS (ans Homekit). Somit bin ich sehr an Deiner Vorarbeit interessiert! :slight_smile:
VG, till

Hallo @till

die Daten sind bereits bei Github zu finden, unter folgendem Pull-Request, der gerade noch im Review ist: [fenecon] Initial contribution by nixoso · Pull Request #17174 · openhab/openhab-addons · GitHub . Für dich ist wahrscheinlich der FeneconController am interessantesten :slight_smile: . Der Zugriff erfolgt zyklisch ganz einfach über die REST-API.

Viele Grüße
Philipp

2 Likes

Das klingt wirklich super! Gibt es eine Möglichkeit die Vorabversion schon in Openhab einzubinden? Sorry, bin da noch etwas ein Noob, habe bisher immer nur “fertige” Bindings verwendet.

Danke & Gruß

Thorsten

Ich habe das Binding inzwischen in kompilierter Form gefunden:
https://ci.openhab.org/job/openHAB-Addons/lastSuccessfulBuild/artifact/bundles/org.openhab.binding.fenecon/target/
Einfach in den addons Ordner von openHAB kopiert und nach kurzer Konfiguration sind die Werte des FENECON Home in openHAB!
Großartige Arbeit, besten Dank dafür!

1 Like

Hallo @hachinga

Entschuldige, ich war die Woche auf Dienstreise, aber schön, dass du es schon selbst gefunden und ausprobiert hast.

Danke für das Feedback, freut mich sehr, dass es dir hilft :slight_smile:

Viele Grüße
Philipp

Hallo @stefan.feilmeier

das FENECON-Binding ist nun offiziell gemerged wurden → [fenecon] New binding for FENECON · Issue #17173 · openhab/openhab-addons · GitHub und damit im nächsten openHAB Release 4.3 im Dezember offiziell für alle verfügbar.

Damit wird es z.B. möglich sein, Diagramme zur Stromerzeugung und zum Stromverbrauch in openHAB darzustellen:


und der Verbrauch auf den Phasen:

oder einfach nur die aktuellen Daten:

In diesem Zusammenhang werde ich auch das FENECON-Logo auf die offizielle openHAB-Homepage setzen: Add-ons | openHAB . Ich hoffe das ist für FENECON in Ordnung? Ich würde mich diesbezüglich über ein Feedback freuen :slight_smile: .

Viele Grüße
Philipp

@stefan.feilmeier bezüglich Logo fragen ! :slight_smile:

1 Like

Hallo Philipp,

Ist es mit dem Binding auch möglich, die Summe der Tages-Werte (Einspeisung, Erzeugung, Bezug, Verbrauch) in kWh wie in der Historie der FENECON App zu bekommen?

Danke & Gruß

Thorsten

Hallo Thorsten,

das Binding selbst bietet leider keinen Zugriff auf die Tageswertdaten. Zumindest in der FENECON-API-Dokumentation fehlt derzeit der entsprechende Zugriffspunkt.

Es wäre aber möglich, über die openHAB Persistence Features etwas ähnliches zu bauen (basierend auf den von mir gezeigten Diagrammen).

Ich habe es selbst noch nicht ausprobiert, aber über Persistence | openHAB kannst du die Werte, laut Doku, leicht zusammenstellen, z.B.

Verbrauch.maximumSince(now.truncatedTo(ChronoUnit.DAYS)) Verbrauch.minimumSince(now.truncatedTo(ChronoUnit.DAYS))

Viele Grüße
Philipp

Ok danke, das werde ich mir ansehen.
Ein Schuss ins Blaue: ich habe in einem anderen Forum (Link) gelesen, das man mit “./.” sämtliche Datenpunkte abrufen kann die es gibt, davon etliche die nicht dokumentiert sind. Eine Abfrage mit

h(t)(t)p://IP:80/rest/channel/.*/.*

zeigt bei mir zumindest etliches (nur leider kann ich es nicht interpretieren). Vielleicht sind da auch die Tageswertdaten enthalten oder andere nützliche Sachen?

Das ist interessant, das werde ich mir in Zukunft auf jeden Fall anschauen.
Im Moment würde ich aber für das offizielle openHAB Release auf die offizielle API setzen, damit bei einem Update nicht etwas Unvorhersehbares im Betrieb passiert :slight_smile:

@nixoso: Danke für die Entwicklung des Bindings! Ich hatte das auch schon lange vor, bin aber nie dazu gekommen. :+1:

Das Binding dürfte grundsätzlich mit allen OpenEMS-Edge-basierten Energiemanagementsystemen kompatibel sein - falls man das bei OpenHAB vermerken kann.

@hachinga

Nein, diese Daten sind dort nicht enthalten. Die Daten müsste man über einen JSONRPC-Request vom FEMS abholen, das ist aber im Standard über die (lesende) REST-Schnittstelle nicht möglich.

2 Likes

Hallo Thorsten,

ich kam endlich mal dazu mir die Persistence-API von openHAB anzuschauen und die Tageswerte lassen sich damit leicht in einer Rule ermitteln - hier mal ein Beispiel:

rule "Calculation daily power values"
when
  Item LastFeneconUpdate changed
then
    
    var dailyMax = (ProductionActivePower.maximumSince(now.with(LocalTime.of(0,0,0,0))).state as Number).floatValue()
    MaxProductionActivePowerOfTheDay.postUpdate(dailyMax)

    var dailyProduction = (ProductionActivePower.sumSince(now.with(LocalTime.of(0,0,0,0))) as Number).floatValue() / 60 / 1000
    ProductionActivePowerOfTheDay.postUpdate(dailyProduction)

    var dailyConsumption = (ConsumptionActivePower.sumSince(now.with(LocalTime.of(0,0,0,0))) as Number).floatValue() / 60 / 1000
    ConsumptionActivePowerOfTheDay.postUpdate(dailyConsumption)

    var dailyBuyFromGrid = (BuyFromGridPower.sumSince(now.with(LocalTime.of(0,0,0,0))) as Number).floatValue() / 60 / 1000
    BuyFromGridPowerOfTheDay.postUpdate(dailyBuyFromGrid)

end

Damit ist folgendes Ergebnis möglich (siehe die letzten 4 Einträge).

Viele Grüße
Philipp