Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature-Request - add sensors to measure produced heating #10

Open
guevara777 opened this issue Nov 7, 2024 · 15 comments
Open

Feature-Request - add sensors to measure produced heating #10

guevara777 opened this issue Nov 7, 2024 · 15 comments

Comments

@guevara777
Copy link

I´m waiting for my parts to control my own Heatpump with the code of your project. Thank you so much. Great work. 💯

I´m looking for a way to measure the produced heat of my heat-pump so that i´m able to calculate the "Jahresarbeitszahl" (SCOP) of my heat-pump. you can do so by deviding the produced heat through the consumend energy.

I just found a way to caluculate the produced heat of my heatpump (thank you chatgpt).

To do so, you need this:

1.) a sensor with the "Vorlauftemperatur" (in-water-temperature)
2.) a sensor with the "Rücklauftemperatur" (out-water-temperature)
3.) for 1.) and 2.) a statistics sensor (mean) to flatten the curves
4.) a template-sensor with the following code:

{% set ruecklauf = states('sensor.rucklauf_statistiksensor') | float %}
{% set vorlauf = states('sensor.vorlauf_statistiksensor') | float %}
{% set durchfluss = states('sensor.stiebel_eltron_isg_altbau_volume_stream_wp1') | float %}
{% set delta_t = vorlauf - ruecklauf %}
{% set durchfluss_m3_h = durchfluss / 1000 * 60 %}
{% set leistung_watt = (durchfluss_m3_h * delta_t * 4.18 * 1000) %}
{{ max(0,leistung_watt) | int(default=0) }}

this variables have (for example) these values:

Vorlauf = 32.09
Rücklauf = 28.52
Delta = 3.570000000000004
Durchfluss m³/h = 1.2
Leistung in Watt 17907

5.) a riemann-integral-sensor to convert W into kWh
6.) utiliy-meter-sensors based on the riemann-integral-sensor to measure daily, weekly, monthly and yearly produced heat

Maybe this helps someone else, too ... :)

@gRiMMi83
Copy link

gRiMMi83 commented Nov 7, 2024

Klingt interessant Versuch ich auch mal am Wochenende 👍

@basti242
Copy link
Owner

basti242 commented Nov 8, 2024

Oh ja cool, wieder was fürs WE um die Langeweile zu bekämpfen ;-) Das schau ich mir auch mal an.
Danke

@guevara777
Copy link
Author

Ah, ich sehe. Du hast das gleiche "Problem" wie ich 😄

@basti242
Copy link
Owner

Ich habe mir das gerade mal angesehen. Werde mal schauen ob die Werte plausibel sind und das dann einbauen. Kann ein paar Tage dauern.

@gRiMMi83
Copy link

I´m waiting for my parts to control my own Heatpump with the code of your project. Thank you so much. Great work. 💯

I´m looking for a way to measure the produced heat of my heat-pump so that i´m able to calculate the "Jahresarbeitszahl" (SCOP) of my heat-pump. you can do so by deviding the produced heat through the consumend energy.

I just found a way to caluculate the produced heat of my heatpump (thank you chatgpt).

To do so, you need this:

1.) a sensor with the "Vorlauftemperatur" (in-water-temperature) 2.) a sensor with the "Rücklauftemperatur" (out-water-temperature) 3.) for 1.) and 2.) a statistics sensor (mean) to flatten the curves 4.) a template-sensor with the following code:

{% set ruecklauf = states('sensor.rucklauf_statistiksensor') | float %}
{% set vorlauf = states('sensor.vorlauf_statistiksensor') | float %}
{% set durchfluss = states('sensor.stiebel_eltron_isg_altbau_volume_stream_wp1') | float %}
{% set delta_t = vorlauf - ruecklauf %}
{% set durchfluss_m3_h = durchfluss / 1000 * 60 %}
{% set leistung_watt = (durchfluss_m3_h * delta_t * 4.18 * 1000) %}
{{ max(0,leistung_watt) | int(default=0) }}

this variables have (for example) these values:

Vorlauf = 32.09
Rücklauf = 28.52
Delta = 3.570000000000004
Durchfluss m³/h = 1.2
Leistung in Watt 17907

5.) a riemann-integral-sensor to convert W into kWh 6.) utiliy-meter-sensors based on the riemann-integral-sensor to measure daily, weekly, monthly and yearly produced heat

Maybe this helps someone else, too ... :)

ich hab bisschen rumgespielt bekomm es leider nicht hin.
kannst du bitte noch die beiden Sensoren Vorlauf und Rücklauf aus deiner yaml hier rein kopieren, evtl. hab ich da schon den Fehler drin, da ich kein "statistics sensor" Typ gefunden habe? sorry für die noob fragen :-)

Danke

@basti242
Copy link
Owner

Die Werte die ich bekomme sind irgendwie komisch. Lass mich mal noch ein bisschen testen.

@gRiMMi83
Copy link

gRiMMi83 commented Nov 19, 2024

@guevara777 wo kommen die beiden Werte her bzw. was sagen die aus?

{% set durchfluss_m3_h = durchfluss / 1000 * 60 %}
{% set leistung_watt = (durchfluss_m3_h * delta_t * 4.18 * 1000) %}

Durchfluss / 1000 is klar aber warum mal 60?
selbes bei der 4,18 ?

@basti242
Copy link
Owner

4,186 kJ/kg ist die spezifische Wärmekapazität von Wasser.
die 60 wäre in dem Fall die Umrechnung von h in min. Also in Verbindung mit der /1000 wären das L/min.

@gRiMMi83
Copy link

gRiMMi83 commented Nov 19, 2024

ich hab es mal mit copilot versucht, der würde das wie folgt lösen, aber bei mir kommt immer der Fehler: "Missing property Platform line 16.

image

`sensor:

  • platform: template
    sensors:
    durchflussrate_m3s:
    value_template: "{{ (states('sensor.hp_flow_rate') | float) / 60000 }}"
    unit_of_measurement: "m³/s"
    temperaturdifferenz:
    value_template: "{{ (states('sensor.hp_outlet_temp') | float) - (states('sensor.hp_inlet_temp') | float) }}"
    unit_of_measurement: "°C"
    abgegebene_heizwaerme:
    value_template: >
    {% set v = states('sensor.durchflussrate_m3s') | float %}
    {% set delta_t = states('sensor.temperaturdifferenz') | float %}
    {% set cp = 4.18 %}
    {% set rho = 1000 %}
    {{ v * delta_t * cp * rho }}
    unit_of_measurement: "W"

  • platform: history_stats
    name: "Heizwärme Tag"
    entity_id: sensor.abgegebene_heizwaerme
    state: "on"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

  • platform: history_stats
    name: "Heizwärme Woche"
    entity_id: sensor.abgegebene_heizwaerme
    state: "on"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) - timedelta(days=now().weekday()) }}"
    end: "{{ now() }}"

  • platform: history_stats
    name: "Heizwärme Monat"
    entity_id: sensor.abgegebene_heizwaerme
    state: "on"
    type: time
    start: "{{ now().replace(day=1, hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

  • platform: history_stats
    name: "Stromverbrauch Tag"
    entity_id: sensor.stromverbrauch
    state: "on"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

  • platform: history_stats
    name: "Stromverbrauch Woche"
    entity_id: sensor.stromverbrauch
    state: "on"
    type: time
    start: "{{ now().replace(hour=0, minute=0, second=0) - timedelta(days=now().weekday()) }}"
    end: "{{ now() }}"

  • platform: history_stats
    name: "Stromverbrauch Monat"
    entity_id: sensor.stromverbrauch
    state: "on"
    type: time
    start: "{{ now().replace(day=1, hour=0, minute=0, second=0) }}"
    end: "{{ now() }}"

  • platform: template
    sensors:
    jaz_tag:
    value_template: "{{ (states('sensor.heizwaerme_tag') | float) / (states('sensor.stromverbrauch_tag') | float) }}"
    unit_of_measurement: "JAZ"
    jaz_woche:
    value_template: "{{ (states('sensor.heizwaerme_woche') | float) / (states('sensor.stromverbrauch_woche') | float) }}"
    unit_of_measurement: "JAZ"
    jaz_monat:
    value_template: "{{ (states('sensor.heizwaerme_monat') | float) / (states('sensor.stromverbrauch_monat') | float) }}"
    unit_of_measurement: "JAZ"`

@ricsch
Copy link

ricsch commented Nov 19, 2024

Moin,
als erstes vielen Dank für den tollen Impuls! Ich habe das bei mir leicht anders berechnet, die Werte sehen so wesentlich plausibler aus:

{% set ruecklauf = states('sensor.hp_inlet_temp') | float %}
{% set vorlauf = states('sensor.hp_outlet_temp') | float %}
{% set durchfluss = states('sensor.hp_flow_rate') | float %}
{% set delta_t = vorlauf - ruecklauf %}
{% set volumenstrom = durchfluss / 60 %}
{% set leistung_watt = (volumenstrom * delta_t * 4.18 * 1000) %}

{{ max(0,leistung_watt) | int(default=0) }}

@earlybite
Copy link

earlybite commented Dec 23, 2024

Ich habe das jetzt mal implementiert: https://pastebin.com/YRnJkC4V
Der Code wird als modbus_lg_heatpump_energy.yaml in /homeassistant/integrations/ gespeichert und in der configurations.yaml included.

Es wird damit die gesamte erzeugte Wärmemenge berechnet, außerdem die gesamte aufgewendete elektrische Energie. Daraus werden dann die SCOPs und die JAZ ermittelt. Zusätzlich habe ich das in meinem Fall noch für die Heizkörper und den WW-Speicher getrennt implementiert, sodass ich z.B. einen daily SCOP für die Heizkörper und einen für den WW-Tank habe.

So sieht das nun beispielhaft bei mir aus:
2
1

(JAZ pendelt sich gerade noch ein, da die Sensoren dummerweise nicht gleichzeitig an den Start gingen...)

@earlybite
Copy link

earlybite commented Dec 23, 2024

Ich habe mir jetzt die Zahlen nochmal genau angeschaut und auch mit der Energieanzeige am LG Terminal verglichen. Irgendwas scheint da noch nicht so ganz zu stimmen...

Hier ist die Ausgabe des LG-Terminals zu sehen:
6
7

Im Vergleich dazu hier meine HA-Energiekarte:
5

Auffällig sind mehrere Dinge:

  1. Heizen und Brauchwasser ergeben insgesamt 10,5 kWh elektrisch, das scheint sich zu decken mit der HA-Berechnung. Allerdings stimmen die Werte für Brauchwasser und Heizkörper leider nicht damit überein. Ich habe in HA einen Sensor definiert, der 1 ausgibt, sobald der Brauchwasser-Erwärmungsmodus aktiviert ist, sonst 0. Einen entsprechenden Sensor habe ich auch für den Heizmodus (Heizkörper) implementiert. Mit diesen Sensorwerten multipliziere ich den Wert des el. Leistungssensors der WP, um die el. Leistung nach Brauchwasser und Heizkreis zu trennen. Entsprechend integriert ergeben sich die hier dargestellte Werte.
  2. Die gesamte Wärmemenge passt auch nicht so richtig, denn 36 kWh + 16,56 kWh ergeben ja nicht 39,54 kWh, ganz zu schweigen davon, dass LG im Terminal 34 kWh ausgibt. Ich hatte schon überlegt, dass die Wärmeabgabe der Heizkörper vielleicht zu groß berechnet wird, weil sich die HK nach dem Erwärmen des Brauchwassers die restliche Wärme der VL-Temperatur "schnappen", ohne dass dafür elektrisch geheizt werden muss. Sollte also besser die Wärmeabgabe der HK als "Wärmeabgabe Gesamt - Wärmeabgabe DHW" berechnet werden?
  3. 39,54 (Wärmeabgabe gesamt) - 5,15 (elektrische Energie DHW heute) = 34,39 kWh , also ca. 35 kWh... Zufall?? Oder rechnet vielleicht die LG-Wärmepumpe einfach "Mist" aus und gibt den dann im LG-Terminal falsch aus?

Macht es vielleicht einen Unterschied, wie integriert wird? Ich habe für alle Integrale die Methode "trapezoidal" verwendet. Wäre "left" hier eine bessere Wahl?

########### INTEGRALE ###############

Integration für Gesamtenergie

  • platform: integration
    source: sensor.hp_heizleistung
    name: "HP Energieverbrauch Heizung"
    unit_prefix: k
    round: 2
    method: trapezoidal

  • platform: integration
    source: sensor.hp_energy_instantaneous_total_high
    name: "HP Elektrische Energie"
    unit_prefix: k
    round: 2
    method: trapezoidal

Integration für Heizkörper-Energie

  • platform: integration
    source: sensor.hp_heizleistung_heizkoerper
    name: "HP Energieverbrauch Heizkoerper"
    unit_prefix: k
    round: 2
    method: trapezoidal

  • platform: integration
    source: sensor.hp_elektrische_leistung_heizkoerper
    name: "HP Elektrische Energie Heizkoerper"
    unit_prefix: k
    round: 2
    method: trapezoidal

Integration für DHW-Energie

  • platform: integration
    source: sensor.hp_heizleistung_dhw
    name: "HP Energieverbrauch DHW"
    unit_prefix: k
    round: 2
    method: trapezoidal

  • platform: integration
    source: sensor.hp_elektrische_leistung_dhw
    name: "HP Elektrische Energie DHW"
    unit_prefix: k
    round: 2
    method: trapezoidal

@earlybite
Copy link

earlybite commented Dec 25, 2024

Ich war in Feiertagslaune und habe noch ein bisschen herumprobiert. Es lag wohl tatsächlich an der Integrationsmethode. Statt trapezoidal muss left gewählt werden, dann kommen stimmige Werte heraus.

1a
2

Energieverbrauch Säulendiagramm: https://pastebin.com/AiuC0WX0
Heutige Energie & daily SCOP-Anzeige: https://pastebin.com/4A7vSn4e

Folgendes muss an die configuration.yaml angehängt werden:
https://pastebin.com/FQag2eDh

Die folgende Datei modbus_lg_heatpump_energy.yaml benutze ich zusätzlich zu bastis yaml, um die Energie-Sensoren einzulesen:
https://pastebin.com/snSG8CyF

Dieses Register muss der modbus_lg_heatpump.yaml von basti noch hinzugefügt werden, damit es klappt. Funktioniert scheinbar nur mit aktueller Firmware, bitte ausprobieren.

  - name: "hp_energy_instantaneous_total_high" # momentaner Energieverbrauch high
    unique_id: "modbus.hp_energy_instantaneous_total_high"
    precision: 1
    scan_interval: 10
    address: 37
    slave: !secret lg_heatpump_modbus_slave
    unit_of_measurement: W
    input_type: input

Viel Spaß!

@cjungde
Copy link

cjungde commented Dec 26, 2024

@earlybite Danke für deine Konfig. Ich baue es gerade bei mir ein.
Ist meine Annahme richtig, das der Wert 'hp_energy_instantaneous_total_high' ein Stromzähler für die Wärmepumpe ist ? Bei mir ist das ein externer SDM72D. Oder hast Du den Wert per Modbus aus der Wärmepumpe gezogen ?
Welche anderen Werte kommen von anderen Geräten ? Ich hab erstmal keine anderen gefunden.

----> OK, ich hab die aktuelle Firmware noch nicht. Dann nehme ich meinen externen Zähler.

@earlybite
Copy link

@earlybite Danke für deine Konfig. Ich baue es gerade bei mir ein. Ist meine Annahme richtig, das der Wert 'hp_energy_instantaneous_total_high' ein Stromzähler für die Wärmepumpe ist ? Bei mir ist das ein externer SDM72D. Oder hast Du den Wert per Modbus aus der Wärmepumpe gezogen ? Welche anderen Werte kommen von anderen Geräten ? Ich hab erstmal keine anderen gefunden.

Ich habe den Wert per Modbus aus der WP gezogen. Es handelt sich dabei um ein neues Modbusregister, das in der Config von @basti242 noch nicht drin ist (siehe oben, Adresse 37, das muss noch in die Datei von basti eingefügt werden). Falls du die entsprechende Firmware noch nicht hast, musst du den Strom extern irgendwie messen, zB mit deinem SDM72D. Ich werde dazu demnächst einen Shelly Pro 3EM einbauen, der misst eventuell genauer.

Ein "Problem" scheint es noch zu geben. Ich habe mal meine berechneten Werte (u.a. mit den Formeln von @ricsch berechnet) mit denen verglichen, die auf dem LG-Terminal zu sehen sind:
2024-12-25 18 06 50 (Mittel)
2024-12-25 18 06 54 (Mittel)
Modbus Berechnung

Die Stromwerte passen, aber der berechnete Wert für die Wärmeabgabe weicht vom LG-Wert stark ab: 37,9 kWh vs. 48,43 kWh. Weiß jemand woran das liegen könnte? Wieso kommen die von LG auf den viel kleineren Wärmewert? Die Formel von @ricsch scheint mir richtig zu sein, ich benutze sonst auch nur Werte, die die WP selbst ausgibt... Rechnen die von LG falsch???

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants