Full Native Control of Sonoff TX Ultimate (RGB, Sound, Effects) WITHOUT ESPHome!

Hi everyone! :rocket:

For a long time, the community believed that to get full control over the Sonoff TX Ultimate’s amazing RGB LED halo, built-in speaker, you had to void your warranty and flash it with ESPHome.

I’m excited to share that for the first time, I’ve managed to reverse-engineer the local network logs and decipher the exact JSON payloads. We can now control almost EVERYTHING natively using the sonoff.send_command service via AlexxIT’s SonoffLAN integration—no hardware mods required!

Here is how you can transform your TX Ultimate into a dynamic smart doorbell, alarm siren, or night-mode switch.

  1. Instant Notification (Doorbell / Alarm Chime) via preEffects
    This command sends an instant color, brightness, and sound effect to the switch without changing its permanent default settings. Perfect for automations!
service: sonoff.send_command
data:
  device: "100228xxxx" # Replace with your device ID
  preEffects:
    lightEffect: 5     # 0-5 light animation style
    soundEffect: 4     # 0-5 sound effect
    statusLight: "on"  # "on" or "off"
    statusLightTop: 1  # 1 (on) or 0 (off) for top LEDs
    statusLightBelow: 1# 1 (on) or 0 (off) for bottom LEDs
    r: 0               # Red (0-255)
    g: 255             # Green (0-255)
    b: 0               # Blue (0-255)
    br: 100            # Brightness (0-100)
    volume: 80         # Volume (0-100)
  1. Toggle Touch Haptic Feedback (shock)
    Great for “Night Mode” automations when you want the switch to be completely silent to the touch.
YAML


service: sonoff.send_command
data:
  device: "100228xxxx"
  shock: 1 # 1 to enable touch vibration, 0 to disable
  1. Change Permanent Key-Press Behavior (onEffects / offEffects)
    Change the default sound and light that triggers when you physically touch the switch.
YAML

service: sonoff.send_command
data:
  device: "100228xxxx"
  onEffects:              
    lightEffect: 1
    soundEffect: 0
    volume: 50 # Set to 0 to mute the physical key press
  1. Schedule “Do Not Disturb” (DND) Mode
    You can set specific hours where the switch will automatically suppress physical feedback (sounds and bright lights) so it doesn’t wake anyone up at night.
service: sonoff.send_command
data:
  device: "100228xxxx"
  doNotDisturb: 1 # Set to 1 to enable, 0 to disable
  doNotDisturbTime:
    from: "22:00"
    to: "07:00"

Note: Ensure you use device: and not the old deviceid: if you are on the latest SonoffLAN versions.

:handshake: A Quick Note: I spent quite some time sniffing logs to figure this out and recently published a YouTube video (@mutlutekir) demonstrating it. If you plan to use this method in your blogs, tutorials, or videos, a simple credit to Mutlu Tekir (or a link to my video) would be highly appreciated. Knowledge grows when shared!

Let me know what color and sound combinations you come up with for your automations! Happy hacking! :hammer_and_wrench::house_with_garden:

2 Likes

I created script for this. You need Sonoff Lan HACS integration to use this. From the drop down menu, you can select your TX Ultimate device and configure light effect, color, brightness, sound effect etc, and use this script in automation.

alias: Sonoff TX Ultimate - Control Panel
description: >-
  Send color, brightness, and effect commands to your TX Ultimate device using a visual interface.
icon: mdi:lightbulb-multiple
fields:
  target_device:
    name: Sonoff Device
    description: Select the device you want to send commands to from the list.
    required: true
    selector:
      device:
        integration: sonoff
        manufacturer: SONOFF
        filter:
          - model: "T5-1C-120"
          - model: "T5-2C-120"
          - model: "T5-3C-120"
          - model: "T5-4C-120"
          - model: "T5-1C-86"
          - model: "T5-2C-86"
          - model: "T5-3C-86"
          - model: "T5-4C-86"
  rgb_color:
    name: Light Color
    description: Select a color from the palette for the halo light.
    default:
      - 255
      - 0
      - 0
    selector:
      color_rgb: {}
  brightness:
    name: Brightness
    description: Adjust the light intensity.
    default: 100
    selector:
      number:
        min: 0
        max: 100
        unit_of_measurement: "%"
  light_effect:
    name: Light Effect
    description: The visual animation the device will play.
    default: "0"
    selector:
      select:
        options:
          - label: 0 - Effect Off
            value: "0"
          - label: 1 - Wave Effect
            value: "1"
          - label: 2 - Breath Effect
            value: "2"
          - label: 3 - Cycle Effect
            value: "3"
          - label: 4 - Fast Transition
            value: "4"
          - label: 5 - Color Burst
            value: "5"
  sound_effect:
    name: Sound Effect
    description: The accompanying sound effect to play.
    default: "0"
    selector:
      select:
        options:
          - label: 0 - Sound Off
            value: "0"
          - label: 1 - Beep
            value: "1"
          - label: 2 - Double Beep
            value: "2"
          - label: 3 - Melody 1
            value: "3"
          - label: 4 - Alarm Chime
            value: "4"
          - label: 5 - Notification Sound
            value: "5"
  volume:
    name: Volume Level
    description: The volume level of the effect to be played.
    default: 80
    selector:
      number:
        min: 0
        max: 100
        unit_of_measurement: "%"
  top_light:
    name: Top Light Panel
    description: Should the top status lights be activated?
    default: true
    selector:
      boolean: {}
  bottom_light:
    name: Bottom Light Panel
    description: Should the bottom status lights be activated?
    default: true
    selector:
      boolean: {}
sequence:
  - variables:
      ewelink_id: >-
        {% set idents = device_attr(target_device, 'identifiers') | list %} {%
        set ns = namespace(id=target_device) %} {% for ident in idents %}
          {% if ident[0] == 'sonoff' %}
            {% set ns.id = ident[1] %}
          {% endif %}
        {% endfor %} {{ ns.id }}
  - data:
      device: "{{ ewelink_id }}"
      preEffects:
        lightEffect: "{{ light_effect | int }}"
        soundEffect: "{{ sound_effect | int }}"
        statusLight: "on"
        statusLightTop: "{{ 1 if top_light else 0 }}"
        statusLightBelow: "{{ 1 if bottom_light else 0 }}"
        r: "{{ rgb_color[0] }}"
        g: "{{ rgb_color[1] }}"
        b: "{{ rgb_color[2] }}"
        br: "{{ brightness | int }}"
        volume: "{{ volume | int }}"
    action: sonoff.send_command

Is this meant to not persist? I set the standby light color and brightness, and it reverts after few seconds.

Btw, I added this to the selector to make sure only T5 devices are shown:

    selector:
      device:
        integration: sonoff
        manufacturer: SONOFF
        filter:
          - model: "T5-1C-120"
          - model: "T5-2C-120"
          - model: "T5-3C-120"
          - model: "T5-4C-120"
          - model: "T5-1C-86"
          - model: "T5-2C-86"
          - model: "T5-3C-86"
          - model: "T5-4C-86"
1 Like

preEffects for short warning. you can use oneffects and offeffects for continous effect.