Control your display from your home automation system
Your display has its own personal address. Any system that can call a web address can write to it: Home Assistant, Jeedom, Node-RED, a script, a connected button. Nothing to install.
How it works
One address, two parameters. Call it, and the text replaces your personal message and scrolls across the panel within a minute.
https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=The+laundry+is+done
| Parameter | Role |
|---|---|
key |
Your personal key. It identifies you: do not publish it — anyone who has it can write to your display. |
message |
The text to display, encoded for a web address:
spaces become + or %20, accented
characters become sequences like %C3%A9. Almost every
tool does this for you.
|
Where to find your key
Sign in to your customer area, box “Your personal URL”, then “Show my URL”. You get the full address, key included.
Copy the address exactly as it appears, without
editing it. The key contains characters that are already encoded —
%2B, %3D — which must stay as they are.
Replace only the word MYNEWMESSAGE at the end.
Three things to know before you start
They explain nearly every “it doesn't work” report we get.
The address returns OK even when nothing happened —
missing key, misplaced parameters. This is intentional: your home
automation must never fail because of the display.
Check the panel, or your customer area, where the “Personal message” field should contain your text.
If your tool offers to send the data “as a POST” form,
it will be ignored and you will still get
OK. This is the most common mistake.
key and message must appear in the address,
after the ?. Whether you use GET or POST doesn't matter.
There is no duration or expiry: the text you send scrolls until another
call replaces it. For a short-lived message, plan a second call that
clears it, with an empty message=.
For a text that should clear itself, there is better: the “event” slot.
Sending a message also switches on the “Personal message” option if it was off. Your other options — time, weather, date — keep scrolling around it.
Events, which clear themselves
A message stays until the next one. An event — “Gate
open”, “Living room light on” — is true for a few
minutes. Add slot=evenement and it clears itself.
https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=Gate+open&slot=evenement&duree=5
| Parameter | Role |
|---|---|
slot |
evenement for a short-lived text. Left out, the address
behaves exactly as before: your existing links do not
change.
|
duree |
Display time in minutes. 5 by default, 120 at most. A value outside those bounds is brought back inside rather than rejected. |
It leaves your personal message alone and does not switch its display on. You can announce a gate ten times a day without losing the text you wrote.
The “Home automation events” option does have to be on in your customer area: the first event you send switches it on for you.
To remove an event before it expires, call the same address with an
empty message=.
Home Assistant
Two ways. A command you declare by hand, described below, which suits a text you write yourself. Or the Smart Led Messenger integration, which turns your sensors into sentences on its own.
The integration is open source (MIT license): the code can be read and modified on GitHub. No black box — you can check for yourself what it sends and receives.
You pick entities; it writes the sentence — “Gate open”, “Garage door open”, “Living room light on” — and sends it to the event slot, leaving your personal message alone. No automation to write per sensor, no encoding to watch.
Installing the integration with HACS
HACS is the add-on manager for Home Assistant. It must be installed already: if “HACS” is not in your left-hand menu, start with the HACS installation guide, then come back here.
Our integration is not in the default HACS list, so you have to tell HACS once where to find it. That is what a custom repository is. Once only — after that, updates arrive like those of any other add-on.
- In the left-hand menu, open HACS.
- Top right, click the three dots ⋮, then Custom repositories.
-
In the Repository field, paste this address:
https://github.com/SmartLedMessenger/ha-smart-led-messenger
- In the Type list, pick Integration. This is the step most often missed: without it, HACS rejects the repository.
- Click Add, then close the window.
- In HACS, search for Smart Led Messenger, open its page, then Download.
- Restart Home Assistant: Settings → System → the Restart button, top right. Until that restart happens, the integration stays invisible — that is expected.
- Finally, Settings → Devices & services → Add integration, search for Smart Led Messenger, and paste your key.
Once added, the Configure button opens the list of your entities: tick the ones that should be announced. Three or four beat thirty — the display has a single line.
Updates then arrive on their own: HACS flags the new version on the integration's page, you download it and restart Home Assistant. Your settings are kept. If nothing shows up although a version has been released, HACS has not seen it yet: menu ⋮ → Reload data.
Installing without HACS, by copying the files
Possible, but you need access to your Home Assistant configuration
folder, the one holding configuration.yaml. On a
Home Assistant OS install, that folder is not visible from the
interface: an add-on is needed.
The easiest is Studio Code Server — Settings → Add-ons → Add-on store, search for it, install, start, then Open Web UI. You get a file explorer in your browser. Samba share (the folder appears on your network) or Terminal & SSH do the same thing differently.
- Download the repository: ZIP archive, then unpack it.
-
Next to
configuration.yaml, create acustom_componentsfolder if there is none. -
Copy the
smart_led_messengerfolder into it — the folder itself, not the loose files. That is the classic mistake. -
Check that you end up with exactly this path:
config/custom_components/smart_led_messenger/manifest.json
- Restart Home Assistant, then add the integration as above.
Installed this way, it will not update itself: you will have to redo this for every version. That is what HACS is for.
The other way, with nothing to install: a command declared in
configuration.yaml that you call from your automations. This is
what you want for a text you write yourself.
1. Declare the command
In configuration.yaml, then restart Home Assistant:
# configuration.yaml rest_command: display: # Paste your address here, keeping the key exactly as # shown in the customer area, including the %2B and %3D. url: >- https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message={{ text | urlencode }} method: get
The urlencode filter is essential: without it, a message
containing a space, an accent or an ampersand would break the address.
2. Call it
# From an automation, a script, or the developer tools
action: rest_command.display
data:
text: "The laundry is done"
3. A few handy automations
The washing machine has finished — detected by power draw dropping:
automation:
- alias: "Display - washing machine done"
triggers:
- trigger: numeric_state
entity_id: sensor.washing_machine_power
below: 5
for: "00:05:00"
actions:
- action: rest_command.display
data:
text: "The laundry is done"
The day's forecast, every morning:
automation:
- alias: "Display - morning weather"
triggers:
- trigger: time
at: "07:15:00"
actions:
- action: rest_command.display
data:
text: >-
Today {{ state_attr('weather.home','temperature') }} degrees,
{{ states('sensor.air_quality') }}
Clear the message in the evening — the display resumes its other options:
automation:
- alias: "Display - clear in the evening"
triggers:
- trigger: time
at: "22:00:00"
actions:
- action: rest_command.display
data:
text: ""
Want a button on your dashboard? Create a script that
calls rest_command.display with a fixed text, and place it
as a button card. Handy for a family “Dinner's ready!”
Jeedom
Two ways to do it, depending on whether you prefer graphical scenarios or code.
In a scenario
Add an Action block, choose “HTTP request” and paste the address. Jeedom tags work inside the message:
https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=Living+room+temperature+#[Living room][Thermometer][Temperature]#+degrees
Watch out for spaces. Jeedom doesn't always encode
them: write + instead of spaces in the fixed text, as
above. For accents, prefer a Code block.
In a Code block
$text = "Alarm triggered in the garage";
$url = "https://www.smartledmessenger.com/push.ashx"
. "?key=YOUR_KEY"
. "&message=" . urlencode($text);
file_get_contents($url);
urlencode() takes care of spaces and accents: it's the
safest method.
Node-RED
A function node to build the address, an http request node to call it.
“function” node
// msg.payload holds the text to display
const key = "YOUR_KEY";
msg.url = "https://www.smartledmessenger.com/push.ashx"
+ "?key=" + key
+ "&message=" + encodeURIComponent(msg.payload);
return msg;
“http request” node
- Method: GET
- URL: leave blank — it comes from
msg.url - Return: a UTF-8 string
encodeURIComponent handles spaces and accents. Don't apply it
to the key, which is already encoded.
Script, terminal, scheduled task
The most direct way, and the best way to check that your key works before putting it into an automation.
Linux, macOS, Raspberry Pi
# --data-urlencode encodes spaces and accents for you
curl --get \
--data-urlencode "key=YOUR_PLAIN_KEY" \
--data-urlencode "message=Hello from the Raspberry" \
https://www.smartledmessenger.com/push.ashx
With --data-urlencode, give the key in plain
form — the one shown in the address, but with the
%2B turned back into + and the %3D
into =. Curl takes care of the encoding.
Simpler still: copy the whole address in quotes and don't use
--data-urlencode.
Windows, PowerShell
$text = "Backup complete"
$url = "https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=" `
+ [uri]::EscapeDataString($text)
Invoke-RestMethod $url
Every morning, via cron
# Bin reminder on Tuesday and Friday at 7am
0 7 * * 2,5 curl -s "https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=Take+out+the+bins"
From Claude, in plain language
Your display also speaks MCP (Model Context Protocol), the protocol used by AI assistants. Once connected, just say “show the London weather on my panel” or “send HAPPY BIRTHDAY GRANDMA”: Claude sets up your display on its own.
Connecting your display to Claude
On claude.ai (or in the Claude app): Settings → Connectors → Add custom connector, then fill in:
| Field | Value |
|---|---|
| Name | Smart Led Messenger |
| URL | https://www.smartledmessenger.com/mcp?key=YOUR_KEY |
YOUR_KEY is the same as for the push link above: the value
that follows key= in your personal address, copied exactly as
is (see “Where to find your key”).
An alternative, with no key to copy: connect the
server with the address https://www.smartledmessenger.com/mcp
(without ?key=…). Claude then opens a page where you sign
in with your usual email and password, and you grant access in one
click — nothing to copy. This is the flow you'll be offered if you add
Smart Led Messenger from Claude's connector directory.
Not only Claude: any MCP-compatible assistant can
drive your display. With Mistral Vibe, choose
Vibe/Work to add a custom MCP connector, using the
address https://www.smartledmessenger.com/mcp: you can
then personalize the display in plain language, just as from Claude.
What Claude can do
| You say | What happens |
|---|---|
| “Show the Manchester weather” | Turns on the weather and sets the city to Manchester |
| “Send DINNER IS READY” | The message scrolls across the panel within a minute |
| “Drop the saying and put the BBC news up” | Adjusts the matching options |
| “What's my panel showing right now?” | Reads your settings and shows the panel preview |
The URL contains your personal key: the connector therefore grants control over your display. Don't share this URL, any more than your push link.
If something goes wrong
I get “OK” but nothing shows up
This is the most common symptom, and “OK” means nothing. Three causes, in order of frequency:
The parameters are in the request body instead of
the address. Check that your tool really puts
?key=…&message=… in the URL.
The key was edited. A %2B turned into
+, or a + turned into a space when copying.
Show it again from the customer area and paste it back.
You didn't wait. The display checks the site every thirty seconds and finishes the message in progress: allow up to a minute.
To settle it, open your customer area: if the “Personal message” field contains your text, the call worked and the problem is on the display side.
I get “Invalid key”
The key is unreadable for the server. Show it again from the customer area and copy the whole address, without changing anything.
This response is actually a good sign: it proves your call is
reaching the server with a key parameter.
The accents display oddly
The text wasn't encoded. Use the filter your tool provides:
urlencode for Home Assistant and Jeedom,
encodeURIComponent for Node-RED,
--data-urlencode for curl.
Also worth knowing: the panel doesn't carry accented capitals.
À will show as A, and ÉTÉ
will become ETE. Accented lowercase letters, on the
other hand, display correctly.
How to clear the message
Call the address with an empty message:
https://www.smartledmessenger.com/push.ashx?key=YOUR_KEY&message=
The panel then resumes its other options. If none are enabled, it shows nothing at all.
How long can a message be?
Technically there's no limit, but keep in mind that a scrolling panel shows only one thing at a time: at normal speed, a hundred characters take about a dozen seconds to scroll past, and your other options queue up behind them.
A short sentence gets read; a paragraph gets endured.
Can I control several displays separately?
Not today. The key identifies your account, not a device: all displays linked to the same account show the same message.
For different messages, you currently need one account per display. Write to us if the need comes up — it will help us prioritise it.
Does my key have an expiry date?
No, it stays valid. In return it can't be revoked on a self-service basis: if you think it has leaked, write to us.
Treat it like a password. Don't publish it in a configuration shared on a forum or on GitHub.
A use case that doesn't fit these examples? Write to us — these pages are shaped by your feedback.