Hilfe Atribute Template Sensor

Moin Moin liebe Gemeinde,

ich benötige mal wieder ein paar Tips von euch. Ich möchte einen Sensor erstellen der einen Unterwert von dem Atribute Data enthält.
Sensor.PNG
Zum Beispiel möchte ich einen Sensor haben für Datum/Zeit und einen für den Titel haben. Wie bekommt man sowas hin?
Viele Grüße
 

blurrrr

Well-known member
Ich bin jetzt zwar mal so garnicht vom Fach, aber theoretisch müsste man halt etwas bauen, was Bezug auf den o.g. Sensor nimmt und dann gezielt die Werte rausziehen. Also schon fast so, wie es oben steht, nur bei "data" sollte dann vermutlich nur einmal der Bezug zum "title" vorhanden sein und beim zweiten manuell angelegten Sensor dann eben der Bezug zu "airdate".

"Vermutlich" (ohne jegliche Gewähr 😅) könnte es dann ggf. so aussehen:

"state_attr('sensor.<sensorname>', '$title')" oder "{{ state_attr('<sensorname>', '$title') }}"

Aber wie gesagt, null Plan und auch nur eine grobe Vermutung, kann auch alles ganz anders sein und ich erzähl nur Mist. Mitunter warten wir lieber auf die Antworten von ein paar Leuten, die sich auch wirklich damit auskennen, wollte Dir nur zumindestens schon mal eine Antwort hinterlassen 😁
 
Vielen Dank für die Antworten, irgendwas stimmt so noch nicht.
"state_attr('sensor.rec', '$title')" oder
"state_attr('sensor.rec', 'data')" oder
{{ state_attr('sensor.rec', '$title') }} passiert rein gar nichts.
{{ state_attr('sensor.rec', 'data') }} komme ich auf alle data angaben.
 

blurrrr

Well-known member
Es wäre schon hilfreich, es nicht einfach nur "eine Fehlermeldung" zu nennen, sondern diese ggf. hier auch zu veröffentlichen, ansonsten ist und bleibt das hier lediglich eine Glaskugelrubbelei 🤭 Also ich bin der festen Überzeugung (so ganz ohne HA-Ahnung), dass es irgendwas in diese Richtung sein wird.

Was sagt denn die Ausgabe der Dev-Tools überhaupt? Was könnte denn möglicherweise überhaupt rauskommen?

Ich schmeiss einfach mal kunterbunt und völlig planlos noch etwas in die Runde:

{{ state_attr(‘sensor.rec’, ‘data’)[1].title }}

Immer schön in die Dev-Tool-Abfrage werfen und schauen, was dabei raus kommt, gerne auch die Ergebnisse hier veröffentlichen (das gilt auch für die vorherigen Sachen) 🙂

EDIT: Darfst auch ruhig damit etwas rumspielen... mal ohne title, mal ohne [1], usw.
 

azrael783

Active member
Es wird wohl daran liegen, dass "data" nicht einfach einen Wert / String enthält, sondern mehrere Daten im JSON Format. Keine Ahnung ob du das da einzeln raus bekommst. Hast du mal danach gegoogelt?
 

blurrrr

Well-known member
Sollte man, ganz laienhaft ausgedrückt, sieht das für mich auch "nur" nach einem Array aus, man muss nur die richtige Stelle auf die richtige Art und Weise ansprechen. Alternativ wäre wohl "nested value" noch so ein Stichwort.
 
Moin zusammen,

blurrrr du könntest recht haben mit "nested value" Wenn ich mir den aufbau anschaue sollte das passen. Somit habe ich es wie folgt probiert.
{{ states.sensor.rec.attributes.data[1].title }}

und das ploppte dann bei mir auf:
Ergebnistyp: string
<built-in method title of str object at 0x7f8b0ab9b0>

Dieses Template überwacht die folgenden Ereignisse, die einen Zustand ändern:

  • Entität: sensor.rec
 

blurrrr

Well-known member
Also ich glaube, dass es so...

{{ state_attr(‘sensor.rec’, ‘data’)[1].title }}

... "vermutlich" zielführender wäre. Grundsätzlich wird ja "sensor.rec" -> "data" angesprochen (daher auch (...)). Aus dem, was dann raus kommt (Array/JSON/wieauchimmer) müsste dann entweder die korrekte Feldnummer ([1,2,3,...]) rausgezogen werden und/oder der Wert der entsprechenden Variable. Sag ich jetzt mal einfach so, auch wenn ich mal so gar keine Ahnung habe.

Auffällig finde ich jedoch "<built-in method title of str object at 0x7f8b0ab9b0>"

Insofern würde ich es mal nur mit title versuchen:

"{{ state_attr(‘sensor.rec’, ‘data’)title }}"
oder
"{{ state_attr(‘sensor.rec’, ‘data’).title }}"
(Keine Ahnung wie es richtig wäre 😅)

oder auch nur mit [1]:

{{ state_attr(‘sensor.rec’, ‘data’)[1] }}
(Alternativ auch mal andere Zahlen statt 1)

Hab leider nix zum testen und rumspielen da und Programmierer bin ich auch nicht, wäre nur die Richtung, welche ich anpeilen würde :)
 

Nival

-
Moderator
built-in method title
Als Programmierer würde ich das mit "Du hast versucht eine Methode aufzurufen (die es nicht gibt)" übersetzen.

{{ state_attr('sensor.rec', 'data') }} komme ich auf alle data angaben.
Mit Home Assistant kenne ich mich leider nicht aus, aber wenn das der Fall ist, dann wäre das um JSON anzusprechen theoretisch etwas wie
{{ state_attr('sensor.rec', 'data[0]["title_default"]') }}
Die 0, um die [] aufzulösen, und dann den Key des Wertes ansprechen.

Wenn das nicht funktioniert, dann kopier bitte einmal das Ergebnis "alle data angaben" hier rein (und / oder eine Fehlermeldung, die hier erfolgt).
 

blurrrr

Well-known member
So.... Schau Dir bitte mal die "weather.home"-Entität an (wenn Du hast) unter "/developer-tools/state. Dort findest Du die gesamte Übersicht, aller beinhalteten Werte. Danach wird es halt ein wenig "fummelig". Dazu jeweils testen in "/developer-tools/template":

{{ state_attr('weather.home', 'forecast') }}

Liefert alle Daten bzw. alle Datensätze.

{{ state_attr('weather.home', 'forecast')[0] }}

Liefert nur die Daten des ersten Datensatzes (Zählung fängt nicht bei 1, sondern bei 0 an).

{{ state_attr('weather.home', 'forecast')[0].condition }}


Liefert nur den Wert unter "Condition" des ersten Datensatzes.

Das ganze müsstest Du jetzt auf Dein Konstrukt ausrollen. Testen halt wie gewohnt via "/developer-tools/template", da sollten wir das Kind schon geschaukelt bekommen :)
 
Moin Moin, der Ansatz war nicht schlecht. Ic h habe festgestellt mit weather.zuhause funktioniert es. Nur leider nicht mit dem sensor.rec. Ich habe mal eine reihe von Test gemacht.

Test 1
{{ state_attr('weather.zuhause', 'forecast')[1] }}
{'condition': 'sunny', 'precipitation': 0.0, 'precipitation_probability': 3.9, 'temperature': 13.0, 'templow': 1.7, 'datetime': '2022-03-21T11:00:00+00:00', 'wind_bearing': 141.6, 'wind_speed': 18.0}

Test 2
{{ state_attr('sensor.rec', 'data') }}
[{"title_default": "$title", "line1_default": "$episode", "line2_default": "$studio $release", "line3_default": "$runtime $date $time", "line4_default": "$number", "icon": "mdi:arrow-down-bold"}, {"airdate": "2022-03-19T16:15:00Z", "title": "Naked Survival XXL -", "episode": "Episode 24", "number": null, "runtime": 63, "studio": "DMAX", "release": "Scheduled for recording", "fanart": "imagecache/1", "poster": null}, {"airdate": "2022-03-19T17:15:00Z", "title": "Naked Survival XXL -", "episode": "Episode 25", "number": null, "runtime": 63, "studio": "DMAX", "release": "Scheduled for recording", "fanart": "imagecache/1", "poster": null}, {"airdate": "2022-03-20T11:15:00Z", "title": "Naked Survival - Aus", "episode": "Krisenzeiten in Kolumbien", "number": null, "runtime": 63, "studio": "DMAX", "release": "Scheduled for recording", "fanart": "imagecache/1", "poster": null}]
Liefert alle werte, was mir hier auffällt im gegenzug zu weather.zuhause das die Daten innerhalb der [] stehen.

Test 3
{{ state_attr('sensor.rec', 'data')[0] }} liefert die Ausgabe "["
{{ state_attr('sensor.rec', 'data')[1] }} liefert die Ausgabe "{"
{{ state_attr('sensor.rec', 'data')[2] }} liefert die Ausgabe "
{{ state_attr('sensor.rec', 'data')[3] }} liefert die Ausgabe "t" und so weiter das sind die Zeichen die nach 'data' stehen.

Test 4
{{ state_attr('sensor.rec', 'data[1]["title_default"]') }} liefert die Ausgabe "None" Dabei ist es auch egal ob hier die 0, 1, 2, 3 genutzt wird.
 

blurrrr

Well-known member
Mh.... Wird ja schon irgendwas in diese Richtung hier sein:

{{ state_attr('sensor.rec', 'data')xxxxxxx }}

Vielleicht etwas in die Richtung:

{{ state_attr('sensor.rec', 'data')title_default }}
{{ state_attr('sensor.rec', 'data')[0].title_default }}
{{ state_attr('sensor.rec', 'data')title }}
{{ state_attr('sensor.rec', 'data')[0].title }}

usw. Wenn die [x]-Geschichten immer nur einzelne Zeichen liefern, bringt das glaube ich auch eher weniger, das sollte ja eher Bezug zu den verschiedenen Datensätzen haben. Wenn dem nicht so ist, würde ich das ggf. auch rauslassen (aber dennoch immer alles in entsprechenden Variationen prüfen). Bin leider weder Programmierer, noch großartig HA-versiert (eher garnicht), weswegen das hier ja auch nur so ein rumprobieren ist. Hatte jetzt halt nur mit dem Wetter-Ding geschaut, da hat es halt so funktioniert, "muss" bei Dir ja nicht zutreffen, aber es ist ja schon irgendwo alles gegliedert. Grundsätzlich dürfte dieser Teil hier schon mal richtig sein:

{{ state_attr('sensor.rec', 'data')xxxxxxx }}

Alles andere brauchst Du (denke ich) garnicht groß zu versuchen, primär dürfte es wohl nur noch um den xxxxxx-Bereich gehen. Da würde ich zumindestens mal die große Würfelrunde in allen möglichen Variationen versuchen... Irgendwann muss ja irgendwo irgendwie irgendwas gescheites bei rum kommen... 😅

Alternativ hat ja vielleicht jemand anders noch eine passende Idee? 🙃
 

blurrrr

Well-known member
Ist "sensor.rec" eigentlich vordefiniert, oder ein selbst angelegter Sensor? Wenn man Google einfach mal nach "sensor.rec" befragt, gibt es da so ziemlich garnichts in diese Richtung, was mich eigentlich ein wenig wundert, denn in der heutigen Zeit ist mal selten alleine mit seinen Problemen 😁
 
Das ist ein Sensor für TV-Headend. Der wie folgt in HA eingebunden wird.
Code:
- platform: tvh_rec
  name: rec
  username: user
  password: pass
  url: http://192.168.1.2:9981
  scan_interval: 600
  count: 3

Scheint mir, als wäre es im aktuellen Zustand kein JSON-Objekt, sondern ein reiner String. Vielleicht hilft https://www.home-assistant.io/docs/configuration/templating/#tofrom-json weiter, um den String umzuwandeln und dann ansprechen zu können. Beispiele stehen dort dabei.
Ich werde versuchen mich mit meinen sehr dürftigen Englisch Kenntnisse da durch zu probieren.
 

Nival

-
Moderator
Ich werde versuchen mich mit meinen sehr dürftigen Englisch Kenntnisse da durch zu probieren.
Bevor ich Dich mit meinen vorherigen Aussagen möglicherweise in eine falsche Richtung leite - HA spricht JSON offenbar nicht so an wie ich das erwartet hätte, also vergiss, was ich bezüglich "JSON-Objekt" sagte.

Ein möglicher Ansatz wäre vielleicht dieses:
Code:
{% set new_data = state_attr('sensor.rec', 'data')|from_json %}
{{ new_data.title_default }}

Ich habe allerdings keine Ahnung, ob das die richtige Anzahl und Position von {} ist oder ob state_attr('sensor.rec', 'data') möglicherweise noch mehr umklammert werden müsste.
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
969
Beiträge
14.042
Mitglieder
500
Neuestes Mitglied
McKay1408
Oben