Abweichung von 2 Entitien mit mindestens X Grad als Trigger

Hej,
ich möchte zwei Temperaturen (Entitäten) vergleichen und eine Automatisation auslösen (Benachrichtigung) wenn die gemessenen Werte mindestens 3 Grad voneinander abweichen.

Ich habe folgenden Trigger und möchte nun sozusagen die “Empfindlichkeit” verringern, ohne die Messgenauigkeit der Sensoren zu vermindern.

Im Moment benutze ich folgenden Trigger:

platform: numeric_state
entity_id:
  - sensor.werkstattofen_am_rohr
above: sensor.werkstattofen
id: Kontrollmessung
for:
  hours: 0
  minutes: 5
  seconds: 0

Jetzt wuerde ich gerne ohne komplizierte Lösungen eine Mindesabweichung (3 Grad) setzen.

Anwendungsfall ist eine Arlarmbenachrichtigung wenn ein wichtiger Temperatursensor unplausible Werte liefert (kaputt geht), das ueberwache ich mit dem zweiten Sensor. Allerdings sind durch die unterschiedlichen Messpunkte kleine Temperaturabweichungen (im Rohr / am Rohr) zu erwarten.

automation:
  - alias: Temperaturabweichung
    trigger:
      platform: state
      entity_id: sensor.erste_temperatur_sensor, sensor.zweite_temperatur_sensor
    condition:
      condition: numeric_state
      entity_id: sensor.erste_temperatur_sensor
      above: "{{ states('sensor.zweite_temperatur_sensor') | float + 3 }}"
    action:
      service: your_action_service_here

Das wäre 1 Weg.

hast Du Lust mir das ein bischen zu erklären? Ich verstehe nicht:

  • wieso verwendest Du die Platform “state” statt “numeric state” ? Wann wird denn dann das Event “gefeuert”?
  • Du verwendest ja eine Bedingung und dann in above einen Code. Woher kommt den der Code und wie kann ich mehr dazu nachlesen?

Kann ich nicht in meinen Trigger einfach sowas wie “float +3” einfuegen oder muss ich wirklich auf den Ausdruck gehen?

Sorry, dass ich soviel frage, ich möchte das Lernen weil ich sowas wahrscheinlich noch öfter brauche.

das hier

platform: numeric_state
entity_id:
  - sensor.werkstattofen_am_rohr
above: sensor.werkstattofen
id: Kontrollmessung
for:
  hours: 0
  minutes: 5
  seconds: 0
value_template: float +3

ist wahrscheinlich genauso Blödsinn wie

above: sensor.werkstattofen +3

oder geht irgendwas davon?

Bei jeder Änderung des Status!

https://www.home-assistant.io/docs/configuration/templating/ hier.
Zur Erklärung {{der Status(‘von Sensor 2’) | Gleitkommazahl 3 höher}}

Meines Wissens nicht. Solltest das als Bedingung setzen.

Dafür sind wir hier. Einfach Fragen!

Das ist gut.

Ich würde es als trigger machen.

  - alias: Temperaturvergleich
    trigger:
      platform: template
      value_template: "{{ states('sensor.erster_sensor') | float - states('sensor.zweiter_sensor') | float > 3 }}"
    action:
      service: deine_gewünschte_service_action

Ja super habe ich selbst noch nicht gewusst oder genutzt. Aber hier sehe ich z.b . das Problem das er dann nicht triggert wenn einer ausfällt, weswegen ja die Automation gedacht war.

Wenn einer ausfällt, kann er auch nicht vergleichen, dann funktioniert die Bedienung ja auch nicht.

Wie äußert sich der Ausfall?
Bleibt der Sensor Wert dann einfach auf dem gleichen Wert stehen und aktualisiert sich nicht mehr?

Zur nicht Verfügbar wechselt der Status denke ich nicht, sonst könntest Du diesen Status als Auslöser verwenden.

Wen er sich einfach nur nicht aktualisiert.

Kannst Du als Auslöser auch verwenden.
Sensor Wert änderst sich für 1h nicht, als Bsp.

trigger:
  - platform: state
    entity_id:
      - sensor.abzugshaube_air_temperature
    for:
      hours: 1
      minutes: 0
      seconds: 0

Gruß Osorkon

Dafür hat der Herr YAML default Werte erfunden. :wink:

{{ states('sensor.erster_sensor') | float(0) - states('sensor.zweiter_sensor') | float(0) > 3 }}

float(0) → default Wert null, falls Sensor nicht verfügbar.
Ein defaultWert sollt bei template grundsätzlich angeben werden, damit es beim templating nicht zur Fehler kommt.

Gruß
Osorkon

Danke. Wenn ich das jetzt richtig verstehe ziehst Du die beiden Sensorwerte voneinander ab, verlangst dass die Werte immer grösser null sind und verlangst dass der float zwischen 0 und 3 ist.

Jetzt frage ich mich, was passiert, wenn der Kontrollsensor ausfällt. Dann sollte ich ja negative werte kriegen ?

Wenn ich das richtig sehe ist doch das Optimum:
Sensor1 soll UNGLEICH Sensor2 sein und die Differenz mindestens 3 Grad betragen und bei Ausfall den Standartwert 0 annehmen.

Im Moment bin ich mir nicht sicher, wie ich den Ausdruck zu lesen hab - denn durch das setzen des “Mindestwertes” können ja auch negative Werte entstehen. Was passiert dann?

Der default wert 0, sorgt nur dafür, dass das Template nicht in einen Fehler lauft, falls einer oder beide Sensoren den Zustand unbekannt oder nicht verfügbar haben. Sind beide nicht verfügbar, ist das Ergebnis 0-0=0

Wenn sowohl negative wie auch positive Abweichungen berücksichtigt werden sollen, dann muss das Ergebnis (Sensor1 - Sensor2 ) um das Vorzeichen befreit werden. Das erfolgt über:


|  abs

Damit lautet das Template dann:


{{ (states('sensor.erster_sensor') | float(0) - states('sensor.zweiter_sensor') | float(0)) | abs > 3 }}

Gruß
Osorkon

Hi, anscheinend bin ich zu blöd für obenstehendes, habe einen Heizstab den möchte ich sozusagen ganz einfach überschuss steuern.

Also wenn über akku 50% und PV Leistung um 1500 großer als Hausverbrauch, Heizstab ein :

alias: Heizstab L1 Ein Auto 50% Trigger
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.sun10k_battery_capacity
  - platform: numeric_state
    entity_id:
      - sensor.sun10k_battery_capacity
    above: 50
    for:
      hours: 0
      minutes: 5
      seconds: 0
condition:
  - condition: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) > 1500 }}
action:
  - type: turn_on
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

und wenn PV Leistung kleiner als 1500 über Hausleistung wieder aus.

tippe oalias: Heizstab L1 Aus Auto Trigger < 1500W Diff
description: Heizstab L1 Aus Auto Trigger < 1500W Diff
trigger:
  - platform: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) < 1500 }}
    for:
      hours: 0
      minutes: 0
      seconds: 30
condition: []
action:
  - type: turn_off
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

es funktioniert auch von vormittags weg, aber plötzlich jeden Tag nachmittags plötzlich nicht mehr.

Was mache ich da falsch

Hallo Geri,
was mir auffällt:

  • Warum ist der Trigger denn verdoppelt? Eigentlich reicht einmal platform: numeric_state.
  • Genauso bei action: Wieso gibt es eine Device-ID UND eine entity_id? Machst Du zwei Dinge an? Wenn Du nur einen Switch fuer den Heizstab hast, reicht die Entity.

hi danke für die Antwort hab das einschalten jetzt so

alias: Heizstab L1 Ein Auto 50% Trigger
description: ""
trigger:
  - platform: time_pattern
    seconds: /5
  - platform: numeric_state
    entity_id:
      - sensor.sun10k_battery_capacity
    above: 50
    for:
      hours: 0
      minutes: 5
      seconds: 0
condition:
  - condition: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) > 2000 }}
action:
  - type: turn_on
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

Ausschalten so

alias: Heizstab L1 Aus Auto Trigger < 1500W Diff
description: Heizstab L1 Aus Auto Trigger < 1500W Diff
trigger:
  - platform: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) < 1500 }}
    for:
      hours: 0
      minutes: 1
      seconds: 0
condition: []
action:
  - type: turn_off
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

device und entity_id macht er so wenn man das über den visuellen editor macht

mal schauen obs heute geht

Du hast immer noch zwei Trigger beim einschalten. Wenn ich das richtig verstehe machst Du gerade folgendes:

  • du prüfst alle 5 Sekunden, ob Deine Bedingung zutrifft und führst die Aktion aus.

  • wenn der Status 5 Minuten lang so ist wie Du im zweiten Trigger beschreibst, prüfst Du eine weitere Bedingung und führst die Aktion dann aus.

Das ist für mich nicht verständlich. Wenn ich alle 5 Sekunden nachgucke wird ja der Status des zweiten Trigger s nie erreicht.

Wozu also den Trigger mit den Time pattern?

Generell muss man daran denken, dass alle elektronischen Sachen eine gewisse Anzahl Messungen aushalten. Fragst du etwas alle 5 Sekunden ab hast du verglichen mit einer Minute bereits 12 mal soviele Messungen und das summiert sich schnell auf.

hm ok:

Besser so: Einschalten

alias: Heizstab L1 Ein Auto 50% Trigger
description: ""
trigger:
  - platform: time_pattern
    seconds: /10
condition:
  - condition: and
    conditions:
      - condition: template
        value_template: "{{ states('sensor.sun10k_battery_capacity') | float(0) > 50 }}"
  - condition: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) > 1500 }}
action:
  - type: turn_on
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

Auschalten:

alias: Heizstab L1 Aus Auto Trigger < 1500W Diff
description: Heizstab L1 Aus Auto Trigger < 1500W Diff
trigger:
  - platform: time_pattern
    seconds: /10
condition:
  - condition: template
    value_template: >-
      {{ states('sensor.sun10k_pv_total_power_inkl_mi_1') | float(0) -
      states('sensor.sun10k_load_totalpower') | float(0) < 2000 }}
action:
  - type: turn_off
    device_id: b9063159baa387d2015c0ca4f2c54091
    entity_id: 2dfc9006eed4fa31ea285cf1a310f1b5
    domain: switch
mode: single

die 5 oder jetzt 10 Sekunden sind nur derweil das ich schauen kann wie es schaltet das werde ich dann verlängern,

Derweil funktioniert es, was ich aber nicht schaffe das es beim einschalten auch mindestens “5 Minuten” der Zustand auch so bleibt und erst dann einschaltet.
Das schaffe ich nicht …

Ja das liegt an Deinem Trigger. Du brauchst das timepattern überhaupt nicht sondern solltest den state als Trigger setzen.

Homeassistent überwacht ja eh kontinuierlich alle Veränderungen, dass musst Du ihm also nicht noch extra sagen.

ok des versteh ich nicht, kannst mir helfen des in mein code zu bringen