DAU-Fehler ? --> bekomme eine einfache Automation nicht zum laufen

Hallo,
im Template-Editor funktioniert dieser Code und es wird mir der Wert für “pv_soll” wie gewünscht berechnet und ändert sich alle paar Sekunden:

    {% set bezug_aktuell = (states('sensor.aktueller_bezug')) | int (default=0) %}
    {% set pv_aktuell = (states('sensor.solar_leistung')) | int (default=0) %}
    {% set pv_soll = 0 %}
    {% if bezug_aktuell < 100 %}
    {% set pv_soll = pv_aktuell /2 %}
    {% else %}
      {% if bezug_aktuell > 120 %}
        {% set pv_soll = pv_aktuell + 50  %}
      {% endif %}
    {% endif %}
    {% if pv_soll > 2250 %}
     {% set pv_soll = 2250 %}
    {% endif %}
    {{ pv_soll }}

Der Wert “pv_soll” soll jetzt in einer Automation in einen “number.” Wert geschrieben werden:

min: 0
max: 2250
step: 1
mode: auto
unit_of_measurement: W
icon: mdi:speedometer
friendly_name: HMT-2250 Limit NonPersistent Absolute

Hier der YAML aus der Automation:

alias: PV_soll setzen
description: ""
trigger:
  - platform: state
    entity_id:
      - sensor.tasmota_sml_curr_w
      - sensor.aktueller_bezug
      - sensor.pout
condition: []
action:
  - service: input_number.set_value
    target:
      entity_id: number.zweiter_hmt_2250_limit_nonpersistent_absolute
    data:
      value: >
        {% set bezug_aktuell = (states('sensor.aktueller_bezug')) | int (default=0) %}
        {% set pv_aktuell = (states('sensor.solar_leistung')) | int (default=0) %}
        {% set pv_soll = 0 %} {% if bezug_aktuell < 100 %}
        {% set pv_soll = pv_aktuell /2 %}
        {% else %}
          {% if bezug_aktuell > 120 %}
            {% set pv_soll = pv_aktuell + 50  %}
          {% endif %}
        {% endif %} {% if pv_soll > 2250 %}
         {% set pv_soll = 2250 %}
        {% endif %}
        
        {{ pv_soll }}
mode: single

Automation wird immer wieder aufgerufen aber der “number.” Wert ändert sich nicht.

Habt ihr da eine Idee ?

Danke & Gruß
Jens

Ohne mir jetzt die Automatisierung genauer angeschaut zu haben.

Warum erstellst Du Dir mit dem Template nicht gleich ein Template Sensor?!

Einstellungen → Geräte & Dienste → Helfer → + HELFER ERSTELEN → Template → Template für einen Sensor erstellen.

Gruß
Osorkon

Hallo Osorkon,
ich habe gerade keine Idee, wie ich mit einem “Helfer” einen Wert in “number.zweiter_hmt_2250_limit_nonpersistent_absolute” schreiben kann, daher hatte ich diesen Weg gewählt. :thinking:
Außerdem kann ich hier die Automation einfach mal deaktivieren.

Gruß

Jens

Mir ist als erstes aufgefallen, dann es nicht number.zweiter_hmt_2250_limit_nonpersistent_absolute heißen muss, sondern input_number.zweiter_hmt_2250_limit_nonpersistent_absolute also input_ davor

Hallo sirector,
hier ein Bild aus den “Entwicklerwerkzeuge”:

mit “input_” davor wird’s dann wohl nicht funktionieren…

Gruß
Jens

ok, dann stimmt der Dienst nicht. Dann müsstest du number.set_value nehmen.

Der Service muss zur Domain passen.
Wenn Du die Domain number verwenden tust, dann must der Service number.set_value heissen.

Gruß
Osorkon

hab’s gerade mit:

service: number.set_value
target:
  entity_id: number.zweiter_hmt_2250_limit_nonpersistent_absolute
data:
  value: 200

versucht, funktioniert auch nicht :frowning:

Versuch es mal so

service: number.set_value
target:
  entity_id: number.zweiter_hmt_2250_limit_nonpersistent_absolute
data:
  value: "200"

Edit:
@Jens_F Beitrag gelöscht?

??? ich hatte nur noch ein Bild angehängt… komisch

mit
value: “"300"”"

Wird nicht richtig dargestellt, hier als Bild:
image

kann ich den Wert schreiben :smiley:
Jetzt muss ich nur meinen ursprünglichen Code entsprechend angepasst bekommen, das der Wert “pv_soll” das richtige Format hat :thinking:

Was bekommst du denn als Format und was hättest du gerne?

müsste “float” sein:
image

Was soll in dem Screenshot denn anders dargestellt werden und vor allem wie? Wenn du keine Nachkommastellen haben willst, nimm | round(0)

mein Problem hier, der berechnete Wert {{ pv_soll }} (siehe ersten Post) lässt sich mit “input_number.” bzw. “number”. nicht in “number.zweiter_hmt…” übernehmen.

Das liegt scheinbar am aktuellen Format.

Wenn du das

        {% set bezug_aktuell = (states('sensor.aktueller_bezug')) | int (default=0) %}
        {% set pv_aktuell = (states('sensor.solar_leistung')) | int (default=0) %}
        {% set pv_soll = 0 %} {% if bezug_aktuell < 100 %}
        {% set pv_soll = pv_aktuell /2 %}
        {% else %}
          {% if bezug_aktuell > 120 %}
            {% set pv_soll = pv_aktuell + 50  %}
          {% endif %}
        {% endif %} {% if pv_soll > 2250 %}
         {% set pv_soll = 2250 %}
        {% endif %}
        
        {{ pv_soll }}

unter Entwicklerwerkzeuge → Template testest, was wird ausgegeben?

Ich gehe mal davon aus, dass die zulässigen Werte zwischen 0 und 100 liegen.

Dein Template liefert aber auch Werte > 100

Gruß
Osorkon

da werden schon die richtigen Werte angezeigt, hab’s aber gerade mit:
“"{{ pv_soll }}"”
hin bekommen :smiley:

Danke sirector, der Hinweis mit " " hat mich dann auf diese Lösung kommen lassen :+1:

Gruß
Jens

Nachtrag:
leider doch keine Lösung, es lief scheinbar einmal, jetzt bekomme ich:

ich verstehe es nicht :frowning:

aber es ist jetzt schon mal klar, das es am Zahlenformat liegt…

Werde ich halt noch suchen und tüfteln müssen.

Melde mich dann später wieder…

Danke & Gruß
Jens

:crayon:by HarryP: Zusammenführung Doppelpost

Die Anführungszeichen in der letzten Zeile des templates sind falsch!!
Damit übergibst Du den String

{{ pv_soll }}
anstatt den Wert der Variable pv_soll.

Die letzte Zeile muss lauten


{{ pv_soll }}

Oder als Ganzzahl formatiert mit dem default wert 0.


{{ pv_soll | int(0) }}

Und nochmals die Frage: Welche Werte lässt dein number zu? 0-100

Dein Template gibt ja auch Werte größer 100 aus!!

Gruß
Osorkon

Und genau das geht nicht. Hatte er bereits versucht. Ich vermute das Komma stört HA. Ich hätte gerne das genaue Ergebnis aus den Entwicklerwerkzeugen gesehen. Wurde aber nicht gepostet.

@Jens_F versuch mal
{{ pv_soll | replace(", ",".") }}
ist aber nur geraten, da ich deine Werte nicht kenne.

Da muss kein Komma gegen ein Punkt und umgekehrt ersetzt werden!

Solange ein integer übergeben wird und Wert im zulässigen Range des Numbers liegt, funktioniert das auch.

Gruß
Osorkon