epaper tags und andere bildschirmchen
im laufe der jahre habe ich in der automatischen wohnung relativ viele bildschirmchen aufgestellt, weil die automatische wohnung nicht nur ohne app und mobiltelefon bedienbar sein soll, sondern auch ausserhalb von apps und mobiltelefonen mit uns kommunizieren können soll.
meine weitaus am häufigsten genutzte information die ich gerne auf einen blick erkennen möchte sind uhrzeit. und datum. deshalb hängt die wohnung voll mit uhren, nicht nur kuckucksuhren, auch LED-matrix displays. natürlich stehen uhrzeit und datum auch auf handies, armbanduhren, laptops und ipads, aber offensichtlich ist es mir wichtig überall hinsehen zu können um die uhrzeit oder das datum zu erfahren. wenn ich keine lust habe zu schauen, beobachte ich mich erstaunlich oft dass ich im kinderzimmer oder in der küche siri oder snips nach der uhrzeit oder dem datum frage. das ist vor allem praktisch, wenn man mit geschlossenen oder verquollenen augen im bett liegt. gegen den homepod von apple und apples siri kann man viel sagen, aber was der wirklich gut kann ist auch die sehr leise gesprochene frage nach der uhrzeit zu hören und zu beantworten.
noch wichtiger ist mir die zeitumstellungen zweimal im jahr nicht manuell durchführen zu müssen. computer und telefone bekommen das mittlerweile gut alleine hin, aber natürlich auch alle uhren die irgendwie am home assistant hängen. die einzige uhr die ich bei uns noch manuell umstellen muss ist die der microwelle.
die mehrheit unserer displays braucht eine konstante stromversorgung. displays, sensoren oder aktoren selbst aus esp8266s, esp32s oder arduinos zu bauen ist dank esphome wirklich einfach. batteriebetriebene geräte selbst zu bauen ist hingegen vergleichsweise schwer. und meinen ersten selbstgebauten epaper-display hat es auch schnell dahingerafft, entweder weil die treiber nicht gut optimiert waren oder ich einfach zu doof war das alles herstellerspezifisch zu implementieren.
deshalb wurde ich hellhörig als ich hörte, dass man die epaper preisschilder die man mittlerweile überall sieht und bekommt, leicht hacken kann. informationen zu einzelnen preisschildern, ihrer hackability und steuerung werden im OpenEPaperLink reposititory auf github gesammelt.
so sehr ich die idee mag ausgemusterte oder neue günstige epaper-displays für eigene zwecke zu nutzen, so wenig lust hatte ich die aufzumachen und eigene firmware einzuspielen. im prinzip ist das nicht all zu schwer, aber ich entschied mich den einfacheren weg zu gehen: epaper-schilder zu kaufen, die bereits kompatibel sind.
damals, als ich dafür eine quelle suchte, habe ich die kompatiblen und BLE fähigen schildchen nur bei alibaba gefunden (damals für ca. $10/stück). der primäre suchbegriff ist „Picksmart“, der produktname bei alibaba lautet:
Picksmart ODM 2.9 Inch 3 Color Eink Electronic Shelf Label ESL Epaper BLE 5.0 Electronic Price Tag Digital Retail RED Display

das schildchen im flur zeigt an wenns (laut regenradar) regent, sonst ein wettersymbol und die aussentemperatur. und natürlich das datum.
um die dinger zu steuern braucht man dann aber noch einen zugangspunkt, access point. auch dazu gibt es es tonnenweise doku bei OpenEPaperLink. ich habe mir einen „AP“ aus einen ESP32-S3 mit display und ESP32-C6 gebaut (spaghetti AP). den fertig gebauten AP hab ich dann in unseren „serverraum“ gestellt, wo er sich gut mit den drei preisschildern verbinden kann.

der OpenEPaperLink „spaghetti AP“ im serverraum. theoretisch kann man auf dem auch rummalen oder belibige inhalte anzeigen lassen, aber die sieht im serverraum ja niemand.
im webinterface des APs kann man bereits inhalte definieren, die auf den epaper-schildchen gezeigt werden können (datum, countdowns, wetter, bilder, kalender, etc.) aber richtg interessant wird das natürlich erst mit home assistant, dort liegen schliesslich alle meine daten, vor allem genau die wetterdaten, die ich auch anzeigen will: regnets? wenn ja, wann genau und wie stark? und die ewige frage: welcher tag ist heute?
die home assistant integration für den OpenEPaperLink hat gerade einen grossen versionssprung hingelegt und kann angeblich auch ohne den AP mit bestimmten tags reden.
This release introduces support for direct communication with ATC BLE tags via Bluetooth Low Energy (BLE). This means an AP is no longer required for interacting with tags that support BLE.
welche preisschilder das sind habe ich noch nicht recherchiert, meine werden jedenfalls nicht gefunden und ATC BLE bedeutet wohl: tags mit der geflashten/gehackten ATC custom firmware.
in home assistant kann man mit der integration dann beliebig auf den preisschildern rummalen. so sieht die aktion aus, mit der ich ein wetter-icon, die temperatur und das datum auf die dinger schreibe.
action: open_epaper_link.drawcustom
target:
device_id:
- 0757317ceda12c6b521765bdf6987139
- bc59cd23287f1d22d3f2d90b5900cdbd
data:
background: white
dry-run: false
ttl: 360
payload:
- type: text
font: ppb.ttf
x: 198
"y": 42
anchor: mm
color: red
value: >-
{{
['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][now().weekday()]
}}
size: >-
{% set tagesname =
['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag']
[now().weekday()] %} {% if tagesname|length == 6 %} 48 {% elif
tagesname|length == 7 %} 41 {% elif tagesname|length == 8 %} 36 {% elif
tagesname|length == 10 %} 26 {% else %} 26 {% endif %}
- type: text
value: >-
{% set tagesdatum = now().day|string %} {% set monatsname =
['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember']
[now().month|int()-1] %} {{ tagesdatum }}. {{ monatsname }}
font: ppb.ttf
x: 198
"y": 84
anchor: mm
size: 28
color: black
- type: icon
value: >-
{% set condition = states('weather.dwd_berlin_tegel') %} {%if
(condition == "sunny") %}{{"weather-sunny"}} {%elif (condition ==
"clear-night") %}{{"weather-night"}} {%elif (condition ==
"cloudy")%}{{"weather-cloudy"}} {%elif (condition ==
"fair")%}{{"weather-sunny"}} {%elif (condition ==
"sunny")%}{{"weather-sunny"}} {%elif (condition == "fog")%}
{{"weather-fog"}} {%elif (condition == "pouring")%}
{{"weather-pouring"}} {%elif (condition == "heavyrainandthunder")%}
{{"weather-lightning-rainy"}} {%elif (condition == "heavyrainshowers")%}
{{"weather-pouring"}} {%elif (condition ==
"heavyrainshowersandthunder")%}{{"weather-fog"}} {%elif (condition ==
"heavysleet")%}{{"weather-snowy-heavy"}} {%elif (condition ==
"heavysleetandthunder")%}{{"weather-snowy-heavy"}} {%elif (condition ==
"heavysleetshowers")%}{{"weather-snowy-rainy"}} {%elif (condition ==
"heavysleetshowersandthunder")%}{{"weather-snowy-rainy"}} {%elif
(condition == "heavysnow")%}{{"weather-snowy-heavy"}} {%elif (condition
== "heavysnowandthunder")%}{{"wweather-snowy-rainy"}} {%elif (condition
== "heavysnowshowers")%}{{"weather-snowy-heavy"}} {%elif (condition ==
"heavysnowshowersandthunder")%}{{"weather-snowy-heavy"}} {%elif
(condition == "lightrain")%}{{"weather-rainy"}} {%elif (condition ==
"lightrainandthunder")%}{{"weather-lightning-rainy"}} {%elif (condition
== "lightrainshowers")%}{{"weather-partly-rainy"}} {%elif (condition ==
"lightrainshowersandthunder")%}{{"weather-partly-lightning"}} {%elif
(condition == "lightsleet")%} {{"weather-snowy-rainy"}} {%elif
(condition == "lightsleetandthunder")%}{{"weather-snowy-rainy"}} {%elif
(condition == "lightsleetshowers")%} {{"weather-snowy-rainy"}} {%elif
(condition == "lightsnow")%} {{"weather-snowy"}} {%elif (condition ==
"lightsnowandthunder")%}{{"weather-snowy"}} {%elif (condition ==
"lightsnowshowers")%}{{"weather-snowy-rainy"}} {%elif (condition ==
"lightssleetshowersandthunder")%}{{"weather-snowy-rainy"}} {%elif
(condition == "lightssnowshowersandthunder")%}{{"weather-snowy-rainy"}}
{% elif (condition == "partlycloudy") and states("sun.sun") ==
"above_horizon"%}{{"weather-partly-cloudy"}} {% elif (condition ==
"partlycloudy") and states("sun.sun") ==
"below_horizon"%}{{"weather-night-partly-cloudy"}} {% elif (condition ==
"rainy")%}{{"weather-rainy"}} {%elif (condition ==
"rainandthunder")%}{{"weather-lightning-rainy"}} {%elif (condition ==
"rainshowers")%}{{"weather-partly-rainy"}} {%elif (condition ==
"rainshowersandthunder")%}{{"weather-lightning-rainy"}} {%elif
(condition == "sleet")%}{{"weather-snowy"}} {%elif (condition ==
"sleetandthunder")%}{{"weather-snowy"}} {%elif (condition ==
"sleetshowers")%}{{"weather-snowy"}} {%elif (condition ==
"sleetshowersandthunder")%}{{"weather-snowy"}} {%elif (condition ==
"snow")%}{{"weather-snowy"}} {%elif (condition ==
"snowandthunder")%}{{"weather-snowy"}} {%elif (condition ==
"snowshowers")%}{{"weather-snowy"}} {%elif (condition ==
"snowshowersandthunder")%}{{"weather-snowy"}} {%elif (condition ==
"snowy")%}{{"weather-snowy"}} {% else %} {{"cloud-question"}} {% endif
%}
x: 10
"y": 10
size: 80
color: black
- type: text
value: "{{ states(\"sensor.temperature_berlin_tegel\") | float(-1) | round(0) }}°"
font: ppb.ttf
x: 50
"y": 104
size: 32
color: black
anchor: mm
die epaper schildchen laufen hier jetzt seit oktober 2024 problemlos. die batterien lassen sich tauschen und weil die tags magnetisch sind, lassen sie sich auch überall hinhängen. ich mag die displays sehr, auch weil sie gut ablesbar sind, aber mehr von denen muss ich mir nicht unbedingt kaufen. ausser mir fällt noch was ein, wo sie wirklich nütlzich sein könnten.