Template Sensor (Temperatur) nur wenn binary Sensor "on"

Hallo,
ich möchte mir einen Sensor bauen, der mir die Pool-Temperatur abhängig davon ob die Poolpumpe an ist schreibt. Die Temperatur wird in einem Rohr gemessen und ist nur korrekt, wenn die Pumpe läuft.
Wie würdet Ihr am Besten vorgehen?

Martin

Ein Template Sensor als Helfer. Wenn Switch Pool Pumpe = “on”
Dann die Temperatur von Temp Sensor, sonst Temp = 0

{{ iif(is_state('switch.xyz', 'on'), states('sensor.temeperatur_xyz') | default(0), 0) }}

Gruß
Osorkon

2 „Gefällt mir“

Sehr gut, vielen Dank. Könnte man auch statt “0” bei Pumpe aus, den letzten Wert vom Temperatur Sensor “speichern”, sprich der Wert wird dann eingefroren bis die Pumpe wieder läuft?

1 „Gefällt mir“

Das geht natürlich auch.
Dazu braucht es aber einen weiteren Helfer.
Einen Trigger based Template Sensor. Der beim Ausschalten der Pumpe den Temperaturwert speichert.

Bsp. Trigger Based Template Sensor:

#configuration.yaml
template:
  - trigger:
      - platform: state
        entity_id: switch.xyz
        from: "on"
        to: "off"
    sensor:
      name: Gespeicherte Temperatur
      state: |
        {{ states('sensor.temeperatur_xyz') | float(0)}}
      device_class: temperature
      state_class: measurement
      unit_of_measurement: "°C"
      unique_id: 341ef3cc-df9c-4c0a-b4ec-2af0a053e6fb

Das Template für den Temperatur Sensor würde dann so ausschauen:

{{ iif(is_state('switch.xyz', 'on'), states('sensor.temeperatur_xyz') | float(0), states('sensor.gespeicherte_temperatur') | float(0)) }}

Gruß
Osorkon

1 „Gefällt mir“

Sehr geil, funktioniert :slight_smile:

Hallo, ich hänge mich mal hier ran. Ich habe genau das gleiche “Problem”.
Ich habe jetzt erst mal nur den template Sensor erstellt und das funktioniert.
Das mit dem letzten Wert speichern habe ich nur insoweit begriffen, da ich nicht weiß welche unique_id gemeint ist.
Und; ist es möglich zusätzlich zur Speicherung bei Schalter0 die neue Aktualisierung bei “Pumpe an” erst nach 5 Minuten zu beginnen? Dann nämlich ist bei uns erst die Temperatur im Rohr = der Pooltemperatur.
Das ist mein template sensor:

{{ iif(is_state('switch.poolfilterpumpe', 'on'), states('sensor.pooltemperatur_temperature') | default(0), 0) }}

Danke!

:crayon:by HarryP: Code-/Logzeilen formatiert (bitte immer in </> einbinden)

Ist die Vorlage nicht ausreichend?

In Deinem Fall willst Du erst eine Temperatur angezeigt bekommen wenn die Pool Pumpe 5 min am Stück läuft.
Wenn Sie ausgeschaltet ist, soll 0°C angezeigt werden, richtig?

Da mann bei den Trigger based Template Sensoren keine Bedingungen verwenden kann, musst Du Dir auch mit einem Helfer Sensor behelfen.

In dem Fall Pool Start Temperatur Dieser nimmt den Wert 0 an wenn die Pumpe ausgeschaltet wird und wenn die Pumpe 5 min läuft, nimmt er den Wert von sensor.pooltemperatur_temperature

Der eigentliche Template Sensor für die Pool Temperatur, nimmt nur den Wert vom sensor.pooltemperatur_temperature an, wenn der Sensor Pool Start Temperatur größer 0 ist, also wenn die Pumpe mindestens 5 min läuft, ansonsten 0.

template:
  - trigger:
      - platform: state
        entity_id: switch.poolfilterpumpe
        from: "off"
        to: "on"
        for:
          hours: 0
          minutes: 5
          seconds: 0
        id: ein
      - platform: state
        entity_id: switch.poolfilterpumpe
        from: "on"
        to: "off"
        id: aus
    sensor:
      name: Pool Start Temperatur
      state: |
        {% if trigger.id == "ein" %}
          {{ states('sensor.pooltemperatur_temperature') | float(0)}}
        {% elif trigger.id == "aus" %}
          0
        {% endif %}
      device_class: temperature
      state_class: measurement
      unit_of_measurement: "°C"
      unique_id: d323043d-fb3e-49fd-8488-03b5b3496f30
  - sensor:
      - name: Pool Temperatur
        state: |
          {% if states('sensor.pool_start_temperatur') | float(0) > 0 %}
            {{ states('sensor.pooltemperatur_temperature') | float(0) }}
          {% else %}
            0
          {% endif %}
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
        unique_id: dc12b915-365a-4412-9cb5-f80bf542372a          

Gruß
Osorkon

1 „Gefällt mir“

Hallo und Danke,
Wenn Pumpe aus, soll immer der letzte Wert erhalten bleiben (also nicht 0). Nur wenn Pumpe mindestens 5min. läuft soll der Wert aktualisiert werden.
Die Vorlagen sind für mich Gold wert, aber ich kann die einfach nicht umschreiben auf meine Bedürfnisse. Ich glaube, das werde ich nie können :frowning:
Wo muss der Code hin? In configuration.yaml ?

Dann eben so:

template:
  - trigger:
      - platform: state
        entity_id: switch.poolfilterpumpe
        from: "off"
        to: "on"
        for:
          hours: 0
          minutes: 5
          seconds: 0
        id: ein
      - platform: state
        entity_id: switch.poolfilterpumpe
        from: "on"
        to: "off"
        id: aus
    sensor:
      name: Pool Start Temperatur
      state: |
        {% if trigger.id == "ein" %}
          {{ states('sensor.pooltemperatur_temperature') | float(0)}}
        {% elif trigger.id == "aus" %}
          0
        {% endif %}
      device_class: temperature
      state_class: measurement
      unit_of_measurement: "°C"
      unique_id: d323043d-fb3e-49fd-8488-03b5b3496f30
  - sensor:
      - name: Pool Temperatur
        state: |
          {% if states('sensor.pool_start_temperatur') | float(0) > 0 %}
            {{ states('sensor.pooltemperatur_temperature') | float(0) }}
          {% else %}
            {{ this.state }}
          {% endif %}
        device_class: temperature
        state_class: measurement
        unit_of_measurement: "°C"
        unique_id: dc12b915-365a-4412-9cb5-f80bf542372a

Gruß
Osorkon

Hallo und recht herzlichen Dank!
Es scheint zu funktionieren. Endlich! Ich allein bin einfach zu blöd dafür…
Jetzt folgt für mich der nächste (letzte) Schritt, denn ich möchte die Temperatur auf meiner Homepage darstellen, also da hin senden.
Aber erst mal durchatmen :slight_smile:
Viele dankende Grüße
DeTTeC61