Fehler mit Template-Sensor nach Neustart

Hallo,
ich habe mir einen Template Sensor für die Solarproduktion unserer Solaranlage gebaut und in der configuration.yaml eingefügt. Der Sensor funktioniert auch, allerdings wenn ich Home Assistant neu starte wird der Wert kurz 0 um danach wieder richtig dargestellt zu werden. Damit passen die Werte im Energie Dashboard aber nicht mehr.

Ich vermute, dass eine der Entitäten noch nicht verfügbar ist während der Template Sensor schon berechnet wird.

Hier die Definition in der configuration.yaml

template:
  - sensor:
    - name: energy_solar_generation                                                  
      unit_of_measurement: "kWh"
      device_class: "energy"
      state_class: "total_increasing"
      state: "{{ (states('sensor.solaredge_ac_energy_kwh') | float(0)) - (states('sensor.energy_battery_discharged') | float(0)) + (states('sensor.energy_battery_charged_solar') | float(0)) }}"
#      state: > 
#        {% if is_number({{ (states('sensor.solaredge_ac_energy_kwh') | float(0)) - (states('sensor.energy_battery_discharged') | float(0)) + (states('sensor.energy_battery_charged_solar') | float(0)) }} %}
#          {{ (states('sensor.solaredge_ac_energy_kwh') | float(0)) - (states('sensor.energy_battery_discharged') | float(0)) + (states('sensor.energy_battery_charged_solar') | float(0)) }}
#        {% endif %}  
sensor:
  - platform: integration
    # Integrate the battery charging power flow to get energy                                                       
    name: energy_battery_charged                                                
    source: sensor.power_battery_charging                                       
    method: left                                                                
    unit_prefix: k                                                              
  - platform: integration    
    # Integrate the battery charging from solar power flow to get energy                                                     
    name: energy_battery_charged_solar                                          
    source: sensor.power_battery_charging_solar                                 
    method: left                                                                
    unit_prefix: k                                                              
  - platform: integration  
    # Integrate the battery discharging power flow to get energy                                                       
    name:  energy_battery_discharged                                            
    source: sensor.power_battery_discharging                                    
    method: left                                                                
    unit_prefix: k   

Ich hatte schon probiert dass über das auskommentierte “is_number” abzufangen, aber dann ist der template sensor gar nicht mehr da.

Da der Sensor ja “total increasing” ist, kann ich das irgendwie abfangen ob der neue Wert größer gleich dem letzen Wert ist?
Danke
Werner

Hallo Zusammen,

habe ebenfalls nach einem Neustart immer ein Fehler mit meinem Template für den SMA Wechselrichter. Diese Template soll eigentlich nur den Negativwert bei Nichterzeugung auf Null setzen.

Findet jemand einen Fehler? Vielen Dank schon einmal.

template:
# PV-Anlage
  - sensor:
      - name: "sma_power_template"
        unit_of_measurement: "W"
        state: "{% if states('sensor.sma_power') is not none %}
                 {% if states('sensor.sma_power') | int < 0 %}
                    {{ 0 }}
                 {% else %}
                    {{ states('sensor.sma_power') | int }}
                 {% endif %}
               {% else %}
                 {{ 'error' }}
               {% endif %}"

kopier das mal in Entiwicklerwerkzeuge>Template

{{ max(0, states('sensor.sma_power) | float(0)) }}

vielleicht ist es das was du suchst.

Vielen Dank für die schnelle Antwort. Aber wenn ich das auf max schreibe dann wird er mir tagsüber bei der Produktion auch nicht mehr anzeigen oder?

warum probierst du es nicht aus?
also den sensor einfach mal mit ner variable im Templateeditor ersetzen und duchtesten, man will ja nicht auf den Sensorwert warten den man prüfen will.

{% set a = -1 %} # hier mal mit -1, 0,2,-1000,2000 probieren
{{ max (0, a | float(0)) }}

was du damit nicht abfängst ist dein “error” da float(0) im Falle von “unknown” oder “unavailable” halt die 0 setzt.

Also eigentlich ist das der Standardweg z.B. beim Fronius der nur einen sensor bereitstellt für’s Grid (also Versorger) der kann mal positiv oder negativ sein je nachdem ob es sich um Netzbezug oder Einspeisung handelt. Ditto für einen Speicher. Was du jetzt mit “Nichterzeugung” meinsrt ist mir daher etwas unklar. Nichterzeugung wäre keine PVleistung … aber die dreht ohnehin niemals ins Negative (es sei denn du bestromst deine Module (Heizeffekt im Winter?)

Und um aus einem Sensor der von negativ bis postiiv läuft aber sozusagen 2 Dinge abdeckt (Netzbezug vs. Einspeisung) und auch (Batterie laden vs. entladen) ist der Standardweg man baut sich je einen Sensor für diese Dinge der dann Werte von 0 bis positiv annimmt.

  1. Sensor max(0, sensorwert)
  2. Sensor max(0, 0 - sensorwert) denn 0 - -1 ist halt identisch zu 0 + 1

Vielen Dank, hab das ganze jetzt mal versucht im Templateeditior:

Dann erhalte ich folgenden Fehler:

TemplateRuntimeError: cannot assign attribute on non-namespace

Mir geht es aber auch nicht um Netzbezug oder Einspeisung sondern hier frage ich den Wert der aktuellen Erzeugung über Modus ab. Und wenn Abends kein Storm erzeugt wird stehen negative Werte da.

Bekomme die Fehlermeldung aber nur wenn HA einen Neustart durchführt. Im normalen Betrieb ist alles ok.

Du hast ein mit copy&paste eingefügt?`Und nicht einfach an 200 Zeilen die da schon drin standen zugefügt? Sehr sonderbar, denn ich könnte hier nicht im Ansarz erkennen warum er bz. namespace meckert.

Oder zu hast eine grundlegend andere HA Installation und es gab irgendwo ne Grundeinstellung damit man HA überhaupt sinnvoll nutzen kann. Am Ende ist das zuweisen eines Wertes mittels SET ja nun nichts anderes als das was im Beispiel Template gemacht wird, und da sollte er ja auch nicht meckern.

Egal, der 1-Zeiler ist der eleganteste Weg alle negativen Inhalte auf 0 zu setzen, und wenn Werte größer sind diese zu behalten. Du kannst es ja auch mit deinem sensor probieren, ich eher nicht denn ich hab den ja nicht. Und im Template das den sensor definiert sollte es dann auch auch laufen.

Vielen Dank und Sorry ich bin da noch nicht so fit drinnen, eigentlich noch Anfänger. :see_no_evil:
In meiner Configuration.yaml habe ich nichts geändert. Lediglich diesen Einzeiler bei Entwicklerwerkzeuge - Template eingegeben. Und nichts anderes nur diese eine Zeile steht dort drinnen.

Das Ergebnis ist das hier jetzt: TemplateSyntaxError: unexpected char “'” at 17

Hier fehlt das zweite Anführungszeichen am Ende des Sensors.
Versuchs mal so:

{{ max(0, states('sensor.sma_power') | float(0)) }}

Ah verdammt stimmt. Jetzt spuck er mir bei der Produktion den richtigen Wert aus. Mal sehen wie das ist wenn keine Sonne mehr da ist.

Vielen Dank schonmal an alle

Danke das du so schnell reagiert hast, … passiert wenn man schneller denkt als man tippt, und ja immer sau ärgerlich.
Da hoffen wir mal das es noch ein paar Stunden dauert bis @marxkus Wunsch (Sonne nicht mehr da) eintritt, ich würd auch noch gern ein wenig vom Dach ernten :slight_smile:

Na mein Wunsch ist das nicht von mir aus bleibt dich noch ein paar Stunden mehr :joy:
Vielen Dank auf jeden Fall, einfach die beste deutsche Community.

Jetzt muss ich leider doch noch mal Nachhacken. Weil auf 0 Stellen runden nimmt er mir nicht glaub da hab ich ein Fehler noch drinnen

state: "{{ max(0, states('sensor.sma_power') | float(0)) | round (0) }}"

Vielen Dank schon mal

:crayon:by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)