Hochrechnung monatlicher Einspeiseertrag - Fehler im Code

Muhkuh666

Member
Hallo,

bei folgendem Code:

Code:
  - platform: template
    sensors:
      hochrechnungeur:
        friendly_name: 'Hochrechnung Monat'
        value_template: "{{ ((states('sensor.netzeinspeisung_monat')|float(0) * states('input_number.einspeisevergutung')|float(0) ) / ((now().replace(month = now().month , day = 1) - now()).days) * ((now().replace(month = now().month +     1, day = 1) - timedelta(days = 1)).day * (-1)))|round(2) }}"
        unit_of_measurement: €
        icon_template: " mdi:cash"

gibt es diese Fehlermeldung:

ValueError: month must be in 1..12

Was muss angepasst werden? VIelen Dank und guten Rutsch
 
Der Fehler ist, dass es keinen 13ten Monat gibt.

YAML:
now().replace(month = now().month + 1

Da der aktuelle Monat Dezember lautet, ergibt 12+1 = 13
Wenn Du den Folgemonat ermitteln willst, musst Du eine Fallunterscheidung durchführen, wenn aktueller Monat = 12, dann 1, sonst aktueller Monat +1

Als Bsp.
YAML:
{% set next = now().month + 1 if now().month + 1 <= 12 else 1 %}
{{ ((states('sensor.netzeinspeisung_monat')|float(0) * states('input_number.einspeisevergutung')|float(0) ) / ((now().replace(month = now().month , day = 1) - now()).days) * ((now().replace(month = next, day = 1) - timedelta(days = 1)).day * (-1)))|round(2) }}

Wenn Du vielleicht auch noch erklären könntest, welcher Wert hiermit berechnet wird
YAML:
((now().replace(month = now().month , day = 1) - now()).days) * ((now().replace(month = now().month +     1, day = 1) - timedelta(days = 1)).day * (-1)))|round(2)

Könnte man das Template unter Umständen auch vereinfachen.
 
Hallo,
ich rechne damit den zu erwartenden Einspeiseertrag des laufenden Monats hoch! Irgendwo ist aber noch ein Fehler.

missed comma between flow collection entries (333:10)

330 | sensors:
331 | hochrechnungeur:
332 | friendly_name: 'Hochrechnung Monat'
333 | {% set next = now().month + 1 if ...
----------------^
334 | value_template: "{{ ((states('se ...
335 | unit_of_measurement: €

Code:
  - platform: template
    sensors:
      hochrechnungeur:
        friendly_name: 'Hochrechnung Monat'
        {% set next = now().month + 1 if now().month + 1 <= 12 else 1 %}
        value_template: "{{ ((states('sensor.netzeinspeisung_monat')|float(0) * states('input_number.einspeisevergutung')|float(0) ) / ((now().replace(month = now().month , day = 1) - now()).days) * ((now().replace(month = next, day = 1) - timedelta(days = 1)).day * (-1)))|round(2) }}"
        unit_of_measurement: €
        icon_template: " mdi:cash"

Sorry ich bin da nicht so versiert.
 
Du darfst das Template nicht auseinander reißen!

YAML:
value_template: |
  {% set next = now().month + 1 if now().month + 1 <= 12 else 1 %}
  {{ ((states('sensor.netzeinspeisung_monat')|float(0) * states('input_number.einspeisevergutung')|float(0) ) / ((now().replace(month = now().month , day = 1) - now()).days) * ((now().replace(month = next, day = 1) - timedelta(days = 1)).day * (-1)))|round(2) }}

Wenn ich es richtig verstehe, berechnest Du die Vergütung im laufenden Monat teilst es durch den aktuellen Tag des Monats und multiplizierst es mit dem Tagen des aktuellen Monats, richtig?

In dem Fall würde ich das Template vereinfachen.
aktueller Tag
YAML:
{% set current_day = now().day %}

Anzahl der tage im laufenden Monat
YAML:
{% set max_days = ((now().replace(day=1) + timedelta(days = 32)).replace(day=1)-timedelta(days=1)).day %}

Das Template würde dann so aussehen:

YAML:
{% set current_day = now().day %}
{% set max_days = ((now().replace(day=1) + timedelta(days = 32)).replace(day=1)-timedelta(days=1)).day %}
{{ states('sensor.netzeinspeisung_monat')|float(0) * states('input_number.einspeisevergutung')|float(0) / current_day * max_days }}

Zu Deinem Template Sensor. Du verwendest die veraltete Template Platform. Würde Dir empfehlen die aktuelle Template Integration zu verwenden.

Noch einfacher wäre es den Template Sensor direkt in der GUI zu erstellen, ohne irgenwelche YAML Dateien zu editieren.

Einstellungen -> Geräte -> Helfer -> +HELFER ERSTELLEN -> Template -> Template für einen Sensor erstellen.

Bildschirmfoto 2023-12-30 um 15.41.57.png

Das passende Icon kannst Du nach dem erstellen des Sensor, einfach über das Zahnradsymbol ändern.

Bildschirmfoto 2023-12-30 um 15.44.54.png
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
6.383
Beiträge
61.507
Mitglieder
6.551
Neuestes Mitglied
UlliG
Zurück
Oben