NEWS
ePaper Statusdisplay Hausflur
-
Hi Zusammen,
Habe für den zentralen Hausflur eines Mehrparteien Hauses ein Status ePaper gebaut mit dem ESPHome Adapter.
Komponenten sind ein Esp32 Feather, ein 7.5 Waveshare Display und ein 2500 Lipo Akku.
Aktualisiert wird jede Stunde durch DeepSleep.
-
Richtig coole Sache !!
-
Sehr schön.
Ich bin da im Moment an was ähnlichem dran jedoch mit elektronischen Preisschildern.
Ich habe einen Schwung von eBay ergattert und versuche seit ein paar Tagen das ganze zum laufen zu bringen mit
https://github.com/atc1441/E-Paper_Pricetags
Jedoch scheitert es bei mir in der Übertragung.
Edit: vielleicht magst du ein paar mehr Informationen dazu Preis geben wie zum Beispiel welche Software du nutzt, wie schickst du deine generierten Bilder an den eingebauten esp und wie läuft das mit dem deepsleep... Läuft da eine rtc mit dazu die den Display aufweckt.... Würde mich freuen!
-
@bimmi Hi, gerne
also zwecks Software:
- ioBroker
- espHome Adapter (hier ist die Komplette Unterstützung der Waveshare Displays bereits integriert und die Doku ist TOP) und die ganze compilirerei der YAML wird dort auch für dich gemacht. OTA Updates sind auch möglich.
- MQTT Adapter
- Javascript Adapter
Hardware:
- ESP: Also entweder direkt von Waveshare die ePaper Driver Boards (das erspart einiges an Kabelei, da das Flachband vom Display direkt auf das Board gesteckt wird oder meine Empfehlung das Adafruit HUZZAH32 – ESP32 Feather Board.
Damit habe ich die beste Erfahrung gemacht und ich habe einige ESP ausprobiert. Und hier kannst du auch direkt den LIPO Akku anstecken. - ePaper: Einfach in der ESPHOME Doku nachsehen welche Display Größen unterstützt werden.
- Wenn Batterie Betrieb. LIPO Akku in deiner größe.
BILDER:
Die Bilder liegen im ersten Step in einen Verzeichnis auf deinem ioBroker. In der YAML gibts du dazu den Pfad an.z.B:
image: - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_0.png" id: Oeltank_0 resize: 95x95
und dann im Lambda Bereich
z.B.lambda: |- // HINTERGRUNDBILD it.image(115, 270, id(Oeltank_0));
DEEP SLEEP:
Du kann die ESP entweder zu einen bestimmten Zeitpunkt aufwecken oder auch per Taster
In meine Fall habe ich es simpler gemacht und aktualisiere jede Stunde einmal:deep_sleep: id: deep_sleep_1 run_duration: 35s sleep_duration: 60min
-
Ansonsten kann ich gerne auch die gesamt YAML mal posten:
esphome: name: TEST on_boot: priority: -100 then: - delay: 1s - component.update: current_time # Give some time to get the rest of the mqtt data - component.update: epaper_display # Wait for display update cycle esp32: board: featheresp32 # Enable logging logger: level: DEBUG # Enable Home Assistant API api: password: !secret api_password # OTA ota: password: "DeinPasswort" # Enable MQTT mqtt: broker: 192.168.x.xx username: xxx password: !secret mqtt_password client_id: Test topic_prefix: esphome/Test # OTA MODUS on_message: - topic: esphome.Test.ota payload: 'ON' then: - deep_sleep.prevent: deep_sleep_1 - topic: esphome.Test.deepsleep payload: 'ON' then: - deep_sleep.enter: deep_sleep_1 # Epaper display doesn't turn back on after deep sleep while on lipo powerunless this switch is defined. Not sure why! switch: - platform: gpio pin: number: 21 inverted: yes id: Display_Reset internal: true name: "Display Reset" # Enable WIFI wifi: ssid: !secret wifi_ssid password: !secret wifi_password fast_connect: True # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Test" password: "password" ############## captive_portal: font: # Schrift für Kästchenbeschriftung z.B. Innen - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/VerdanaBold.ttf" id: VerdanaBold24 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 24 # Schrift für Wertebezeichnungen z.B. MAX TEMPERATUR - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/Verdana.ttf" id: Verdana20 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 20 # Schrift für Zentrale Wichtige Werte z.B. Temperatur Innen - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/VerdanaBold.ttf" id: VerdanaBold32 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 32 # Schrift für Werte z.B. MAX TEMPERATUR - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/VerdanaBold.ttf" id: VerdanaBold20 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 20 # Schrift für Trend Tage - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/VerdanaBold.ttf" id: VerdanaBold15 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 15 # Schrift für Trend Werte - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/VerdanaBold.ttf" id: VerdanaBold17 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','å', 'Ä', 'ä', 'Ö', 'ö', 'Ü', 'ü', '/'] size: 17 # Schrift für Wettersymbole - file: "/opt/iobroker/iobroker-data/esphome.0/Fonts/Materialdesignicons-Webfont.ttf" id: Icons60 size: 60 glyphs: - "\U000F0599" # Sonne, - "\U000F0595" # Sonne bewölkt, Sonne stark bewölkt - "\U000F0590" # bewölkt - "\U000F0597" # Sonne bewölkt leichter Regen, Sonne stark bewölkt leichter Regen, bewölkt leichter Regen - "\U000F0596" # Sonne bewölkt starker Regen, Sonne stark bewölkt starker Regen, stark bewölkt starker Regen - "\U000F0593" # Sonne bewölkt Unwetter, Sonne stark bewölkt Unwetter, stark bewölkt Unwetter - "\U000F0592" # Sonne bewölkt Eisregen, Sonne stark bewölkt Eisregen, stark bewölkt Eisregen, Sonne bewölkt Schneeregen, Sonne stark bewölkt Schneeregen, stark bewölkt Schneeregen - "\U000F0598" # Sonne bewölkt Schnee, Sonne stark bewölkt Schnee, stark bewölkt Schnee image: - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/VISStatus.png" id: VISStatus resize: 800x480 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_0.png" id: Oeltank_0 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_10.png" id: Oeltank_10 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_20.png" id: Oeltank_20 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_30.png" id: Oeltank_30 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_40.png" id: Oeltank_40 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_50.png" id: Oeltank_50 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_60.png" id: Oeltank_60 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_70.png" id: Oeltank_70 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_80.png" id: Oeltank_80 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_90.png" id: Oeltank_90 resize: 95x95 - file: "/opt/iobroker/iobroker-data/esphome.0/Pictures/Status/Oeltank/Oeltank_100.png" id: Oeltank_100 resize: 95x95 text_sensor: #MQTT SENSOR HEUTE DATUM LANG - platform: mqtt_subscribe id: HeuteDatumLang topic: subscribe_text_sensor/Kalender/Heute/DatumLang #MQTT SENSOR TEMPERATUR AUSSEN - platform: mqtt_subscribe id: TemperaturAussen topic: subscribe_text_sensor/Wetter/Aussen/Temperatur #MQTT SENSOR LUFTFEUCHTIGKEIT AUSSEN - platform: mqtt_subscribe id: LuftfeuchtigkeitAussen topic: subscribe_text_sensor/Wetter/Aussen/Luftfeuchtigkeit #MQTT SENSOR MAX TEMPERATUR AUSSEN - platform: mqtt_subscribe id: MaxTemperaturAussen topic: subscribe_text_sensor/Wetter/Aussen/MaxTemp #MQTT SENSOR MIN TEMPERATUR AUSSEN - platform: mqtt_subscribe id: MinTemperaturAussen topic: subscribe_text_sensor/Wetter/Aussen/MinTemp #MQTT SENSOR TAG MORGEN - platform: mqtt_subscribe id: TagMorgen topic: subscribe_text_sensor/Wetter/Trend/Tag/Morgen #MQTT SENSOR TAG ÜBERMORGEN - platform: mqtt_subscribe id: TagUEbermorgen topic: subscribe_text_sensor/Wetter/Trend/Tag/UeMorgen #MQTT SENSOR TAG ÜBER-ÜBERMORGEN - platform: mqtt_subscribe id: TagUEberUebermorgen topic: subscribe_text_sensor/Wetter/Trend/Tag/UeUeMorgen #MQTT SENSOR WETTERSYMBOL MORGEN - platform: mqtt_subscribe id: WettersymbolMorgen topic: subscribe_text_sensor/Wetter/Trend/Symbol/Morgen #MQTT SENSOR WETTERSYMBOL ÜBERMORGEN - platform: mqtt_subscribe id: WettersymbolUEbermorgen topic: subscribe_text_sensor/Wetter/Trend/Symbol/UeMorgen #MQTT SENSOR WETTERSYMBOL ÜBER-ÜBERMORGEN - platform: mqtt_subscribe id: WettersymbolUEberUebermorgen topic: subscribe_text_sensor/Wetter/Trend/Symbol/UeUeMorgen #MQTT SENSOR TEMPERATUR MAX MORGEN - platform: mqtt_subscribe id: MaxTempMorgen topic: subscribe_text_sensor/Wetter/Trend/MaxTemp/Morgen #MQTT SENSOR TEMPERATUR MIN MORGEN - platform: mqtt_subscribe id: MinTempMorgen topic: subscribe_text_sensor/Wetter/Trend/MinTemp/Morgen #MQTT SENSOR TEMPERATUR MAX ÜBERMORGEN - platform: mqtt_subscribe id: MaxTempUEbermorgen topic: subscribe_text_sensor/Wetter/Trend/MaxTemp/UeMorgen #MQTT SENSOR TEMPERATUR MIN ÜBERMORGEN - platform: mqtt_subscribe id: MinTempUEbermorgen topic: subscribe_text_sensor/Wetter/Trend/MinTemp/UeMorgen #MQTT SENSOR TEMPERATUR MAX ÜBER-ÜBERMORGEN - platform: mqtt_subscribe id: MaxTempUEberUebermorgen topic: subscribe_text_sensor/Wetter/Trend/MaxTemp/UeUeMorgen #MQTT SENSOR TEMPERATUR MIN ÜBER-ÜBERMORGEN - platform: mqtt_subscribe id: MinTempUEberUebermorgen topic: subscribe_text_sensor/Wetter/Trend/MinTemp/UeUeMorgen #MQTT SENSOR PHOTOVOLTAIK HAUSVERBRAUCH - platform: mqtt_subscribe id: PhotovoltaikHausverbrauch topic: subscribe_text_sensor/Photovoltaik/Hausverbrauch #MQTT SENSOR PHOTOVOLTAIK ERZEUGUNG - platform: mqtt_subscribe id: PhotovoltaikErzeugung topic: subscribe_text_sensor/Photovoltaik/Erzeugung #MQTT SENSOR PHOTOVOLTAIK BEZUG - platform: mqtt_subscribe id: PhotovoltaikBezug topic: subscribe_text_sensor/Photovoltaik/Bezug #MQTT SENSOR PHOTOVOLTAIK EINSPEISUNG - platform: mqtt_subscribe id: PhotovoltaikEinspeisung topic: subscribe_text_sensor/Photovoltaik/Einspeisung #MQTT SENSOR ÖLTANK RESTMENGE - platform: mqtt_subscribe id: OeltankRestmenge topic: subscribe_text_sensor/Oeltank/Restmenge #MQTT SENSOR ÖLTANK RESTLITER - platform: mqtt_subscribe id: OeltankRestliter topic: subscribe_text_sensor/Oeltank/Restliter #MQTT SENSOR ÖLTANK ENDDATUM - platform: mqtt_subscribe id: OeltankEnddatum topic: subscribe_text_sensor/Oeltank/Enddatum #MQTT SENSOR ÖLTANK SYMBOL - platform: mqtt_subscribe id: OeltankSymbol topic: subscribe_text_sensor/Oeltank/Symbol #MQTT SENSOR HAUSARBEIT WISCHEN KALENDERWOCHE - platform: mqtt_subscribe id: HausarbeitWischenKalenderwoche topic: subscribe_text_sensor/Hausarbeit/Wischen/Kalenderwoche #MQTT SENSOR HAUSARBEIT WISCHEN NAME - platform: mqtt_subscribe id: HausarbeitWischenName topic: subscribe_text_sensor/Hausarbeit/Wischen/Name #MQTT SENSOR MÜLL RESTMUELL DATUM - platform: mqtt_subscribe id: MuellRestmuellDatum topic: subscribe_text_sensor/Muell/Restmuell/Datum #MQTT SENSOR MÜLL RESTMUELL RESTTAGE - platform: mqtt_subscribe id: MuellRestmuellResttage topic: subscribe_text_sensor/Muell/Restmuell/Resttage #MQTT SENSOR MÜLL PAPIERTONNE DATUM - platform: mqtt_subscribe id: MuellPapiertonneDatum topic: subscribe_text_sensor/Muell/Papiertonne/Datum #MQTT SENSOR MÜLL PAPIERTONNE RESTTAGE - platform: mqtt_subscribe id: MuellPapiertonneResttage topic: subscribe_text_sensor/Muell/Papiertonne/Resttage #MQTT SENSOR ENERGIE ZÄHLER STROMBEZUG - platform: mqtt_subscribe id: EnergieZaehlerStrombezug topic: subscribe_text_sensor/Energie/Zaehler/Strombezug #MQTT SENSOR ENERGIE ZÄHLER STROMEINSPEISUNG - platform: mqtt_subscribe id: EnergieZaehlerStromeinspeisung topic: subscribe_text_sensor/Energie/Zaehler/Stromeinspeisung #MQTT SENSOR ENERGIE ZÄHLER WASSER - platform: mqtt_subscribe id: EnergieZaehlerWasser topic: subscribe_text_sensor/Energie/Zaehler/Wasser time: - platform: sntp id: current_time timezone: Europe/Berlin servers : ptbtime1.ptb.de deep_sleep: id: deep_sleep_1 run_duration: 35s sleep_duration: 60min spi: clk_pin: 5 mosi_pin: 18 id: epaper_spi display: - platform: waveshare_epaper id: epaper_display cs_pin: 22 dc_pin: 23 busy_pin: 39 reset_pin: 21 model: 7.50inV2 spi_id: epaper_spi update_interval: never reset_duration: 2ms lambda: |- // HINTERGRUNDBILD it.image(0, 0, id(VISStatus)); //ÜBERSCHRIFTEN //WETTER it.print(87, 15, id(VerdanaBold24), TextAlign::TOP_CENTER, "WETTER"); //TREND it.print(87, 158, id(VerdanaBold24), TextAlign::TOP_CENTER, "TREND"); //PV KWH it.print(87, 294, id(VerdanaBold24), TextAlign::TOP_CENTER, "PV KWH"); //ÖLTANK it.print(473, 15, id(VerdanaBold24), TextAlign::TOP_CENTER, "ÖLTANK"); //WISCHEN it.print(473, 153, id(VerdanaBold24), TextAlign::TOP_CENTER, "WISCHEN"); //MÜLL it.print(473, 225, id(VerdanaBold24), TextAlign::TOP_CENTER, "MÜLL"); //ZÄHLER it.print(473, 340, id(VerdanaBold24), TextAlign::TOP_CENTER, "ZÄHLER"); //DATUM it.printf(688, 17, id(VerdanaBold24), TextAlign::TOP_CENTER, "%s", id(HeuteDatumLang).state.c_str()); //AUSSEN WERTEBEZEICHNUNGEN //TEMPERATUR it.print(26, 48, id(Verdana20), "Temperatur"); //LUFTFEUCHTIGKEIT it.print(26, 75, id(Verdana20), "Luftfeuchtigkeit"); //MAX TEMPERATUR it.print(26, 102, id(Verdana20), "MAX Temperatur"); //MIN TEMPERATUR it.print(26, 130, id(Verdana20), "MIN Temperatur"); //AUSSEN WERTE //Temperatur it.printf(374, 38, id(VerdanaBold32), TextAlign::TOP_RIGHT, "%s", id(TemperaturAussen).state.c_str()); //LUFTFEUCHTIKEIT it.printf(374, 75, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(LuftfeuchtigkeitAussen).state.c_str()); //MAX TEMPERATUR it.printf(374, 102, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(MaxTemperaturAussen).state.c_str()); //MIN TEMPERATUR it.printf(374, 130, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(MinTemperaturAussen).state.c_str()); //TREND TAGE WERTE //MORGEN TAG it.printf(84, 268, id(VerdanaBold15), TextAlign::TOP_CENTER, "%s", id(TagMorgen).state.c_str()); //ÜBERMORGEN TAG it.printf(205, 268, id(VerdanaBold15), TextAlign::TOP_CENTER, "%s", id(TagUEbermorgen).state.c_str()); //ÜBER-ÜBERMORGEN TAG it.printf(323, 268, id(VerdanaBold15), TextAlign::TOP_CENTER, "%s", id(TagUEberUebermorgen).state.c_str()); //TREND SYMBOL WERTE //SYMBOL MORGEN STATE 1 if (id(WettersymbolMorgen).state == "1") { it.print(55, 194, id(Icons60), "\U000F0599");} //SYMBOL MORGEN STATE 2 if (id(WettersymbolMorgen).state == "2") { it.print(55, 194, id(Icons60), "\U000F0595");} //SYMBOL MORGEN STATE 3 if (id(WettersymbolMorgen).state == "3") { it.print(55, 194, id(Icons60), "\U000F0590");} //SYMBOL MORGEN STATE 4 if (id(WettersymbolMorgen).state == "4") { it.print(55, 194, id(Icons60), "\U000F0597");} //SYMBOL MORGEN STATE 5 if (id(WettersymbolMorgen).state == "5") { it.print(55, 194, id(Icons60), "\U000F0596");} //SYMBOL MORGEN STATE 6 if (id(WettersymbolMorgen).state == "6") { it.print(55, 194, id(Icons60), "\U000F0593");} //SYMBOL MORGEN STATE 7 if (id(WettersymbolMorgen).state == "7") { it.print(55, 194, id(Icons60), "\U000F0592");} //SYMBOL MORGEN STATE 8 if (id(WettersymbolMorgen).state == "8") { it.print(55, 194, id(Icons60), "\U000F0598");} //TREND SYMBOL ÜBERMORGEN //SYMBOL ÜBERMORGEN STATE 1 if (id(WettersymbolUEbermorgen).state == "1") { it.print(175, 194, id(Icons60), "\U000F0599");} //SYMBOL ÜBERMORGEN STATE 2 if (id(WettersymbolUEbermorgen).state == "2") { it.print(175, 194, id(Icons60), "\U000F0595");} //SYMBOL ÜBERMORGEN STATE 3 if (id(WettersymbolUEbermorgen).state == "3") { it.print(175, 194, id(Icons60), "\U000F0590");} //SYMBOL ÜBERMORGEN STATE 4 if (id(WettersymbolUEbermorgen).state == "4") { it.print(175, 194, id(Icons60), "\U000F0597");} //SYMBOL ÜBERMORGEN STATE 5 if (id(WettersymbolUEbermorgen).state == "5") { it.print(175, 194, id(Icons60), "\U000F0596");} //SYMBOL ÜBERMORGEN STATE 6 if (id(WettersymbolUEbermorgen).state == "6") { it.print(175, 194, id(Icons60), "\U000F0593");} //SYMBOL ÜBERMORGEN STATE 7 if (id(WettersymbolUEbermorgen).state == "7") { it.print(175, 194, id(Icons60), "\U000F0592");} //SYMBOL ÜBERMORGEN STATE 8 if (id(WettersymbolUEbermorgen).state == "8") { it.print(175, 194, id(Icons60), "\U000F0598");} //TREND SYMBOL ÜBER-ÜBERMORGEN //SYMBOL ÜBER-ÜBERMORGEN STATE 1 if (id(WettersymbolUEberUebermorgen).state == "1") { it.print(295, 194, id(Icons60), "\U000F0599");} //SYMBOL ÜBER-ÜBERMORGEN STATE 2 if (id(WettersymbolUEberUebermorgen).state == "2") { it.print(295, 194, id(Icons60), "\U000F0595");} //SYMBOL ÜBER-ÜBERMORGEN STATE 3 if (id(WettersymbolUEberUebermorgen).state == "3") { it.print(295, 194, id(Icons60), "\U000F0590");} //SYMBOL ÜBER-ÜBERMORGEN STATE 4 if (id(WettersymbolUEberUebermorgen).state == "4") { it.print(295, 194, id(Icons60), "\U000F0597");} //SYMBOL ÜBER-ÜBERMORGEN STATE 5 if (id(WettersymbolUEberUebermorgen).state == "5") { it.print(295, 194, id(Icons60), "\U000F0596");} //SYMBOL ÜBER-ÜBERMORGEN STATE 6 if (id(WettersymbolUEberUebermorgen).state == "6") { it.print(295, 194, id(Icons60), "\U000F0593");} //SYMBOL ÜBER-ÜBERMORGEN STATE 7 if (id(WettersymbolUEberUebermorgen).state == "7") { it.print(295, 194, id(Icons60), "\U000F0592");} //SYMBOL ÜBER-ÜBERMORGEN STATE 8 if (id(WettersymbolUEberUebermorgen).state == "8") { it.print(295, 194, id(Icons60), "\U000F0598");} //TREND TAGE TEMPERATUR //MORGEN MAX TEMPERATUR it.printf(61, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MaxTempMorgen).state.c_str()); //MORGEN MIN TEMPERATUR it.printf(107, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MinTempMorgen).state.c_str()); //ÜBERMORGEN MAX TEMPERATUR it.printf(181, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MaxTempUEbermorgen).state.c_str()); //ÜBERMORGEN MIN TEMPERATUR it.printf(227, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MinTempUEbermorgen).state.c_str()); //ÜBER-ÜBERMORGEN MAX TEMPERATUR it.printf(302, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MaxTempUEberUebermorgen).state.c_str()); //ÜBER-ÜBERMORGEN MIN TEMPERATUR it.printf(348, 248, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MinTempUEberUebermorgen).state.c_str()); //PV kW/h //HAUSVERBRAUCH it.printf(138, 414, id(VerdanaBold20), TextAlign::TOP_CENTER, "%s", id(PhotovoltaikHausverbrauch).state.c_str()); //ERZEUGUNG it.printf(138, 351, id(VerdanaBold20), TextAlign::TOP_CENTER, "%s", id(PhotovoltaikErzeugung).state.c_str()); //BEZUG it.printf(271, 351, id(VerdanaBold20), TextAlign::TOP_CENTER, "%s", id(PhotovoltaikBezug).state.c_str()); //EINSPEISUNG it.printf(271, 414, id(VerdanaBold20), TextAlign::TOP_CENTER, "%s", id(PhotovoltaikEinspeisung).state.c_str()); //OELTANK WERTEBEZEICHNUNGEN //RESTMENGE it.print(504, 68, id(Verdana20), "Restmenge"); //RESTLITER it.print(504, 94, id(Verdana20), "Restliter"); //ENDDATUM it.print(504, 120, id(Verdana20), "Enddatum"); //OELTANK WERTE //RESTMENGE it.printf(760, 68, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(OeltankRestmenge).state.c_str()); //RESTLITER it.printf(760, 94, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(OeltankRestliter).state.c_str()); //ENDDATUM it.printf(760, 120, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(OeltankEnddatum).state.c_str()); //Oeltank SYMBOL //Oeltank 0% if (id(OeltankSymbol).state == "0") { it.image(405, 50, id(Oeltank_0));} //Oeltank 10% if (id(OeltankSymbol).state == "1") { it.image(405, 50, id(Oeltank_10));} //Oeltank 20% if (id(OeltankSymbol).state == "2") { it.image(405, 50, id(Oeltank_20));} //Oeltank 30% if (id(OeltankSymbol).state == "3") { it.image(405, 50, id(Oeltank_30));} //Oeltank 40% if (id(OeltankSymbol).state == "4") { it.image(405, 50, id(Oeltank_40));} //Oeltank 50% if (id(OeltankSymbol).state == "5") { it.image(405, 50, id(Oeltank_50));} //Oeltank 60% if (id(OeltankSymbol).state == "6") { it.image(405, 50, id(Oeltank_60));} //Oeltank 70% if (id(OeltankSymbol).state == "7") { it.image(405, 50, id(Oeltank_70));} //Oeltank 80% if (id(OeltankSymbol).state == "8") { it.image(405, 50, id(Oeltank_80));} //Oeltank 90% if (id(OeltankSymbol).state == "9") { it.image(405, 50, id(Oeltank_90));} //Oeltank 100% if (id(OeltankSymbol).state == "10") { it.image(405, 50, id(Oeltank_100));} //HAUSARBEIT WISCHEN //KALENDERWOCHE it.printf(412, 191, id(Verdana20), "%s", id(HausarbeitWischenKalenderwoche).state.c_str()); //NAME it.printf(760, 191, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(HausarbeitWischenName).state.c_str()); //MUELL WERTEBEZEICHNUNGEN //RESTMUELLTONNE it.print(476, 275, id(Verdana20), "Restmüll"); //PAPIERTONNE it.print(646, 275, id(Verdana20), "Papiertonne"); //MUELL WERTE //RESTMUELL DATUM it.printf(476, 301, id(VerdanaBold20), "%s", id(MuellRestmuellDatum).state.c_str()); //RESTMUELL TAGE it.printf(443, 286, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MuellRestmuellResttage).state.c_str()); //PAPIERTONNE DATUM it.printf(646, 301, id(VerdanaBold20), "%s", id(MuellPapiertonneDatum).state.c_str()); //PAPIERTONNE TAGE it.printf(614, 286, id(VerdanaBold17), TextAlign::TOP_CENTER, "%s", id(MuellPapiertonneResttage).state.c_str()); //ZAEHLER WERTEBEZEICHNUNGEN //STROMBEZUG it.printf(412, 380, id(Verdana20), "Strom Bezug"); //STROMEINSPEISUNG it.printf(412, 406, id(Verdana20), "Strom Einspeisung"); //WASSER it.printf(412, 432, id(Verdana20), "Wasser"); //ZAEHLER WERTE //STROMBEZUG it.printf(760, 380, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(EnergieZaehlerStrombezug).state.c_str()); //STROMEINSPEISUNG it.printf(760, 406, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(EnergieZaehlerStromeinspeisung).state.c_str()); //WASSER it.printf(760, 432, id(VerdanaBold20), TextAlign::TOP_RIGHT, "%s", id(EnergieZaehlerWasser).state.c_str());
-
@draexler wow. Vielen Dank für die ausführlichen Informationen über das Projekt.
Da setze ich mich doch gleich ran und versuche mein Glück
-
Hallo @draexler,
Super Projekt, gefällt mir.
Damit ich das Bild nicht vorher designen muss und nur werte Anzeige, würde ich gerne ein gerendertes Bild vom Iobroker auf dem epaper darstellen, hast du eine Idee wie das ginge oder wo ich suchen könnte?
Damit könnte ich dann zb. Grafana Bilder darstellen.Gruß
Thomas -
@thomassch Freut mich wenn es dir gefällt
Also mit Bilder nachladen auf dem ESP wird's vermutlich nix werden... Da ist ein ESP zu schwach auf der Brust was ich so recherchiert habe, das er das ON THE FLY könnte. Die müssen immer neu drauf geflasht werden.
Wobei esphome schon sehr einfache Graphen abbilden könnte. Einfach mal in die Doku von ESPhome schauen.
In der Verbindung mit einem Raspberry würde es aber schon gehen. Das habe ich sogar auch schon mal umgesetzt. Siehe https://forum.iobroker.net/topic/46943/gelöst-wetter-display/19
Da kannst du dann einfach eine Screenshot von einer VIS etc. mit Puppetier auf dein ePaper zaubern lassen
Ein Batteriebetrieb ist dann aber nicht mehr so einfach möglich. -
Hallo @draexler ,
schade aber ok, dachte mir schon das der ESP32 hier eventuell zu wenig Dampf hat.Gruss
Thomas -
@draexler sagte in ePaper Statusdisplay Hausflur:
Also mit Bilder nachladen auf dem ESP wird's vermutlich nix werden... Da ist ein ESP zu schwach auf der Brust was ich so recherchiert habe, das er das ON THE FLY könnte.
hm, was meinst du mit "on the fly" hier genau? Ich hab' z.B. ein Waveshare-e-ink an einem Feather-S2 (mit einem Feather-Friends-Shield, hiess das glaube ich), und der holt sich jede paar Minuten ein neues Bild von der auf dem Shield befindlichen SD-Card. Dorthin zwischendurch per POST einen Upload draufladen sollte eigentlich funktionieren?
-
@jleg Hi Das der ESP das Bild im laufenden Betrieb holt.
Mhh... Sehr interessant wenn es anscheinend doch geht. Wobei meine Recherchen immer in Verbindung mit ESPHome stehen und da wurden mir in den einschlägigen Foren (esphome Community HomeAsisst etc.) gesagt das es nicht gehen würde.
Auf welcher Basis (Software) hast du das realisiert? Auch mit ESPhome oder mit einen Ardoino etc. Projekt?
Was natürlich bei mir auch ganz wichtig ist, das ein Batteriebetrieb möglich ist und da zählt jede Sekunde im Deepsleep die ich runterschrauben kann bzw. der ESP auch allgemein sparsam ist. -
@draexler sagte in ePaper Statusdisplay Hausflur:
@jleg Hi Das der ESP das Bild im laufenden Betrieb holt.
Mhh... Sehr interessant wenn es anscheinend doch geht. Wobei meine Recherchen immer in Verbindung mit ESPHome stehen und da wurden mir in den einschlägigen Foren (esphome Community HomeAsisst etc.) gesagt das es nicht gehen würde.
Auf welcher Basis (Software) hast du das realisiert? Auch mit ESPhome oder mit einen Ardoino etc. Projekt?
Was natürlich bei mir auch ganz wichtig ist, das ein Batteriebetrieb möglich ist und da zählt jede Sekunde im Deepsleep die ich runterschrauben kann bzw. der ESP auch allgemein sparsam ist.Laut Adafruit Spec ist aber bei dem „Friends“ bei 4,2Zoll (300x400) Schluss, oder?
-
@draexler
Ist ein 5,65‘‘ Display, 600 × 448 Pixel, 7 FarbenUnd ja, läuft als Arduinoprojekt, und einer fertigen Lib für das Display…
Edit: ja, die 32k vom Friendsshield sind natürlich viel zu klein, daher der FeatherS2 - der hat 8MB PSRAM für den Bildspeicher.
-
Hab dem ganzen jetzt nochmal ein "Upgrade" unterzogen...
Problem war das die Lipo Akkus einen ziemlichen schnellen Spannungsabfall haben und ziemlich viel Kapazität deswegen nicht genutzt werden kann.
Des weiteren ist mit aufgefallen das die eingebaute WLAN Antenne in meinem Fall zu "schwach" auf der Brust ist.
Ich habe nun Lithium AA Akkus genommen mit 2200 mAh und 1,5V. Einmal in Reihe und einmal Parallel habe ich nun 3V und 4400mAh und die halten die Spannung auch ziemlich bis zum Schluss laut Datenblatt.
Den ESP32 habe ich ausgetauscht gegen den Adafruit ESP32 Feather V2 mit externen Antenne.Bis jetzt läuft es super. Ich berichte weiter
-
Hallo @draexler,
Großes Lob für die Visualisierung! Ich bin einfach nur begeistert und würde sie gerne nachbauen, um unsere Photovoltaik-Daten anzuzeigen. Als Hardware möchte ich ebenfalls den Adafruit ESP 32 Feather V2 und ein Waveshare e Paper verwenden. Allerdings ein 5.83 inch Display.
Darf ich fragen, wie lange die Akkus halten? sleep_duration: 60min noch korrekt? -
@doho Hi, freut mich mega das es dir so gut gefällt
Wie lange die Akkus halten kann ich noch nicht sagen, da ich das Design mit den Lithium AA Akkus am 04. Februar in Betrieb genommen habe und diese immer noch laufen mit dieser Konfiguration
deep_sleep: id: deep_sleep_1 run_duration: 15s sleep_duration: 60min
Wichtig ist das der Feather V2 eine externe Antenne braucht. Aufpassen beim bestellen der Antenne, die hat einen besonderen Anschluss.
Werde die Restlichen ESP´s die ich auf Akku laufen habe jetzt auf die Lithium AA Akkus umrüsten.
Edit: Gerade gesehen das es den Feather V2 mit und ohne Antenne gibt. Aber würde trotzdem auf eine externe Antenne setzen. Einfach bessere Werte,
-
Danke für den Hinweis. Ich werde jetzt mal die Hardware bestellen und dann bestimmt auf dich zurückkommen. Für den Ein oder Anderen vielleicht hilfreich, hier meine Hardware zusammengefasst:
- Feather ESP32 V2 (Adafruit 5438)
- Antenne (Adafruit 5445)
- ePaper display (bei mir 5.83" e-Paper von Waveshare)
- Treiber Platine für Display
- 4 AA-Akkus
- Gehäuse individuell
@draexler bitte korrigier mich, wenn ich etwas vergessen haben sollte. Danke!
-
@doho Soweit alles korrekt, nur zu den Akkus die Ergänzung: AA Akku 1,5V 3300 mWh. Auf meinen Bild sollte erkennen zu sein welche ich genommen habe Da der ESP 3V benötigt -> einmal in Reihe und einmal Parallel sind das dann 3V und 4400mAh
-
-
@smarthome2020
Alles circa Angaben
Display inkl. Treiberplatine -> 70€
ESP -> 20€
Antenne -> 5€
Akkus -> 30€
Kleinigkeiten z.B. LIPO Batteriestecker, Batteriesilberdraht, Schraubklemmen für ESP -> 10€Also rund ca 130€ bis 150€
Das Gehäuse ist selbstgedruckt... Das kriegt man also nirgends so zum kaufen.