Hilfe bei Templateberechnung

Off Topic:
Ich will dir nicht den Spaß an Scrape verderben, aber manche Finanz-Seiten verbieten das ausdrücklich musst mal prüfen.
Aber das gute ist viele bieten eine kostenlose API an dann kannst das direkt mit REST sensoren bauen

Zu deinem Problem:
Ich nehme für yaml eher das Add-On

Zum einlesen wie YAML und der Aufbau wie !include etc. funktionieren hat Simon ein paar nette Videos. Da muss man sich ein wenig einlernen bis es Klick macht.

Wenn du ohne include und nur in deiner config.yaml arbeitest ist die Struktur von template Sensoren hier beschrieben:

1 „Gefällt mir“

Es ist ja nicht so, dass ich mich nicht mit yaml-code beschäftigt habe. Auch Videos darüber gesehen usw. Aber irgendwas übersehe ich immer.
Und wie schon erwähnt, ich hatte das - vor dem Wort sensor übersehen und trotzdem hat alles funktioniert zumindest zunächst mal. Und jetzt habe ich das - eingebaut und es funktioniert jetzt noch weniger. Ich sehe da einfach keinen Weg mehr.

Jetzt les mal deinen Beitrag und sage mir wer dir dabei helfen soll mit dieser ungenauen Beschreibung was auch immer du da tust kann doch keiner hier sagen.Bei YAML zählt nun mal JEDES Zeichen auch die unsichtbaren.

Schick deinen ganzen Code oder lade es in Github oder sonst wo hoch, wenn er zu lang und groß ist, aber sonst raten hier alle nur rum.
Und genaue Fehlermeldungen (auch im Protokoll) helfen bei der Fehlersuche.

EDIT:
Ich denke @maxe ist auch schon auf der richtigen Spur, bestimmt ein Type-Fehler von String zu Float

1 „Gefällt mir“

Ok, ich versuche gleich mal einen strukturierten Beitrag dazu zu schreiben.
Nur zur Info, im Moment geht es mir weniger um die Eingangsproblematik als mehr um den yaml code meiner Templates.

Und bitte habt ein bißchen Geduld mit mir. Es ist das erste Mal, dass ich Code schreiben muss und das fällt mir schon schwer.

Ich sehe hier lauter Leute mit sehr viel Geduld, die versuchen zu helfen.

Aber du musst verstehen, dass es mühselig ist immer nur kleine Fetzen von deine Problem zu erhalten.

Schreib ein Beitrag mal allen wichtigen Infos und ALLEN Fehlermeldungen.
Und ja YAML Code schreiben ist am Anfang nicht einfach, darum auch der Hinweis es gibt ein paar sehr interessante Videos zu Struktuierung etc.
Das lernt man nicht nach 1-2 Tage :slight_smile:

Als Beispiel habe ich meine configuration.yaml schon ewig nicht mehr angefasst, weil es anders strukturiert ist (vor 4 Monaten gerade geschaut :smiley: )

1 „Gefällt mir“

Also, das ist meine aktuelle config.yaml

# Loads default set of integrations. Do not remove.
default_config:

# Load frontend themes from the themes folder
frontend:
  themes: !include_dir_merge_named themes

automation: !include automations.yaml
script: !include scripts.yaml
scene: !include scenes.yaml


homeassistant:
  packages: !include_dir_named integrations




cover:
  - platform: template
    covers:
      rollladen1neu:
        friendly_name: Rollladen_1
        unique_id: 7f234e71-4eda-4ad9-8f0b-477d1fb72331
        position_template: "{{ 100 - (state_attr('cover.rollladen_1_vorhang', 'current_position') | int) }}"
        open_cover:
          action: cover.close_cover
          data:
            entity_id: cover.rollladen_1_vorhang
        close_cover:
          action: cover.open_cover
          data:
            entity_id: cover.rollladen_1_vorhang
        stop_cover:
          action: cover.stop_cover
          data:
            entity_id: cover.rollladen_1_vorhang
        set_cover_position:
          action: cover.set_cover_position
          data:
            entity_id: cover.rollladen_1_vorhang
            position: "{{ 100 - (position) }}"
      rollladen2neu:
        friendly_name: Rollladen_2
        unique_id: 7f234e71-4eda-4ad9-8f0b-477d1fb82414
        position_template: "{{ 100 - (state_attr('cover.rollladen_2_vorhang', 'current_position') | int) }}"
        open_cover:
          action: cover.close_cover
          data:
            entity_id: cover.rollladen_2_vorhang
        close_cover:
          action: cover.open_cover
          data:
            entity_id: cover.rollladen_2_vorhang
        stop_cover:
          action: cover.stop_cover
          data:
            entity_id: cover.rollladen_2_vorhang
        set_cover_position:
          action: cover.set_cover_position
          data:
            entity_id: cover.rollladen_2_vorhang
            position: "{{ 100 - (position) }}"
            
powercalc:




template:
  - sensor:
      - name: "Wohnzimmer Temperatur"
        unique_id: "WohnzimmerTemperatur"
        unit_of_measurement: "°C"
        state_class: "measurement"
        state: >
            {{ state_attr('climate.heizung_wohnzimmer','current_temperature')}}
      - name: "Büro Temperatur"
        unique_id: "BueroTemperatur"
        unit_of_measurement: "°C"
        state_class: "measurement"
        state: >
            {{ state_attr('climate.heizung_buro','current_temperature')}} 
      - name: "Schlafzimmer Temperatur"
        unique_id: "SchlafzimmerTemperatur"
        unit_of_measurement: "°C"
        state_class: "measurement"
        state: >
            {{ state_attr('climate.heizung_schlafzimmer','current_temperature')}}
      - name: "Kino Temperatur"
        unique_id: "KinoTemperatur"
        unit_of_measurement: "°C"
        state_class: "measurement"
        state: >
            {{ state_attr('climate.heizung_kino','current_temperature')}}
      - name: "Diele Temperatur"
        unique_id: "DieleTemperatur"
        unit_of_measurement: "°C"
        state_class: "measurement"
        state: >
            {{ state_attr('climate.heizung_diele','current_temperature')}}
# Stromleser
      - name: "Stromzähler Brauchstrom"
        unique_id: "Stromzaehler_Brauchstrom"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.stromleser_sgm_c8_e_in')) | round(3) }}
      - name: "Stromzähler Einspeisung"
        unique_id: "Stromzaehler_Einspeisung"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ float(states('sensor.stromleser_sgm_c8_e_out')) | round(3) }}    
          
#Verbrauchskalkulationen nach Kategorie

#Gesamtverbrauch Küche
#    - name: "Gesamtverbrauch Geräte Küche2"
#      unique_id: "Gesamtverbrauch_Gerate_kuche2"
#      unit_of_measurement: 'kWh'
#      device_class: "energy"
#      state_class: "total_increasing"
#      state: >-
#          {{ ((float(states('sensor.verbrauch_gefrierschrank')))+(float(states('sensor.verbrauch_kuchengerate_2')))+(float(states('sensor.verbrauch_boiler_kuche')))+(float(states('sensor.verbrauch_Spulmaschine')))+(float(states('sensor.verbrauch_kuhlschrank')))+(float(states('sensor.verbrauch_waschmaschine')))) | round(3) }}
#Gesamtverbrauch Sonos
  - sensor:
      - name: "Gesamtverbrauch Sonos"
        unique_id: "Gesamtverbrauch_Sonos"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ ((float(states('sensor.sonos_sonos_bad_energy')))+(float(states('sensor.verbrauch_sonos_beam')))+(float(states('sensor.verbrauch_sonos_playbar')))+(float(states('sensor.verbrauch_sonos_buro')))+(float(states('sensor.verbrauch_sonos_sub')))) | round(3) }}          
#Gesamtverbrauch Computer
  - sensor:
      - name: "Gesamtverbrauch Computer"
        unique_id: "Gesamtverbrauch_Computer"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ ((float(states('sensor.leistung_server_bebo_energy')))+(float(states('sensor.verbrauch_mini_pc')))+(float(states('sensor.verbrauch_boris_pc')))) | round(3) }}                    
#Gesamtverbrauch Entertainment
  - sensor:
      - name: "Gesamtverbrauch Entertainment"
        unique_id: "Gesamtverbrauch_Entertainment"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ ((float(states('sensor.verbrauch_sat')))+(float(states('sensor.leistung_tv_samsung_q65_energy')))+(float(states('sensor.samsung_mu_8009_energy')))) | round(3) }}          
#Gesamtverbrauch Licht
  - sensor:
      - name: "Gesamtverbrauch Licht"
        unique_id: "Gesamtverbrauch_Licht"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ ((float(states('sensor.lightstrip_wohnzimmer_wand_energy')))+(float(states('sensor.lightstrip_buro_energy')))+(float(states('sensor.lightstrip_schlafzimmer_energy')))+(float(states('sensor.lightstrip_wohnzimmer_fenster_energy')))+(float(states('sensor.verbrauch_nachttischlampe')))) | round(3) }}

#Temperaturkalkulationen

#Differenz Temperatur außen zu Schlafzimmer
  - sensor:
      - name: "Dif-temperatur Garten Schlafzimmer"
        unique_id: "Difftemp_Garten_SZ"
        unit_of_measurement: '°C'
        device_class: "temperature"
        state_class: "measurement"
        state: >-
            {{ ((float(states('sensor.thermometer_garten_temperatur')))-(float(states('sensor.schlafzimmer_temperatur')))) | round(1) }}
#Duplikat Bad Temperatur Sensor
  - sensor:
      - name: "Temperatur Bad"
        unique_id: "TemperaturBad"
        unit_of_measurement: "°C"
        device_class: "temperature"
        state_class: "measurement"
        state: >
            {{ (float(states('sensor.thermometer_bad_temperatur'))) | round(1) }}
#Duplikat Garten Temperatur Sensor
  - sensor:
      - name: "Temperatur Garten"
        unique_id: "TemperaturGarten"
        unit_of_measurement: "°C"
        device_class: "temperature"
        state_class: "measurement"
        state: >
            {{ (float(states('sensor.thermometer_garten_temperatur'))) | round(1) }}       
          
          
#PV-Kalkulationen          
#Gesamterzeugung PV 2025
  - sensor:
      - name: "Gesamterzeugung PV 2025"
        unique_id: "Gesamterzeugung_PV_2025"
        unit_of_measurement: 'kWh'
        device_class: "energy"
        state_class: "total_increasing"
        state: >-
            {{ ((float(states('sensor.monthly_pv_generation_01_january')))+(float(states('sensor.monthly_pv_generation_02_february')))+(float(states('sensor.monthly_pv_generation_03_march')))+(float(states('sensor.monthly_pv_generation_04_april')))+(float(states('sensor.monthly_pv_generation_05_may')))+(float(states('sensor.monthly_pv_generation_06_june')))+(float(states('sensor.monthly_pv_generation_07_july')))+(float(states('sensor.monthly_pv_generation_08_august')))+(float(states('sensor.monthly_pv_generation_09_september')))+(float(states('sensor.monthly_pv_generation_10_october')))+(float(states('sensor.monthly_pv_generation_11_november')))+(float(states('sensor.monthly_pv_generation_12_december')))) | round(3) }}                    
#Berechnung der Einspeisevergütung
  - sensor:
      - name: "Einspeisevergütung 2025"
        unique_id: "Einspeiseverguetung_2025"
        unit_of_measurement: 'EUR'
        state: >
            {{ (float(states('sensor.gesamt_einspeisung_2025'))) * 0.082 | round(2) }}
          
#Berechnung des Netzbezugs
#      - name: "Netzbezug 2025"
#        unique_id: "Netzbezug_2025"      
#        unit of measurement: 'kWh'
#        device_class: "energy"
#        state_class: "total_increasing"
#        state: >
#            {{ (float(states('sensor.stromleser_sgm_c8_e_in'))) - 1582 | round(3) }}
          
#Berechnung des Netzbezugsentgelt
#    - name: "Netzbezugsentgeld 2025"
#      unique_id: "Netzbezugsentgeld_2025"      
#      unit of measurement: 'EUR'
#      state: >
#          {{ (float(states('sensor.netzbezug_2025'))) * 0.3088 | round(2) }}          
          
#Berechnung der finanziellen Autakie
#    - name: "Fin. Autarkie"
#      unique_id: "fin_autarkie"
#      unit of measurement: 'EUR'
#      state: >
#          {{ (float(states('sensor.einspeiseverguetung_2025'))) - (float(states('sensor.netzbezugsentgeld_2025'))) | round(2) }}        
#Aktienkalkulationen
      - name: "Wert Continental"
        unique_id: "Wert_Continental"
        unit_of_measurement: 'EUR'
        state: >
            {{ (float(states('sensor.aktienkurs_continental'))) * 30 | round(2) }}
          
waste_collection_schedule:
  sources:
    - name: ics
      args:
        file: "www/community/Abfall.ics"       
        

wie, ihr seht, habe ich jetzt den Maxe angemahnten fehlenden Bindestrich vor sensor: ergänzt.

Im ersten Anlauf habe ich allerdings nur einmal die Zeile

  • sensor verwendet, also beim ersten Mal bzw. beim ersten Sensor.
    Dann haben alle (oder fast alle) template sensoren nicht funktioniert (unavailable).

Danach habe ich vor jedem Template-sensor die Zeile - sensor ergänzt (das was ihr jetzt seht) und nun funktionieren die meisten sensoren wieder.

Und das ist mir ein Rätsel, muss das - sensor wirklich vor jedem Sensor stehen?

Und das noch größere Rätsel ist, dass es ohne das - vor dem Sensor funktioniert hat, wobei aber nach Neustarts Stück für Stück sensoren unavailble wurden.

Ist euch das plausibel?

Ich wollte ja eigentlich erst mal die Füße still halten aber wenn ich das so sehe …
Wieso erstellst du die Sensoren nicht alle über die UI, dann hättest du die Yaml Probleme nicht mehr?

Einstellungen - Helfer erstellen - Template - Sensor

Weil ich dafür keine Möglichkeit sehe also nicht für alle.
Zugegeben, die Summationen kann ich über den Kombi-Sensor machen, habe ich auch schon, insofern ist einiges redundant.

Aber wenn ich zwei Sensorwerte subtrahieren möchte, oder einen Sensorwert mit etwas multiplizieren möchte, welcher Helfer wäre das denn? ich habe leider keinen gefunden. Auch Simon42 hat das so erklärt, wie ich es mache.

Und selbst wenn ich alles über die UI mache (und das würde ich gerne), würde ich schon gerne verstehen, was mit meinem yaml-code nicht i.O:. ist

Hatte ich doch geschrieben, ist also nix anderes als dein Code, nur über die UI

es muss nur 1x

template:
  - sensor:

stehen. Ich vermute aber mal, dass deine wilden Kommentierungen da etwas stören. Lösch die mal alle komplett raus.

Ja genau, diesen eindruck hatte ich auch. Solange die Zeilen alle ohne Leerzeile bzw. Kommentarzeile untereinanderstehen, funktioniert es mit einem - sensor.

Aber die Kommentare machen ja Sinn, um sich zurecht zu finden.
Man muss nur wissen, dass man dann den - sensor wieder neu einfügen muss. Das habe ich noch nirgends gelesen.

Muss man IMHO nicht, man müsste nur die Kommentierungen auch noch richtig einrücken. YAML ist da sehr sehr sehr sensibel. Deshalb mein Tipp: mach es über die UI.

1 „Gefällt mir“

Ok, würde ich sehr gerne, weil mir der yaml-Code echt auf die Nerven geht.
Nehmen wir mal das Beispiel aus meinem yaml-code:

#Berechnung des Netzbezugs
#      - name: "Netzbezug 2025"
#        unique_id: "Netzbezug_2025"      
#        unit of measurement: 'kWh'
#        device_class: "energy"
#        state_class: "total_increasing"
#        state: >
#            {{ (float(states('sensor.stromleser_sgm_c8_e_in'))) - 1582 | round(3) }}

Wie mache ich das nach deiner Methode über das UI?
Subtraktionshelfer gibt es nicht, also wie du sagst über den Template-Helfer.
Der sieht dann so aus:

Aber was trage ich da ein. Habe schon einiges probiert, funktioniert aber nicht.
Und wie mache ich das eine Subtraktion?


Mit dieser fehlermeldung kann ich z.B. nichts anfangen

In Zustandstemplate kommt Dein Template rein, in Maßeinheit, Geräteklasse und Zustandsklasse entsprechende Werte. Mit Gerät hast Du die Möglichkeit den Helfer/Template-Sensor an ein anderes Gerät anzuflanschen, wird also unter diesem Gerät sichtbar.

Bei mir sieht das z.B. so aus:

Danke Jorge,
aber das was unter Template steht erscheint mir sehr kryptisch.
Aber wie subtrahierst du nun einen Wert?

Ernsthaft? In meinem Beispiel wird eine Addition gemacht in Zeile 3 des Templates. Den Rest bekommst Du dann selbst hin, oder? :wink:

Du schreibst unter Zustandstemplate das rein, was du vorher unter state rein geschrieben hast

Ja, alles klar. ich sitze schon zu lange vor dem rechner.

1 „Gefällt mir“

Das eskaliert ja total hier :smiley: kommt man gar hinter her :smiley:

Wenn du weiter mit yaml machen willst. Lesen lesen:

Gibt auch ein paar best practices, sollte man unbedingt beachten z.B. deine Kommentare sehen nicht wartbar aus. Dafür gib es geeignetere Konzepte als Zeileinweise hashtags!

Zur UI:

Wenn du mit der Fehlermeldung “Nicht alle Pflichtfelder sind ausgefüllt” ! nichts anfangen kannst wird es natürlich auch schwer!

Im Zustandstemplate gibt es diese Doku: Templating - Home Assistant

" Templating in Home Assistant is powered by the Jinja2 templating engine."

Hat nichts mit YAML zu tun musst du dir die Syntax von Jinja anschauen. Da du das schon in YAML benutzt hast, dachte das ist soweit klar wie Jinja funktioniert :slight_smile: .

Um wie in der UI Zustands- und Geräteklasse zu setzen kannst das drop down verwenden. Ansonsten hier in die Doku schauen was es so gibt:

Normalerweise erklären ChatGPT oder Konsortium auch ganz gut die Fehlermeldungen mittlerweile für einen ersten Eindruck

Zu meiner Entschuldigung. Diese Fehlermeldung meinte ich nicht, ganz so blöd bin ich nun auch nicht.
Ich meinte die, die unten steht.

Und zu den Kommentaren (also in yaml). das habe ich mir bei den ganzen prominenten youtube Menschen abgeguckt. Dass dies jetzt so schlimm sein soll, war mir nicht klar.

Wenn du alle Pflichtfelder ausfüllst wird sich wohl diese Fehlermeldung ändern. Korrekt?

Zu Jinja Basics: Basic Syntax of Jinja

In Jinja benutzt man das | Zeichen um die Typen zu konvertieren, das könntest (auch) direkt mit ändern.

Muss nicht schlimm sein, ist halt eine Fehlerquelle mehr. Ich schließe Fehlerquellen gerne aus, wenn was nicht klappt :slight_smile:

Wie gesagt in yaml gibt es auch Möglichkeiten zu splitten und anderes zu organisieren: Konzept oder hier oder hier