Hilfe Atribute Template Sensor

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.
Magst du mir mal auf die Sprünge helfen. Wie soll das eingebunden werden? Als Tamplete oder als seperaten Sensor.

https://github.com/kodi1/tvh_rec/blob/master/custom_components/tvh_rec/sensor.py

Das scheint ja der entsprechende Sensor zu sein. Wenn man da mal runterscrollt, hilft es ggf. auch etwas (so ab Zeile 140+), da ist dann u.a. z.B. auch die Rede von "disp_title" (statt title), etc.

EDIT: Raten wir einfach solange rum, bis irgendwas vielleicht mal irgendwann passt... wird schon... optimistisch bleiben! 😅🤣
Die habe ich auch alle durchprobiert. Ohne ein sichtbaren Erfolg.
 
Hm, ich schau heute Abend mal, ob ich mir ggf. mal so einen Sensor manuell anlegen kann (mit Deinen o.g. Daten drin), dann lässt sich das hier sicherlich besser testen 🙃
 
Wie soll das eingebunden werden? Als Tamplete oder als seperaten Sensor.
Wie gesagt, ich kenne mich mit HA eigentlich null aus. Was ich aktuell sagen kann, wenn Du den String nimmst und mit from_json behandelst, dann kann auf die Werte zugegriffen werden - grade kurz mit frischem HA und den Devtools rumgespielt.

Template:
Code:
{% set new_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}]'|from_json %}
{{ new_data[0].title_default }}
{{ new_data[1].airdate }}

Ergebnis:
Code:
$title
2022-03-19T16:15:00Z

Da ich Deinen angelegten... Sensor? - nun natürlich nicht habe kann ich nicht sicher sagen, wie Du den String am besten einspielst. Es wäre aber auf jeden Fall
state_attr('sensor.rec', 'data')
wenn Du so weiter vorgehen möchtest wie ich es in dem Beispiel getan habe.

Die new_data[0], new_data[1], new_data[2] und new_data[3] eben jeweils, um den entsprechenden JSON-Bereich anzusprechen.
 
Nachtrag, vielleicht für Dich etwas verständlicher - ich habe "mir" mal diese Daten verpasst:
1647885077188.png
Und dann sieht das so aus im Template:
Code:
{% set new_data = state_attr('person.nival', 'data')|from_json %}
{{ new_data[0].title_default }}
{{ new_data[1].airdate }}
Mit dem gleichen Ergebnis wie eben:
Code:
$title
2022-03-19T16:15:00Z

Also so rein theoretisch, wenn Du "person.nival" durch "sensor.rec" ersetzt, dann sollte das zumindest an dieser Stelle soweit klappen.

Wenn das nicht ist was Du suchst, dann müsstest Du mir eine klitzekleine Einweisung oder zumindest Richtungsvorgabe in HA geben, mit Devtools kann ich halbwegs intuitiv umgehen, das System insgesamt ist... uff 😓
 
Hey Nival,
danke ich habe es verstanden und glaube damit kann ich was anfangen. Ich werde die Tage mal damit herum experimentieren.
So wie du es beschrieben hast, bekomme ich die benötigten Daten raus.
 
Zuletzt bearbeitet:
damit kann ich was anfangen.
Das freut mich, ist denn die Verwendung in einem Template genau das was Du brauchst bzw. womit Du arbeiten kannst?

Falls ja, kannst Du dann bitte noch beschreiben wie Du das verwendest? Also für andere, die auch solche Probleme haben. Wenn nicht, dann gerne nochmal nachfragen bzw. mehr Informationen liefern. Ich bin - wie auch @blurrrr - durchaus zuversichtlich, dass wir das hinbekommen, wenn es denn irgendwie möglich ist (wovon ich mal ausgehe). Die Kombination von Menschen die HA kennen und Programmierer sollte an und für sich effektiv sein ;-)
 
Schön, wie man so sanft aus der Geschichte herauskomplimentiert wird 😜😁 (Ist nur ein Scherz!)
Ist aber auch schon richtig, ich bin so langsam mit meinem Latein auch am Ende und ohne etwas vergleichbares zum testen zu haben, sieht es bei mir dann auch etwas mau aus. In diesem Sinne sei das Feld den Programmierern/-innen und HA-Vollzeit-Usern überlassen: "Ihr schafft das schon - ich vertrau euch da... *schulterklopf*" 🤣
 
Sorry, my bad.

Selbstverständlich "&& User, die Motivation zeigen, selbst wenn sie weder HA kennen noch Programmierer sind".

Dein Beispiel, @blurrrr, mit weather.home hat mich erst auf die richtige Spur gebracht. HA ist fremd für mich, da bringt mich jedes einzelne funktionierende Schnippselchen Code weiter - und Deins hat funktioniert.
 
Moin Moin,
rein als Templete werde ich es nicht nur brauchen. Vermutlich werde ich mir ein paar Sensoren draus basteln. Es sei denn ihr habt für mein Anliegen eine Bessere Lösung. Ich bin weder Programmierer noch HA Profi. Aber ich bin gewählt mich da rein zuarbeiten und zu lernen, wenn diese Sprache Englisch nicht immer wieder wäre, die bekomme ich einfach nicht in meinen Kopf.:ROFLMAO:

Ich wollte die nächsten drei Aufnahmen auf HA anzeigen lassen. Zudem soll das Gerät wenn es nicht benötigt wird runtergefahren und wieder angeschaltet werden wenn es benötigtwird. Das An und Ausschalten wenn der Fernseher An oder Aus geschaltet wird funktioniert schon sehr gut. Nun sollen die Aufnahmen da noch mit einfließen. Ich werde berichten wenn es fertig ist. Und wenn nicht melde ich mich sowieso wieder :ROFLMAO:

Ersteinmal vielen Dank, ihr habt mir sehr gut geholfen.
 
Vermutlich werde ich mir ein paar Sensoren draus basteln.
Wenn sich Templates soweit als Sensoren übertragen lassen, dann sollte theoretisch einer davon genügen. Das hier:
Code:
{% set new_data = state_attr('person.nival', 'data')|from_json %}
{% for entry in new_data %}
  {% if entry.airdate != '' %}
    {{ entry.title }} {{ entry.episode}}
  {% endif %}
{% endfor %}
gibt jedenfalls alle drei Aufnahmen nacheinander aus ("person.nival" natürlich wieder durch "sensor.rec" ersetzen).

wenn diese Sprache Englisch nicht immer wieder wäre
Du weißt, dass Du Webseiten in Chrome mit einem Rechtsklick auf Deutsch umstellen kannst? Das ist dann zwar manchmal etwas verwirrend, aber wenn Dir Englisch arg schwer fällt hilft das vielleicht erstmal, einen Überblick zu bekommen.

Ich bin gespannt! ;)
 
Nein es gibt noch keine Neuigkeiten. Die letzten Tage war ich Privat und Beruflich ganz schon eingespannt.
Nun habe ich etwas Zeit gefunden und habe mich daran gesetzt. Deinem Beispiel bin ich gefolgt und es funktioniert soweit, ich befürchte aber das ich nicht verstanden habe warum es so funktionier. Wo wurde denn definiert das er nur die ersten 3 geplante Aufnahmen anzeigen soll.

Den entry.airdate habe ich mit in die Anzeige aufgenommen. Hier ist irgendwas noch nicht ganz richtig. Wenn ich nur airdate ohne Timestamp aufrufe, werden 3 Ergebnisse angezeigt.
Code:
Naked Survival XXL - Episode 27
2022-04-02T15:15:00Z

Naked Survival - Aus Im unerbittlichen Dschungel von Ecuador
2022-04-02T16:15:00Z

Naked Survival - Aus Grausames Guyana
2022-04-03T10:15:00Z
Mit Timestamp kommt eine Zeile None hinzu.
Code:
None

Naked Survival XXL - Episode 27
Saturday, den 02.04.2022 um 17:15

Naked Survival - Aus Im unerbittlichen Dschungel von Ecuador
Saturday, den 02.04.2022 um 18:15

Naked Survival - Aus Grausames Guyana
Sunday, den 03.04.2022 um 12:15
Code:
{{ as_timestamp(entry.airdate) | timestamp_custom("%A, den %d.%m.%Y um %H:%M") }}
 
Zuletzt bearbeitet:
Du hast recht, es sind gerade 4 Aufnahmen geplant auch der Counter steht auf 4 nur "data" hat Daten für 3 Aufnahmen.
Okay reicht ja auch.
Code:
<h1>Rekorder:</h1>
{% set new_data = state_attr('sensor.rec', 'data')|from_json %}
{% for entry in new_data %}
{% if entry.airdate != '' %}
{{ entry.title }} {{ entry.episode}}
{{ as_timestamp(entry.airdate) | timestamp_custom("%A, den %d.%m.%Y um %H:%M") }}
{% endif %}
{% endfor %}

ohne Formatierung:
Code:
<h1>Rekorder 3:</h1>
{% set new_data = state_attr('sensor.rec', 'data')|from_json %}
{% for entry in new_data %}
{% if entry.airdate != '' %}
{{ entry.title }} {{ entry.episode}}
{{ entry.airdate }}
{% endif %}
{% endfor %}

Ich würde auch gerne die deutschen Wochentage dort stehen haben. Auch wenn ich das selbst noch übersetzen kann.
 
Okay, so sollte das sowohl nur die erwünschte Ausgabe liefern als auch nach drei Ausgaben stoppen.
Code:
{% set new_data = state_attr('person.nival', 'data')|from_json %}
{% set count = namespace(value=0) %}
{% for entry in new_data %}
{% if entry.airdate is defined and count.value < 3 %}
{{ entry.title }} {{ entry.episode}}
{{ as_timestamp(entry.airdate) | timestamp_custom("%A, den %d.%m.%Y um %H:%M") }}
{% set count.value = count.value + 1 %}
{% endif %}
{% endfor %}
 
Okay, jetzt noch aus den englischen Wochentage deutsche machen und ein bisschen Formatierung dann ist das erste sensor.rec Aufgabe abgeschlossen.
 
aus den englischen Wochentage deutsche machen
Ich fürchte, da wirst Du nicht um eine manuelle Übersetzung herumkommen. Beispiel zum selber ergänzen:
Code:
{{ as_timestamp(entry.airdate) | timestamp_custom("%A, den %d.%m.%Y um %H:%M") | replace("Saturday", "Samstag") | replace("Sunday", "Sonntag") }}

Mit Formatierung kann man mich relativ weit jagen ;)
 
Okay, um das dann nochmal auseinanderzunehmen falls jemand anders drüber stolpert (und im Zweifel für mich zum nachlesen :D)...

1) die Daten lagen als String im JSON-Format vor, nicht als etwas womit HA arbeiten könnte. Dagegen hilft das |from_json für selbigen.

2) mein != '' zur Abfrage, ob es einer der gewünschten Einträge ist (der erste mit sonstigen Informationen hat ja keinen solchen) hat nicht genügt, aber is defined tut seine Wirkung, damit verschwindet das "None", der Eintrag wird korrekt übersprungen.

3) zu dem "wieviele Einträge davon haben wir jetzt schon durch?" - ich hatte es zuerst mit einer normalen Variablendefinition versucht (wie ich es in anderen Programmiersprachen kenne), das hat hier aber nicht funktioniert, innerhalb des {% for entry in new_data %} wurde nicht auf die ausserhalb definierte Variable zugegriffen. Hier kommt namespace(value=0) zum Einsatz, das macht die Variable auch innerhalb der Schleife manipulierbar und taugt damit zum zählen.

4) auf eine Möglichkeit, die Wochentage in deutsch zu übersetzen - also per setlocale oder so, wie es in anderen Umgebungen geht - bin ich nicht gestoßen, aber im Zweifel wirds halt händisch übersetzt. Nicht schön, aber praktisch.

Was mich jetzt noch etwas nervt ist, dass die for-Schleife komplett durchläuft, nur nichts mehr ausgibt, wenn es mehr als drei Einträge sind. In anderen Programmiersprachen gibt es dafür ein break; oder ähnliches, hier habe ich nichts dergleichen finden können - sonst wäre das nicht im oberen if gelandet, sondern eben unter der Ausgabe: "Sind wir schon bei zwei? Dann brich die Schleife ab. Geschieht das nicht, erhöhe um eins (hierhin käme man nicht, wenn abgebrochen wird)." - vielleicht weiß da jemand anders hier der sich besser mit HA auskennt noch eine Lösung?

Nicht, dass es dramatisch wäre, aber ich finde es etwas unsauber so.
 
Für den Fall das es noch jemanden Interresier.
Mich hat es gestört das der Titel nsch dem 20.ten Zeichen gekürzt wurde. Somit habe ich die Datei "sensor.py" bei Zeile 157 wie folgt geändert.
Code:
card_item['title'] = d['disp_title'][:20]
in
Code:
card_item['title'] = d['disp_title']
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
5.904
Beiträge
57.673
Mitglieder
5.856
Neuestes Mitglied
ToMicPa68
Zurück
Oben