[APP][Pro] Shelly Wall Display Dashboard

[Tutorial] Instant Local Control: Triggering Homey Flows via Shelly Wall Display XL Buttons (MQTT)

Not directly related to the app but i guess it could help some of you here :slight_smile:

If you want to use the physical side-buttons of your Shelly Wall Display XL to trigger Homey Advanced Flows completely locally and without any cloud delay, MQTT is the perfect way to go. Unlike older Gen-1 Shellys, the Wall Display XL keeps its cloud connection alive even when MQTT is enabled!

Here is a step-by-step guide on how to parse the button clicks directly in Homey.

:clipboard: Prerequisites

  • A Homey Pro with the MQTT Client app installed.

  • An active MQTT Broker running in your local network (e.g., the MQTT Broker app directly on Homey, or Mosquitto).

1. Shelly Wall Display XL Configuration

Open your Wall Display’s web interface (via its IP address) and navigate to Settings → MQTT. Configure it as follows:

  • Enable MQTT: [x] Checked

  • RPC status notifications over MQTT: [x] Checked (Crucial for button events!)

  • Generic status update over MQTT: [x] Checked

  • Server: YOUR_BROKER_IP:1883

  • Username / Password: Enter your MQTT broker credentials.

:warning: Important: Look closely at the exact name of your device’s MQTT topic prefix (e.g., ShellyWallDisplay-<SHELLYID>). MQTT topics are strictly case-sensitive! Copy it exactly as it appears.

Save and let the device reboot.

Important: dont select the RPC status notifications (they can flood the messages, e.g. every brightness message gets send… if you just want the buttons: deactivate the checkbox)

2. The MQTT Payload Structure

When you press a physical button, the Shelly fires a nested JSON payload to the sub-topic /events/rpc. It looks like this:

JSON

{
  "src": "ShellyWallDisplay-<SHELLYID>",
  "method": "NotifyEvent",
  "params": {
    "events": [
      {
        "component": "input",
        "id": 4,
        "event": "single_push"
      }
    ]
  }
}

3. Homey Advanced Flow Setup

Create a new Advanced Flow. You will need two logic variables in Homey first: Shelly_WallDisplay_Event (Text) and Shelly_WallDisplay_Event_Nr (Number).

Step A: The Trigger

  • Use the MQTT Client card: “Trigger when a message is received on [Topic]”

  • Topic: YourDeviceTopic/events/rpc (e.g., ShellyWallDisplay-<SHELLYID>/events/rpc)

Step B: Parsing the JSON (Logic Cards)

Connect the trigger to two Logic parsing cards simultaneously:

  1. Top Card (Extract the Event type):

    • Action: Parse [Message received from topic] as JSON and select path as Text-Tag

    • JSON Path: params.events[0].event

    • Target Tag: Shelly_WallDisplay_EVENT

  2. Bottom Card (Extract the Button ID):

    • Action: Parse [Message received from topic] as JSON and select path as Number-Tag

    • JSON Path: params.events[0].id

    • Target Tag: Shelly_WallDisplay_EVENT_Nr

Step C: Routing & Actions (AND / THEN)

  1. Connect both parsing outputs to an AND card checking your event type:

    • Logic: Shelly_WallDisplay_EVENT is exactly single_push
  2. If true, branch out into further AND cards to filter the specific button number:

    • Logic: Shelly_WallDisplay_EVENT_Nr equals 1THEN: Trigger Action A

    • Logic: Shelly_WallDisplay_EVENT_Nr equals 4THEN: Trigger Action B

Here is the result, now you can choose what to do with the Buttons