This is a Home Assistant integration for cloud-connected Landroid mowers.
Landroid Cloud and install it, or use the button below.Landroid Cloud.custom_components/landroid_cloud into your Home Assistant custom_components directory.Landroid Cloud.Open the integration setup directly:
Or go to Home Assistant > Settings > Devices & services.
Add Landroid Cloud. If it doesn't show up, try CTRL+F5 to refresh the page.
Use the same credentials as in your mower app.
If you're upgrading from v6, existing config entries should migrate to v7 automatically. You shouldn't need to remove and add the integration again.
Barma-lej has created a custom card for the Landroid Cloud integration.
Installation instructions are in the GitHub repository.
Each mower is added as a Home Assistant device. The integration creates a native lawn mower entity plus related entities for status, diagnostics, and configuration.
Entities that can change mower settings go unavailable while the mower is offline. Read-only entities stay available, so you can still see status and diagnostics.
Fleet is not supported right now. The Fleet API is still in early alpha, so this integration does not expose Fleet devices or controls.
On Kress RTK Mission and Landroid Vision mowers, zones and schedules are read-only in this integration. They can be read from the mower, but they cannot be changed from Home Assistant.
Each mower creates one lawn mower entity with these actions:
When the mower reports GPS coordinates, the lawn mower entity also keeps the legacy latitude and longitude attributes for backward compatibility with existing dashboards and automations.
Mowers that expose location support create one GPS device tracker entity.
| Entity | Category | Default | Notes |
|---|---|---|---|
| Location | Standard | Disabled | Only created for mowers with location support |
Notes:
| Entity | Category | Default |
|---|---|---|
| Battery | Standard | Enabled |
| Status | Standard | Enabled |
| Error | Diagnostic | Enabled |
| Signal strength | Diagnostic | Disabled |
| Daily progress | Standard | Disabled |
| Next schedule | Standard | Disabled |
| Auto schedule nutrition | Standard | Disabled |
| Auto schedule exclusion schedules | Standard | Disabled |
| Rain delay remaining | Standard | Disabled |
| Last update | Standard | Disabled |
| Battery charge cycles total | Diagnostic | Disabled |
| Battery charge cycles since reset | Diagnostic | Disabled |
| Battery temperature | Diagnostic | Disabled |
| Battery voltage | Diagnostic | Disabled |
| Pitch | Diagnostic | Disabled |
| Roll | Diagnostic | Disabled |
| Yaw | Diagnostic | Disabled |
| Blade runtime total | Diagnostic | Disabled |
| Blade runtime since reset | Diagnostic | Disabled |
| Blade runtime at last reset | Diagnostic | Disabled |
| Blade runtime reset time | Diagnostic | Disabled |
| Distance driven total | Diagnostic | Disabled |
| Mower runtime total | Diagnostic | Disabled |
Notes:
Next schedule is a timestamp sensor and includes known schedule details as attributes.Auto schedule nutrition exposes the configured N/P/K values when auto schedule provides them.Auto schedule exclusion schedules summarizes exclusion rules and exposes the normalized schedule details as attributes.Rain delay remaining is only available while a rain delay is active. When the mower reports 0 minutes left, the sensor becomes unavailable instead of showing 0.| Entity | Category | Default |
|---|---|---|
| Charging | Diagnostic | Enabled |
| Rain sensor | Diagnostic | Disabled |
If the mower reports OTA firmware support, firmware updates are exposed through a native Home Assistant update entity.
| Entity | Category | Default | Notes |
|---|---|---|---|
| Firmware | Standard | Enabled | Requires OTA firmware support |
Notes:
All switches are configuration entities and require the mower to be online.
| Entity | Default | Notes |
|---|---|---|
| Auto schedule | Disabled | |
| Firmware auto update | Disabled | Requires OTA firmware support |
| Party mode | Disabled | Requires party mode support |
| Auto schedule irrigation | Disabled | Requires auto schedule to be enabled |
| Auto schedule exclude nights | Disabled | Requires auto schedule to be enabled |
| Lock | Disabled | |
| Off Limits | Enabled | Requires Off Limits support |
| Off Limits shortcuts | Enabled | Requires Off Limits support |
| ACS | Disabled | Requires ACS support |
Buttons require the mower to be online.
| Entity | Category | Default | Notes |
|---|---|---|---|
| Edge cut | Standard | Disabled | Requires edge cut support |
| Reset blade runtime | Configuration | Disabled | |
| Reset battery cycles | Configuration | Disabled |
Numbers require the mower to be online and are disabled by default.
| Entity | Category | Range | Step | Notes |
|---|---|---|---|---|
| Rain delay | Configuration | 0-300 min | 1 | |
| Cutting height | Configuration | 20-70 mm | 1 | Requires cutting height support |
| Time extension | Configuration | -100% to 100% | 10 | |
| Torque | Configuration | -50% to 50% | 1 | Requires torque support |
| Lawn size | Configuration | 0-100000 m² | 1 | |
| Lawn perimeter | Configuration | 0-100000 m | 1 |
| Entity | Category | Default | Notes |
|---|---|---|---|
| Zone | Configuration | Disabled | Requires mower to be online |
| Auto schedule boost | Configuration | Disabled | Requires auto schedule to be enabled |
| Auto schedule grass type | Configuration | Disabled | Requires auto schedule to be enabled |
| Auto schedule soil type | Configuration | Disabled | Requires auto schedule to be enabled |
You can control the mower through native entities and custom landroid_cloud services:
landroid_cloud.ots service for starting a one-time schedulelandroid_cloud.add_schedule, landroid_cloud.edit_schedule, and landroid_cloud.delete_schedule services for schedule managementSupported device automation states include mowing, docked, returning, error, edge cut, starting, zoning, searching for zone, idle, rain delayed, and escaped digital fence.
Auto-schedule settings are written through observed mower API calls, not through the MQTT push channel used for many live updates.
That means changes made in Home Assistant do not show up right away in the vendor app, and changes made in the vendor app do not show up right away in Home Assistant. Updated values appear after the next API refresh.
On Kress RTK Mission and Landroid Vision mowers, schedules are read-only. The integration can show them, but it cannot create, edit, or delete them.
Legacy mowers expose their configured start-point zones for selection. RTK/Vision-style zone IDs are exposed as read-only. Changing the selected RTK zone from Home Assistant is not supported yet.
Firmware update metadata is read from the vendor cloud API and merged with the mower's live firmware payload when available.
Because availability and release notes come from cloud lookups instead of the usual push updates, Home Assistant may only show new firmware details after the next refresh or when the update entity refreshes its metadata.
All custom services target a lawn_mower entity from this integration.
landroid_cloud.otsStarts a one-time mowing session on mowers that support it.
Fields:
boundary: Include boundary or edge cuttingruntime: Run time in minutes, from 10 to 120Example:
action: landroid_cloud.ots
target:
entity_id: lawn_mower.my_landroid
data:
boundary: false
runtime: 45
landroid_cloud.add_scheduleCreates one or more recurring schedule entries in a single action.
Fields:
days: One or more days of the weekstart: Start time in HH:MM formatduration: Duration in minutesboundary: Optional. If omitted, boundary defaults to false on mowers that require itBehavior:
Example:
action: landroid_cloud.add_schedule
target:
entity_id: lawn_mower.my_landroid
data:
days:
- monday
- wednesday
- friday
start: "09:00"
duration: 60
boundary: false
landroid_cloud.edit_scheduleUpdates one existing schedule entry.
Fields:
current_day: The current day of the schedule you want to changecurrent_start: Optional. Use this when that day has more than one scheduleday: The new daystart: The new start time in HH:MM formatduration: The new duration in minutesboundary: Optional boundary setting for the updated entryBehavior:
current_start is not neededcurrent_start so the integration knows which one to editExample:
action: landroid_cloud.edit_schedule
target:
entity_id: lawn_mower.my_landroid
data:
current_day: monday
current_start: "09:00"
day: tuesday
start: "10:30"
duration: 45
boundary: true
landroid_cloud.delete_scheduleDeletes one schedule entry or clears the whole schedule.
Fields:
all_schedules: Optional. Set to true to remove every schedule entry in one callday: Day of the schedule you want to deletestart: Optional. Use this when the selected day has more than one scheduleBehavior:
all_schedules is true, all schedule entries are removed and day is not neededstart is not neededstartExamples:
action: landroid_cloud.delete_schedule
target:
entity_id: lawn_mower.my_landroid
data:
day: monday
start: "09:00"
action: landroid_cloud.delete_schedule
target:
entity_id: lawn_mower.my_landroid
data:
all_schedules: true
Enable the Next schedule sensor if you want an easy way to inspect the normalized schedule data used by the integration. Its attributes include schedule_entries, which can help you see which days and start times currently exist for the mower.
$ claude mcp add landroid_cloud \
-- python -m otcore.mcp_server <graph>