You can see it on the AP UI. And explained in the docs. There are a lot of other helpful basic infos in the WIKI.
Good to hear that you made progress.
The HA integration was really easy and works great. Let me know if you need help.
Also very interested if someone created a 3D printable mount. I did have a look at it, but never found anything yet.
I would buy a 3D printer if I could make my own mounts for these Solum displays.
I would like to have a model that can make the display stand-alone, 2.9" and 1.54" screens.
In addition I would like a mount that I can use on the front of a shelf. In my mind I would use double sided tape to attach the mount to the shelf. The display would then somehow clip into the mount.
If anyone has found anything on amaz0n that might work I would be interested.
Thanks.
I did some tinkering today (literally as I created it with Tinkercad ) And the result is quiet nice.
The small 1.54" display also fits in it, but it is a bit too wide for it. I made a smaller one for the 1.54 inch version. I also added a flat version for both. The flat version you can use to mount it on a wall.
(https://www.printables.com/model/692410-29-inch-29-epaper-displaytag-holder)
Anyone here know how I can add this as an automation. I have tried all kind of things, but really dont understand the whole Jinja templating in automations very well. I want to have the pickup dates for garbage sorted over de 4 lines of the display. I have it running in the template part of Home assistant. So the result is the correct Service call. But I just can not figure out how to create an automation out of this.
{% set restafval_date = states('sensor.almere_restafval')|as_datetime %}
{% set gft_date =states('sensor.almere_gft')|as_datetime %}
{% set papier_date = states('sensor.almere_papier')|as_datetime %}
{% set pmd_date =states('sensor.almere_pmd')|as_datetime %}
{% set dates = [{'name': 'Restafval:', 'date': restafval_date},
{'name': 'GFT:', 'date': gft_date},
{'name': 'Papier:', 'date': papier_date},
{'name': 'PMD:', 'date': pmd_date}] %}
{% set sorted_dates = dates | sort(attribute='date') %}
service: open_epaper_link.lines4
data:
line1: "{{ sorted_dates[0]['name']}} {{sorted_dates[0]['date'].strftime('%A %m-%d') }}"
line2: "{{ sorted_dates[1]['name']}} {{sorted_dates[1]['date'].strftime('%A %m-%d') }}"
line3: "{{ sorted_dates[2]['name']}} {{sorted_dates[2]['date'].strftime('%A %m-%d') }}"
line4: "{{ sorted_dates[3]['name']}} {{sorted_dates[3]['date'].strftime('%A %m-%d') }}"
border: r
format1: lwrb
format2: lwrb
format3: lwrb
format4: lwrb
target:
entity_id: open_epaper_link.00000238ff7e3b19
enabled: true
This results in :
service: open_epaper_link.lines4
data:
line1: "Papier: Thursday 12-28"
line2: "PMD: Saturday 12-30"
line3: "GFT: Tuesday 01-02"
line4: "Restafval: Friday 01-05"
border: r
format1: lwrb
format2: lwrb
format3: lwrb
format4: lwrb
target:
entity_id: open_epaper_link.00000238ff7e3b19
enabled: true
If i understood you correctly, here’s how i would do it for a first time:
Go to Settings (I’m using the german translation, so i’m sort of guessing the menu entries) in the left pane, the Automations & Scenes in the middle, Create Automation on the bottom right, then New Automation (the first entry), then the three dots on the top right, choose ‘edit as YAML’, then replace everything with something like this:
alias: tag0000021876B03B18
description: ""
trigger:
- platform: time_pattern
minutes: /55
condition:
- condition: time
after: "05:00:00"
before: "23:00:00"
weekday:
- sat
- fri
- thu
- wed
- tue
- mon
- sun
action:
- service: open_epaper_link.lines4
data:
line1: >-
{{
['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'][now().weekday()]
}} {{ now().day }}.{{ now().month }}. {{states.sensor.time.state}}
line2: >-
SA:{{as_timestamp(states.sun.sun.attributes.next_rising) |
timestamp_custom(" %H:%M") | string }}, SU: {{
as_timestamp(states.sun.sun.attributes.next_setting) |
timestamp_custom(" %H:%M") | string }}
line3: >-
Jetzt: {{ states('sensor.openweathermap_condition') | string }}/{{
states('sensor.openweathermap_feels_like_temperature') | string }}c
line4: >-
M: {{ states('sensor.openweathermap_forecast_condition') | string }}/{{
states('sensor.openweathermap_forecast_precipitation_probability') |
string }}%/{{ states('sensor.openweathermap_forecast_temperature') |
string }}c
border: r
format1: rbrw
format2: lwrb
format3: lwrb
format4: lwrb
target:
entity_id: open_epaper_link.0000021876B03B18
enabled: true
mode: single
This is a similar automation of mine, replace it in parts where it needs to be replaced with your code. The indentation is important.
You can let the automation run with the three dots and “run/play”, so you don’t have to wait for the time to come. If you have any problems with your yaml after all that, post it here and we’ll have a look.
Thanks, but that is quite similar to the automation I already had myself:
service: open_epaper_link.lines4
data:
line1: "Rest : {{ states('sensor.almere_restafval')}}"
line2: "GFT : {{ states('sensor.almere_gft')}}"
line3: "Papier: {{ states('sensor.almere_papier')}}"
line4: "PMD : {{ states('sensor.almere_pmd')}}"
border: r
format1: lwrb
format2: lwrb
format3: lwrb
format4: lwrb
target:
entity_id: open_epaper_link.00000238ff7e3b19
enabled: true
I think the problem is where/how I need to put this part
{% set restafval_date = states('sensor.almere_restafval')|as_datetime %}
{% set gft_date =states('sensor.almere_gft')|as_datetime %}
{% set papier_date = states('sensor.almere_papier')|as_datetime %}
{% set pmd_date =states('sensor.almere_pmd')|as_datetime %}
{% set dates = [{'name': 'Restafval:', 'date': restafval_date},
{'name': 'GFT:', 'date': gft_date},
{'name': 'Papier:', 'date': papier_date},
{'name': 'PMD:', 'date': pmd_date}] %}
{% set sorted_dates = dates | sort(attribute='date') %}
I tried putting that after Data, but I keep on getting syntax errors.
got it working ! Using this automation:
alias: ePaper Update Garbage times
description: ""
trigger:
- platform: time_pattern
hours: /23
action:
- variables:
dates:
- name: "Rest:"
date: "{{ states('sensor.almere_restafval')|as_datetime }}"
- name: "GFT:"
date: "{{ states('sensor.almere_gft')|as_datetime }}"
- name: "Papier:"
date: "{{ states('sensor.almere_papier')|as_datetime }}"
- name: "PMD:"
date: "{{ states('sensor.almere_pmd')|as_datetime }}"
sorted_dates: "{{ dates | sort(attribute='date') }}"
- service: open_epaper_link.lines4
data:
line1: "{{ sorted_dates[0]['name'] }} {{sorted_dates[0]['date'][:10]}}"
line2: "{{ sorted_dates[1]['name'] }} {{sorted_dates[1]['date'][:10]}}"
line3: "{{ sorted_dates[2]['name'] }} {{sorted_dates[2]['date'][:10]}}"
line4: "{{ sorted_dates[3]['name'] }} {{sorted_dates[3]['date'][:10]}}"
border: r
format1: lwrb
format2: lwrb
format3: lwrb
format4: lwrb
target:
entity_id: open_epaper_link.00000238ff7e3b19
enabled: true
I’m looking to use the Bahnschrift font on my epaper displays. I found the ttf font available online and have it implemented but on the epaper display the font is very jaggedy.
I’m using the Home Assistant Open EPaper Integration. I have other ttf fonts implemented and they look fine but not perfect. I understand why with the resolution of the display being so low.
On this page,
one of the images shows the Bahnschrift font being used and it looks good on the display.
Does anyone know how I could implement it? I found the files on the Access Point. I click on the folder icon (top right to the right of online),
Then in the /fonts folder I have the fonts,
I have no idea how to reference these from the Home Assistant service call,
- service: open_epaper_link.drawcustom
If you are already using them, what is the request of your post exactly?
How is the generated picture in the HA folder (see the cam-picture) look like? Same or different than the tag is showing?
I downloaded a ttf Bahnschrift font that looks terrible and is really blocky.
I was hoping that the version of the Bahnschrift font on the access point itself would be better, much like what is on the picture from that website. It looks clean and not blocky on that picture.
No answers possible to my other questions?
Here is the camera version,
and the actual,
I was hoping that the .vlw files on the epaper access point already would be a better quality than the ttf I downloaded.
target:
entity_id: open_epaper_link.00000282ded33b1c
data:
background: "{{ background_color }}"
rotate: 0
payload:
- type: text
value: Lunch Today
anchor: lm
font: ../media/fonts/Lato-LightItalic.ttf
x: 10
"y": 11
size: 20
color: "{{ lunch_highlight_color }}"
- type: text
value: "{{ lunch }}"
anchor: lm
font: ../media/fonts/BAHNSCHRIFT.TTF
x: 10
"y": 38
size: 20
color: "{{ lunch_highlight_color }}"
- type: text
value: Dinner Today
anchor: lm
font: ../media/fonts/Lato-LightItalic.ttf
x: 10
"y": 64
size: 20
color: "{{ dinner_highlight_color }}"
- type: text
value: "{{ dinner }}"
anchor: lm
font: ../media/fonts/Interstate-regular.ttf
x: 10
"y": 92
size: 20
color: "{{ dinner_highlight_color }}"
- type: text
value: "{{ states(battery_sensor) | int(0) | string }}%"
anchor: lm
font: ../media/fonts/Lato-Hairline.ttf
x: 263
"y": 117
size: 15
color: "{{ text_color }}"
Perhaps slightly off topic lol the dinner comes from here:
Nordpool (electricity market) hour prices.
I am not using the EPaper integration, I push data directly to the AP with AppDaemon scripts. It’s all here for the curious:
What font is that? The large font, 0.97, 1.11, 0.53
I like it!!
EDIT: I see it in the code,
FONT_BIG = ImageFont.truetype('/config/apps/Bungee-Regular.ttf', size=46)
FONT_STD = ImageFont.truetype('/config/apps/FreeMonoBold.ttf', size=16)
FONT_UPD = ImageFont.truetype('/config/apps/FreeMonoBold.ttf', size=14)
I’ll check it out, thanks.
This looks really neat, thank you!
When starting skript, it creates this error in appdaemon though:
2024-01-04 16:45:31.936818 WARNING epaper_small_chart: ------------------------------------------------------------
2024-01-04 16:46:56.060155 WARNING epaper_small_chart: ------------------------------------------------------------
2024-01-04 16:46:56.061166 WARNING epaper_small_chart: Unexpected error in worker for App epaper_small_chart:
2024-01-04 16:46:56.062041 WARNING epaper_small_chart: Worker Ags: {'id': '309b12bfdb874f4d81038f4e181e91d9', 'name': 'epaper_small_chart', 'objectid': '2695ac4dd6064c5cbd24c0c583ed4e49', 'type': 'event', 'event': 'EPAPER_GENERATE_CHART_SMALL', 'function': <bound method SmallDisplayChart.generate_chart of <epaper_small_display.SmallDisplayChart object at 0xffff8c3f78d0>>, 'data': {'metadata': {'origin': 'LOCAL', 'time_fired': '2024-01-04T15:46:56.050099+00:00', 'context': {'id': '01HKAJFYDDMVW5F87EMB1GZP1X', 'parent_id': None, 'user_id': '00f1eabca01543f7b8f40ed8b97e9425'}}}, 'pin_app': True, 'pin_thread': 1, 'kwargs': {'__thread_id': 'thread-1'}}
2024-01-04 16:46:56.062888 WARNING epaper_small_chart: ------------------------------------------------------------
2024-01-04 16:46:56.065978 WARNING epaper_small_chart: Traceback (most recent call last):
File "/usr/lib/python3.11/site-packages/appdaemon/threading.py", line 1095, in worker
funcref(args["event"], data, self.AD.events.sanitize_event_kwargs(app, args["kwargs"]))
File "/config/appdaemon/apps/epaper_small_display.py", line 33, in generate_chart
VALUES = (self.get_state(SENSOR, 'today')[HOUR_NOW::] + \
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
TypeError: 'NoneType' object is not subscriptable
2024-01-04 16:46:56.066973 WARNING epaper_small_chart: ------------------------------------------------------------
What did I miss?
EDIT:
Appdaemon has these packages, and they seem to install without an error
python_packages:
- Pillow
- requests
- datetime
I replied on the Github issue you created. The code is expecting an array of data, which your sensor doesn’t provide. Have a look at my reply, there is more info there.
To anyone interested in German waterways. There is a WSV display in my repo.
Does it work perfectly? No idea, I’m not using German Water Levels…
But, if you want a display that shows historical data instead of forecasting the future. This should be a good starting point. The AppDaemon class is fetching data from a REST API that also is updated in HA as a sensor.
Code is the same repo.
That’s really neat, thank you for helping out!
I find it quite counter-intuitive to have the values from right to left, any way to revert that?