Hallo zusammen,
ich habe mir einen Sensor angelegt, den ich im Energy Dashboard anzeigen lasse. Es ist mir unter den Verbrauchern gelistet und zwar handelt es sich um den Gesamtenergie Bedarf meiner Wärmepumpe.
Dieser setzt sich aus 4 physischen Sensoren zusammen; L1,L2,L3 der Verdichters + Steuerung WP.
Alle Sensoren sind von Shelly und funktionieren einwandfrei!
Das Problem ist jetzt folgendes: der virtuelle(Helfer) Sensor welchen ich in YAML hinterlegt habe, zeigt korrekte Werte, bis eben 8-9 Uhr morgens, jeden Tag! Da zählt er wohl den Energiewert der Steuerung kurz nicht hinzu und dadurch, zeigt er kurz darauf einen deutlich überhöhten Wert an (Gesamtwert des Steuerungssensors).
Woran kann das liegen, dass dieser Wert jeden Tag um die gleiche Uhrzeit durchrutscht und sonst immer funktioniert?
Angehängt noch einige Visualisierungen dazu.
sensor:
- name: Wärmepumpe Gesamtenergie
unit_of_measurement: 'kWh'
device_class: "energy"
state_class: total_increasing
state: "{{ (states('sensor.warmepumpe_l1_energy') | float(0) + states('sensor.warmepumpe_l2_energy') | float(0) + states('sensor.warmepumpe_l3_energy') | float(0) + states('sensor.steuerung_warmepumpe_energy') | float(0)) / 1 }}"
Ich vermute, daß hängt mit | float(0) zusammen. Wenn einer der Sensoren kurzfristig ausfällt bzw. unavailable ist, wird der Wert auf 0 gesetzt und danach kommt es zum Sprung. Die “Nuller” in 2 Deiner Grafiken. Wenn Dich das stört, könntest Du Nuller durch Vorgängerwert ersetzen.
Hier ein Beispiel:
template:
- sensor:
- name: "Wärmepumpe Gesamtenergie mein Test"
unique_id: "waermepumpe_gesamtenergie_mein_test"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set l1 = states('sensor.warmepumpe_l1_energy') | float(0) %}
{% set l2 = states('sensor.warmepumpe_l2_energy') | float(0) %}
{% set l3 = states('sensor.warmepumpe_l3_energy') | float(0) %}
{% set steuerung = states('sensor.steuerung_warmepumpe_energy') | float(0) %}
{% set previous_value = states('sensor.warmepumpe_gesamtenergie') | float(0) %}
{% if l1 > 0 and l2 > 0 and l3 > 0 and steuerung > 0 %}
{{ l1 + l2 + l3 + steuerung }}
{% else %}
{{ previous_value }}
{% endif %}
Das ist etwas grob weil bereits ein einziger Außreißer ausreicht um komplett den Vorgängerwert zu nehmen. Aber zum Probieren reicht es .
Alternativ müßte man für jeden Sensor einen neuen aufsetzen, der im Null-Fall den Vorgängerwert nimmt.
Suche mal im Forum. Da gab es schon solche Diskussionen.
Vielen Dank für deine Antwort.
Was heißt es stört mich, das Problem ist ja, dass die gesamte Statistik im Energy Dashboard nicht mehr passt, weil er da 500x höhere Werte einsetzt, wenn vorher der Steuerungssensorwert nicht in den Gesamtwert eingerechnet wurde und danach wieder eingerechnet wird. Dann denkt das Dashboard eben, dass dieser Differenzwert in dem Moment “verbraucht” würde.
Deine Zeilen brauche ich einfach nur unter meinen Sensor in der YAML einfügen oder etwas ersetzen?
Beste Grüße
Daniel
Ja, versuche es einmal und binde ihn ein im Energyboard und vergleiche 2-3 Tage beide Sensoren.
Achte beim beim Kopieren des Codes auf die richtige Einrückung und ohne “template:”. Bei Deinem obigen Code war ich mir nicht ganz sicher. Auch eine unique ID würde ich immer vergeben, damit Du den Sensor im restlichen HA verwenden kannst.
Gutes Gelingen! Ich bin gespannt.
Ich habe das heute Mittag natürlich direkt umgesetzt, leider mit dem gleichen Ergebnis
Anbei der Screen von Energy Dashboard.
Beide Sensoren haben zum gleichen Zeitpunkt das Problem gehabt
by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)
Hm, schade, eine Idee hätte ich noch.
Vielleicht funktioniert eine anderer Weg, den Vorgänger zu bestimmen: template based trigger
- trigger:
- platform: state
entity_id:
- sensor.waermepumpe_gesamtenergie_mein_test_1
- sensor:
- name: "Wärmepumpe Gesamtenergie mein Test_1"
unique_id: "waermepumpe_gesamtenergie_mein_test_1"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set l1 = states('sensor.warmepumpe_l1_energy') | float(0) %}
{% set l2 = states('sensor.warmepumpe_l2_energy') | float(0) %}
{% set l3 = states('sensor.warmepumpe_l3_energy') | float(0) %}
{% set steuerung = states('sensor.steuerung_warmepumpe_energy') | float(0) %}
{% if l1 > 0 and l2 > 0 and l3 > 0 and steuerung > 0 %}
{{trigger.to_state.state}}
{% else %}
{{trigger.from_state.state}}
{% endif %}
Guten Morgen,
Ich habe den neuen Sensor Test1 gestern natürlich auch gleich angelegt, leider liefert dieser bis jetzt aber gar keine Daten, die anderen beiden bisher aber korrekt und gleich. Von 8-9 Uhr trat täglich der 1. Fehler auf, ich lasse mich gleich mal überraschen.
Beste Grüße
Leider wieder genau der gleiche Effekt, zwischen 8 und 9 Uhr steigt der Verbrauch utopisch an.
by HarryP: Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)
Wie schade. Dann bin ich momentan mit meinem Latein am Ende. Ich denke die Tage noch einmal in Ruhe nach. Vielleicht findet sich noch jemand anderes, der das Rätsel lösen kann.
Ja vielen Dank auf jeden Fall schonmal für deine Unterstützung!
Was noch auffällig ist: in der Schnellansicht der Statistik ist bei beiden Sensoren keinerlei Ausschlag zu sehen und beide funktionieren dort korrekt, in der Verlaufsansicht allerdings, sieht man bei beiden Sensoren sogar synchron zur gleichen Uhrzeit (immer 8:06 und 20:06 Uhr) den Ausschlag nach unten. Evtl hilft das ja noch weiter.
Alles gut. Was Du mal machen könntest: Nimm das Logbuch, grenze die Zeiten ein (mehrere Tage) (+/- 30 s) ob irgendetwas regelmäßig läuft was mit der Wärmepumpe und den betroffenen Sensoren irgendwie in Verbindung stehen könnte. Vielleicht kommt da eine neue Idee?
Dieser Link könnte das fehlende Puzzle sein, wir waren dicht dran.
“If one of the source sensors becomes unavailable
or unknown
for some reason the total will drop in value. When the sensor becomes available again the total will increase. This increase will be incorrectly logged to the energy dashboard as actual energy used.
…
Changing from unavailable
to a value is not logged by the energy dashboard.”
Ich habe Dir den ersten Sensor mal angepaßt und bin gespannt.
- sensor:
- name: "Wärmepumpe Gesamtenergie mein Test 3"
unique_id: "waermepumpe_gesamtenergie_mein_test_3"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set l1_enitity = 'sensor.warmepumpe_l1_energy' -%}
{% set l2_enitity = 'sensor.warmepumpe_l2_energy' -%}
{% set l3_enitity = 'sensor.warmepumpe_l3_energy' -%}
{% set steuerung_entity = 'sensor.steuerung_warmepumpe_energy' -%}
{% set previous_value_entity = 'sensor.warmepumpe_gesamtenergie' -%}
{% set l1_state = states(l1_enitity) | float(0) -%}
{% set l2_state = states(l2_enitity) | float(0) -%}
{% set l3_state = states(l3_enitity) | float(0) -%}
{% set steuerung_state = states(steuerung_entity) | float(0) -%}
{% set previous_value_state = states(previous_value_entity) | float(0) -%}
{% if l1_state > 0 and l2_state > 0 and l3_state > 0 and steuerung_state > 0 %}
{{ l1_state + l2_state + l3_state + steuerung_state }}
{% else %}
{{ previous_value }}
{% endif %}
availability: "{{ has_value(l1_enitity) and has_value(l2_enitity) and has_value(l3_enitity) and has_value(steuerung_entity) }}"
Und hier noch ohne Vorgängerwert, vielleicht gar nicht nötig
- sensor:
- name: "Wärmepumpe Gesamtenergie mein Test 4"
unique_id: "waermepumpe_gesamtenergie_mein_test_4"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set l1_enitity = 'sensor.warmepumpe_l1_energy' -%}
{% set l2_enitity = 'sensor.warmepumpe_l2_energy' -%}
{% set l3_enitity = 'sensor.warmepumpe_l3_energy' -%}
{% set steuerung_entity = 'sensor.steuerung_warmepumpe_energy' -%}
{% set l1_state = states(l1_enitity) | float(0) -%}
{% set l2_state = states(l2_enitity) | float(0) -%}
{% set l3_state = states(l3_enitity) | float(0) -%}
{% set steuerung_state = states(steuerung_entity) | float(0) -%}
{{ l1_state + l2_state + l3_state + steuerung_state }}
availability: "{{ has_value(l1_enitity) and has_value(l2_enitity) and has_value(l3_enitity) and has_value(steuerung_entity) }}"
Super, danke.
Habe den Sensor 4 angelegt und berichte heute Abend ob es geklappt hat!
Guten Morgen,
Habe jetzt noch den heutigen Wert morgens abgewartet und es funktioniert, endlich!!!
Allerdings nicht der Sensor meins 4, der hat keine Werte geliefert.
Aber mein_Test und mein ursprünglicher Sensor, funktionieren, nachdem ich sie wie im Link beschrieben jeweils auf eine andere Art und Weise umgeschrieben habe.
Folgenden haben ich nach der "einfachen’ Anleitung aus dem Link folgend geändert:
- sensor:
- name: Wärmepumpe Gesamtenergie
unit_of_measurement: 'kWh'
device_class: "energy"
state_class: total_increasing
state: "{{ (states('sensor.warmepumpe_l1_energy') | float(0) + states('sensor.warmepumpe_l2_energy') | float(0) + states('sensor.warmepumpe_l3_energy') | float(0) + states('sensor.steuerung_warmepumpe_energy') | float(0)) / 1 }}"
availability: "{{ has_value('sensor.warmepumpe_l1_energy') and has_value('sensor.steuerung_warmepumpe_energy') }}"
Und mein_Test habe ich mit dem HACS Template aus dem Link modifiziert:
- sensor:
- name: "Wärmepumpe Gesamtenergie mein Test"
unique_id: "waermepumpe_gesamtenergie_mein_test"
unit_of_measurement: "kWh"
device_class: energy
state_class: total_increasing
state: >
{% set l1 = states('sensor.warmepumpe_l1_energy') | float(0) %}
{% set l2 = states('sensor.warmepumpe_l2_energy') | float(0) %}
{% set l3 = states('sensor.warmepumpe_l3_energy') | float(0) %}
{% set steuerung = states('sensor.steuerung_warmepumpe_energy') | float(0) %}
{% set previous_value = states('sensor.warmepumpe_gesamtenergie') | float(0) %}
{% if l1 > 0 and l2 > 0 and l3 > 0 and steuerung > 0 %}
{{ l1 + l2 + l3 + steuerung }}
{% else %}
{{ previous_value }}
{% endif %}
availability: >-
{% from 'availability_template.jinja' import avail %}
{{- avail(['sensor.warmepumpe_l1_energy','sensor.warmepumpe_l2_energy','sensor.warmepumpe_l3_energy','sensor.steuerung_warmepumpe_energy']) | bool -}}
Natürlich ist damit nicht die Ursache für keine/falsche Werte bzw den Verbindungsabbrüchen der physischen Sensoren geholfen, aber es funktioniert.
Eventuell hilft es ja anderen weiter, die ähnliche Probleme haben.
Vielen Dank erst einmal für euren Support und weiterhin gutes Gelingen.
Beste Grüße
Daniel
1 „Gefällt mir“