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 asRobomowUpdate(key, value).
from robomow_ble import RobomowDevice
mower = RobomowDevice(
mainboard_serial="12345678901234",
)
How to find mainboard_serial:
- Log in to myrobomow.robomow.com.
- Open your browser's Developer Tools (F12).
- Go to the Network tab.
- Reload the page.
- Look for a request ending in
/api/customer/products. - Click the request and open the Response tab.
- 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 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 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file robomow_ble-1.0.0.tar.gz.
File metadata
- Download URL: robomow_ble-1.0.0.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2a1e79fd4eff443f4c2a5fd64f432fe16703e8b9667fa50ff8fb6f79c9afd68
|
|
| MD5 |
b4992b8c1a432703e6965d79a4e3826b
|
|
| BLAKE2b-256 |
8aeb7a1571c32ee3b0e8519fcb6b87b492b3c409e86f27da20cde8a893cb7628
|
Provenance
The following attestation bundles were made for robomow_ble-1.0.0.tar.gz:
Publisher:
release.yml on arjanmels/robomow_ble
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
robomow_ble-1.0.0.tar.gz -
Subject digest:
d2a1e79fd4eff443f4c2a5fd64f432fe16703e8b9667fa50ff8fb6f79c9afd68 - Sigstore transparency entry: 1725485327
- Sigstore integration time:
-
Permalink:
arjanmels/robomow_ble@81111aaf829b2b4ac5f987bd7d314db4f4e8c39f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/arjanmels
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@81111aaf829b2b4ac5f987bd7d314db4f4e8c39f -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file robomow_ble-1.0.0-py3-none-any.whl.
File metadata
- Download URL: robomow_ble-1.0.0-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
66921ce6bf35ae02a5fa1a16a79ff969488e1bf4bffb90dde786be511956c5c7
|
|
| MD5 |
21cf9cc737d0de56627f36a1ad3af65e
|
|
| BLAKE2b-256 |
2fbef4c08d4189c5ff40c98b46fc20c331daea62de2365df42677eff216e5fdd
|
Provenance
The following attestation bundles were made for robomow_ble-1.0.0-py3-none-any.whl:
Publisher:
release.yml on arjanmels/robomow_ble
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
robomow_ble-1.0.0-py3-none-any.whl -
Subject digest:
66921ce6bf35ae02a5fa1a16a79ff969488e1bf4bffb90dde786be511956c5c7 - Sigstore transparency entry: 1725485414
- Sigstore integration time:
-
Permalink:
arjanmels/robomow_ble@81111aaf829b2b4ac5f987bd7d314db4f4e8c39f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/arjanmels
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@81111aaf829b2b4ac5f987bd7d314db4f4e8c39f -
Trigger Event:
workflow_dispatch
-
Statement type: