ESPHome: Sunrise auf Display anzeigen

taximan

New member
Moin zusammen,
ich wollte mir die Sonnendaten auf einem OLED-Display anzeigen lassen. Auf dem Dashboard habe ich die richtige Anzeige,
nur auf dem Display nix.

Verwendet habe ich diese Codezeilen:
it.strftime(60, 0, id(font1), "%H:%M", id(sunr).state);

sun:
latitude: 51.xxxx°
longitude: 7.yyyy°
# At least one time source is required
time:
- platform: homeassistant
id: esptime
text_sensor:
- platform: sun
name: Sun Next Sunrise
type: sunrise
id: sunr

Ich vermute mal, dass mir eine Erweiterung für die ID fehlt.
Das Display als solches funktioniert.
Hat jmd eine Lösung?
Danke
 
Hi,

wenn du deinen Code auch als solchen postest (über das </> Symbol) ist der wesentlich besser zu lesen und es können auch Fehler in den Einrückungen gefunden werden.
Dein Problem ist, dass du einen Textsensor erstellst (da steht der Datentyp "String" drin) und du dann aber eine Uhrzeit darstellen willst (hier erwartet er eine Zahl, keinen Text).
Ich habe es so gelöst, dass ich mir erst in Home-Assistant einen Sensor für den Sonnenauf- und -untergang erstellt habe und diesen dann auf einem Display (in meinem Fall ein ePaper) darstelle.

YAML:
  # Sensoren für ePaper Display in Home-Assistant
  - name: "Esphome Next Sunrise"
    state: "{{ as_timestamp(states.sun.sun.attributes.next_dawn) | timestamp_custom ('%H:%M') }}"
  - name: "Esphome Next Sunset"
    state: "{{ as_timestamp(states.sun.sun.attributes.next_setting) | timestamp_custom ('%H:%M') }}"

Und jetzt der Teil für den ESP:

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: |-     
          // Print sunrise and sun setting dates
          it.printf(195, 25, id(icon_font25), TextAlign::TOP_LEFT, "\U000F059C");
          if (id(next_sunrise).has_state()) {
            it.printf(225, 22, id(comic15), TextAlign::TOP_LEFT, "%s", id(next_sunrise).state.c_str());
          }
          it.printf(195, 53, id(icon_font25), TextAlign::TOP_LEFT, "\U000F059B");
          if (id(next_sunset).has_state()) {
            it.printf(225, 55, id(comic15), TextAlign::TOP_LEFT, "%s", id(next_sunset).state.c_str());
 
Das mit dem String war schon mal die richtige Richtung, das hier ist die Lösung:

it.printf(60,0, id(font1),"%s", id(sunr).state.c_str());

Was macht das "%s"?
Das Zeitformat gibt man im Textsensor übrigens mit " format: "%H:%M" " an.
Danke für deinen Tip
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.380
Beiträge
45.239
Mitglieder
3.982
Neuestes Mitglied
ThomasW
Zurück
Oben