Sollwert des Zählers berechnen und anzeigen sowie Korrektur einfließen lassen

tiermutter

Well-known member
Moin zusammen,

mein HA zwecks Strommessung ist am 01.03.23 produktiv geworden, sprich ich habe die Datenbank und Co zurückgesetzt um an diesem Tag (mit "neuem" Stromtarif sauber von vorne anzufangen.
An diesem Tag, genauer gesagt in derselben Minute habe ich auch den Zählerstand abgelesen und an die EVU übermittelt.

Nun sollte sich (theoretisch) der Zählerstand mit den Angaben in HA decken, um das zu prüfen muss ich also den abgelesenen Wert und den Wert in HA addieren. Um das etwas komfortabler zu gestalten, wollte ich nun eine entsprechende Anzeige in HA einbauen.
Dazu habe ich einen Sensor angelegt, der so aussieht:
YAML:
sensor:
  - platform: template
    sensors:

      zaehler_soll:
        friendly_name: 'Zähler SOLL'
        unique_id: 'zaehler_soll'
        value_template: >-
          {{
          46506 +
          states('energy_total')|float(0)|round(2)
          }}
        unit_of_measurement: "kWh"
        icon_template: mdi:lightning-bolt
      
### Wobei energy_total so aussieht:
      energy_total:
        friendly_name: 'Arbeit gesamt'
        unique_id: 'energy_total'
        value_template: "{{ (states('sensor.l1_energy')|float + states('sensor.l2_energy')|float + states('sensor.l3_energy')|float)|round(3) }}"
        unit_of_measurement: "kWh"
        icon_template: mdi:lightning-bolt

Leider bekomme ich als Wert nur die 46506 angezeigt, es wird also nichts addiert. Was ist hier falsch?

Später möchte ich dann auch noch eine Korrektur einbauen, sprich dass ich x kWh dazuaddiere, wenn Differenzen aufgrund Nichtverfügbarkeit (Reboot, etc) entstehen. Das aber natürlich erst, wenn ich das Grundlegende hinbekomme :)
 
So funktioniert es:
YAML:
      zaehler_soll:
        friendly_name: 'Zähler SOLL'
        unique_id: 'zaehler_soll'
        value_template: >-
          "{{ (46506 + states('sensor.l1_energy')|float + states('sensor.l2_energy')|float + states('sensor.l3_energy')|float)|round(2) }}"
        unit_of_measurement: "kWh"
        icon_template: mdi:lightning-bolt
:)

Der Wert wird mir allerdings in "" angezeigt, warum ist das so (stört mich nicht)?
 
Code:
      zaehler_soll:
        friendly_name: 'Zähler SOLL'
        unique_id: 'zaehler_soll'
        value_template: >-
          {{ (46506 + states('sensor.l1_energy')|float(0) + states('sensor.l2_energy')|float(0) + states('sensor.l3_energy')|float(0))|round(2)|replace('.', ',') }}
        unit_of_measurement: "kWh"
        icon_template: mdi:lightning-bolt
 
Erschreckend, wie einfach manche Dinge sind... funktioniert, danke!

Dann gleich mal weiter mit meiner Vorstellung von den Korrekturwerten:
Ich stelle mir hier ein Feld in einem Dashboard vor, über das ich die Werte von einem "energy_total_correction" ändern kann.
Gebe ich in das Feld also z.B. eine 10 (kWh) ein, so soll "energy_total_correction" auch den Wert 10 erhalten, welcher dann in der Berechnung für "energy_total" und "zaehler_soll" berücksichtigt wird.
Ebenso interessant wäre es natürlich, wenn mein Wert von oben (46506) ebenfalls über so ein Feld angegeben werden kann, statt den Wert direkt in der Config anzupassen.

Möglicherweise müsst ihr mir auch nicht wieder alles vorbeten, vielleicht hilft mir ja schon ein Begriff, mit dem ich das Richtige finde :)
 
Mit dem Referenzwert des Zählers klappt es schonmal wie erhofft :) :)
Nun muss ich mir nochmal überlegen, wie ich das mit meiner gedachten Korrektur machen will, aber das ist erstmal ein mathematisches Problem...
 
Viel Mathe war es nicht, aber nun stehe ich vor einem anderen Problem:
Ich würde die Messkorrektur gerne im Energiedashboard anzeigen und die Kosten dafür berechnen und ins Gesamte einfließen lassen.

Ich weiß, dass man dort nur Sensoren hinzufügen kann, die als state_class "total" (ua.) angegeben haben. Leider wird es beim Neustart moniert, wenn ich eine state_class angebe. Nun fehlt mir der Ansatz wie ich das richtig mache. State Class darf offensichtlich nicht bei einem template sensor angegeben werden, aber wie mache ich das sonst?

YAML:
sensor:
  - platform: template
    sensors:     
      messkorrektur:
        friendly_name: 'Messkorrektur'
        unique_id: 'messkorrektur'
        value_template: >-
          {{ states('input_number.zahlerstand_korrektur')|float(0) }}
        unit_of_measurement: "kWh"
        icon_template: mdi:lightning-bolt
        device_class: 'energy'
        state_class: 'total'
 
So sieht ein Template-Sensor in neuer Schreibweise aus. Und so funktioniert auch state_class:

YAML:
template:
  - sensor:
      name: 'Messkorrektur'
       unit_of_measurement: "kWh"
       icon: mdi:lightning-bolt
       device_class: energy
       state_class: total
       state: >-
          {{ states('input_number.zahlerstand_korrektur')|float(0) }}
 
Hm, von dieser neuen Schreibweise habe ich auch kurz gelesen. Da gerade mobil unterwegs nicht so einfach zu erkennen, aber es bezieht sich quasi nur auf die ersten drei Zeilen?
Macht es Sinn dann gleich alles so anzupassen (Vorteile)?
 
Irgendwann wird die alte Schreibweise vielleicht komplett verworfen, spätestens dann muss es geändert werden.
Im Grunde hat die aber weder Vor- noch Nachteile, außer dass ich persönlich sie einfacher zu lesen finde.
 
Das kleine Mistding macht mich ganz schön fertig...
Wenn ich es so wie in Post #11 in die template.yaml einfüge, meckert der Fileeditor "bad indentation of a mapping entry (453:8)".
Vermutlich fehlt ihm ein - vor "name".
Füge ich es aber so ein:
YAML:
- sensor:
    - name: "Zähler SOLL"
      unit_of_measurement: "kWh"
      icon: mdi:lightning-bolt
      device_class: energy
      state: >-
          {{ (states('input_number.zahlerstand_referenz')|float(0) + states('sensor.l1_energy')|float(0) + states('sensor.l2_energy')|float(0) + states('sensor.l3_energy')|float(0))|round(2)|replace('.', ',') }}

Wird es zunächst als korrekt befunden, starte ich HA dann aber neu bzw. lade die Config neu, dann geht gar nichts mehr. HA wird maximal träge, nur mit Glück kann ich dann noch an die Logs kommen, die Änderung rückgängig machen und neu laden. Abhilfe schafft letztlich nur ein reboot über SSH, weil ich so weit in der GUI gar nicht mehr komme.
Die Logs sagen:
Code:
Sensor sensor.zahler_soll has device class energy, state class None and unit kWh thus indicating it has a numeric value; however, it has the non-numeric value: 46650,52 (<class 'homeassistant.helpers.template.TupleWrapper'>); Please update your configuration if your entity is manually configured, otherwise create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+template%22
06:59:11 – (WARNUNG) Sensor
TemplateError('ValueError: Template error: float got invalid input 'unknown' when rendering template '{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}' but no default was specified') while processing template 'Template("{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}")' for attribute '_attr_native_value' in entity 'sensor.power_total'
06:59:11 – (FEHLER) helpers/template_entity.py - Die Nachricht ist zum ersten Mal am 06:59:11 aufgetreten und erscheint 2 mal
Error while processing template: Template("{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}")
06:59:11 – (FEHLER) helpers/template.py - Die Nachricht ist zum ersten Mal am 06:59:11 aufgetreten und erscheint 2 mal
Wobei es mit den "sensorl2_power_filtered" sonst keine Probleme gibt. Diese befinden sich ebenfalls in der template.yaml, für Strom, Spannung und Leistung nach dem gleichen Schema, letzter Eintrag:
YAML:
- trigger:
    - platform: state
      entity_id:
        - sensor.l3_power
  sensor:
    name: "l3_power_filtered"
    unit_of_measurement: 'W'
    device_class: power
    state: >-
     {{ iif((states('sensor.l3_power') | float(0) > 0), (states('sensor.l3_power') | float(0)), (states('sensor.l3_power_filtered') | float(0)))}}
Was zur Hölle mache ich hier falsch?
 
Was machst du den da mit dem Punkt und Komma?
Wenn alles richtig eingestellt ist, verwendet HA auch das korrekte Zahlenformat.
116.235,46 (Mein Zählerstand) wird auch genauso angezeigt.

Das Thema mit dem Offset zum Stand des Shellys hatten wir doch auch schon vor kurzem hier.
 
Ja, den Hintergrund habe ich gelesen, aber da scheint ja vorher was falsch zu sein wenn das Zahlenformat falsch eingestellt ist, oder?
 
Also der eine Fehler deutet auf falsche Einrückung hin. So wäre richtig:

YAML:
- sensor:
    name: "Zähler SOLL"
    unit_of_measurement: "kWh"
    icon: mdi:lightning-bolt
    device_class: energy
    state: >-
        {{ (states('input_number.zahlerstand_referenz')|float(0) + states('sensor.l1_energy')|float(0) + states('sensor.l2_energy')|float(0) + states('sensor.l3_energy')|float(0))|round(2)|replace('.', ',') }}

Wenn du in der template.yaml was änderst, brauchst du nicht neu starten. In den Entwicklerwerkzeugen kannst du template-entitäten ohne Reboot neu laden.

Nimm sonst auch testweise das Punkt und Komma Zeug wieder raus und guck was dann ist.
 
da scheint ja vorher was falsch zu sein wenn das Zahlenformat falsch eingestellt ist, oder?
Ja vielleicht der Wert, den ich über den Helfer angebe...
Nimm sonst auch testweise das Punkt und Komma Zeug wieder raus und guck was dann ist.
Selbes Spiel...
Nur das Log sieht etwas anders aus:
Code:
TemplateError('ValueError: Template error: float got invalid input 'unknown' when rendering template '{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}' but no default was specified') while processing template 'Template("{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}")' for attribute '_attr_native_value' in entity 'sensor.power_total'
09:23:06 – (FEHLER) helpers/template_entity.py - Die Nachricht ist zum ersten Mal am 09:23:06 aufgetreten und erscheint 2 mal
Error while processing template: Template("{{ (states('sensor.l1_power_filtered')|float + states('sensor.l2_power_filtered')|float + states('sensor.l3_power_filtered')|float)|round(3) }}")
09:23:06 – (FEHLER) helpers/template.py - Die Nachricht ist zum ersten Mal am 09:23:06 aufgetreten und erscheint 2 mal
Invalid config for [template]: invalid template (TemplateSyntaxError: expected token 'name', got 'end of print statement') for dictionary value @ data['sensor'][0]['state']. Got None. (See /config/template.yaml, line 103).
09:23:05 – (FEHLER) config.py
Invalid config for [template]: invalid template (TemplateSyntaxError: expected token 'name', got 'end of print statement') for dictionary value @ data['sensor'][0]['state']. Got None. (See /config/template.yaml, line 103).
09:23:01 – (FEHLER) config.py
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.383
Beiträge
45.257
Mitglieder
3.984
Neuestes Mitglied
Blitzkriegbob90
Zurück
Oben