Homeassistant wether.home daten verwenden

Mallown

Member
Ich beschäftige mich erst sehr kurz mit homeassistant, habe aber nach ausgiebiger Suche noch keine Antwort darauf gefunden, wie ich 1. die Daten der Entität weather.home dazu bringe das ich sie weiter verarbeiten kann und 2. auf einem esphome mit max7219 dsrstelle. ich kann Sensordaten von einem am esphome befindliche DHT 22 darstellen aber was such immer ich versuche mit weather. home geht es nicht. Das beginnt zum Beispiel damit das ich nicht weis wie ich diesen weater.home in der configuration.yaml einbinde, das selbe mit dem Einbinden in dem esphome. vielleicht kennt jemand eine Seite, ein Dokument oder ähnliches wo mir das mal Grundsätzlich erklärt wir? Vielen dank im vorraus.
 

Nival

-
Moderator
Bei esphome kann ich leider so auf Anhieb nicht weiterhelfen, aber die Daten von weather.home auszulesen ist erstmal relativ simpel (bezüglich weiterverarbeiten müsstest Du nochmal erläutern, was Dein Plan ist).

Wenn Du links im Menü auf die Entwicklerwerkzeuge gehst, dort den Reiter "Template" auswählst und diesen Code dort einfügst:
YAML:
{{ state_attr('weather.home', 'temperature') }}
solltest Du rechts davon ein Ergebnis bekommen, das in etwa so aussieht:
1652892161341.png
- natürlich mit dem Temperaturwert bei Dir daheim. Welche anderen Werte Du ansprechen kannst siehst Du ebenfalls unter den Entwicklerwerkzeugen, unter den Zuständen.

Zu welchem Zweck möchtest Du es in die configuration.yaml einbinden? Bevor ich jetzt weiter erläutere und das in eine völlig falsche Richtung schießt ;)
 

Nival

-
Moderator
Oookay, ungenaue Fragestellung. Gemeint war was möchtest Du als Ausgabe haben.

Vielleicht hilft Dir aber dieser Ansatz weiter:
YAML:
sensor:
  - platform: template
    sensors:
      forecast:
        value_template: >-
            {% for entry in state_attr('weather.home', 'forecast') %}
            {{ entry.datetime }} {{ entry.temperature }}
            {% endfor %}
        friendly_name: Vorhersage
Das oberste sensor: nur mitkopieren, wenn Du noch keines in der configuration.yaml stehen hast.

Das gibt Dir von der vollständigen Wettervorhersage jeweils Datum und Höchsttemperatur aus - falls Du das so verarbeiten kannst.

Alternativ könnte man mit einzelnen Sensoren arbeiten die nur die Temperatur ausgeben, das sähe beispielsweise so aus:
YAML:
sensor:
  - platform: template
    sensors:
      forecast0:
        value_template: > 
            {{ state_attr('weather.home', 'forecast')[0]['temperature'] }}
        friendly_name: Vorhersage + 1
      forecast1:
        value_template: > 
            {{ state_attr('weather.home', 'forecast')[1]['temperature'] }}
        friendly_name: Vorhersage + 2
 

Nival

-
Moderator
Nochmal ergänzend, ich habe mir dieses Gerät was Du hast grade mal angesehen - meine Vermutung würde jetzt dahin gehen, dass man am besten als erstes einen Sensor anlegt für die einzelne Vorhersage (es scheint ja nur eine Angabe ausgeben zu können) und diesen dann abgreift.

YAML:
sensor:
  - platform: template
    sensors:
      forecast:
        value_template: >
            {{ state_attr('weather.home', 'forecast')[0]['temperature'] }}
        friendly_name: Vorhersage

Und dann hiervon ausgehend: https://esphome.io/components/display/max7219.html
YAML:
display:
  - platform: max7219
    cs_pin: D2
    num_chips: 1
    lambda: |-
      it.print({{ states('sensor.forecast') }});
Vielleicht auch ohne die geschweiften Klammern und es ist reine Theorie, wäre aber das, was ich ausprobieren würde.
 

Mallown

Member
Also erstmal recht herzlichen Dank für deine Ausführliche Antwort, ich kann auch mehrer Variablen Ausgeben. mein hauptproblem, ist und war, zu wissen wo und wie ich diese Sensoren anlegen muss, welcher Variablenname, für die Abfrage nötig war. Das alles hast du wirklich gut erklärt, noch mal vielen Dank. Ich glaube damit kann ich viel Anfangen. ich hatte nämlich was gefunden das man diese Wettersachen, im configuration. yaml anlegen muss und war deshalb sehr verwirrt. ich werde deine Erklärungen am We ausprobieren....ich hoffe ich werde irgendwann diese ganzen syntax Dinge verstehen
 

Nival

-
Moderator
Gerne. Und wenn Du noch Fragen zur Syntax hast / irgendwo nicht durchsteigst, dann einfach immer stur nachfragen ;)

Rückmeldung ob (und wenn ja wie) es dann geklappt hat wär auch prima.
 

Nival

-
Moderator
Ebenfalls OT:
Das erinnert mich daran, wie ich vor einiger Zeit an anderer Stelle versehentlich von einem "Entstadium" schrieb anstelle von "Endstadium". Wäre das Thema nicht so bitter gewesen (tödliche Erkrankung) hätte ich mich darüber auch beömmelt, ein Ent zu werden klingt so viel verlockender als in einem Endstadium zu sein...
 

azrael783

Active member
Also um mal konkret zum Thema zu kommen, um den Sensor weather.home mit seinen Attributen in esphome verfügbar zu machen, musst du in der Config für den ESP, der das Display mit Daten versorgt, folgenden Eintrag erstellen:
YAML:
sensor:
  - platform: homeassistant
    id: current_temperature
    entity_id: weather.home
    attribute: temperature

Somit ist die aktuelle Temperatur als Wert für den ESP verfügbar. Wenn du weitere Attribute darstellen möchtest, musst du für jedes Attribut einen Sensor in der oben gezeigten Form anlegen.
Jetzt kannst du diesen Wert weiterverwenden und auf einem Display darstellen. Ich nutze dafür ein ePaper Display. Der Code sieht dann in meinem Fall so aus:

YAML:
display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 2.90in
    rotation: 90°
    full_update_every: 180
    pages:
      - id: page1
        lambda: |-
          it.strftime(295, 0, id(comic15), TextAlign::TOP_RIGHT, "%H:%M", id(esptime).now());
          it.strftime(140, 0, id(comic15), TextAlign::TOP_LEFT, "%d-%b-%y", id(esptime).now());
          it.strftime(30, 0, id(comic15), TextAlign::TOP_LEFT, "%A", id(esptime).now());
          // Print line underneath date and time
          it.line(0, 20, 296, 20);
        
         // ...
      

          // Print current temperature (from homeassistant sensor)
          if (id(current_temperature).has_state()) {
            it.printf(40, 100, id(comic15), TextAlign::CENTER, "%.1f°", id(current_temperature).state);
          }

Das musst du natürlich auf deine Gegebenheiten anpassen und die "..." sollen anzeigen, dass ich mehr als nur die Temperatur auf dem Display darstelle ;) Bei Fragen einfach melden, auch gerne per PN ;)
 

Mallown

Member
Hallo zusammen und schönes We,
@Nival leider bekam ich als meldung beim Hochladen auf den ESp, eine MEldung das ESPHome die Variable nich verarbeiten kann da sie aus HOMEASSISTANT ist. SYNTAX war voll ok.
Also hab ich den Vorschlag von @azrael783 ausprobiert, die YAML konnte fehlerfrei Hochladen, habe jetzt nur "nan°" auf dem Display. Kann es sein das sich die Temperatur nicht regelmäßig aktualisiert? Und als ergänzug, wie komme ich an die Vorhersage, bitte?
 

Mallown

Member
ja, das hab ich, ich hab noch nen °C eingefügt, das wird mir auch aungezeigt..... ich hab auch jetzt das datum mit drin, so das ich denke der code für das Display ist ok
 

Mallown

Member
er kennt die id(current_temperature, was bedeutet den dieses nan, kann er den Wert nicht lesen, oder schreiben, oder ist er in einem falschen format? bei deer Uhrzeit schreibe ich ja strftime davor, brauche ich hier sowas auch, vielleicht?
 

Nival

-
Moderator
Okay, prima. Dann sollte das laut https://esphome.io/components/sensor/homeassistant.html theoretisch funktionieren, indem Du a) im Home Assistant wie oben beschrieben den Sensor anlegst für die Vorhersage und dann b) mittels entity_id: sensor.forecast bei Deinem Gerät abrufst.

Wäre jedenfalls so mein Verständnis des Vorgangs, initial war ich irrigerweise davon ausgegangen, dass alles von HA gesteuert würde - dem ist ja offenbar nicht so, aber es kann ja scheinbar Sensoren von HA abgreifen.
 

Nival

-
Moderator
Finally, id(...) is a helper function that makes ESPHome fetch an object with the supplied ID (which you defined somewhere else, like top_end_stop) and lets you call any of ESPHome’s many APIs directly.

The property has_state() on a sensor is useful as it can take some seconds to get the data from Home Assistant and you may not want to display Nan

Also wohl zum ansprechen und dann zum vermeiden von fehlenden Ausgaben - klingt mir jedenfalls so, drüber hinaus kann ich dazu aber auch nichts sagen.
 

Zurzeit aktive Besucher

Neueste Beiträge

Letzte Anleitungen

Statistik des Forums

Themen
647
Beiträge
9.532
Mitglieder
239
Neuestes Mitglied
Timyboy
Oben