Hallo, ich hoffe diese Problematik wurde nicht schon hundert mal diskutiert. Leider habe ich über die Suche nichts passendes gefunden.
Es ist auch ein Problem das ich immer wieder über alte Syntaxs stolpere.
Ich möchte es gerne in YAML schaffen.
Nun mein Problem:
Mein Sensor “sensor.gartenkraftwerk_hms_2000_yieldday” gibt mir einen Wert solange Strom erzeugt wird. Wenn kein Strom erzeugt wird steht im Wert unknown oder unavailable.
Das möchte ich natürlich nicht auf meinem Dashboard haben.
Habe zwei Möglichkeiten aber bei keinem zu einem Ergebnis gekommen.
Möglichkeit 1:
Den maximalwert des Sensors versuchen zu speichern bzw abzurufen
Möglichkeit 2:
Den aktuellen Wert einer Shelly (sensor.balkonkraftwerk_switch_0_energy) zu erfassen und diesen von einem um 00:00 Uhr erfasstem Wert abzuziehen.
Zu Möglichkeit 1, hier ein kopiertes Werk mit meinen Werten. Leider alte Syntax.
Bekomme in Studio Code Server jede menge Fehler.
Vielleicht kann mir hier jemand helfen.
Der Code wird in der Configuration.yaml eingefügt und zwar ohne template, da bereits einige Sensoren unter template vorhanden sind die auch funktionieren.
template:
- trigger:
- platform: time_pattern
hours: 0
minutes: 0
id: 'midnight'
- platform: state
entity_id: sensor.gartenkraftwerk_hms_2000_yieldday
id: 'change'
sensor:
- name: "tagesertrag_solar_gesamt"
state: >
{% set outt = states('sensor.gartenkraftwerk_hms_2000_yieldday')|float(None) %}
{% set maxt = states('sensor.tagesertrag_solar_gesamt')|float(None) %}
{% if outt != None and (trigger.id == 'midnight' or maxt == None
or outt > maxt) %} {{ outt }}
{% else %} {{ maxt }} {% endif %}
unit_of_measurement: "kWh"
Wofür brauche ich die id?
Warum muss ich das mit der Uhrzeit so kompliziert machen?
Vielen Dank im vorraus falls jemand Zeit hat zu helfen.
Wenn der Wert invalide wird, nimm den Vorgängerwert
template:
- trigger:
- platform: state
entity_id:
- sensor.gartenkraftwerk_hms_2000_yieldday
sensor:
- name: "tagesertrag_solar_gesamt"
unique_id: tagesertrag_solar_gesamt
state_class: measurement
device_class: power
unit_of_measurement: "W"
state: >
{% set status = states('sensor.gartenkraftwerk_hms_2000_yieldday') %}
{% set invalid_states = ['unavailable', 'unknown', 'none'] %}
{% set old = trigger.from_state.state | float(0) %}
{% set new = trigger.to_state.state | float(0) %}
{{new if status | lower not in invalid_states else old %}
Ich habe den Code nicht nachgestellt/probiert aber im besten Fall kannst Du ihn 1:1 übernehmen.
Gutes Gelingen!
Edit
Ich sehe gerade, daß der Sensor und Name Quatsch ist. Korrigierte Stromerzeugung wäre passender. Sry, ich sollte nichts auf die Schnelle posten.
Erstmal vielen Dank für die schnelle Antwort und dieser Möglichkeit.
Ich bin mir nicht immer sicher ob es unter template in der configuration.yaml gehört oder in die automations.yaml.
Laut dem Update von 2024.8 auf 2024.10 wurden einige YAML Änderungen durchgeführt. Vermutlich deshalb auch meine Verwirrtheit. Das soll jetzt auch nur ein Hinweis sein.
Aufgrund dessen kommt bei Studio Code Server (Mein bevorzugter Editor für YAML) bei
platform: state string does not match the pattern of “LEGAZY SYNTAX”
Laut neuer Schreibweise muss ich es in - trigger ändern.
Und am Ende deines Codes fehlte noch eine geschwungene Klammer. Ich wusste es nicht ich hab es einfach ausprobiert
Laut Studio Code Server kein Fehler in der Syntax aber leider nach Neustart von HA, wird kein Sensor mit dem Namen “tagesertrag_solar_gesamt” bei den Entwicklerwerkzeugen angezeigt.
So wie ich den Code lese, wird bei jeder Änderung des Wertes von “sensor.gartenkraftwerk_hms_2000_yieldday” ein neuer Wert in den Sensor “Tagesertrag_solar_gesamt” geschrieben, solange er nicht die Ausnahmen ‘unavailable’, ‘unknown’, ‘none’ annimmt. Sehe ich das richtig?
Nun sieht mein Code so aus:
- trigger:
- trigger: state
entity_id:
- sensor.gartenkraftwerk_hms_2000_yieldday
sensor:
- name: "tagesertrag_solar_gesamt"
unique_id: tagesertrag_solar_gesamt
state_class: measurement
device_class: power
unit_of_measurement: "kWh"
state: >
{% set status = states('sensor.gartenkraftwerk_hms_2000_yieldday') %}
{% set invalid_states = ['unavailable', 'unknown', 'none'] %}
{% set old = trigger.from_state.state | float(0) %}
{% set new = trigger.to_state.state | float(0) %}
{{new if status | lower not in invalid_states else old %}}
EDIT:
Bei der Device_class bin ich mir inhaltlich nicht sicher. Der initiale Sensor liefert Watt? und nur durch unit_of_measurement: “kWh” erfolgt keine Summierung. Es gibt noch die “device_class: total_increasing”. Das sollte ein Verbrauchszähler sein.
Alternativ könnte man sich auch von der Idee eines yaml Sensors trennen und über UI anlegen.
Da es jetzt funktioniert möchte ich mich als erstes für die grandiose Hilfe bedanken.
Danke! Ich habe zwar den Helfer in der UI gesehen aber der Ansporn war halt es ohne zu schaffen.
Ich will aber noch abwarten was heute abend passiert, wenn der Wert wieder auf die besagten Werte springt. Wenn nichts mehr kommt diesbezüglich dann läuft es. Abschließend möche ich noch den funktionieren Code präsentieren.
P.s. Also der Initialsensor “sensor.gartenkraftwerk_hms_2000_yieldday” liefert “Wh”
- trigger:
- trigger: state
entity_id:
- sensor.gartenkraftwerk_hms_2000_yieldday
sensor:
- name: "tagesertrag_solar_gesamt"
unique_id: tagesertrag_solar_gesamt
device_class: "energy"
state_class: total_increasing
unit_of_measurement: "kWh"
state: >
{% set status = states('sensor.gartenkraftwerk_hms_2000_yieldday') %}
{% set invalid_states = ['unavailable', 'unknown', 'none'] %}
{% set old = trigger.from_state.state | float(0) %}
{% set new = trigger.to_state.state | float(0) %}
{{new if status | lower not in invalid_states else old }}
Zähle doch den Ertrag dauerhaft in einen Riemannhelper ein und lese diesen dann mittels Utillitymeter aus. So kann man sehr schön jeden erdenklichen Zeitraum auswerten
Also das ist ja schon spuki
Habe mich gerade gefragt wie bekomme ich den Ertrag von gestern angezeigt.
Das sieht so wie bei dir recht einfach aus.
Wenn ich das aber richtig verstehe muss ich einen
Riemann-Summenintegralsensor erstellen.
Da habe ich aber mehrer Fragen.
Nehme ich als Eingangssensor den
“sensor.gartenkraftwerk_hms_2000_yieldday” oder jetzt den neu erstellten
“tagesertrag_solar_gesamt”?
Utility_meter kommt in die configuation.yaml habe ich gesehen.
Ich probiere das morgen mal aus. So auf die Schnelle scheint es da Probleme zu geben mit Unit. Ich hätte da gerne auch lieber einen YAML Code zu.
Er gibt mir unit_of_measurement: kWhh in den Entwicklerwerkzeugen aus bei dem Riemenhelper Sensor “sensor.solarproduktion”
Wäre schön wenn Sie das etwas genauer formulieren würden.
Ich habe eine OpenDTU-OnBattery und die liefert mir halt bei dunkelheit keine Sensorwerte
sensor.gartenkraftwerk_hms_2000_yieldtotal = unavailable via MQTT.