V4.29.42 Bridge Firmware [26Q1A]

We have released today a stable update for all Bond Bridges (serial numbers starting in Z):

What follows are the changes since the previous stable release, v4.26.3.

Works with Bond

  • Azenco Light Control: Added support for new Azenco Light Bar and RGB lights with dimming and color toggle controls.

  • Azenco Motor Support: Added control for new Azenco motor setup models BST11BD & TVPLA916CC3S (AZK1) with preset position support (0%, 33%, 66%, 100%).

  • Struxure Pergola Systems: Introducing support for Struxure 8-speed fans (RCF260) and RGB lighting (RLT6).

  • Dendo Shade Presets: Dendo (RMS115) shade preset positions (A, Center, B) now work with schedules and Home Assistant.

  • SelectBlinds & 3 Day Blinds: Added support for SelectBlinds Bridge and 3 Day Blinds Bridge integrations on Bond Bridge Pro.

  • Brustor Light Support: Added support for Brustor RLT1 light technology, enabling dimming control for Brustor-branded lights.

  • Big Ass Fans Integration (work in progress): Bond Bridge Pro now discovers and controls Big Ass Fans (BAF) ceiling fans on the local network via mDNS. Supports fan speed, light brightness, and color temperature through the standard Bond API.

    • Caveats:
      • Increase/decrease brightness commands are not yet supported.
      • Fan direction control is not available (not supported by BAF protocol).
  • RMS119 (Vertilux Unidirectional): fix SetPosition crash for Vertilux unidirectional

  • BTX SBB Dongle: Multiple fixes and improvements, especially for drapery motors.

Bug Fixes & Improvements

  • Draper Discovery: Fixed an issue where Draper discovery would fill the device table with out-of-subnet devices, preventing in-subnet devices from being discovered. Only affects installations with multiple IP Gateways where total device count exceeds 50.

  • Integrations State Syncing: Fixed an issue where device/group state changes were not always detected by integrations.

  • VirtualRC Multi-Button Fix: Fixed an issue where holding multiple buttons in VirtualRC mode for more than 5 seconds could flood the RF command queue and cause errors.

  • HTTP Performance: Improved HTTP API responsiveness, particularly noticeable when sending many commands in quick succession.

Known Issues and Limitations

  • Azenco white lights: Brightness slider snaps to discrete levels (old light bar/strip: 0/50/100; new light bar: 0/25/50/100)
  • Azenco RGB lights: No brightness slider; control via toggle buttons only (toggle light, toggle color, dimming button)
  • Azenco motors: Position states limited to 0%, 33%, 66%, 100%; slider snaps to nearest preset
  • Brustor brightness is controlled by remote roller button ticks in a non-linear fashion. Current implementation covers 1%-50% range; brightness changes >50% execute two transmissions (similar to Somfy behavior for >75% changes).
1 Like

on this latest firmware and I am unable to get the set position function to work properly on any of my Vertilux unidirectional rollers.

1 Like

Hey Adam, can you provide the model number(s) for your unidirectional Vertilux motors? I want to see if we have the same ones in our lab.

I honestly have no clue since I didn’t install them. I have reached out to my blinds installer to ask for a model number and will get back to you as soon as they reply.

Still no reply from the installer, but by looking at the info they provide on my invoice, I believe it to be this one:

https://partner.vertilux.com/en/products/celtic-ii-battery-motor-internal-power

They don’t provide the model number on the invoice, but the specification they do provide only matches this one.

Updated to v4.29.42 few days ago and noticed setting position is also no longer working for me. This is with Somfy RTS shades.

I use the Home Assistant integration and captured debug logs from it (below).

Using the Bond app, it shows the new position as current (with no movement). If I change position from the Bond app it does not move the shades. It does update the Bond app position indicator and updates in Home Assistant.

I restarted the bridge and it made no difference.

I’m not sure how to get any logs from the bridge itself.

HA Debug Logs:

2026-03-17 16:17:31.109 DEBUG (MainThread) [bond_async.bpup] ('192.168.68.122', 30007): BPUP message: b'{"B":"ZPIG39390","d":0,"v":"v4.29.42","t":"devices/2a5381d5a7df1d11/actions/SetPosition","i":"a00cc30021fb5dcf","f":4,"s":500,"m":2,"x":"http","b":{"_error_id":612,"_error_msg":"BondScript Transmit Failed"}}\n'
2026-03-17 16:17:31.137 ERROR (MainThread) [homeassistant.components.automation.shades_auto_too_bright_partial_living_lower] Shades - Auto - Too Bright - Partial - Living Lower: Error executing script. Unexpected error for call_service at pos 1: 500, message='Internal Server Error', url='http://192.168.68.122/v2/devices/2a5381d5a7df1d11/actions/SetPosition'
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 531, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1018, in _async_step_call_service
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<9 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 631, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2817, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2860, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 835, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
        hass, entity, func, data, call.context
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 907, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/bond/cover.py", line 83, in async_set_cover_position
    await self._bond.action(
    ...<2 lines>...
    )
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 111, in action
    await self.__call(put)
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 209, in __call
    return await handler(self._session)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 109, in put
    response.raise_for_status()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/local/lib/python3.14/site-packages/aiohttp/client_reqrep.py", line 636, in raise_for_status
    raise ClientResponseError(
    ...<5 lines>...
    )
aiohttp.client_exceptions.ClientResponseError: 500, message='Internal Server Error', url='http://192.168.68.122/v2/devices/2a5381d5a7df1d11/actions/SetPosition'
2026-03-17 16:17:31.150 ERROR (MainThread) [homeassistant.components.automation.shades_auto_too_bright_partial_living_lower] While executing automation automation.shades_auto_too_bright_partial_living_lower
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/automation/__init__.py", line 826, in async_trigger
    return await self.action_script.async_run(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        variables, trigger_context, started_action
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1865, in async_run
    return await asyncio.shield(create_eager_task(run.async_run()))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 467, in async_run
    await self._async_step(log_exceptions=False)
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 533, in _async_step
    self._handle_exception(
    ~~~~~~~~~~~~~~~~~~~~~~^
        ex, continue_on_error, self._log_exceptions or log_exceptions
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 563, in _handle_exception
    raise exception
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 531, in _async_step
    await getattr(self, handler)()
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 1018, in _async_step_call_service
    response_data = await self._async_run_long_action(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<9 lines>...
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/script.py", line 631, in _async_run_long_action
    return await long_task
           ^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2817, in async_call
    response_data = await coro
                    ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/core.py", line 2860, in _execute_service
    return await target(service_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 835, in entity_service_call
    single_response = await _handle_entity_call(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^
        hass, entity, func, data, call.context
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    )
    ^
  File "/usr/src/homeassistant/homeassistant/helpers/service.py", line 907, in _handle_entity_call
    result = await task
             ^^^^^^^^^^
  File "/usr/src/homeassistant/homeassistant/components/bond/cover.py", line 83, in async_set_cover_position
    await self._bond.action(
    ...<2 lines>...
    )
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 111, in action
    await self.__call(put)
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 209, in __call
    return await handler(self._session)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.14/site-packages/bond_async/bond.py", line 109, in put
    response.raise_for_status()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/local/lib/python3.14/site-packages/aiohttp/client_reqrep.py", line 636, in raise_for_status
    raise ClientResponseError(
    ...<5 lines>...
    )
aiohttp.client_exceptions.ClientResponseError: 500, message='Internal Server Error', url='http://192.168.68.122/v2/devices/2a5381d5a7df1d11/actions/SetPosition'

I don’t have Somfy but to set position with Rollease I had to go to Device Settings, Advanced Settings, Edit Controller and enable Set Position.