Ladeleistung Batteriespeicher durch Zustand von Entität in positiven und negativen Wert bringen

Hallo zusammen,

ich habe eine LG Solaranlage mit Batteriespeicher.
Die Daten greife ich via MQTT ab. Leider bekomme ich die DC - Leistung vom Akku immer nur als positiven Wert in Watt.

Für die Sunsynk Power Flow Karte benötige ich jedoch einen positiven Wert für das Laden des Akkus und einen negativen für das Entladen.
Ich habe eine Entität die beim Laden auf 1 umschaltet und beim Entladen auf 0.

Wie kann ich beide Entitäten verknüpfen, dass ich am Ende eine neue Entität bekomme die je nach Zustand ( 1 oder 0) dann den Wert der Leistung positiv oder negativ ausgibt?

Vielen Dank

Das habe ich bisher hinbekommen. Bei Status 1 für discharge funktioniert es, ansonsten erhalte ich einen Fehler. Was mache ich falsch?

    actual_battery_power:
      friendly_name: "aktuelle Batterieleistung"
      unique_id: actual_battery_power
      unit_of_measurement: "W"
      device_class: power
      value_template: >
        {% if is_state('sensor.ess_ess_home_direction_is_battery_discharging', '0') %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float * 1 }}
        {% if is_state('sensor.ess_ess_home_direction_is_battery_discharging', '1') %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float * -1 }}
        {% else %} 0.0 {% endif %}

Willkommen hier im Forum.

Welchen Fehler bekommst du?

Danke für die Antwort.

Ich habe diesen Fehler erhalten:
TemplateSyntaxError: Unexpected end of template. Jinja was looking for the following tags: ‘elif’ or ‘else’ or ‘endif’. The innermost block that needs to be closed is ‘if’.

Das habe ich nun angepasst und es kommt kein Fehler mehr.

    actual_battery_power:
      friendly_name: "aktuelle Batterieleistung"
      unique_id: actual_battery_power
      unit_of_measurement: "W"
      device_class: power
      value_template: >
        {% if is_state('sensor.ess_ess_home_direction_is_battery_discharging', '0') %}
        {{ states('sensor.ess_ess_common_batt_dc_power') | float * 1 }}
        {% else %} 0.0 {% endif %}
        {% if is_state('sensor.ess_ess_home_direction_is_battery_discharging', '1') %}
        {{ states('sensor.ess_ess_common_batt_dc_power') | float * -1 }}
        {% else %} 0.0 {% endif %}

Nachtrag: Jetzt sollte ich doch eigentlich von dem Sensor “sensor.ess_ess_common_batt_dc_power” je nach Zustand (0 oder 1) einen neuen positiven oder negativen Wert erhalten.
Natürlich dann als sensor.actual_battery_power
Ist das so korrekt? Live sehe ich es erst wenn genug Strom produziert wird.

:pencil2:by HeikoBauer: Zusammenführung Doppelpost.

Dem würde ich erst mal zustimmen.

Hi @watersnake,
hier noch ein abgespeckter Vorschlag.

WENN discharg = 0, dann = dc power
SONST dc power *-1 (“weil discoarge nur noch 1 sein kann”)

actual_battery_power:
      friendly_name: "aktuelle Batterieleistung"
      unique_id: actual_battery_power
      unit_of_measurement: "W"
      device_class: power
      value_template: >
        {% if is_state('sensor.ess_ess_home_direction_is_battery_discharging', '0') %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float }}
        {% else %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float * -1 }}
        {% endif %}

Andere Frage. Die bisherigen “value_tamplate” lösen doch nur aus wenn sich der discharging Zustand ändert.? Benötigst du nicht auch den Auslöser wenn sich dc_power ändert? Beispiel: Deine Batterie wird mit -1000W entladen und nun schaltet noch jemand den Fön mit 800W an, dann wäre doch die Endladung bei -1800W. Dein discharging Zustand hat sich nicht geändert, also wird dir der Wert von “aktuelle Batterieleistung” nicht aktualisiert… Oder habe ich falsch verstanden?

also so dann (ungetestet)
WENN Änderung dc_power und discharg = 0, dann = dc power
SONST dc power *-1 (“weil discoarge nur noch 1 sein kann”)

        {% if states('sensor.ess_ess_common_batt_dc_power')|float and is_state('sensor.ess_ess_home_direction_is_battery_discharging', '0') %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float }}
        {% else %}
          {{ states('sensor.ess_ess_common_batt_dc_power') | float * -1 }}
        {% endif %}

Ich hatte mit meinem ersten Versuch nur negative Werte erhalten. Nach meiner Ansicht auch wenn sich Abgabe der Batterie verändert hat.

Anbei zwei Bilder.
Mit dem neuen Code hoffe ich dann die positiven und negativen Werte in einem Sensor bündeln zu können. Da kann ich jedoch erst testen wenn die Batterie wieder geladen bzw. entladen wird. Dan werde ich berichten.


Und, hast du derweil schon mal geladen oder entladen? :wink: