Hallo Stefan,
Vielen Dank für deine schnelle Antwort. Tut mir leid, dass ich mich so spät melde. Ich wollte versuchen, OpenEMS mit dem WR zu verbinden, den wir hier in unserem Labor haben, und mich dann wieder bei dir melden. Aber leider war es aufgrund der COVID-Vorschriften nicht einfach.
Allerdings stimme ich mit deinem letzten Punkt vollkommen, dass es am besten ist, die benötigten Werte auf der DB-Seite des Codes zu filtern. Was mir noch nicht ganz klar ist, wie kann ich einen bestimmten Kanal aus einer Komponente auslesen.
Zum Beispiel habe ich die Komponente SmaPvInverter
mit nur einer sunspec Tabelle konfiguriert - 101
private static final Map<SunSpecModel, Priority> ACTIVE_MODELS = ImmutableMap.<SunSpecModel, Priority>builder()
.put(DefaultSunSpecModel.S_101, Priority.HIGH)
.build();
Nun möchte ich z.B. nur den Strom der Phase 1 lesen (Kanalname: S101_APH_A
, Register: 40189), wie kann ich dieses Detail extrahieren. Zum Beispiel ist der folgende Code nur für die Handhabung von PV-Daten zuständig:
this.componentManager.getEnabledComponents()
.stream().filter(c -> c instanceof SmaPvInverter)
.forEach(component -> {
lastestValue_S101_APH_A = ???? component.channel("S101_APH_A").getValue()
})
Gibt es im Code eine Möglichkeit, lastestValue_S101_APH_A
direkt zu erhalten, wie ich denke??
Die andere Möglichkeit, die ich bereits im Kopf habe, ist, durch alle Kanalnamen zu schleifen und meine lokalen Variablen zu setzen, wenn die component.channel.address()
gleich "S101_APH_A"
ist, zum Beispiel. Aber ich bin mir nicht sicher, ob dies ein optimaler Weg ist, um es zu tun. Ich habe mir auch die RRD4J-Implementierung angesehen, so habe ich verstanden, dass wir den letzten Wert von einem Kanal abrufen können, aber auch dort war nicht klar, wie man einen bestimmten Kanal abrufen kann.
Deine Kommentare wären hier sehr hilfreich. Vielen Dank im Voraus.
viele Grüße
Laksh