Victron Multiplus MQTT Energy Dashboard Werte berechnen

Hallo Forum,

perspektivisch strebe ich ein Tablett Dashboard an, welches mir auf einen Blick alle wichtigen Infos zum Haus liefert.
Ein Teil davon soll ein Energy Dashboard sein. Theoretisch könnte ich auch die neue Victron GUI v2 per iFrame einbinden, aber es muss auch anders gehen.
Hier im Forum haben schon etliche User dazu Fragen gestellt und viele von den Threads habe ich mir angeschaut. Irgenwie war aber nichts passendes dabei.

Wo stehe ich gerade?
Ich habe einen Victron Multiplus 2 GX als Laderegler für meine Batteriespeicher. Daran angeschlossen ist eine SolarEdge PV Anlage. Geregelt wird alles über einen Smartmeter.

Am Victron habe ich MQTT aktiviert und dank dieser Anleitung eine Integration in Home Assistant schon erfolgreich vorgenommen.

Jetzt würde ich gerne die wichtigsten Grundwerte analog des Victron VRM Portals auslesen.

Das wäre also Netz, PV-Wechselrichter, Batteriekapazität und Be- oder Entladung in W und mein aktueller Gesamtverbrauch.

Was ist mein Problem?
Ich habe mich exakt an die Anleitung oben gehalten.
Hier mal meine Konfigurationsdateien:

mqtt.yaml
sensor:
  # Battery percentage
  - state_topic: "victron/N/myVenusID/system/0/Batteries"
    name: "Battery Percent"
    unique_id: "battery_percent"
    device_class: battery
    value_template: '{{ value_json.value[0].soc | round(0) }}'
    unit_of_measurement: "%"
  # AC Loads
  - state_topic: "victron/N/myVenusID/grid/30/Ac/Power"
    name: "Netz"
    unique_id: "ac_loads"
    device_class: power
    value_template: '{{ value_json.value }}'
    unit_of_measurement: "W"
    icon: mdi:power-socket-uk
  # DC Loads
  - name: "DC Loads"
    device_class: power
    unique_id: "dc_loads"
    state_topic: "victron/N/myVenusID/system/0/Dc/System/Power"
    value_template: '{{ value_json.value|float(0)|round(0) }}'
    unit_of_measurement: "W"
    icon: mdi:power
  # Net Solar Production
  - name: "Current Solar Production"
    unique_id: "net_solar_production"
    device_class: power
    state_topic: "victron/N/myVenusID/system/0/Dc/Pv/Power"
    value_template: '{{ value_json.value|float(0)|round(0) }}'
    unit_of_measurement: "W"
    icon: mdi:solar-power
  # Battery Voltage
  - name: "Battery Voltage"
    unique_id: "battery_voltage"
    device_class: voltage
    state_topic: "victron/N/myVenusID/system/0/Dc/Battery/Voltage"
    value_template: '{{ value_json.value|float(0)|round(1) }}'
    unit_of_measurement: "V"
  # Battery Temp (If you have a temp sensor)
  - name: "Battery Temp"
    device_class: temperature
    unique_id: "battery_temperature"
    state_topic: "victron/N/myVenusID/system/0/Dc/Battery/Temperature"
    value_template: '{{ ((value_json.value[0].soc | round(0) }}'
    unit_of_measurement: "°C"
  # Net load going in/out of your battery
  - name: "Battery Load"
    unique_id: "battery_load"
    device_class: power
    state_topic: "victron/N/myVenusID/system/0/Dc/Battery/Power"
    value_template: '{{ value_json.value[0].power|float(0)|round(0) }}'
    unit_of_measurement: "W"
  # Net load going in/out of your house
  - name: "House Consumption"
    unique_id: "house_consumption"
    device_class: power
    state_topic: "victron/N/myVenusID/system/0/Dc/InverterCharger/Power"
    value_template: '{{ value_json.value[0].power|float(0)|round(0) }}'
    unit_of_measurement: "W"    
  # Current State of your Inverter
  - name: "Inverter State"
    unique_id: "inverter_state"
    state_topic: "victron/N/myVenusID/system/0/SystemState/State"
    value_template: >
      {% if value_json.value == 0 %}
        Off
      {% elif value_json.value == 2 %}
        VE.Bus Fault condition
      {% elif value_json.value == 3 %}
        Bulk
      {% elif value_json.value == 4 %}
        Absorption
      {% elif value_json.value == 5 %}
        Float
      {% elif value_json.value == 6 %}
        Storage
      {% elif value_json.value == 7 %}
        Equalize
      {% elif value_json.value == 9 %}
        Inverting
      {% elif value_json.value == 10 %}
        Assisting
      {% elif value_json.value == 256 %}
        Discharging
      {% elif value_json.value == 257 %}
        Sustain
      {% else %}
        Error - No Data
      {% endif %}
  # Current state of your charge controller
  - name: "Solar Charger State"
    unique_id: "solar_charger_state"
    state_topic: "victron/N/myVenusID/solarcharger/289/State"
    value_template: >
      {% if value_json.value == 0 %}
        Off
      {% elif value_json.value == 2 %}
        Fault
      {% elif value_json.value == 3 %}
        Bulk
      {% elif value_json.value == 4 %}
        Absorption
      {% elif value_json.value == 5 %}
        Float
      {% elif value_json.value == 6 %}
        Storage
      {% elif value_json.value == 7 %}
        Equalize
      {% else %}
        Error - No Data
      {% endif %}
  # Estimated Time until battery is empty based on current load.
  # These calculations were copied from victrons code to mimic how they display it
  - name: "Battery Remaining"
    unique_id: "battery_remaining"
    icon: mdi:timer-sand
    state_topic: "victron/N/myVenusID/system/0/Dc/Battery/TimeToGo"
    value_template: >
      {% set battery_load = states('sensor.battery_load') | int(0) %}

      {% if value is not defined %}
        Error
      {% elif value == '{"value": null}' or battery_load > 0 %}
        ∞
      {% else %}
        {% set seconds = value_json.value | round(0) | int %}
        {% set days = (seconds / 86400) | round(0, 'floor') | int %}
        {% set hours = ((seconds - days * 86400) / 3600) | round(0, 'floor') | int %}
        {% set minutes = ((seconds - hours * 3600) / 60) | round(0, 'floor') | int %}

        {% if 2 > days >= 1 %}
          {{days}} Day
        {% elif days >= 2 %}
          {{days}} Days
        {% elif hours > 0 %}
          {{hours}} Hours
        {% elif minutes > 0 %}
          {{minutes}} Minutes
        {% endif %}
      {% endif %}
template.yaml
- sensor:
      - name: total_power_consuming
        unique_id: "total_power_consuming"
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: >
          {% set dc_loads = states('sensor.dc_loads') | int(0) %}
          {% set ac_loads = states('sensor.ac_loads') | int(0) %}
          {{ dc_loads + ac_loads }}

      - name: total_battery_out
        unique_id: "total_battery_out"
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: > # Only returns a value when load on battery is negative (consuming)
          {% set battery_load = states('sensor.battery_load') | int(0) %}
          {% if battery_load < 0 %}
            {{ battery_load | abs }}
          {% else %}
            0
          {% endif %}

      - name: total_battery_in
        unique_id: "total_battery_in"
        unit_of_measurement: "W"
        state_class: measurement
        device_class: power
        state: > # Only returns a value when load on battery is positive (charging)
          {% set battery_load = states('sensor.battery_load') | int(0) %}
          {% if battery_load >= 0 %}
            {{ battery_load }}
          {% else %}
            0
          {% endif %}
sensors.yaml
- platform: integration
  unique_id: "total_solar_kwh"
  source: sensor.net_solar_production
  unit_prefix: k
  round: 3

- platform: integration
  unique_id: "total_power_consumed"
  source: sensor.total_power_consuming
  unit_prefix: k
  round: 3

- platform: integration
  unique_id: "total_battery_in_kwh"
  source: sensor.total_battery_in
  unit_prefix: k
  round: 3

- platform: integration
  unique_id: "total_battery_out_kwh"
  source: sensor.total_battery_out
  unit_prefix: k
  round: 3

Und dann habe ich die Werte zum Testen in ein Dashboard gepackt:

Ihr seht mein Problem. Battery Load ist unbekannt aber Battery Percent passt.
Ebenso Battery IN/OUT funktioniert nicht. Netz passt wiederum und mein Hausverbrauch passt nicht bzw. unbekannt.

Hat jemand von euch erfolgreich diese Werte in einem Dashboard?
Danke und Grüße
Henri

Hi,

das von Dir verwendete Tutorial bietet einen guten Einstieg. Leider sind die dort und im HA-Forenthread gelisteten Sensoren usw. nur Beispiele. Für Deine Anlage musst Du vermutlich erst sicherstellen, dass bestimmte Werte geliefert werden. Das geht mit dem MQTT-Explorer sehr gut. Bei mir liefert die Victron-Anlage bspw. kein “TimeToGo”.

Ich bin auch nicht sicher, ob das mit den Namen der Entitäten so passt. Bei mir stimmen “unique_id” und Entität nicht überein.
Beispiel:

- unique_id: gobel_battery_discharge_power
  name: Akku Entladeleistung

wird zu
sensor.bslbatt_battery_akku_entladeleistung

Hey, danke für deine Antwort und ja, das war auch meine Vermutung.
Ich taste mich dann dort mal ran und wenn ich das zufriedenstellend umgesetzt habe, teile ich das hier.