Skip to main content

Robomow BLE protocol library

Project description

Robomow-BLE

Robomow-BLE is a standalone Python library for talking to Robomow mowers over Bluetooth Low Energy (BLE).

It provides a reusable BLE protocol layer for Robomow mowers and can be used directly in Python applications.

Currently it only supports RT models. Support for other models may be added in the future if there is demand and access to devices for testing.

API Overview

Please refer to the API documentation for details.

How to use

Install

Install from PyPI:

python -m pip install Robomow-BLE

Create a device client

Create a RobomowDevice with:

  • mainboard_serial: mower mainboard serial used during authentication.
  • update_callback (optional): called for each update as RobomowUpdate(key, value).
from robomow_ble_lib import RobomowDevice

mower = RobomowDevice(
    mainboard_serial="12345678901234",
)

How to find mainboard_serial:

  1. Log in to myrobomow.robomow.com.
  2. Open your browser's Developer Tools (F12).
  3. Go to the Network tab.
  4. Reload the page.
  5. Look for a request ending in /api/customer/products.
  6. Click the request and open the Response tab.
  7. In the JSON response, find the field named MainboardSerial. This value is the actual mainboard serial number.

Connect and authenticate

Discover a BLE device with Bleak, then connect:

from bleak import BleakScanner

ble_device = await BleakScanner.find_device_by_address(address, timeout=15.0)
if ble_device is None:
    raise RuntimeError("Mower not found")

await mower.async_connect(ble_device)

Receive updates

Pass a callback to receive state changes:

from robomow_ble_lib import RobomowUpdate, EntityKey


def on_update(update: RobomowUpdate) -> None:
    if update.key == EntityKey.BATTERY_LEVEL:
        print(f"Battery: {update.value}%")
    else:
        print(f"{update.key}: {update.value}")

Send commands

Common control methods:

  • await mower.async_start_mowing(duration_minutes=30)
  • await mower.async_start_mowing_edge()
  • await mower.async_stop_mowing()
  • await mower.async_return_to_home()

Common settings methods:

  • await mower.async_enable_schedule() / await mower.async_disable_schedule()
  • await mower.async_set_schedule(schedule)
  • await mower.async_enable_anti_theft() / await mower.async_disable_anti_theft()
  • await mower.async_enable_child_lock() / await mower.async_disable_child_lock()
  • await mower.async_set_wire_signal_type(wire_signal_type)

Read state

Example state properties:

  • Identity/version: family, model, mainboard_version, software_version
  • Live values: operating_state, message, battery_level, rssi
  • Status: schedule_enabled, next_departure, expected_duration

Disconnect cleanly

Always disconnect in a finally block:

try:
    ...
finally:
    await mower.async_disconnect()

Minimal example

import asyncio

from bleak import BleakScanner
from robomow_ble_lib import RobomowDevice, RobomowUpdate, EntityKey


def on_update(update: RobomowUpdate) -> None:
    if update.key == EntityKey.BATTERY_LEVEL:
        print(f"Battery: {update.value}%")
    else:
        print(f"{update.key}: {update.value}")


async def main() -> None:
    # Replace these with your mower details
    address = "AA:BB:CC:DD:EE:FF"
    mainboard_serial = "12345678901234"

    ble_device = await BleakScanner.find_device_by_address(address, timeout=15.0)
    if ble_device is None:
        raise RuntimeError("Mower not found")

    mower = RobomowDevice(
        mainboard_serial=mainboard_serial,
        update_callback=on_update,
    )

    await mower.async_connect(ble_device)
    try:
        await mower.async_start_mowing(duration_minutes=30)
        await asyncio.sleep(5)
        print("State:", mower.operating_state)
    finally:
        await mower.async_disconnect()


if __name__ == "__main__":
    asyncio.run(main())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

robomow_ble-1.3.1.tar.gz (25.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

robomow_ble-1.3.1-py3-none-any.whl (28.2 kB view details)

Uploaded Python 3

File details

Details for the file robomow_ble-1.3.1.tar.gz.

File metadata

  • Download URL: robomow_ble-1.3.1.tar.gz
  • Upload date:
  • Size: 25.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for robomow_ble-1.3.1.tar.gz
Algorithm Hash digest
SHA256 808374a2815e28cf281c052f1de5fbdf024f37aa7a8289e194272bbdf048281d
MD5 6d4bb49bd70a7aa765fc432364ed8e7d
BLAKE2b-256 25e9b7d75300c8eeeb6d524599ac24e0b56e9163f84cc97be46c9507411da728

See more details on using hashes here.

Provenance

The following attestation bundles were made for robomow_ble-1.3.1.tar.gz:

Publisher: release.yml on arjanmels/robomow_ble

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file robomow_ble-1.3.1-py3-none-any.whl.

File metadata

  • Download URL: robomow_ble-1.3.1-py3-none-any.whl
  • Upload date:
  • Size: 28.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for robomow_ble-1.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 756080e03c14bb3ec377aa4963e7a0a3ed0971ac4207f188b1feedeac2d9baf7
MD5 4f29b4cb82a8c8b2e0b39ee87c396cea
BLAKE2b-256 8c326183ac724dc83638392e2087b6370b55521c2910c8e680884acb8863fb64

See more details on using hashes here.

Provenance

The following attestation bundles were made for robomow_ble-1.3.1-py3-none-any.whl:

Publisher: release.yml on arjanmels/robomow_ble

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page