Sehr schön! Dann versuch ich das mal so auseinanderzunehmen dass es hoffentlich verständlich ist - mit der Vorwarnung, dass ich in Sachen HA selber Laie bin, ich hab mich da nur als Programmierer ein bisschen reingedacht
Möglicherweise wäre das auch alles ohne den Code in HA möglich gewesen, aber da wir beide nicht wissen wie man verschachtelte Attribute unter
- platform: homeassistant
anspricht eben mit diesem kleinen Umweg.
Das
- platform: template
verwenden wir, da wir hier innerhalb von
value_template: >
quasi beliebige Ausgaben aus allem erzeugen können, das innerhalb von HA erreichbar ist (auch mehrzeilige Ausgaben, dafür muss daran nur ein Bindestrich angehängt werden:
value_template: >-
).
Da wir hier den Wert von einem Attribut brauchen wird mit
state_attr()
gearbeitet, hier eben für die Entität weather.home mit dem Attribut forecast. Da dieses Attribut verschachtelt ist müssen wir die einzelnen Unterpunkte mit Zahlen ansprechen, also 0 für morgen, 1 für übermorgen... und dadrin dann den genaueren Wert wie templow oder temperature wählen (kleine Randbemerkung, bei dem
friendly_name:
dürftest Du auch Leerzeichen verwenden).
Soweit, an dieser Stelle hast Du zwei neue Sensoren in HA, die Du ganz beliebig weiterverwenden kannst, egal wo.
In ESP nehmen wir diese beiden Sensoren dann eben wieder auf, das ist quasi eine Objektdeklaration - also dort werden zwei Objekte mit den Namen forecastlow und forecasthigh mit beliebigem Inhalt befüllt, in diesem Fall die Inhalte der beiden angelegten Sensoren, an die kommen wir dank
- platform: homeassistant
heran, damit ist klar, wohin man sich wenden muss, um die Sensorenwerte zu bekommen.
Den Teil des Codes den Du selber gebastelt hast verstehst Du selber am besten (ich vermute, dort wird auch positioniert?), aber mittels dem
id()
kannst Du eben an die vorher definierten Objekte heran, mittels
.state
an den Wert davon.
Letzteres dürfte nötig sein, weil dieses Objekt nicht nur den zugewiesenen Wert beinhaltet, sondern noch zusätzliche Eigenschaften / Funktionalitäten - welche genau kann ich Dir nicht sagen, aber beispielsweise das
has_state()
besagt, dass es eine mit eingebaute Funktion hat, die aufgerufen werden kann um zu informieren, ob sie aktuell einen Zustand / Wert besitzt.
Das ist wie wenn Du zwar den Fahrer für das Auto aussuchst (die Werte aus HA), aber Reifen, Motor, Türen, die Eigenschaft fahren zu können und alles andere hat das Auto schon von sich aus. Wenn Du dann also den Fahrer "ausgeben" möchtest macht es wenig Sinn, das gesamte Auto inklusive Fahrer in die Ausgabe zu werfen, ich meine, das war zwischenzeitlich das Problem.
Ich hoffe, das ist verständlich genug / beantwortet alle Fragen, falls nicht, gerne noch nachhaken. Mir wird (aus mir völlig unverständlichen Gründen!) öfter mal nachgesagt, ich würde zu technisch erklären...
Achja, noch eine Randbemerkung, vielleicht hilft Dir das auch beim Verständnis: Wenn etwas mit () dahinter aufgerufen wird ist es eine Funktionalität - also
state_attr()
oder
id()
- das würde den Funktionalitäten wie "fahren" oder "bremsen" entsprechen, wie genau das funktioniert und was dabei passiert musst Du garnicht wissen, Hauptsache, es tut wie es soll / gibt die gewünschten Dinge oder Informationen aus - während Dinge ohne Klammern Eigenschaften entsprechen, also z.B.
[0]['templow']
oder
.state
, das kann man direkt "angucken" - wie die Farbe eines Autos oder die Anzahl der Türen.