Skip to content

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
ParameterRole
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.

Get my personal address

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.

1. An “OK” response proves nothing

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.

2. Parameters go in the address, never in the body

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.

3. The message stays until the next one

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=.

Sending a message also switches on the “Personal message” option if it was off. Your other options — time, weather, date — keep scrolling around it.

Home Assistant

Declare a command once and for all, then call it from any automation.

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): SettingsConnectorsAdd custom connector, then fill in:

FieldValue
NameSmart 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.

What Claude can do

You sayWhat 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.