Gibt es bei HA so etwas wie Funktionen?

Ich suche mir einen Wolf und finde dazu nichts. Bin sehr zufrieden mit meiner HA-Installation und alles läuft recht cremig. Auch meine 12 Thermometer!!

Zur Zeit habe ich unter jedem Thermometer den folgenden code:

{% set bat_level = states('sensor.xi_terrasse_battery') %}
{% set humid_level = states('sensor.xi_terrasse_humidity') %}

Feuchte: {{ humid_level | replace('unavailable', '?') }}%
Batterie: {{ bat_level | replace('unavailable', '?') }}%

So schön so gut. Würde aber gerne so etwas wie
meineBatterieLadung( sensor.xi_terrasse_battery )
abschicken können und dann nur den formatierten Wert zurückbekommen…
Batterie: meineBatterieLadung( sensor.xi_terrasse_battery )

Ist so etwas möglich oder muss ich immer mit set arbeiten?

Danke schon mal und Gruß aus MA

So ganz hab ich deine Frage nicht verstanden.
Meinst du “set” weg lassen und direkt mit dem sensor arbeiten?

Feuchte: {{ states('sensor.xi_terrasse_humidity') | replace('unavailable', '?') }}%
Batterie: {{ states('sensor.xi_terrasse_battery') | replace('unavailable', '?') }}%

Ja genau. Das mit dem set mache ich dann innerhalb der “Funktion” und schicke den von mir gewünschten Wert anständig formatiert zurück.

Damit brauche ich auch nur an einer Stelle etwas ändern (anstatt x Mal), wenn ich den Rückgabewert doch etwas anders formatieren will.

Vor vielen, vielen, vielen Jahre habe ich mit DELPHI gearbeitet. Da war es gang und gebe!

Ist halt sehr praktisch für wiederkehrende Auswertungen.

Nachtrag:
Oh mann, bin ich Deppert!!! Eben nochmals Deine Antwort gelesen und eben erst kapiert. So einfach kann es sein!!! DANKE!!!

Das geht ja schon viel besser, aber: Z.B. “replace” etc. könnte in der “Funktion” passieren, da wäre der Code übersichtlicher. Ich mache hier nur “replace”, wenn ich aber noch ein paar andere Dinge machen wollte, wäre es einfacher über eine “Funktion”. (Meine ich jedenfalls!) :wink:

Ich würde bei einem Wert einfach nur ein float(0) mitgeben:

Feuchte: {{ states('sensor.xi_terrasse_humidity') | float(0) }}%
Batterie: {{ states('sensor.xi_terrasse_battery') | float(0) }}%
1 „Gefällt mir“

Hallo,

ich denke was du suchst kommt bei HA den Template Macros am nächsten.

1 „Gefällt mir“

Ich habe es zwar noch nicht genutzt, aber meine gelesen zu haben, dass man Skripte mit Variablen aufrufen kann.

Edit 2.12.2023: Die Variable heißen Felder in den Skripts

1 „Gefällt mir“

“Reusing Templates” liest sich schon mal sehr interessant. Danke für den Tipp.

SO COOL! Genau was ich gesucht habe. Funktioniert auf Anhieb und ich bin erstmal geflashed. So kann ich ganz klasse alle meine Thermometer beschriften…

Wenn es jemandem weiterhilft, so habe ich es gelöst. Vielleicht nicht die eleganteste Art, funzt aber… :wink:

Jetzt brauche ich für meine Thermometer nur noch zwei Zeilen, um die Daten anzuzeigen. Wenn ich meinen Code ändere, passt es überall. Genau so wollte ich es haben. Nochmals ein RIESEN DANKE an rstuck!!!

Hier mein thermometer.jinja:

{% macro format_entity( entity_id_1, entity_id_2 ) %}

{# Get the BATTERY entity data #}
{% set batterie_prozent = states( entity_id_1 ) %}
{# Get the HUMIDITY entity data #}
{% set humidity_prozent = states( entity_id_2 ) %}

{# Replace 'unknown' or 'unavailable' #}
{% set batterie_prozent = batterie_prozent | replace('unavailable', '- * -') | replace('unknown', '- * -') %}
{% set humidity_prozent = humidity_prozent | replace('unavailable', '- * -') | replace('unknown', '- * -') %}

{# Check for '- * -' #}
{% if ( '- * -' in batterie_prozent ) %}   
{% else %}
   {# No '- * -' so add '%' #}
   {% set batterie_prozent = batterie_prozent + '%' %}
{% endif %}

{# Check for '- * -' #}
{% if ( '- * -' in humidity_prozent ) %}   
{% else %}
   {# No '- * -' so add '%' #}
   {% set humidity_prozent = humidity_prozent + '%' %}
{% endif %}

{# Return our string #}
Feuchte: {{ humidity_prozent }} Batterie: {{ batterie_prozent }}

{% endmacro %}

Es freut mich das ich dir helfen konnte.

1 „Gefällt mir“
{% macro format_entity( entity_id_1, entity_id_2, showText ) %}

{# Get the entity_data_1 #}
{% set entity_data_1 = states( entity_id_1 ) | int(0) %}
{# Get the entity_data_2 #}
{% set entity_data_2 = states( entity_id_2 ) | int(0) %}

{# Get the UOM #}
{% set entity_data_1_uom = state_attr(entity_id_1, 'unit_of_measurement') %}

{# Check for '0' #}
{% if ( entity_data_1 == 0 ) %}   
   {% set entity_data_1 = '-*-' %}
   {% set entity_data_1_name = '' %}
{% else %}
   {# Check for state_attr() contains "batter" #}
   {% set temp_name = state_attr(entity_id_1, 'device_class')  | lower %}
   {% if ( 'batter' in temp_name ) %}   
     {% set entity_data_1_name = 'Batterie:' %}
   {% endif %}
   
   {# Check for state_attr() contains "humidity" #}
   {% set temp_name = state_attr(entity_id_1, 'device_class') | lower %}
   {% if ( 'humidity' in temp_name) %}   
     {% set entity_data_1_name = 'Feuchte:' %}
   {% endif %}

   {# Check for state_attr() contains "Temperatur" #}
   {% set temp_name = state_attr(entity_id_1, 'device_class') | lower %}
   {% if ( 'temperatur' in temp_name ) %}   
     {% set entity_data_1_name = 'Temperatur:' %}
     {% set entity_data_1_uom = entity_data_1_uom[:1] %}
   {% endif %}

   {# Check for state_attr() contains "illuminance" #}
   {% set temp_name = state_attr(entity_id_1, 'device_class') | lower %}
   {% if ( 'illuminance' in temp_name ) %}   
     {% set entity_data_1_name = 'LUX:' %}
   {% endif %}

   {# Check for state_attr() contains "signal_strength" #}
   {% set temp_name = state_attr(entity_id_1, 'device_class') | lower %}
   {% if ( 'signal_strength' in temp_name ) %}   
     {% set entity_data_1_name = 'RSSI:' %}
   {% endif %}
{% endif %}

{# Get the UOM #}
{% set entity_data_2_uom = state_attr(entity_id_2, 'unit_of_measurement') %}  

{# Check for '0' #}
{% if ( entity_data_2 == 0 ) %}   
   {% set entity_data_2 = '-*-' %}
   {% set entity_data_2_name = '' %}
{% else %}
   {% set temp_name = state_attr(entity_id_2, 'device_class')  | lower %}
   {% if ( 'batter' in temp_name ) %}   
     {% set entity_data_2_name = 'Batterie:' %}
   {% endif %}

   {% set temp_name = state_attr(entity_id_2, 'device_class')  | lower %}
   {% if ( 'humidity' in temp_name ) %}   
     {% set entity_data_2_name = 'Feuchte:' %}
   {% endif %}

   {% set temp_name = state_attr(entity_id_2, 'device_class') | lower %}
   {% if ( 'temperatur' in temp_name ) %}   
     {% set entity_data_2_name = 'Temperatur:' %}
     {% set entity_data_2_uom = entity_data_2_uom[:1] %}
   {% endif %}

   {% set temp_name = state_attr(entity_id_2, 'device_class') | lower %}
   {% if ( 'illuminance' in temp_name ) %}   
     {% set entity_data_2_name = 'LUX:' %}
   {% endif %}

   {% set temp_name = state_attr(entity_id_2, 'device_class') | lower %}
   {% if ( 'signal_strength' in temp_name ) %}   
     {% set entity_data_2_name = 'RSSI:' %}
   {% endif %}
{% endif %}

{# remember, we need a STRING for this to work!! #}
{% set entity_data_1 = entity_data_1 | string %}
{% set entity_data_2 = entity_data_2 | string %}

{# Check for '-*-' #}
{% if ( '-*-' in entity_data_1 ) %}
{% else %}
   {# No '-*-' so add '%' #}
   {% set entity_data_1 = entity_data_1 + entity_data_1_uom %}
{% endif %}

{# Check for '- * -' #}
{% if ( '-*-' in entity_data_2 ) %}   
{% else %}
   {# No '-*-' so add '%' #}
   {% set entity_data_2 = entity_data_2 + entity_data_2_uom %}
{% endif %}

{# Text before the result? #}
{% if ( showText ) %}   
  {{entity_data_1_name}} {{ entity_data_1 }} {{entity_data_2_name}} {{ entity_data_2 }}
{% else %}
  {{ entity_data_1 }}/{{ entity_data_2 }}
{% endif %}

{% endmacro %}

Das ist der Stand der Dinge und so rufe ich es z. B. bei “Sekundäre Information” auf.

{% from 'thermometer.jinja' import format_entity %}  
{{ format_entity( 'sensor.zb_bewegung_buro_linkquality',
  'sensor.zb_bewegung_buro_battery', false) }}

und so sieht es dann aus:

2025-01-15 09-22-29

1 „Gefällt mir“