Lelo F1s V3 connects and authorises but does not respond to commands (macOS)

Note: I’m not a software/hardware engineer, so this report was put together with the help of Claude based on my logs and troubleshooting. Apologies if any of the technical framing is off — happy to clarify or test anything.


Summary

Lelo F1s V3 is detected, connects, completes the security tap authorisation, and is correctly identified by name as “Lelo F1s V3” in Intiface Central. However, moving either of the two vibration sliders in the Devices tab produces no response from the device. Commands appear to be sent (visible in log as write-without-response fallback to write-with-response), but the motors do not activate. Device is fully charged and works normally with the official Lelo app when connected on iOS.

The log shows the device is being handled by the lelo-f1sv2 protocol with identifier F1SV3, suggesting V3 detection is in place but the V2 command protocol may not be fully compatible with V3 hardware.

Environment

  • Intiface Central version: 3.0.4+40
  • Device config version: 4.197
  • OS: macOS Taho 26.5
  • Hardware: MacBook Pro 14" M2
  • Device: Lelo F1s V3, fully charged
  • Bluetooth: System Bluetooth on, Intiface granted Bluetooth permission in System Settings → Privacy & Security

Steps to reproduce

  1. Quit Lelo mobile app fully (force quit)
  2. Power on F1s V3
  3. Start Intiface Central server
  4. Start scanning in Devices tab
  5. Device appears in log, prompts for power button tap
  6. Tap power button on device — authorisation completes, device added as “Lelo F1s V3”
  7. Move either vibration slider in the Devices tab

Expected: Device vibrates in response to slider position.

Actual: No vibration. Device remains connected. Log shows write-with-response fallback warnings at the moment the slider is moved, but no error and no device response.

Already ruled out

  • Battery (fully charged)
  • Lelo app interference (force quit before scanning)
  • Reconnecting from scratch (toy fully off, then on, fresh scan, re-authorise)
  • Both feature indices (index 0 and index 1 sliders) tested at multiple intensities including 100%
  • System Bluetooth and Intiface Bluetooth permission confirmed working (device connects)
  • No other Bluetooth hosts connected to the F1s V3

Relevant log excerpt

26.687 Lelo F1s V2 isn't authorised: Tap the device's power button to complete connection.
[... repeated authorisation prompts ...]
28.298 Device map does not contain key 0.
28.298 Assigning index 0 to Lelo F1s V3
28.299 Updating device Lelo F1s V3 index to 0
28.299 Device connected: Lelo F1s V3
28.299 Device Added: 0 - Lelo F1s V3 - UserDeviceIdentifier { protocol: "lelo-f1sv2", identifier: Some("F1SV3"), address: "PeripheralId(eb1036f6-da6e-b74e-057e-82d037d1caeb)" }
28.299 ServerDeviceDefinition { name: "Lelo F1s V3", ... features: {0: ServerDeviceFeature { ... vibrate: Some(...) }, 1: ServerDeviceFeature { ... vibrate: Some(...) }} }
32.463 BTLEPlug device doesn't support write-without-response! Falling back to write-with-response!
33.322 BTLEPlug device doesn't support write-without-response! Falling back to write-with-response!

The two write-with-response warnings at 32.463 and 33.322 correspond directly to slider movements. No errors are logged after the writes.

Hypothesis

V3 hardware appears to be detected (correct device name and identifier F1SV3) but routed through the lelo-f1sv2 protocol handler. If the V3 uses a different command format or characteristic structure than the V2, writes would succeed at the BLE layer (hence no error) but the device would silently ignore them. This would match the observed behaviour.

I figured out the issue, the newer versions of the F1S V3 uses the same protocol as the F2S/Harmony. I was able to make it work locally by editing the buttplug-device-config-v4.json with the following changes:

@@ -11400,8 +11400,7 @@
           "btle": {
             "names": [
               "F1SV2A",
-              "F1SV2X",
-              "F1SV3"
+              "F1SV2X"
             ],
             "services": {
               "0000fff0-0000-1000-8000-00805f9b34fb": {
@@ -11423,13 +11422,6 @@
             "F1SV2X"
           ],
           "name": "Lelo F1s V2"
-        },
-        {
-          "id": "36adf7ce-98bf-4fad-b916-b44d20a5d9e1",
-          "identifier": [
-            "F1SV3"
-          ],
-          "name": "Lelo F1s V3"
         }
       ],
       "defaults": {
@@ -11481,6 +11473,7 @@
               "SONA3 Cruise",
               "Switch",
               "SURFER2",
+              "F1SV3",
               "F2"
             ],
             "services": {
@@ -11685,6 +11678,39 @@
           ],
           "name": "Lelo Switch"
         },
+        {
+          "features": [
+          {
+            "id": "90bd67a5-4601-4c49-97bb-0845ab7011ba",
+            "index": 0,
+            "output": {
+              "vibrate": {
+                "value": [
+                  0,
+                  100
+                ]
+              }
+            }
+          },
+          {
+            "id": "05fc758b-a3fe-4156-b3ae-9cdcb9ae95c6",
+            "index": 1,
+            "output": {
+              "vibrate": {
+                "value": [
+                  0,
+                  100
+                ]
+              }
+            }
+          }
+        ],
+          "id": "36adf7ce-98bf-4fad-b916-b44d20a5d9e1",
+          "identifier": [
+            "F1SV3"
+          ],
+          "name": "Lelo F1s V3"
+        },
         {

This shouldn’t be taken as a 100% fix though, I just pieced it together from this Issue: Some Lelo F1S-V3 models are using the Lelo Harmony protocol · Issue #679 · buttplugio/buttplug · GitHub

Looks like whatever they did wasn’t enough to fix it for newer firmwares maybe? My LELO app says F1SV3 F.REV.M.

Not a developer, no idea what all that means. However, I have an F1Sv3 with teh F.REV.M. firmware as well and it does not work out of the box. Get the same “BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!” issue when using the sliders. No response on the device itself. It pairs fine. Just no activity. Tried the buttplug test webpage and it won’t even scan the F1Sv3 at all. I can connect the webpage to the desktop app fine, and it’ll show the F1Sv3 there, and gives me a slider for ALL, but no action there either. This is on a Windows 11 system, latest cumulative and feature updates as of 8/12/2026.

Log entries:
5051.568Device map does not contain key 0.5051.568Assigning index 0 to Lelo F1s V35051.568Device Added: 0 - Lelo F1s V3 - UserDeviceIdentifier { protocol: “lelo-f1sv2”, identifier: Some(“F1SV3”), address: “PeripheralId(10:4B:67:0A:97:0D)” }5051.568Updating device Lelo F1s V3 index to 05051.568Device connected: Lelo F1s V35051.570ServerDeviceDefinition { name: “Lelo F1s V3”, id: fec7acc7-0809-4b3d-bcd2-7680a4d7870b, base_id: Some(36adf7ce-98bf-4fad-b916-b44d20a5d9e1), protocol_variant: None, message_gap_ms: None, display_name: None, allow: false, deny: false, index: 0, features: {0: ServerDeviceFeature { index: 0, description: “”, id: 7c689014-240f-45a2-80e8-472eb336daf8, base_id: Some(90bd67a5-4601-4c49-97bb-0845ab7011ba), alt_protocol_index: None, output: SmallVecEnumMap([Vibrate(ServerDeviceFeatureOutputValueProperties { value: RangeWithLimit { base: [0..=100], user: None }, disabled: false })]), input: SmallVecEnumMap() }, 1: ServerDeviceFeature { index: 1, description: “”, id: a59ee263-14a7-45ad-8bd9-a8c37976521e, base_id: Some(05fc758b-a3fe-4156-b3ae-9cdcb9ae95c6), alt_protocol_index: None, output: SmallVecEnumMap([Vibrate(ServerDeviceFeatureOutputValueProperties { value: RangeWithLimit { base: [0..=100], user: None }, disabled: false })]), input: SmallVecEnumMap() }} }5061.3687c689014-240f-45a2-80e8-472eb336daf85061.368a59ee263-14a7-45ad-8bd9-a8c37976521e5063.1347c689014-240f-45a2-80e8-472eb336daf85063.134a59ee263-14a7-45ad-8bd9-a8c37976521e5065.628BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!5065.896BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!5066.428BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!5067.065BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!5067.809BTLEPlug device doesn’t support write-without-response! Falling back to write-with-response!

Figured out how to add the edits to the json file mentioned above and it does work, somewhat. At least the vibration starts for a few seconds, but then the device shuts off. The write-with-response message still exists in the logs despite the edits.

I’m seeing the same issue here, with the exact same log output. Auth succeeds, then every command produces BTLEPlug device doesn't support write-without-response! Falling back to write-with-response!, with no motor response after it. Same firmware as choboro: F1SV3 F.REV.M. I’m running macOS 26.6.2 with Intiface Central 3.1.1+42.

On macOS the config lives at:
~/Library/Containers/com.nonpolynomial.intifacecentral/Data/Library/Application Support/com.nonpolynomial.intifacecentral/config

The fix was to move F1SV3 from lelo-f1sv2 to lelo-harmony in buttplug-device-config-v5.json. I removed "F1SV3" from lelo-f1sv2’s communication[0].btle.names and deleted its entry from that protocol’s configurations. Then I added "F1SV3" to lelo-harmony’s names list and added this entry to its configurations:

{
  "id": "36adf7ce-98bf-4fad-b916-b44d20a5d9e1",
  "identifier": ["F1SV3"],
  "name": "Lelo F1s V3"
}

No custom features block was needed, since it inherits Harmony’s default two-vibrate config.

It’s been running solidly for 20+ minutes now. I’ve tested it with both manual sliders and script control, and haven’t had a single disconnect yet.