The restful sensor seems to work
sensor.api_ninja_dad_jokes
API Ninja - Dad Jokes
OK joke: Where do elephants store luggage? In a trunk.
friendly_name: API Ninja - Dad Jokes
but the automation dosen’t! It says “anchor not supported for multiline text” as below.
Executed: November 8, 2024 at 12:07:00
Error: anchor not supported for multiline text
Result:
params:
domain: open_epaper_link
service: drawcustom
service_data:
background: white
rotate: 0
payload:
- type: icon
value: emoticon-lol
x: 1
'y': 1
size: 35
color: red
- type: icon
value: emoticon-confused
x: 260
'y': 92
size: 35
color: red
- type: text
value: Where do elephants store luggage? In a trunk.
font: ../../media/GothamRnd-Bold.ttf
x: 32
'y': 32
size: 26
color: black
anchor: lt
max_width: 232
y_padding: 0
spacing: 2
entity_id:
- open_epaper_link.00000335025f3e11
target:
entity_id:
- open_epaper_link.00000335025f3e11
running_script: false
Hellis81
(Hellis81)
November 8, 2024, 12:43pm
204
So what happens if you remove the anchor?
lt is the default anyway
Now it works, thanks!
alias: API Ninjas - Chuck Norris
description: Show an awesome Chuck Norris quote, joke, fact (mostly true!), every hour!
triggers:
- minutes: "8"
trigger: time_pattern
actions:
- data:
background: white
rotate: 0
payload:
- type: icon
value: comment-quote
x: 1
"y": 1
size: 35
color: red
- type: text
value: Chuck Norris
font: ../../media/GothamRnd-Bold.ttf
x: 38
"y": 10
size: 28
color: red
max_width: 200
y_padding: 0
spacing: 3
- type: icon
value: emoticon-confused
x: 240
"y": 110
size: 35
color: red
- type: dlimg
url: /config/media/chuck-icon.jpg
x: 240
"y": 100
xsize: 50
ysize: 50
rotate: 0
- type: text
value: "{{ state_attr('sensor.api_ninja_chuck_norris', 'joke') | string }}"
font: ../../media/GothamRnd-Bold.ttf
x: 5
"y": 50
size: >-
{% set string_len = state_attr('sensor.api_ninja_chuck_norris',
'joke') | length | int %} {% if string_len <= 50 %}
24 # Adjusted sizes for readability and fitting
{% elif string_len <= 60 %}
20
{% elif string_len <= 100 %}
18
{% elif string_len <= 150 %}
16
{% elif string_len <= 200 %}
14
{% else %}
12
{% endif %}
color: black
max_width: 200
y_padding: 2
spacing: 3
target:
entity_id:
- open_epaper_link.000003337A0B3E19
action: open_epaper_link.drawcustom
mode: restart
stevemann
(Stephen Mann (YAML-challenged))
January 15, 2025, 10:06pm
206
Hope this is the right place to ask…
Since the last update to open_epaper, I have been unable to send data to my ePaper displays.
Here is a script that I used to test the displays a year ago:
alias: ePaper Test
sequence:
- target:
entity_id:
- open_epaper_link.0000021F85C23B16
data:
background: white
rotate: 0
payload:
- type: line
x_start: 0
x_end: 296
y_start: 0
y_end: 128
width: 1
fill: black
- type: line
x_start: 296
x_end: 0
y_start: 0
y_end: 128
width: 1
fill: red
action: open_epaper_link.drawcustom
mode: single
When I run the script, I get this error:
“Failed to perform the action script/epaper_test. ‘NoneType’ object is not iterable”
I saw this in github: “Service target now uses device ID instead of entity ID”
Here is my device information:
And my modified script:
alias: ePaper Test
sequence:
- target:
device_id:
- 0000021F85C23B16
data:
background: white
rotate: 0
payload:
- type: line
x_start: 0
x_end: 296
y_start: 0
y_end: 128
width: 1
fill: black
- type: line
x_start: 296
x_end: 0
y_start: 0
y_end: 128
width: 1
fill: red
service: open_epaper_link.drawcustom
mode: single
But, I am getting the same error.
Any assistance would be appreciated.
jurasjo
(Juras)
January 16, 2025, 4:18am
207
stevemann
(Stephen Mann (YAML-challenged))
January 16, 2025, 5:12am
208
Thanks- I read the breaking changes on GitHub but never saw the page you referenced.
Also, since posting my question I found an easy way to get the device_id:
To get the Device ID:
Goto settings → Devices then click on the device.
Click on the device
Click on the plus button in Automations.
Click on “Use device as trigger”.
This will open the automation editor page.
Click three dots, choose “Edit in YAML” - you will see device_id and entity_id of this device.
Don’t save the automation, just exit the editor.
Hellis81
(Hellis81)
January 16, 2025, 5:55am
209
Why change this to something that is so much harder to find?
And it seems there are more breaking changes in the syntax also.
1 Like
arganto
January 16, 2025, 7:12am
210
Don’T understand and don’t like it either. At least (as everywhere else) the entity-id way of the service calls should be still possible, even if someone like to add (not replace) it to the device_id-way.
For those looking at this thread and wondering how to get started.
I’ve just bought these for the Access Point:
following this guide on how-to:
and these for the e-paper screens:
The screens ‘just work’ without any need for flashing/soldering etc first. Once you get them in the post (only took 7 days, arrived today) and they’re near a working ESP32-S3 N16R8 with OpenEPaper installed on it they auto-connect to it.
4 Likes
bogd
(Bogdan Sass)
February 28, 2025, 2:18pm
212
Friendly word of warning here - the ESP32-S3 has some issues when trying to do WiFi and BLE at the same time (it only has one radio). So if you go the BLE route, your AP might occasionally hang and stop responding.
I started out the same way (BLE-only ESLs), but I ended up flashing the ESLs with a custom firmware for 802.15 (they are very easy to flash over BLE, no need for soldering or pogo pins).
For the people who want to get started, I know the project documentation is a bit… difficult to follow at the moment . But there is a discord channel , and the people there are incredibly helpful. Including and especially atc1441 (one of the creators of the project), who seems to be one of the most patient people I have ever met…
bogd
(Bogdan Sass)
February 28, 2025, 2:22pm
213
One more way (the one I normally use):
go to developer tools / actions
choose “open_epaper_link.drawcustom”
switch to UI mode (click on “go to UI mode” on the bottom left)
click on “choose device”, and you can now use the search box to look for the correct ESL
switch back to YAML mode (“go to YAML mode” on the bottom left)
you now have the correct device_id populated in the yaml, you can c/p it to your automations
Yes, it is slightly annoying, but… luckily it is not something that needs to be done very often
Editing to add one more way I just tested - go to Developer Tools / Templates, and use the following template:
{% for dev in (integration_entities('open_epaper_link') | map('device_id') | unique | list) %}
{{dev}} - {{device_attr(dev, 'name')}}
{%- endfor%}
This will list all the device IDs and the corresponding names (MACs by default, or custom names you set in the OEPL AP).
four2six
(J.)
March 23, 2025, 2:55pm
214
hey @arganto
the code stopped working last friday… so you have the same issue?
It seems to be down to sensor.next_full_moon not reporting anything anymore.
{% set mond_tage
= count_the_days(states('sensor.next_full_moon'))|int %} {% set
mond_datum = strptime(states('sensor.next_full_moon'),"%Y-%m-%d
%H:%M:%S") %}
Did I miss a breaking change? Did you change your code or are you not using it anymore?
The mentioned code is not the problem. The sensor is. The cource site is currently down.
http://wannistvollmond.celll.net
Completely, not only for moon. Let’s wait if it comes back perhaps soon. If not, we have to find another source with api for German full moon.
four2six
(J.)
March 24, 2025, 12:01pm
216
thanks, I forgot it was a different service than the regular moon integration…
four2six
(J.)
March 25, 2025, 4:16pm
217
here’s an integration that works for me, it doesn’t have the “last full moon” sensor though…
Lunar Phase Integration for Home Assistant
The Lunar Phase integration is a custom component for Home Assistant that provides detailed information about the current phase of the moon. This integration leverages precise astronomical calculations to deliver accurate lunar data, making it a valuable addition for those interested in astronomy, astrology, or just tracking the moon’s phases.
Features
Moon Phase Sensor: Displays the current phase of the moon (e.g., New Moon, Wa…
I’m not sure I really understood what the old template showed…
The sensor just stores the last full moon coming from the integration if another the next full moon is then new in the sensor. To be able to show “yesterday”, etc.
Should work with the new integration as well. Will try and post an update. Thanks for the hint to the integration.
Installed the mentioned integration to get next full moon with that. Working.
Here my new templates for last_full moon (of course will have the real last full moon after the next full moon:
Code
- trigger:
- platform: state
entity_id: sensor.xxx_next_full_moon
sensor:
- name: Last Full Moon Helper
unique_id: unique_id_template_sensor_last_full_moon_helper
state: >
{% if trigger.from_state.state|as_datetime(0) != 0 %}
{{ trigger.from_state.state }}
{% else %}
{{ this.state }}
{% endif %}
icon: mdi:moon-full
- trigger:
- platform: state
entity_id: sensor.last_full_moon_helper
sensor:
- name: Last Full Moon
unique_id: unique_id_template_sensor_last_full_moon
state: >
{% if trigger.from_state.state|as_datetime(0) != 0 %}
{{ trigger.from_state.state }}
{% else %}
{{ this. State }}
{% endif %}
{% if 1 == 2 %}
{{ strptime(states('sensor.xxx_next_full_moon'),"%Y-%m-%d %H:%M:%S") - timedelta(days=29,hours=12,minutes=44) }}
{% endif %}
icon: mdi:moon-full
And then this items in weather tag
Code
- type: text
value: |
{% if states('sensor.moon_phase') == 'waning_gibbous' %}
Abnehmender Mond
{% elif states('sensor.moon_phase') == 'waning_crescent' %}
Abnehmende Sichel
{% elif states('sensor.moon_phase') == 'waxing_crescent' %}
Zunehmende Sichel
{% elif states('sensor.moon_phase') == 'waxing_gibbous' %}
Zunehmender Mond
{% else %}
{{ state_translated('sensor.moon_phase') }}
{% endif %}
x: 339
"y": 17
anchor: ra
size: 16
- type: text
value: >-
{% from 'easy_time.jinja' import count_the_days %}
{% set mond_tage = count_the_days(states('sensor.xxx_next_full_moon'))|int %}
{% set mond_datum = strptime(states('sensor.xxx_next_full_moon'),"%Y-%m-%dT%H:%M:%S+00:00") %}
{% if mond_tage > 10 %}
{% if states('sensor.last_full_moon') %}
{% set mond_tage = count_the_days(states('sensor.last_full_moon'))|int %}
{% endif %}
{% endif %}
{% if mond_tage < -4 %}
{{ mond_datum.day }}.{{ '{:02d}'.format(mond_datum.month) }}.
{% elif mond_tage < -2 %}
{{ mond_tage }}
{% elif mond_tage == -2 %}
Vorgestern
{% elif mond_tage == -1 %}
Gestern
{% elif mond_tage == 0 %}
Heute
{% elif mond_tage == 1 %}
Morgen
{% elif mond_tage == 2 %}
Übermorgen
{% elif mond_tage > 4 %}
{{ mond_datum.day }}.{{ '{:02d}'.format(mond_datum.month) }}.
{% elif mond_tage > 2 %}
{{ ' +' ~ mond_tage ~ " Tage" }}
{% endif %}
x: 339
"y": 34
anchor: ra
size: 16
- type: icon
value: >-
{% from 'easy_time.jinja' import count_the_days %} {% set mond_tage
= count_the_days(states('sensor.last_full_moon'))|int %} {% if
mond_tage == 0 %}
moon-full
{% else %}
{{ ("moon-" ~
states('sensor.moon_phase')|replace('_','-'))|replace('moon-new-moon','moon-new')|replace('moon-full-moon','moon-full')
}}
{% endif %}
x: 346
"y": 16
anchor: la
size: 40
color: black
donparlor
(Vincent Gagnon)
May 20, 2025, 3:44pm
220
Hello everyone and thanks for sharing your projects! I’ve just found this thread and very optimistic about using it for my own projet. My first question is does anyone know where to buy the smallest compatible ESL compatible with OpenEPaperLink ? Has anyone bought recently and can help find where to source compatible ESLs? I need small rectangular ones, smallest, and cheapest.
Ali Express is the cheapest source.
donparlor
(Vincent Gagnon)
June 7, 2025, 12:33pm
222
I’ve been searching Ali Express deeply for compatible ESLs but can’t find any. Can you share a link?