Channelwert in der UI abrufen

Hallo liebes Forum,
ich habe eine neue Komponente erstellt mit einem Channel “TOTAL_RESULT”.
Den Wert dieses Channels möchte ich in einem flat-widget in der UI anzeigen.

Ich kann andere Werte gut auslesen und in meinem flat-widget anzeigen. z.B:

this.sumGridActivePower = currentData.allComponents['_sum/GridActivePower'];

Jedoch mein Versuch mit meiner neuen Komponente bleibt erfolgslos:

this.totalResult = currentData.allComponents['myComponent/totalResult'];

Ich habe auch versucht this.config.getComponentsImplementingNature("io.openems.edge.mycomponent.MyComponent") zu verwenden um die Channels als public myComponents: EdgeConfig.Component[] zu erhalten, was aber auch nicht klappte.

(In Java und im DebugLog kann ich den Channelwert meiner Komponente auslesen, nur noch nicht in der UI)

Sind meine Ansätze an sich richtig oder muss ich das anders machen?
Vielen Dank für Eure Hilfe!

Hallo @tafferner,

am einfachsten geht es, wenn du eine oe-flat-widget-line verwendest. z. B. so:

  <oe-flat-widget-line [name]="'Edge.Index.Widgets.GridOptimizedCharge.chargingDelayed' | translate"
    [channelAddress]="component.id + '/AvoidLowChargingTime'" [converter]="FORMAT_SECONDS_TO_DURATION"
    [filter]="filter"></oe-flat-widget-line>

Quelle: openems/ui/src/app/edge/history/Controller/Ess/GridoptimizedCharge/flat/flat.html at develop · OpenEMS/openems · GitHub

Dann wird im Hintergrund automatisch ein subscribe an das Backend gesendet.


Für kompliziertere Fälle kannst du von AbstractFlatWidget erben und dann die Channel angeben:

protected override getChannelAddresses() {
    return [new ChannelAddress(this.componentId, "ChargePower")];
}

Die Werte bekommst du dann in der onCurrentData-Methode.

Beispiel: openems/ui/src/app/edge/live/Multiple/Evcs_Api_Cluster/Evcs_Api_Cluster.ts at develop · OpenEMS/openems · GitHub

Gruß,
Stefan

Danke @stefan.feilmeier,
deine Erklärung ist echt hilfreich, denn jetzt verstehe ich besser wie es im Hintergrund funktioniert.
Als ich meine Lösung gefunden hatte, war ich froh, dass es endlich funktioniert. Ich wusste dann, was ich tun muss aber noch nicht so richtig, warum ich das so machen muss :sweat_smile:.
Da bin ich jetzt weiter, Dankeschön :smiley:

1 Like