Haptique RS90 - MQTT Developer API

Version: 1.1
Protocol: MQTT 3.1.1 / 5.0

This document outlines the MQTT topics and payloads for integrating the Haptique RS90.
Note: The RS90 uses Retained Messages for state and configuration. You do not need to send “Get” commands. Simply subscribe to the topics below, and the broker will automatically deliver the current data immediately.


1. Device ID (Auto-Reported)

  • Topic: Haptique/{RemoteID}
  • Type: Subscribe
  • Retained: :white_check_mark: Yes

2. System Status (Auto-Reported)

Connection Status

The Haptique updates this topic automatically when it connects or disconnects (via Last Will & Testament).

  • Topic: Haptique/{RemoteID}/status
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
  • Payload:
    • online
    • offline

3. Resource Discovery (Auto-Reported)

The remote publishes its configuration to these topics upon connection.

Device List

A list of all devices configured on the remote.

  • Topic: Haptique/{RemoteID}/device/list
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
  • Value: JSON Array
[
  {
     "Id":"{id}",
     "name":"{deviceName}"
  }, 
  {
     "id":"{id}",
     "name":"{deviceName}"
  }
]

Topics to Subscribe

1. Macro List

A list of all macros configured on the remote.

  • Topic: Haptique/{RemoteID}/macro/list
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
  • Value: JSON Array
[
  {
     "Id":"{id}",
     "name":"{macroname}"
  }, 
  {
     "id":"{id}",
     "name":"{macroname}"
  }
] 

2. Trigger macro

  • Topic: Haptique/{RemoteID}/macro/{macroname}/trigger

  • Type: Subscribe

  • Retained: :white_check_mark: Yes

  • Payload: JSON Array

     on
    
     off
    

3. Device commands

A list of commands of device configured on the remote.

  • Topic: Haptique/{RemoteID}/device/{devicename}/detail
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
  • Value: JSON Array
[
  {
     "Id":"{commandID}",
     "name":"{commandname}"
  }, 
  {
     "id":"{commandID}",
     "name":"{commandname}"
  }
] 

4. Trigger command

  • Topic: Haptique/{RemoteID}/device/{devicename}/trigger

  • Type: Subscribe

  • Payload: JSON

     {commandID}
    

5. Battery Level

The remote reports battery level in response to the topic below is published.

  • Topic: Haptique/{RemoteID}/battery/status
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
    Response
  • : RAW
    {%}
    
    

6. Key event

The remote reports physical button press level in response to the topic below is published.

  • Topic: Haptique/{RemoteID}/keys
  • Type: Subscribe
  • Retained: :white_check_mark: Yes
  • Payload: JSON
      keys = button:#
    
    

7. RGB Ring light

Toggle RGB ring default animation.

  • Topic: Haptique/{RemoteID}/ledlight/on (on/off)
  • Type: Subscribe
  • Payload: JSON
      {seconds 1-10}

Hi,

I’m currently working on HA integration, but on my side i don’t have battery level in MQTT haptique Topic. Is there a particular settings on Haptique remote to publish the battery level value ?

Thx

1 Like

Publish this topic and you should get the response

Haptique/{RemoteID}/battery/status

1 Like

@ccsfounder ,
It’s working.
Thx a lot :wink:

1 Like

I’ve seen that MQTT now is implemented but it asks for a username and password while I host my own MQTT it does not have a username and password. Could this also be made possible for the haptique connection?

The credentials required are of the broker to make a secure connection. Imaging anyone accessing your Haptique to connect to any random broker on the network. They can control Haptique with ease. So just setup your broker with credentials and add it on the config app settings.

The MQTT server is in my own network and external acces is nog an issue so I like to have the choice to use it without having to fill in my credentials.
I do have other things working throud MQTT without having to use credentials and that’s completely save.

We will see this in next updates.

1 Like

Hi @ccsfounder ,

Clarification Needed for RGB Ring Light API
The MQTT API documentation for the RGB Ring Light feature is ambiguous and needs clarification:
Current Documentation:
7. RGB Ring light
Toggle RGB ring default animation.

  • Topic: Haptique/{RemoteID}/ledlight/on (on/off)
  • Type: Subscribe
  • Payload: JSON
    {seconds 1-10}
    Questions:

Topic interpretation:

Does (on/off) mean the payload should be “on” or “off”?
Or does it mean there are two separate topics: ledlight/on and ledlight/off?
Or is it just indicating the topic controls on/off state?

Payload format:

Should the payload be a JSON object like {“duration”: 5} or {“seconds”: 5}?
Or just a plain string/number like “5” or 5?
Can we send “off” as payload to manually turn off the animation?
Is there an “on” payload option (with default duration)?

Behavior:

Does the RS90 automatically publish back to this topic when the animation ends?
Or should the integration track the duration and update state locally?

Implementation scenarios:
Scenario A (number only):
Payload: “5” → Activates for 5 seconds, then auto-stops
Payload: “10” → Activates for 10 seconds, then auto-stops
No manual “off”

Scenario B (number or on/off):
Payload: “5” → Activates for 5 seconds
Payload: “off” → Manually stops animation
Payload: “on” → Activates with default duration (?)

Scenario C (JSON format):
Payload: {“seconds”: 5}
Payload: {“state”: “off”}
Please clarify the correct usage to ensure proper integration implementation.

Thanks.
Regards
DA.

Hello @daangel27,

Timer is optional, you can send the topic for on and by default RGB will stay active for 10 seconds. If you want to shorten this time use Payload as value from 1 to 10. Off timer is also optional because you don’t want to target the time to Off after given time

I suggest to just implement On trigger and Payload adjustment rest Off can be ignore to build the integration.

Hello @ccsfounder,

OK, thanks for informations;

This what is now implemented in release V1.5.1.

RGB Ring Light Control

New button entity button.rgb_ring_light for quick RGB activation (5s default)
Service haptique_rs90.trigger_rgb_light with customizable duration (1-10 seconds)
Smart local timer auto-updates state after duration expires
MQTT implementation uses retain=false to prevent unwanted replay on RS90 reconnect.

Regards.

1 Like