Skip to content

Instantly share code, notes, and snippets.

@g4bri3lDev
Last active October 2, 2025 23:40
Show Gist options
  • Select an option

  • Save g4bri3lDev/16a83ad17f8e7a92085f5e00e5bdeb1f to your computer and use it in GitHub Desktop.

Select an option

Save g4bri3lDev/16a83ad17f8e7a92085f5e00e5bdeb1f to your computer and use it in GitHub Desktop.
blueprint:
name: Minecraft Server Dashboard 2.6"
description: >
# Minecraft Server Dashboard for OpenEPaperLink
Displays real-time Minecraft server information on e-paper displays including:
- Server name and online/offline status
- Current player count vs. maximum players
- Server version information
- Grid of online players (up to 12 slots with overflow indicator)
## Requirements
- [OpenEPaperLink Integration](https://github.com/OpenEPaperLink/Home_Assistant_Integration) installed
- [Minecraft Server](https://www.home-assistant.io/integrations/minecraft_server/) installed
author: g4bri3lDev
domain: automation
source_url: https://gist.github.com/g4bri3lDev/16a83ad17f8e7a92085f5e00e5bdeb1f/raw
input:
displays:
name: E-Paper Display(s)
description: Which e-paper displays to show the dashboard on
selector:
device:
multiple: true
filter:
integration: open_epaper_link
server_name:
name: Server Name
description: Display name for your Minecraft server
default: "Minecraft Server"
selector:
text:
minecraft_status_sensor:
name: Minecraft Server Status Sensor
description: Binary sensor that shows server online/offline status
selector:
entity:
filter:
domain: binary_sensor
minecraft_players_sensor:
name: Minecraft Players Online Sensor
description: Sensor that shows current player count and has players_list attribute
selector:
entity:
filter:
domain: sensor
minecraft_version_sensor:
name: Minecraft Server Version Sensor
description: Sensor that shows the server version
selector:
entity:
filter:
domain: sensor
optional:
name: Optional
icon: "mdi:cog"
collapsed: true
input:
max_players:
name: Maximum Players
description: Maximum number of players your server supports
default: 20
selector:
number:
min: 1
max: 100
step: 1
font_file:
name: Font File
description: Font file to use for text
default: "ppb.ttf"
selector:
text:
variables:
server_name: !input server_name
font_file: !input font_file
minecraft_status: !input minecraft_status_sensor
minecraft_players: !input minecraft_players_sensor
minecraft_version: !input minecraft_version_sensor
max_players: !input max_players
players_list: "{{ state_attr(minecraft_players, 'players_list') or [] }}"
trigger:
- trigger: state
entity_id: !input minecraft_status_sensor
- trigger: state
entity_id: !input minecraft_players_sensor
action:
- action: open_epaper_link.drawcustom
target:
device_id: !input displays
data:
background: white
rotate: 0
dry-run: false
payload: >
[
{
"type": "rectangle",
"x_start": 4,
"y_start": 4,
"x_end": 292,
"y_end": 24,
"color": "black",
"fill": "black"
},
{
"type": "text",
"value": "{{ server_name }}",
"x": 148,
"y": 14,
"font": "{{ font_file }}",
"anchor": "mm",
"color": "white"
},
{
"type": "rectangle",
"x_start": 4,
"y_start": 28,
"x_end": 292,
"y_end": 48,
"color": "black",
"fill": "gray"
},
{
"type": "text",
"value": "{{ states(minecraft_players) }}/{{ max_players }}",
"x": 8,
"y": 38,
"font": "{{ font_file }}",
"anchor": "lm",
"color": "black",
"size": 14
},
{
"type": "text",
"value": "{% if is_state(minecraft_status, 'on') %}Online{% else %}Offline{% endif %}",
"x": 148,
"y": 38,
"font": "{{ font_file }}",
"anchor": "mm",
"color": "{% if is_state(minecraft_status, 'on') %}black{% else %}red{% endif %}",
"size": 14
},
{
"type": "text",
"value": "{{ states(minecraft_version) }}",
"x": 288,
"y": 38,
"font": "{{ font_file }}",
"anchor": "rm",
"color": "black",
"size": 14
},
{% if players_list | length > 0 %}
{% for player in players_list[:12] %}
{
"type": "rectangle",
"x_start": {{ 4 + ((loop.index0 % 3) * 97) }},
"x_end": {{ 97 + ((loop.index0 % 3) * 97) }},
"y_start": {{ 52 + ((loop.index0 // 3) * 24) }},
"y_end": {{ 72 + ((loop.index0 // 3) * 24) }},
"outline": "black"
},
{
"type": "text",
"value": "{% if loop.index0 < 11 %}{{ player }}{% else %}+{{ players_list | length -11 }}{% endif %}",
"x": {{ 51 + ((loop.index0 % 3) * 97) }},
"y": {{ 62 + ((loop.index0 // 3) * 24) }},
"font": "{{ font_file }}",
"anchor": "mm",
"color": "black",
"size": 12
},
{% endfor %}
{% else %}
{
"type": "text",
"value": "No Players online",
"x": 148,
"y": 96,
"font": "{{ font_file }}",
"anchor": "mm",
"color": "black",
"size": 14
},
{% endif %}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment