In Automation rechnen

Hallo ich bin ein Anfänger was Automationen und auch Coding betrifft. Bisher habe ich mich immer mit Beispielen und die angepasst geholfen. Aber jetzt stehe ich vor einem Problem.

Ich habe einen Sensor mit dem Wert 0 Watt als template sensor in der configuration.yaml erstellt. Zu diesen Sensor möchte ich unter bestimmten Voraussetzungen (Einspeisung in Watt über 100) einen Sensorwert adddieren.

3 Fragen:

  1. ich kann in der Oberfläche der Automationen unter den Bereich Dann keine Möglichkeit für eine Rechnung finden. Gibt es das oder muss das per Code gemacht werden.
  2. Wenn als Code wie würde der aussehen?
  3. Wenn die Automation steht wird die Berechnung stetig ausgeführt solange wie die Automation gültig ist oder nur einmalig wenn die Voraussetzungen der Automation eintreten.

Vielen Dank

Was genau wolltest du denn damit machen? Warum überhaupt den Wert ändern? Hätte als erstes an sowas gedacht wie

{{ states('sensor.Leistung') | float + 50 }}

so würde dem Sensor ein Wert von 50 hinzugefügt. Ich hätte da eher im UI ein Template Helfer gebaut der das erledigen würde.

Hallo Danke für die Antwort.
Einen Helfer ist kein Problem

Aber ich habe den Sensor “DIY Speicher laden” über diesen steuere ich die Ladeleistung eines Ladegerätes.
Der Sensor ist in der configuration.yaml als Template Sensor mit dem Wert 0 angelegt. Das heißt das Ladegrät macht erstmal nichts.

Deshalb als nächstes eine Automation die den Sensor der Einspeiseleistung abfragt. Wenn diese für 5min über 100W ist. Dann soll zum Sensor DIY Speicher laden die Einspeiseleistung hinzuaddiert werden. Somit ist dieser Sensor dann nicht mehr 0 sondern ein Wert über 100W. Somit Startet das Ladegerät und der Speicher wird geladen. Bis der Einspeisewert unter 100W fällt.

Hoffe jetzt wird es klarer.

Also eine start Automation hätte ich wie folgt gemacht.

- alias: "Ladegerät starten bei hoher Einspeisung"
  description: "Startet das Ladegerät, wenn die Einspeisung für 5 Minuten über 100 W liegt"
  triggers:
    - trigger: numeric_state
      entity_id: sensor.einspeisung
      above: 100
      for: "00:05:00"
  actions:
    - action: input_number.set_value
      target:
        entity_id: input_number.diy_speicher_laden
      data:
        value: "{{ states('sensor.einspeisung') | float(101) }}"

soetwas in der art vielleicht? wenn der wert unter 100 fällt musst du es mit einer weiteren Automation natürlich auch wieder ausschalten.

alias: SMA Speicher voll oder mehr Erzeugung
description: ""
triggers:
  - trigger: numeric_state
    entity_id:
      - input_select.test_sensor
    above: 100
conditions: []
actions:
  - action: input_number.set_value
    target:
      entity_id: input_number.diy_speicher_laden
    data:
      value: "{{ states('sensor.diy_speicher_laden') | float(101) }}"

Habe den Code so eingegeben. Komme mit dem unteren Bereich bei deinem Beispiel nicht zurecht. Habe mir mal einen Testsensor eingerichtet. Den habe ich von Hand auf 101 gestellt damit müsste die Automation erfüllt sein und der Sensor diy_speicher_laden auf 101 gestellt sein.

Aber es passiert nichts.

Der Testsensor konnte ich prüfen der ist auf 101

noch eine Frage ist der Wert durch die Automation einmalig angepasst oder würde er sich dynamisch anpassen je nachdem wie hoch die Einspeisung ist.

Dazu müsste man natürlich den jetzigen Code anpassen

Hallo oder habe ich beim Sensor anlegen was falsch gemacht

  - sensor:
    # Ladesensor für DIY Speicher 
      - name: DIY Speicher Laden
        unique_id: "diyspeicherladen"
        unit_of_measurement: 'W'
        state: 0

Soll ein Sensor sein der 0 Watt als Wer hat

Hallo oder soll oder kann ich in die configuration.yaml auch direkt einige If -then Bedingungen schreiben. Ohne es in eine Automation zu packen?

So habe heute mal noch etwas getestet schaffe es in den Entwicklerwerkzeugen die Rechnung durchzuführen.
Aber in der Automation schaffe ich es nicht.

alias: TEst Speicher
description: ""
triggers:
  - trigger: time
    at: "17:03:00"
actions:
  - action: input_number.set_value
    target:
      entity_id: input_number.diy_speicher_laden
    data:
      value: "{{ int(states('sensor.diy_speicher_laden')) + 100 }}"
mode: single

Habe eine Zeit als Trigger genommen damit ich es einfach testen kann

Auch so geht es nicht:

alias: TEst Speicher
description: ""
triggers:
  - trigger: time
    at: "17:22:00"
actions:
  - action: input_number.set_value
    target:
      entity_id: input_number.diy_speicher_laden
    data:
      value: "100"
mode: single

An was kann das liegen?

DANKE

:crayon:by HarryP:Zusammenführung Mehrfachpost (bitte “bearbeiten” Funktion nutzen)

Aus deinen anderen Beiträgen entnehme ich, dass beispielsweise diese addiere 100 zu dem Sensor fantasie Werte sind wo du denkst das müsste jetzt der richtige Wert sein. Oder gibt es irgendwo ein Sensor der dir genau diesen Wert anzeigt? Aber ich denke es wäre einfacher den Wert erst auszurechnen in einem Template Helfer und ihn dann für eine Automation zu verwenden. Dazu müsste man aber wissen woher dieser Wert kommt und warum das überhaupt nötig ist. Jedenfalls einen Wert der sich laufend verändert oder aktualisiert bekommst du auf diese Weise nicht so einfach hin.

Hallo ja es ist richtig das sind erstmal Fantasie Werte um erstmal das System zu verstehen danach hätte ich es mit richtigen Sensor Werten gefüllt.

Aber wenn es hilft dann könnten wir es auch gleich mit den richtigen Werten machen.

Und ja die Werte ändern sich stetig wie müsste ich das machen das es funktioniert.

für den ersten und einfachsten Fall lautet die richtige Rechnung:

ist sensor.netzeinspeisung_evcc größer als 100W für 5min
dann mache sensor.diy_speicher_laden + sensor.netzeinspeisung_evcc

Sollte ich den Teil “dann mache” in einen Helfer packen ?

Da du ja anscheind dem Ladegerät Daten aus HA schicken möchtest, gehe ich davon aus, dass dieses auch Werte oder Entitäten an HA gibt. Warum arbeitest du dann nicht gleich mit dem sensor.netzeinspeisung_evcc weil in deiner Rechnung ist dein sensor.diy_speicher_laden und sensor.netzeinspeisung_evcc gleich.

trigger: numeric_state
entity_id:
  - sensor.netzeinspeisung_evcc
for:
  hours: 0
  minutes: 5
  seconds: 0
above: 100

ich würde eine Automation so beginnen und dann kannst du das Ladegerät ansteuern. Wenn eine höherer Wert erreicht wird soll eine andere trigger ID oder eine andere Automation ausgelöst werden, die die Leistung des Ladegerätes erhöht.

Hallo so ganz weiß ich nicht ob wir uns richtig verstehen.
Ich kann im Ladegerät einen Sensor “sensor.diy_speicher_laden” aus HA angeben. Dieser Sensor gibt den Wert an das Ladegerät.

Deshalb dachte ich ich muss je nach Situation zu diesen Sensor
“sensor.diy_speicher_laden” den Einspeisewert Addieren damit das Ladegerät weiß wieviel es einspeichern soll.

Also ist es richtig, das eigentlich beide Sensoren das gleiche anzeigen sollen, du den Sensor aus dem Ladegerät mit den Daten aus dem sensor.netzeinspeisung_evcc füttern möchtest.

automation:
  - alias: "Wert von Netzeinspeisung an DIY Speicher übergeben"
    trigger:
      - platform: state
        entity_id: sensor.netzeinspeisung_evcc
    actions:
      - action: input_number.set_value
        target:
          entity_id: input_number.diy_speicher_laden
        data:
          value: "{{ states('sensor.netzeinspeisung_evcc') | float }}"

probiere die Automation doch mal aus.

ja das ist in der einfachsten Variante richtig wenn x Minuten der “sensor.netzeinspeisung_evcc” über 100W ist dann ist der “sensor.diy_speicher_laden” = dem dem “sensor.netzeinspeisung_evcc”

ich teste

diese Fehlermeldung kommt:

Message malformed: extra keys not allowed @ data[‘automation’]

:crayon:by HarryP:Zusammenführung Doppelpost (bitte “bearbeiten” Funktion nutzen)

alias: "Wert von Netzeinspeisung an DIY Speicher übergeben"
trigger:
  - platform: state
    entity_id: sensor.netzeinspeisung_evcc
actions:
  - action: input_number.set_value
    target:
      entity_id: input_number.diy_speicher_laden
    data:
    value: "{{ states('sensor.netzeinspeisung_evcc') | float }}"

Fehlermeldung:
Message malformed: template value is None for dictionary value @ data[‘actions’][0][‘data’]

kommt

habe den Code nur angepasst auf Netzbezug da wir ja momentan keine Einspeisung haben

alias: test
trigger:
  - platform: state
    entity_id: sensor.netzbezug_evcc
actions:
  - action: input_number.set_value
    target:
      entity_id: input_number.diy_speicher_laden
    data:
    value: "{{ states('sensor.netzbezug_evcc') | float }}"

Versuche die automation doch mal manuell im UI zu erstellen
Aktion → zahl

Und bei wert {{ states(‘sensor.netzbezug_evcc’) | float }}

das geht nicht bei Wert kann ich nur eine Zahl eingeben

Für die aktion in den yaml code wechseln und das dort einfügen

Auch das Ziel also diy_speicher_laden
kann ich nicht wählen er bietet mir nur numer.xxx an keine sensor.xxx

vielleicht ist mein sensor.diy_speicher_laden nicht richtig angelegt sollte vielleicht kein sensor sein sondern eine number

ich frage mich sind wir bei Automationen richtig ? Um das Problem zu lösen

und nochwas das kommt wenn ich das in den Entwicklerwerkzeugen eingebe

Ist string richtig

:crayon:by HarryP:Zusammenführung Mehrfachpost (bitte “bearbeiten” Funktion nutzen)

Denke schon dass das korrekt ist.

template:
  - sensor:
      - name: "DIY Speicher Laden"
        unique_id: diy_speicher_laden
        unit_of_measurement: "W" 
        state: "{{ states('sensor.netzeinspeisung_evcc') }}"

Was ist wenn du so den sensor fütterst?

Hallo genau das habe ich gerade getestet

  - sensor:
    # Ladesensor für DIY Speicher 
      - name: DIY Speicher Laden
        unique_id: "diy_speicher_laden"
        unit_of_measurement: 'W'
        device_class: "power"
        state_class: "measurement"
        state: "{{ states('sensor.netzbezug_evcc') }}"

und es funktioniert.
Der sensor.diy_speicher_laden entspricht dem Netzbezug

1 „Gefällt mir“

Sehr gut. Freut mich das es jetzt geklappt hat