Skip to main content

Satisfyer

Introduction

Satisfyer is a major manufacturer of BLE-controlled intimate devices. Their devices use custom 128-bit BLE service UUIDs and share a common protocol. Specifically documented from reverse engineering the Royal One, but the protocol applies across the product line.

BLE Profile

ble_names: []  # Satisfyer devices don't broadcast names in advertisements
services:
- uuid: "51361500-c5e7-47c7-8a6e-47ebc99d80e8"
description: "Live control service"
characteristics:
- uuid: "51361501-c5e7-47c7-8a6e-47ebc99d80e8"
properties: [write]
role: tx
description: "Motor control (start/stop)"
- uuid: "51361502-c5e7-47c7-8a6e-47ebc99d80e8"
properties: [write]
role: tx
description: "Motor value (speed)"
- uuid: "51361600-c5e7-47c7-8a6e-47ebc99d80e8"
description: "Factory/rename service"
characteristics:
- uuid: "51361601-c5e7-47c7-8a6e-47ebc99d80e8"
properties: [write]
description: "Rename value"
- uuid: "51361700-c5e7-47c7-8a6e-47ebc99d80e8"
description: "DFU service"

Pairing

  • If the device was previously paired to another host, hold the button for 15 seconds to factory reset (the device vibrates 5 times rapidly when complete).
  • To make the device discoverable, hold the button for 4 seconds (2 rapid vibrations).
  • Connecting without prior pairing works without an explicit pairing step.
  • The device does not broadcast its name in BLE advertisements. The name is only available after the first GATT connection via the Device Name attribute.

Commands

Start Motor

Write to 51361501 (motor control):

0x01

Pause Motor

Write to 51361501 (motor control):

0x03

Stop Motor

Write to 51361501 (motor control):

0x07

Both pause (0x03) and stop (0x07) halt vibration and require a new start command. The functional difference between them is unknown.

Set Speed

Write to 51361502 (motor value):

0x00 0x00 0x00 XX
ByteDescriptionRange
0x00 0x00 0x00Padding (must be 4 bytes total)Fixed
XXSpeed0x00-0x64 (0-100)

Notes

  • The speed value must be written as a 4-byte value with the speed in the least significant byte.
  • If the motor speed is set to 0 for a few seconds, the device exits "start" mode and requires a new start command.
  • Standard BLE services are also exposed: Battery Level Service (0x180F) and Device Information Service (0x180A).

Sources