Fehlerhafter Sensor bei Netzeinspeisung

Bereich rings rum zum Thema Yaml und seine Tücken.


Antworten
Alterchen
Beiträge: 15
Registriert: Mo 8. Jan 2024, 19:28
Has thanked: 5 times
Been thanked: 1 time

Fehlerhafter Sensor bei Netzeinspeisung

Beitrag von Alterchen »

Hallo zusammen,

wo jetzt langsam die Jahreszeit anfängt, an dem mein BKW auch mal mehr produziert als das Haus verbraucht ist mir aufgefallen, dass der Sensor aus der Configuration.yaml, der die Einspeisung ins Netz berechnet, spinnt. In den Logs steht dazu:

TemplateError('TypeError: can only concatenate str (not "float") to str') while processing template 'Template<template=({% if is_number(states('sensor.power_total')) and states('sensor.power_total') | float(0) < 0 %} {{ states('sensor.power_total') + states('sensor.bkw_power') | float (0) | round (3) }} {% else %} {{ states('sensor.bkw_power') | float(0) | round(3) }} {% endif %}) renders=111518>' for attribute '_attr_native_value' in entity 'sensor.solar_eigenverbrauch_watt'

Der Sensor wandelt den negativen Bezug von einem 3EM in positiv und setzt den Bezug auf 0:

Code: Alles auswählen

    - name: "Zurueck zum Netz (Watt)"
      unique_id: "BalkonsolarBackToGridSensorWatts"
      state_class: measurement
      icon: mdi:transmission-tower
      unit_of_measurement: W
      device_class: power
      state: >
          {% if is_number(states('sensor.power_total')) and states('sensor.power_total') | float(0) < 0 %}
              {{(states('sensor.power_total') | float(0))*-1 | round (3) }}
          {% else %}
              {{(states ('0.0') | float(0)) | round(3) }}
          {% endif %}

Ich habe den so woanders abgeschrieben (ich bin yaml-Noob) und finde den Fehler nicht, tippe aber auf ein Problem mit Zahlen und Strings? Mit der Trial&Error-Methode kam ich zu keinem Ergebnis ;)

Viele Grüße
Alterchen

Benutzeravatar
Osorkon
Administrator
Beiträge: 1950
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Fehlerhafter Sensor bei Netzeinspeisung

Beitrag von Osorkon »

Verstehe ich Dich richtig?
Der Template Sensor soll bei einen negativen Wert von sensor.power_total diesen Wert als positive Zahl wieder geben. Also das negative Vorzeichen soll entfernt werden.
Zeigt der Sensor sensor.power_total eine 0 oder eine positive Zahl, soll der Template Sensor einen 0 wieder geben.

Code: Alles auswählen

{% set power =  states('sensor.power_total') | int(0) %}
{{ iif(power <  0, power | abs , 0) }}

Mit

Code: Alles auswählen

| abs

entfernst Du das negative Vorzeichen.

Ich würde den Wert auch nicht als Gleikommazahl (float) formatieren und dann auch 3 Stellen aufrunden.
Ganze Zahl (int) sollte doch auch vollkommen ausreichen, oder nicht.

BTW: Du brauchst Dich nicht zwingend mit yaml rumschlagen. Einen Template Sensor kannst Du auch ganz bequem als Helfer Anlägen. ;)

Edit: Hier hast Du bereits einen ähnliche Frage gestellt. ;)
Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Alterchen
Beiträge: 15
Registriert: Mo 8. Jan 2024, 19:28
Has thanked: 5 times
Been thanked: 1 time

Re: Fehlerhafter Sensor bei Netzeinspeisung

Beitrag von Alterchen »

Verstehe ich Dich richtig?
Der Template Sensor soll bei einen negativen Wert von sensor.power_total diesen Wert als positive Zahl wieder geben. Also das negative Vorzeichen soll entfernt werden.
Zeigt der Sensor sensor.power_total eine 0 oder eine positive Zahl, soll der Template Sensor einen 0 wieder geben.

Genau das. Der Sensor soll die eingespeisten Watt ins Netz anzeigen und in dem Fall als Bezug (power_total) keinen negativen Wert, sondern 0 anzeigen. Danke für die Vereinfachung :D

Aber ich gerade bemerkt, das ich oben den falschen Sensor zu dem Log gepostet habe. Hier der richtige:

Code: Alles auswählen

    - name: "Solar Eigenverbrauch (Watt)"
      unique_id: "BalkonsolarEigenverbrauchWatts"
      state_class: measurement
      icon: mdi:flash
      unit_of_measurement: W
      device_class: power
      state: > 
          {% if is_number(states('sensor.power_total')) and states('sensor.power_total') | float(0) < 0 %}
              {{ states('sensor.power_total') + states('sensor.bkw_power') | float (0) | round (3) }}
          {% else %}
              {{ states('sensor.bkw_power') | float(0) | round(3) }}
          {% endif %}

Auf den bezieht sich die Fehlermeldung aus dem Log. Da ist der Wurm drin :(
Der Sensor zeigt nur den Eigenverbrauchsanteil der gesamten BKW-Leistung an. Funktioniert solange Bezug vom Netz da ist, steigt aber aus wenn die BKW-Leistung höher als der Bezug vom Netz ist.
Für die Umrechnung in kWh nehme ich natürlich einen Helfer. Einen Helfer als Ersatz für die oben gezeigten Templates habe ich grad nicht gefunden. Und yaml reizt mich eben. Aus den Fehlern möchte ich lernen :)

Viele Grüße
Alterchen

Benutzeravatar
Osorkon
Administrator
Beiträge: 1950
Registriert: Sa 17. Jul 2021, 16:53
2
Wohnort: Langenargen
Has thanked: 61 times
Been thanked: 530 times
Kontaktdaten:

Re: Fehlerhafter Sensor bei Netzeinspeisung

Beitrag von Osorkon »

Dir fehlt in Deinem Template nur ein Formatierung zu float

Code: Alles auswählen

{% if is_number(states('sensor.power_total')) and states('sensor.power_total') | float(0) < 0 %}
  {{ states('sensor.power_total') | float(0) + states('sensor.bkw_power') | float (0) | round (3) }}
{% else %}
  {{ states('sensor.bkw_power') | float(0) | round(3) }}
{% endif %}

Ich würde das Template so gestalten, das Ergebnis ist aber das gleiche. :D
Auch hier sprechen wir von Watt, da wird die Stelle nach dem Komma, wohl nicht so interessant sein. ;)
Würde dementsprechend auch hier int und nicht float verwenden.

Code: Alles auswählen

{% set power = states('sensor.power_total') | int(0) %}
{% set bkw = states('sensor.bkw_power') | int(0) %}
{{ iif(power < 0, power + bkw , bkw) }}

Gruß
Osorkon

Einer muss ja für Ordnung sorgen. :D
Alterchen
Beiträge: 15
Registriert: Mo 8. Jan 2024, 19:28
Has thanked: 5 times
Been thanked: 1 time

Re: Fehlerhafter Sensor bei Netzeinspeisung

Beitrag von Alterchen »

Hallo zusammen,

@Osorkon du hast recht. Ich habe jetzt mal alle Watt-Sensoren auf Integer umgebaut und deinen Vorschlag umgesetzt. Jetzt warte ich nur noch auf Sonne zum Testen :) Leider habe ich nicht so ein schönes Testtool wie hier viewtopic.php?t=662 auf Seite 2 zu sehen ist ;)

Du bist der Beste, vielen Dank für deine Hilfe!

Viele Grüße
Alterchen

Antworten