Home Assistant Werte auf einem ePaper Display

Hier könnt Ihr eure Smart Home Projekte Vorstellen.


Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Einleitung
Irgendwann auf meiner Smart-Home Erkundungsreise bin ich auf einen Beitrag gestoßen, der zeigte wie man die in Home-Assistant gesammelten Werte, auf einem ePaper Display darstellen kann. Da ich gerne Dinge ausprobiere und ich unsere Smart-Home Zentrale etwas präsenter machen wollte, habe ich mir ein ePaper Display gekauft. Hier möchte ich euch zeigen, was ihr braucht (Hardware) und wie ihr die Werte aus HA auf das Display bekommt.

Hardware
Vorweg muss ich noch erwähnen, dass ich esphome nutze um das Display und den dazu notwendigen Mikrocontroller zu betrieben. Daher solltet ihr, falls ihr noch keine Hardware habt, darauf achten, dass die Hardware mit esphome kompatibel ist. Ich verwende folgende Teile:
  • ESP32 Mikrocontroller
  • 2,9 Zoll ePaper Display von Waveshare
  • Micro-USB Netzteil

Software

Auf der esphome Oberfläche habe ich dann eine neue Konfiguration angelegt. Nachdem der Wizard beendet wurde, kann man die "yaml" Datei entsprechend anpassen. Hier mal meine komplette Datei:

Code: Alles auswählen

esphome:
  name: esp32-display
  platform: ESP32
  board: esp32dev

wifi:
  ssid: !secret ssid
  password: !secret wlan_pwd
  # fast_connect: true
  # Optional manual IP
  manual_ip:
    static_ip: 192.168.0.141
    gateway: 192.168.0.1
    subnet: 255.255.255.0


  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Wemos Display Fallback Hotspot"
    password: "dDES3QVg9Asp"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

spi:
  clk_pin: GPIO13
  mosi_pin: GPIO14

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
    lambda: |-
	  // Print date and time
      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 weather info
      it.printf(20, 22, id(comic15), "Wetterinfo:");
      it.printf(5, 38, id(comic15), "Heute:");
      // Print weather symbol
      if (id(current_condition).has_state()) {
        std::map<std::string, std::string> weather_icon_map
          {
            {"clear-night", "\U000F0594"},
            {"cloudy", "\U000F0590"},
            {"exceptional", "\U000F069B"},
            {"fog", "\U000F0591"},
            {"hail", "\U000F0592"},
            {"lightning", "\U000F0593"},
            {"lightning-rainy", "\U000F067E"},
            {"partlycloudy", "\U000F0595"},
            {"pouring", "\U000F0596"},
            {"rainy", "\U000F0597"},
            {"snwoy", "\U000F0598"},
            {"snowy-rainy", "\U000F067F"},
            {"sunny", "\U000F0599"},
            {"windy", "\U000F059D"},
            {"windy-variant", "\U000F059E"},
          };
            it.printf(20, 60, id(icon_font30), TextAlign::TOP_LEFT , weather_icon_map[id(current_condition).state.c_str()].c_str());
      }
      // Print weather forecast
      it.printf(65, 38, id(comic15), "Morgen:");
      if (id(forecast_condition).has_state()) {
        std::map<std::string, std::string> weather_icon_map2
          {
            {"clear-night", "\U000F0594"},
            {"cloudy", "\U000F0590"},
            {"exceptional", "\U000F069B"},
            {"fog", "\U000F0591"},
            {"hail", "\U000F0592"},
            {"lightning", "\U000F0593"},
            {"lightning-rainy", "\U000F067E"},
            {"partlycloudy", "\U000F0595"},
            {"pouring", "\U000F0596"},
            {"rainy", "\U000F0597"},
            {"snwoy", "\U000F0598"},
            {"snowy-rainy", "\U000F067F"},
            {"sunny", "\U000F0599"},
            {"windy", "\U000F059D"},
            {"windy-variant", "\U000F059E"},
          }; 
            it.printf(80, 60, id(icon_font30), TextAlign::TOP_LEFT, weather_icon_map2[id(forecast_condition).state.c_str()].c_str());
      }
      // Print moon phase
      it.printf(135, 22, id(comic15), TextAlign::TOP_LEFT, "Mond-");
      it.printf(135, 39, id(comic15), TextAlign::TOP_LEFT, "phase:");
      
      if (id(moon).has_state()) {
        std::map<std::string, std::string> moon_icon_map
        {
          {"new_moon", "\U000F0F64"},
          {"full_moon", "\U000F0F62"},
          {"waxing_crescent", "\U000F0F67"},
          {"first_quarter", "\U000F0F61"},
          {"waxing_gibbous", "\U000F0F68"},
          {"waning_gibbous", "\U000F0F66"},
          {"lightning-rainy", "\U000F067E"},
          {"last_quarter", "\U000F0F63"},
          {"waning_crescent", "\U000F0F65"},
        };
          it.printf(155, 80, id(icon_font30), TextAlign::CENTER, moon_icon_map[id(moon).state.c_str()].c_str());
      }
      
      // Print line behind moon phase
      it.line(185, 20, 185, 128);
      
      // Print sunrise and sun sunset times
      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());
      }
      
      
      // Print outside temperature (from homeassistant sensor)
      if (id(outside_temperature).has_state()) {
        it.printf(40, 100, id(comic15), TextAlign::CENTER, "%.1f°", id(outside_temperature).state);
      }
      it.printf(10, 100, id(icon_font15), TextAlign::CENTER, "\U000F0599"); 
      
      // Print inside temperature (from homeassistant sensor)
      if (id(inside_temperature).has_state()) {
        it.printf(40, 120, id(comic15), TextAlign::CENTER, "%.1f°", id(inside_temperature).state);
      }
      it.printf(10, 120, id(icon_font15), TextAlign::CENTER, "\U000F04B9"); 
      
      // Print forecast temperature (from homeassistant sensor)
      if (id(forecast_temp).has_state()) {
        it.printf(102, 100, id(comic15), TextAlign::CENTER, "%.1f°", id(forecast_temp).state);
      }
      it.printf(75, 100, id(icon_font15), TextAlign::CENTER, "\U000F0737");      

      // Print forecast_low temperature (from homeassistant sensor)
      if (id(forecast_temp_low).has_state()) {
        it.printf(102, 120, id(comic15), TextAlign::CENTER, "%.1f°", id(forecast_temp_low).state);
      }  
      it.printf(75, 120, id(icon_font15), TextAlign::CENTER, "\U000F072E");  
      
      // Print line behind weather info
      it.line(130, 20, 130, 128);
      
      // Print inside temperature (from homeassistant sensor)
      // if (id(inside_temperature).has_state()) {
      //   it.printf(127, 80, id(font3), TextAlign::TOP_RIGHT , "%.1f°", id(inside_temperature).state);
      // }


font:
  - file: 'fonts/comicbd.ttf'
    id: comic15
    size: 15
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
       '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
       'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
       'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
       'u', 'v', 'w', 'x', 'y', 'z','ü', 'ä', 'ö', '/','º','µ','³']
  - file: 'fonts/comic.ttf'
    id: comic20
    size: 20
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
       '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
       'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
       'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
       'u', 'v', 'w', 'x', 'y', 'z','ü', 'ä', 'ö', '/','º','µ','³']  

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font30
    size: 30
    glyphs:
      - "\U000F0590" # weather-cloudy
      - "\U000F0F2F" # weather-cloudy-alert
      - "\U000F0E6E" # weather-cloudy-arrow-right
      - "\U000F0591" # weather-fog
      - "\U000F0592" # weather-hail
      - "\U000F0F30" # weather-hazy
      - "\U000F0898" # weather-hurricane
      - "\U000F0593" # weather-lightning
      - "\U000F067E" # weather-lightning-rainy
      - "\U000F0594" # weather-night
      - "\U000F0F31" # weather-night-partly-cloudy
      - "\U000F0595" # weather-partly-cloudy
      - "\U000F0F32" # weather-partly-lightning
      - "\U000F0F33" # weather-partly-rainy
      - "\U000F0F34" # weather-partly-snowy
      - "\U000F0F35" # weather-partly-snowy-rainy
      - "\U000F0596" # weather-pouring
      - "\U000F0597" # weather-rainy
      - "\U000F0598" # weather-snowy
      - "\U000F0F36" # weather-snowy-heavy
      - "\U000F067F" # weather-snowy-rainy
      - "\U000F0599" # weather-sunny
      - "\U000F0F37" # weather-sunny-alert
      - "\U000F14E4" # weather-sunny-off
      - "\U000F059A" # weather-sunset
      - "\U000F059B" # weather-sunset-down
      - "\U000F059C" # weather-sunset-up
      - "\U000F0F38" # weather-tornado
      - "\U000F059D" # weather-windy
      - "\U000F059E" # weather-windy-variant
      - "\U000F069B" # emoticon-dead-outline for weather exeptional
      - "\U000F0F61" # moon-first-quarter
      - "\U000F0F62" # moon-full
      - "\U000F0F63" # moon-last-quarter
      - "\U000F0F64" # moon-new
      - "\U000F0F65" # moon-waning-crescent
      - "\U000F0F66" # moon-waning-gibbous
      - "\U000F0F67" # moon-waxing-cresent
      - "\U000F0F68" # moon-waxing-gibbous

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font20
    size: 20
    glyphs:
      - "\U000F0F61" # moon-first-quarter
      - "\U000F0F62" # moon-full
      - "\U000F0F63" # moon-last-quarter
      - "\U000F0F64" # moon-new
      - "\U000F0F65" # moon-waning-crescent
      - "\U000F0F66" # moon-waning-gibbous
      - "\U000F0F67" # moon-waxing-cresent
      - "\U000F0F68" # moon-waxing-gibbous
      - "\U000F059B" # weather-sunset-down
      - "\U000F059C" # weather-sunset-up
  
  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font25
    size: 25
    glyphs:
      - "\U000F059B" # weather-sunset-down
      - "\U000F059C" # weather-sunset-up

  - file: 'fonts/materialdesignicons-webfont.ttf'
    id: icon_font15
    size: 15
    glyphs:
      - "\U000F0737" # arrow-up-bold
      - "\U000F072E" # arrow-down-bold
      - "\U000F02DC" # home
      - "\U000F04B9" # sofa
      - "\U000F0599" # sun

time:
  - platform: homeassistant
    id: esptime
    timezone: Europe/Berlin

sensor:
  - platform: wifi_signal
    name: "Wemos Display WiFi Signal"
    update_interval: 900s
  - platform: uptime
    name: "Wemos Display Uptime"
  - platform: homeassistant
    id: outside_temperature
    entity_id: sensor.aussentemperatur
    internal: true
  - platform: homeassistant
    id: inside_temperature
    entity_id: sensor.multisensor_wohnzimmer_2
    internal: true
  - platform: homeassistant
    id: forecast_temp
    entity_id: sensor.openweathermap_forecast_temperature
    internal: true
  - platform: homeassistant
    id: forecast_temp_low
    entity_id: sensor.openweathermap_forecast_temperature_low
    internal: true

text_sensor:
  - platform: homeassistant
    id: next_sunset
    entity_id: sensor.esphome_next_sunset
    internal: true
  - platform: homeassistant
    id: next_sunrise
    entity_id: sensor.esphome_next_sunrise
    internal: true
  - platform: homeassistant
    id: moon
    entity_id: sensor.moon
    internal: true
  - platform: homeassistant
    id: forecast_condition
    entity_id: sensor.openweathermap_forecast_condition
    internal: true
  - platform: homeassistant
    id: current_condition
    entity_id: sensor.openweathermap_condition
    internal: true
  - platform: wifi_info
    ip_address:
      name: "Wemos Dislpay IP"
  - platform: version
    name: Wemos Display ESPHome Version
    hide_timestamp: True


switch:
  - platform: restart
    name: "Wemos Display Restart"
  - platform: shutdown
    name: "Wemos Display Shutdown"

Code Erläuterungen
Boah, ganz schön viel Code, der einen erst einaml ein wenig erschlagen kann. Daher jetzt mal der Reihe nach: Als erstes wird euch wahrscheinlich auffallen, dass ich `!secrets` benutze. Das mache ich, damit ich nicht jedes mal das Passwort und die SSID für das Wlan eintragen muss. Solltet ihr die Secrets noch nicht nutzen, könnt ihr diese über "Secrets" oben rechts in der Oberfläche erstellen

Ich vergebe allen Geräten eine feste IP. Das macht das Hinzufügen zu Home-Assistant leichter und blockiert keine Adresen im DHCP Bereich. Ihr müsst die Adresse natürlich entsprechend anpassen, oder komplett löschen, wenn ihr DHCP nutzen wollt.

Nun folgt auch schon die Einrichtung des Displays, dieser verwendet den SPI Bus und somit muss dieser Konfiguriert werden. Die Pins müsst ihr natürlich entsprechend des verwendeten Mikrocontrollers anpassen. Je nachdem welches Display ihr verwendet, müsst ihr das Modell und evtl. auch die Ausrichtung anpassen.

Damit ihr etwas auf dem Display darstellen könnt, braucht ihr eine, oder auch mehrere Schriftarten. Die Schriften habe ich im Verzeichnis `fonts` im `/config` Ordner von esphome abgespeichert. Ich verwende eine Schriftart in verschiedenen Größen für den Text und für die Symbole verwende ich die `materialdesignicons-webfont.ttf`, ebenfalls in verschiedenen Größen. Unter `glyphs:` werden die zu darstellenden Zeichen / Symbole angegeben. Um die Codes für die Icons zu finden, könnt ihr hier nachsehen. Damit esphome etwas mit dem Code für ein Icon anfangen kann, müsst ihr vor den Code noch ein `\U000` schreiben.

Unter `lambda: |-` folgen dann die Anweisungen, damit etwas auf dem Bildschirm "geschrieben" wird. Um Werte von Home-Assistant auf dem Display darstellen zu können, müsst ihr die gewünschten Werte dem Mikrocontroller bekannt machen. Ich stelle hauptsächlich Wetterinformationen auf dem Display dar und habe die entsprechenden Sensoren unter `sensor:` und `text_sensor:` von HA übernommen. Damit der Mikrocontroller die Werte nicht wieder zurück an HA sendet, solltet ihr den Wert `internal` auf `true` setzen.

Damit ich die Uhrzeit des Sonnenauf- und -untergangs auf dem Display darstellen konnte, habe ich in Home-Assistent Template-Sensoren angelegt:

Code: Alles auswählen

# Beispiel sensor.yaml
  - platform: template
    sensors:
      esphome_next_sunrise:
        friendly_name: "Esphome Next Sunrise"
        value_template: "{{ as_timestamp(states.sun.sun.attributes.next_dawn) | timestamp_custom ('%H:%M') }}"
      esphome_next_sunset:
        friendly_name: "Esphome Next Sunset"
        value_template: "{{ as_timestamp(states.sun.sun.attributes.next_setting) | timestamp_custom ('%H:%M') }}"
Ihr findet das Projekt auch auf meinem Blog (Link in meinem Profil). Dort verweise ich auch auf mein GitHub Repo, wo ihr neben dem kompletten Code auch die Dateien für die Schriftarten findet.
Der nächste Schritt wäre jetzt, ein Gehäuse für das Display zu bauen. Das Ergbnis werde ich dann wieder auf meinem Blog veröffentlichen ;)
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael783,

schönes Projekt auf deiner Webseite! So was schwebt mir auch schon länger vor. Allerdings würde ich dafür gerne das etwas "quadratischer" Waveshare 2.7 inch nutzen. Nur steht da "(currently not working with the HAT Rev 2.1 version)". Weißt Du (oder jemand anderes) wie ich heraus bekomme, ob es sich um HAT Rev 2.1 oder HAT Rev 2.0 handelt bzw. wo ich das ältere herbekomme?

Gruß, Andreas
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Hallo Andreas,

vielen Dank :) Ich vermute, dass es sich bei der "V2.x" um das Modell mit mehreren Farben handelt. Zumindest wird da im Waveshare Wiki darauf hingewiesen. Wenn du also ein einfarbiges nimmst, sollte es funktionieren :roll:
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael783,

Danke für Deinen Hinweis. Das ergibt durchaus Sinn. Werde mir bei Gelegenheit mal eins bestellen und testen.

Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
carsten_h
Beiträge: 532
Registriert: Mo 2. Aug 2021, 11:07
2
Has thanked: 1 time
Been thanked: 65 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von carsten_h »

Moin!

So langsam aber sicher hat dieses Projekt mein Interesse geweckt auch so etwas in Angriff zu nehmen.
Das Datum oben ist ja auf Englisch, muß man das, um es Deutsch zu bekommen in Home Assistant konvertieren?
Gibt es irgendwo ein schönes fertiges Gehäuse für den ESP und das Display, damit ich das irgendwo WAF-freundlich anbringen könnte?

Danke!

Hier laufen macOS, iOS, iPadOS, tvOS, watchOS, Home Assistant OS, QTS, Raspberry Pi OS, piCorePlayer und Fire OS

Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo Carsten,

hast Du hier schon mal geschaut?

https://www.thingiverse.com/search?q=Wa ... t=relevant

Reißt mich zwar auch nicht so ganz vom Hocker, aber kann bei Dir ja anders sein.
Falls Du doch was besseres findest, setz es bitte hier mit rein.

Welche Größe nimmst Du? Ich habe nach "Waveshare 2.7" gesucht.

Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
carsten_h
Beiträge: 532
Registriert: Mo 2. Aug 2021, 11:07
2
Has thanked: 1 time
Been thanked: 65 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von carsten_h »

AndreasD hat geschrieben: Do 30. Dez 2021, 16:39hast Du hier schon mal geschaut?
Nein, da ich ja etwas fertiges suche.
AndreasD hat geschrieben: Do 30. Dez 2021, 16:39Welche Größe nimmst Du? Ich habe nach "Waveshare 2.7" gesucht.
Das weiß ich noch nicht. So konkret ist es noch nicht.

Hier laufen macOS, iOS, iPadOS, tvOS, watchOS, Home Assistant OS, QTS, Raspberry Pi OS, piCorePlayer und Fire OS

Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

carsten_h hat geschrieben: Do 30. Dez 2021, 12:00
Gibt es irgendwo ein schönes fertiges Gehäuse für den ESP und das Display, damit ich das irgendwo WAF-freundlich anbringen könnte?
Was heißt eigentlich WAF-freundlich?

Und heißt 'fertig', dass Du das Gehäuse nicht drucken möchtest/kannst?,

Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
carsten_h
Beiträge: 532
Registriert: Mo 2. Aug 2021, 11:07
2
Has thanked: 1 time
Been thanked: 65 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von carsten_h »

AndreasD hat geschrieben: Do 30. Dez 2021, 20:24Was heißt eigentlich WAF-freundlich?
Siehe hierzu: https://de.wikipedia.org/wiki/Woman_acceptance_factor :-)
AndreasD hat geschrieben: Do 30. Dez 2021, 20:24Und heißt 'fertig', dass Du das Gehäuse nicht drucken möchtest/kannst?
Ich habe weder einen Drucker noch die Erfahrung mich darum zu kümmern, das aus so einer Vorlage auch etwas vernünftiges wird. Meine Bastelzeit ist schon länger vorbei. Ich fummele gerne in Software herum, aber bei Hardware ist das Ende erreicht.
Das letzte war der Einbau eines neuen XEON Prozessors mit 10-Cores in meinen bis dahin mit 4-Cores unterwegs gewesenen Mac Pro 2013.

Hier laufen macOS, iOS, iPadOS, tvOS, watchOS, Home Assistant OS, QTS, Raspberry Pi OS, piCorePlayer und Fire OS

Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

carsten_h hat geschrieben: Do 30. Dez 2021, 12:00 Moin!

So langsam aber sicher hat dieses Projekt mein Interesse geweckt auch so etwas in Angriff zu nehmen.
Das Datum oben ist ja auf Englisch, muß man das, um es Deutsch zu bekommen in Home Assistant konvertieren?
Gibt es irgendwo ein schönes fertiges Gehäuse für den ESP und das Display, damit ich das irgendwo WAF-freundlich anbringen könnte?

Danke!
Zum Thema "Datum": Ja, dafür müsstest du in HA ein Template-Sensor anlegen, um das zu übersetzen. Ich meine @Osorkon hat da mal was entsprechendes hier gepostet.
Zum Thema "Gehäuse": Ich plane aktuell einen ganz normalen Bilderrahmen um zu funktionieren. Wollte in die feste Rückwand ein entsprechendes Loch für das Display heraussägen und es von vorne weiß anmalen. Die restliche Technik würde ich dann einfach auf der Rückseite befestigen. So mein Plan bisher, an der Umsetzung scheitert es leider noch ...
Ich muss auch sagen, dass mir diese 3D gedruckten Gehäuse leider so gar nicht gefallen. Hab mir das ein oder andere von einem Kollegen drucken lassen und das sieht teilweise echt einfach nur hässlich aus. Hatte schon überlegt mir eine Graviermaschine zuzulegen und die als eine Art Fräsmaschine zu missbrauchen, um mir Gehäuse aus Holz zu fertigen.
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael783,
azrael783 hat geschrieben: Mi 29. Dez 2021, 21:32 Wenn du also ein einfarbiges nimmst, sollte es funktionieren
Ich habe mir ein einfarbiges bestellt. Wurde heute geliefert und ich wollte es auch gleich ausprobieren. Doch wenn ich im Code das 2.70in angebe, kommt eine Fehlermeldung (s. Anhang). Ich habe die aufgezeigten Displays mal testweise eingetragen und den Code auf den ESP geladen. Ohne Erfolg, auf dem Display ist nichts zu sehen. Ich habe den einfachen Sketch "Hello World" von der esphome.io mit den Pins angepasst und hochgeladen. Die "Startposition" habe ich testweise auch verändert. Bleibt dabei, keine Anzeige auf dem Display :?
Einen Hoffnungsschimmer laut github habe ich noch. Ich habe zum Testen nur einen ESP8266 und da meint jemand, dass es nur sicher auf einem ESP32 läuft. Der kommt zum WE hin bei mir an.
Hast Du noch einen Tip?

Gruß, Andreas
Dateianhänge
Screenshot_20220104-185329.jpg
Screenshot_20220104-185329.jpg (312.34 KiB) 1429 mal betrachtet
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
carsten_h
Beiträge: 532
Registriert: Mo 2. Aug 2021, 11:07
2
Has thanked: 1 time
Been thanked: 65 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von carsten_h »

azrael783 hat geschrieben: So 2. Jan 2022, 23:25 Ich plane aktuell einen ganz normalen Bilderrahmen um zu funktionieren.
So etwas hatte ich vor kurzem im Netz auch gefunden. Für Display und ESP müßte in so etwas: https://www.ikea.com/de/de/p/sannahed- ... -50459114/ eigentlich ganz gut gehen. Da dürfte hinter dem Display genug Platz sein.

Hier laufen macOS, iOS, iPadOS, tvOS, watchOS, Home Assistant OS, QTS, Raspberry Pi OS, piCorePlayer und Fire OS

Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Hast du mal den Eintrag "full_update_every" Auskommentiert und es dann probiert? Also mit der Config für den 2,7'' Display?
Liegt die Schriftart-Datei auch im richtigen Verzeichnis? Bei dir müsste sie im "config" Ordner von esphome liegen. Ich habe im "config" Ordner einen "fonts" Ordner angelegt, in dem alle Schriftarten abliegen. Sieht dann bei mir so aus:

Code: Alles auswählen

  - file: 'fonts/comic.ttf'
    id: comic20
    size: 20
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
       '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
       'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
       'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
       'u', 'v', 'w', 'x', 'y', 'z','ü', 'ä', 'ö', '/','º','µ','³', 'Ä', 'Ö', 'Ü']  
Wobei ich noch explizit die Zeichen, die gerendert werden sollen, angegeben habe.
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael783,

das mit den Fonts habe ich richtig. Allerdings habe ich auch dazu ein Weilchen gebraucht, da immer eine Fehlermeldung kam, dass es den Ordner nicht gäbe,.
Wenn ich die Zeile auskommentiert, kommt eine weitere Fehlermeldung.
Gruß, Andreas
Dateianhänge
IMG_20220106_084901.jpg
IMG_20220106_084901.jpg (104.39 KiB) 1390 mal betrachtet
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Nee, nicht die Zeile mit "platform" sondern die mit "full_update_every" auskommentieren ;)
Sollte dann in etwa so aussehen:

Code: Alles auswählen

display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: GPIO15
    dc_pin: GPIO27
    busy_pin: GPIO25
    reset_pin: GPIO26
    model: 2.70in
    rotation: 90°
    #full_update_every: 180
Ich muss aber auch sagen, dass ich das Display erst an einem wemos D1 (ESP8266) hatte und dann irgendwann Probleme bekam und ich ihn jetzt an einem ESP32 hängen habe ...
Ah und du könntest noch probieren die Schriftzeichen explizit zu erzeugen indem du sie unter "glyphs" angibst:

Code: Alles auswählen

  - file: 'fonts/comic.ttf'
    id: comic20
    size: 20
    glyphs:
      ['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
       '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
       'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
       'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
       'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
       'u', 'v', 'w', 'x', 'y', 'z','ü', 'ä', 'ö', '/','º','µ','³', 'Ä', 'Ö', 'Ü'] 
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

azrael783 hat geschrieben: Do 6. Jan 2022, 10:22 Nee, nicht die Zeile mit "platform" sondern die mit "full_update_every" auskommentieren ;)
Danke für den gut gemeinten Smiley 8-) Ich Depp :roll:
azrael783 hat geschrieben: Do 6. Jan 2022, 10:22 Ich muss aber auch sagen, dass ich das Display erst an einem wemos D1 (ESP8266) hatte
Da mein ESP32 noch nicht da ist, hast Du zufällig noch die PINs, die du benutzt hast oder ist das relativ egal?
azrael783 hat geschrieben: Do 6. Jan 2022, 10:22 Ah und du könntest noch probieren die Schriftzeichen explizit zu erzeugen indem du sie unter "glyphs" angibst:
Da ich relativ viel gelesen habe nur zu meinem Verständnis, ob ich es richtig gelesen habe. Die "glyphs" anzugeben erspart 'Arbeistspeicher' im ESP, da in der *.ttf alle möglichen Zeichen(Buchstaben und Sonderzeichen und...) darin stehen.
Ist zwar ein relativ hoher Aufwand die ganzen Zeichen per Hand einzugeben, schadet aber auf keinen Fall.
Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

AndreasD hat geschrieben: Do 6. Jan 2022, 20:09 Da mein ESP32 noch nicht da ist, hast Du zufällig noch die PINs, die du benutzt hast oder ist das relativ egal?
Nein egal sind die Pins nicht, zumindest nicht die, die für den SPI Bus verwendet werden. Zufällig, oder besser gesagt Dank github, habe ich die Pins noch:

Code: Alles auswählen

spi:
  clk_pin: D0
  mosi_pin: D1

display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: D2
    dc_pin: D3
    busy_pin: D4
    reset_pin: D5
Wobei ich die Belegung im Nachhinein selbst etwas merkwürdig finde. Laut Internet sind die Pins für den SPI Bus die Pins D5 - D8. Somit müsste die Belegung eigentlich so aussehen:

Code: Alles auswählen

spi:
  clk_pin: D5
  mosi_pin: D7

display:
  - platform: waveshare_epaper
    id: epaper
    cs_pin: D8
    dc_pin: D0
    busy_pin: D3
    reset_pin: D4
Und bei noch genauerer Betrachtung habe ich wohl einfach die Pins von esphome.io übernommen :roll: Wahrscheinlich hatte ich deswegen auch Probleme mit dem Display und dem ESP8266. Wenn ich viel Lust und Zeit habe probiere ich noch aus ob das Display auch an einem ESP8266 läuft

Ich habe die Zeichen (glyphs) aufgenommen, weil ich glaube Schwierigkeiten mit den deutschen Sonderzeichen (ä, ö, ü, usw) hatte. Kann es aber gar nicht mehr genau sagen. Ist schon eine Weile her, als ich das Display eingerichtet habe. Ob es Speicher spart kannst du ja ausprobieren, vor dem Hochladen wird dir ja der verwendete Speicher angezeigt ;)

Edit: Bei dir sind clk und mosi vertauscht ;)
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael873,

ganz großen Dank für Deine ausführliche Antwort!
azrael783 hat geschrieben: Fr 7. Jan 2022, 22:46 Wenn ich viel Lust und Zeit habe probiere ich noch aus ob das Display auch an einem ESP8266 läuft
Du hast Dir hier schon wieder so viel Mühe gegeben! Danke! Ich gehe davon aus, dass Du andere Dinge hast, die Du machen kannst. Ich probiere die beiden Varianten, die Du hier beschrieben hast, mal aus und stelle das Ergebnis hier rein. Sollte ich nicht weiter kommen, überlege ich, ob ich an dem 2.7in Display festhalten oder nicht doch das 2.90in nehmen sollte.
Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

irgend wie verworren. Ich habe beide Varianten sowohl auf dem D1 mini als auch auf dem ESP8266 nodemcu ausprobiert. Bei beiden kommen die gleiche Fehler. Ich habe 2 Screenshots angehängt.
Bei Code2 ist startet halt die Übertragung gar nicht. Ich habe mal die Pins nacheinander verbunden, also erst nur Mosi (auf dem Display steht allerdings DIN, ist das richtig?) mit D2, dann hochgeladen, dann CLK an D5, Code hochgeladen... Als ich den RST mit D4 verbunden habe, ging das Hochladen nicht mehr. Also alle Pins, außer RST angeschlossen, funktioniert das Hochladen. Allerdings auch keine Anzeige.
Habe ich etwas übersehen?
Gruß, Andreas
Dateianhänge
Code_2.JPG
Code_2.JPG (98.68 KiB) 1311 mal betrachtet
Code_1.JPG
Code_1.JPG (136.98 KiB) 1311 mal betrachtet
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo,
nach unendlichen Versuchen mit D1 mini, ESP8266 nodemcu, ESP32 wrom32 etc. immer noch keinen Erfolg. Allerdings kommt 'nur' noch eine Fehlermeldung (siehe Anhang).
Wähle ich das 2.90inv2 im Code aus, kommt keine Fehleranzeige beim Compilieren, aber es wird auch nichts auf dem Display angezeigt.
Hat noch wer einen Tip?
Gruß, Andreas
Dateianhänge
Displayanzeige.JPG
Displayanzeige.JPG (91.88 KiB) 1186 mal betrachtet
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Zeig doch nochmal den Inhalt der yaml Datei wie du es zuletzt hochgeladen hast.
Ein kleiner Hinweis noch ein wemos D1 hat auch einen ESP8266 verbaut, einziger Unterschied zu den nodemcu Boards: auf dem wemos sind weniger Anschlüsse, dafür aber ein 5V Ausgang herausgeführt. Die nodemcu ESP8266 können zwar mit 5V über die Pinleiste versorgt werden, diese können aber nicht zur Versorgung von Sensoren verwendet werden. ;)
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Habe meinen Rechner schon aus. Vom Tablet bekomme ich es nur über copy & paste hin. Geht das so, sonst mache ich es morgen vom Rechner aus gerne noch mal.

esphome:
name: waveshareesp32
platform: ESP32
board: esp32dev

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:
password: "226c06b8c5143d9417a6fcb190f8b88a"

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_pass

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Waveshareesp32 Fallback Hotspot"
password: "BjF9aOZjjDti"

captive_portal:

# Example configuration entry
font:
- file: 'comic.ttf'
id: font1
size: 20
glyphs:
['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z','ü', 'ä', 'ö', '/','º','µ','³', 'Ä', 'Ö', 'Ü']


spi:
clk_pin: GPIO13
mosi_pin: GPIO14

display:
- platform: waveshare_epaper
id: epaper
cs_pin: GPIO5
dc_pin: GPIO27
busy_pin: GPIO25
reset_pin: GPIO26
model: 2.70in
# rotation: 90
# full_update_every: 30
lambda: |-
it.print(0, 0, id(font1), "Hello World!");
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Geht gerade noch so :P Sieht ja fast aus wie bei mir. Einziger Unterschied: ich habe den "cs_pin" auf GPIO15 liegen. Das würde ich nochmal probieren und ansonsten ein Issue auf Github aufmachen, bzw. vorher nochmal suchen ob andere nicht auch das Problem hatten.

Die Code Einrückung solltest du auf dem Tablet auch hinbekommen, wenn du am Anfang ein "[ CODE ]" und am Ende ein "[ / CODE ]" ohne die Leerzeichen einfügst ;)
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Andreas
Beiträge: 493
Registriert: Di 21. Dez 2021, 22:05
2
Wohnort: Geltow
Has thanked: 116 times
Been thanked: 22 times

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von Andreas »

Hallo azrael783,
nochmals vielen Dank für Deine Ausdauer. Ich habe mir zum Probieren nun einfach mal das kleine 1.54inv2 bestellt, angeschlossen und es funktioniert auf Anhieb.
Mir hatte zwar das 2.7er von den Maßen her gut gefallen, aber nun überlege ich, entweder das 2.9er oder gleich das 4.2er zu nehmen.
Was ich ganz schön anstrengend finde ist das Positionieren der Wörter, Symbole und Temperaturanzeigen. Gibt es da irgend welche Tricks?
Gruß, Andreas
Es wird immer jemanden geben, der immer nur die Fehler sucht.
Benutzeravatar
azrael783
Beiträge: 114
Registriert: Mi 27. Okt 2021, 08:57
2
Has thanked: 5 times
Been thanked: 8 times
Kontaktdaten:

Re: Home Assistant Werte auf einem ePaper Display

Beitrag von azrael783 »

Dann scheint es wohl echt ein Bug in der Integration des 2,7er zu geben. Voll doof. :(
Das du das Positionieren anstrengend findest, kann ich verstehen. Ist echte Pixel-Schubserei und ich habe da auch leider keinen Hilfreichen Tipp. Hab da auch immer geändert, neu kompiliert und gesehen das es doch zwei Pixel mehr hätte sein müssen. Einzig in der Höhe kann man es ganz gut abschätzen. Wenn du zb eine Schriftgröße von 20 angegeben hast, Beträgt die Höhe der Schrift 20 Pixel. Die nächsten Zeichen solltest du also mind. 20 Pixel - besser mehr - darunter platzieren. Aber was die Länge betrifft: da hilft nur ausprobieren. In der Regel machst du das ja aber nur einmal und gut ist, von daher geht es dann auch wieder - finde ich ;)
Wer Rechtschreibfehler findet, darf sie gerne behalten :D
Antworten