Quotient nur berechnen, wenn Divisor ungleich 0

Hallo,

bin noch neu im bei Homeassistant und habe folgendes Problem: ich möchte, dass ein Wert berechnet wird wenn

  • ein Sensor A ändert
  • der Wert von Sensor A != 0 ist
  • der Wert von Sensor B != 0 ist

dachte ein Trigger wäre hier der richtige Ansatz …

template:
  - trigger:
      - trigger: state
        entity_id: 
        -  sensor.warmepumpe_summe_heizenergie
        not_from:
          - "unknown"
          - "unavailable"
        condition:
          - condition: and
            conditions:
            - condition: numeric_state
              entity_id: sensor.warmepumpe_summe_heizenergie
              above: 0
            - condition: numeric_state
              entity_id: sensor.warmepumpe_taglicher_energie_verbrauch
              above: 0
        sensor:
          - name: "Wärmepumpe COP"
            unique_id: "template.heatpump.cop"
            state: >
              {{ (states('sensor.warmepumpe_summe_heizenergie') | float(0) /
                  states('sensor.warmepumpe_taglicher_energie_verbrauch') | float(0)) | round(1) }}

… tja … Homeassistant meldet beim startup einen Fehler und es tut sich schlicht nichts. Kann bitte jemand helfen? Wo liegt das Problem?

versuche mal nen template-sensor-helfer

{% if (states('sensor.deinsensorB')|float  > 0 %}
            {{ (states('sensor.deinsensorA')|float / (states('sensor.deinsensorB')|float }}
{% elif (states('sensor.deinsensorB')|float  < 0 %}
            {{ (states('sensor.deinsensorA')|float / (states('sensor.deinsensorB')|float }}
{% else %}
            {{ wasauchimmer oder weglassen }}
{% endif %}

Hallo Schwippser,

danke für die prompte Antwort. Du meinst die condition im trigger weglassen und einfach die Abfrage ob != 0 in den Sensor einbauen?

Vielen Dank für deine Hilfe!

hatte es aus deiner Überschrift anders heraus gelesen.
also nochmal
einen Template-Sensor-Helfer anlegen

{% if (states('sensor.deinsensorB')|float  > 0 %}
            {{ 1 }}
{% elif (states('sensor.deinsensorB')|float  < 0 %}
            {{ 1 }}
{% else %}
            {{ 0 }}
{% endif %}

dann als Bedingung in deiner Automation nehmen, wenn dieser Helfer den Wert “1” hat

Hallo Schwippser,

nochmals danke für deine prompte Antwort. Vielleicht muss ich mein Problem präzisieren: ich möchte, dass eine Division nur dann und genau dann ausgeführt wird, wenn sich der Wert von Sensor A ändert und Sensor B != 0 ist (nett wäre wenn Sensor A ebenfalls != 0 ist)
Dachte das mit der Änderung wäre ein Trigger. Mein Code sieht nun wie folgt aus

# calculated sensors
template:
  - sensor:
      - name: "Wärmepumpe Summe Verbrauch"
        unique_id: "template.heatpump.power.overall.consumed"
        unit_of_measurement: "W"
        state: >
          {{ (states('sensor.shellyem3_ec64c9c07ed2_channel_a_power') | float(0) + 
              states('sensor.shellyem3_ec64c9c07ed2_channel_b_power') | float(0) +
              states('shellyem3_ec64c9c07ed2_channel_c_power') | float(0)) | round(1) }}

      - name: "Wärmepumpe Summe Heizenergie"
        unique_id: "template.heatpump.energie.overall.provided"
        unit_of_measurement: "kWh"
        device_class: energy
        state_class: total
        state: >
          {{ (states('sensor.stiebel_eltron_isg_produced_heating_today') | float(0) +
              states('sensor.stiebel_eltron_isg_produced_water_heating_today') | float(0)) | round(0) }}
              
  - trigger:
      - trigger: state
        entity_id: 
        -  sensor.warmepumpe_summe_heizenergie
        not_from:
          - "unknown"
          - "unavailable"
        sensor:
          - name: "Wärmepumpe COP"
            unique_id: "template.heatpump.cop"
            state: >
              {% if (states('sensor.warmepumpe_taglicher_energie_verbrauch') | float) > 0 %}
              {{ (states('sensor.warmepumpe_summe_heizenergie') | float / states('sensor.warmepumpe_taglicher_energie_verbrauch') | float) | round(1) }}
              {% endif %}

Homeassistant streikt immer noch … hast du eine Idee?

Ich muss mir das mal in Ruhe ansehen. Wird heute aber nix mehr. Meine Regierung hat gerade Zapfenstreich verordnet :wink:

Hallo Schwippser,

hat alles geklappt, habe es selbst herausbekommen. So …

template:
  - trigger:
      - trigger: state
        entity_id: sensor.warmepumpe_summe_heizenergie
    sensor:
      # Calculate COP of heatpump
      - name: "Wärmepumpe COP"
        unique_id: "template.heatpump.cop"
        state:  >
          {% set overallHeatEnergy = states('sensor.warmepumpe_summe_heizenergie') | float(0) %}
          {% set overallEnergyConsumed = states('sensor.warmepumpe_taglicher_energie_verbrauch') | float(0) %}
          {% if overallHeatEnergy > 0 and overallEnergyConsumed > 0 %}
            {{ (overallHeatEnergy / overallEnergyConsumed) | round(1) }}
          {% endif %}

… funktioniert es und der Trigger sorgt dafür, dass der Wert nur berechnet wird sobald sich der entsprechende Sensor ändert.

Nochmals vielen Dank für deine Hilfe :slightly_smiling_face:

Die Syntax ist etwas “gewöhnungsbedürftig” … gibt es da eine Beschreibung?

Ja sorry, dass ich mich nicht gemeldet hatte … hatte die letzten 2 Tage viel zu tun. Aber Glückwusch, dass es geklappt hat.
Mit einer wirklichen Beschreibung kann ich leider nicht weiterhelfen. Bin in solchen Fällen auch dann viel bei Google unterwegs.