Jens_F
13. Februar 2024 um 11:11
1
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
Osorkon
13. Februar 2024 um 11:24
2
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
Jens_F
13. Februar 2024 um 12:32
3
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.
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
Jens_F
13. Februar 2024 um 13:08
5
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.
Osorkon
13. Februar 2024 um 13:11
7
Der Service muss zur Domain passen.
Wenn Du die Domain number verwenden tust, dann must der Service number.set_value heissen.
Gruß
Osorkon
Jens_F
13. Februar 2024 um 13:19
8
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
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?
Jens_F
13. Februar 2024 um 13:30
10
??? ich hatte nur noch ein Bild angehängt… komisch
mit
value: “"300"”"
Wird nicht richtig dargestellt, hier als Bild:
kann ich den Wert schreiben
Jetzt muss ich nur meinen ursprünglichen Code entsprechend angepasst bekommen, das der Wert “pv_soll” das richtige Format hat
Was bekommst du denn als Format und was hättest du gerne?
Was soll in dem Screenshot denn anders dargestellt werden und vor allem wie? Wenn du keine Nachkommastellen haben willst, nimm | round(0)
Jens_F
13. Februar 2024 um 13:48
14
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?
Osorkon
13. Februar 2024 um 13:56
16
Ich gehe mal davon aus, dass die zulässigen Werte zwischen 0 und 100 liegen.
Dein Template liefert aber auch Werte > 100
Gruß
Osorkon
Jens_F
13. Februar 2024 um 14:18
18
da werden schon die richtigen Werte angezeigt, hab’s aber gerade mit:
“"{{ pv_soll }}"”
hin bekommen
Danke sirector, der Hinweis mit " " hat mich dann auf diese Lösung kommen lassen
Gruß
Jens
Nachtrag:
leider doch keine Lösung, es lief scheinbar einmal, jetzt bekomme ich:
ich verstehe es nicht
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
by HarryP: Zusammenführung Doppelpost
Osorkon
13. Februar 2024 um 14:23
19
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.
Osorkon
13. Februar 2024 um 15:09
21
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