Hallo zusammen,
ich habe eine PV Anlage mit der ich zwei Haushalte versorge:
Dort sind zwei Preise für die Eigenerzeugung (13 Cent) und den Versorgerpreis (26 Cent) angelegt.
Daraus errechne ich den stündlichen durchschnittlichen Preis pro kWh.
Für die beiden Wohnungen habe ich jetzt Unterzähler die über die Utility Meter dann jeweils die stündlichen Verbräuche haben.
Die Stundenverbräuche sind
sensor.verbrauch_eg_stuendlich und
sensor.verbrauch_1og_stuendlich
Ich würde mich freuen wenn ich einen Hinweis bekommen könnte wie die Automatieserung aussieht um aus diesen Werten die Stromkosten der Wohnungen pro Tag und Jahr zu errechnen.
Hier der funktionierende Code für den Stundenpreis:
Hallo Karl,
ich hatte so eine ähnliche Fragestellung, da ich zu tibber als Stomanbieter gewechselt bin und ich den Stromverbrauch meiner Einliegerwohnung über einen Eltako Unterzähler als Impulszähler mit ESPHome einlese.
Da die Strompreise sich bei tibber stündlich ändern muss ich auch die Stromkosten der Einliegerwohnung stündlich neu berechnen.
Ich bin mir nicht sicher, ob das Ganze nicht auch einfacher umzusetzen wäre, aber es funktioniert:
# ------------------------------------------------------------------------------------------------------
# --- Template Sensoren für die Berechnungen von Strom Verbrauch und Kosten für die Einliegerwohnung ---
# ------------------------------------------------------------------------------------------------------
# ****************************************************************************************************
# Berechnungen der Einlieger Stromkosten auf Basis eines dynamischen Strompreises (z.B. tibber)
# ****************************************************************************************************
- sensor:
# Berechnet die Stromkosten innerhalb der Stunde auf Basis des tibber Strompreises für die aktuelle Stunde
- name: EltakoStromKosten Std
unique_id: "eltakostromkosten_std"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: "{{ (states.sensor.eltakostundenzahler.state | float(0) * states.sensor.electricity_price_myhome.state | float(0)) | round(3) }}"
# Berechnet jeweils kurz vor der vollen Stunde die Stromkosten Gesamt (Endloszähler, dieser wird nicht zurückgesetzt)
# Da ich nicht genau weiß, wann tibber den Preis zur vollen Stunde verändert berechne ich die Gesamtkosten 2 Sekunden vor der nächsten Stunde
- trigger:
- platform: time_pattern
minutes: 59
seconds: 58
sensor:
- name: EltakoStromKosten Gesamt
unique_id: "eltakostromkosten_gesamt"
device_class: monetary
state_class: "total"
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: "{{ (this.state | float(0) + states.sensor.eltakostromkosten_std.state | float(0)) | round(3) }}"
# *********************************************************************************************************
# Stand der Stromkosten vom Vortag/Vormonat/Vorjahr um Mitternacht auf Basis der Gesamtkosten aktualisieren
# *********************************************************************************************************
- trigger:
- platform: time
at: '00:00:00'
sensor:
# Die Stromkosten vom Vortag werden jeden Tag um Mitternacht auf die Gesamtsumme gesetzt
- name: EltakoStromKosten Vortag
unique_id: "eltakostromkosten_vortag"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% if is_state('sensor.eltakostromkosten_vortag', 'unknown') %}
{{ (('0.0') | float(0)) | round(3) }}
{% else %}
{{ (states.sensor.eltakostromkosten_gesamt.state | float(0)) | round(3) }}
{% endif %}
# Die Stromkosten vom Vormonat werden an jedem 01. im Monat um 00:00 Uhr auf die Gesamtsumme gesetzt
- name: EltakoStromKosten Vormonat
unique_id: "eltakostromkosten_vormonat"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% if is_state('sensor.eltakostromkosten_vormonat', 'unknown') %}
{{ (('0.0') | float(0)) | round(3) }}
{% else %}
{% if now().day == 1 %}
{{ (states.sensor.eltakostromkosten_gesamt.state | float(0)) | round(3) }}
{% endif %}
{% endif %}
# Die Stromkosten vom Vorjahr werden jedes Jahr am 01.01. um 00:00 Uhr auf die Gesamtsumme gesetzt
- name: EltakoStromKosten Vorjahr
unique_id: "eltakostromkosten_vorjahr"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% if is_state('sensor.eltakostromkosten_vorjahr', 'unknown') %}
{{ (('0.0') | float(0)) | round(3) }}
{% else %}
{% if now().day == 1 and now().month == 1 %}
{{ (states.sensor.eltakostromkosten_gesamt.state | float(0)) | round(3) }}
{% endif %}
{% endif %}
# **************************************************************************************
# Aktualisiert alle 5 Minuten die Stromkosten für Tag, Monat und seit letzter Abrechnung
# **************************************************************************************
- trigger:
- platform: time_pattern
minutes: /5
sensor:
# Berechne die Differenz der Kosten zum Vortag
- name: EltakoStromKosten Tag
unique_id: "eltakostromkosten_tag"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% set gesamtkosten = states.sensor.eltakostromkosten_gesamt.state | float(0) %}
{% set vortagskosten = states.sensor.eltakostromkosten_vortag.state | float(0) %}
{% set stdkosten = states.sensor.eltakostromkosten_std.state | float(0) %}
{{ ((gesamtkosten - vortagskosten + stdkosten) | float(0)) | round(3) }}
# Berechne die Differenz der Kosten zum Vormonat
- name: EltakoStromKosten Monat
unique_id: "eltakostromkosten_monat"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% set gesamtkosten = states.sensor.eltakostromkosten_gesamt.state | float(0) %}
{% set vormonatskosten = states.sensor.eltakostromkosten_vormonat.state | float(0) %}
{% set stdkosten = states.sensor.eltakostromkosten_std.state | float(0) %}
{{ ((gesamtkosten - vormonatskosten + stdkosten) | float(0)) | round(3) }}
# Berechne die Differenz der Kosten zur letzten Abrechnung ( 1 Jahr)
- name: EltakoStromKosten seit letzter Abrechnung
unique_id: "eltakostromkosten_seit_letzter_abrechnung"
device_class: monetary
icon: mdi:currency-eur
unit_of_measurement: "EUR"
state: >
{% set gesamtkosten = states.sensor.eltakostromkosten_gesamt.state | float(0) %}
{% set vorjahreskosten = states.sensor.eltakostromkosten_vorjahr.state | float(0) %}
{% set stdkosten = states.sensor.eltakostromkosten_std.state | float(0) %}
{{ ((gesamtkosten - vorjahreskosten + stdkosten) | float(0)) | round(3) }}
by HarryP: Codezeilen formatiert (bitte immer in </> einbinden)