[![HACS][hacs-image]][hacs-url] [![Buy Me A Coffee][buymeacoffee-image]][buymeacoffee-url] ![Latest release][latest-url] ![All releases][downloads] ![Latest release][downloads_latest]
🌿 Landroid mower card for [Home Assistant][home-assistant] Lovelace UI
![Live preview of landroid-card][preview-gif]
First, you need to install the Landroid Cloud integration.
Install [using HACS][hacs] or [follow this guide][landroid-cloud].
Just click this button to add the repository to HACS:
Or you can manually add this repository to your HACS installation. [Here is the manual process][hacs-add-repo].
Manual
Do not use this method if you have already installed the card via HACS!
If you prefer not to use HACS, you can manually install the card:
js files from the [latest release][downloads_latest].config/www folder.landroid-card.js in Lovelace. There are two ways to do this:Using the UI:
Navigate to the Resources page by following the link below: [![Open your Home Assistant instance and show your resources.][dashboard-resources-img]][dashboard-resources]
Or go to Settings → Dashboards → click the three dots in the top right corner and choose Resources.
Click the Plus button.
/local/landroid-card.js.JavaScript Module.Note: If you do not see the Resources tab, you need to enable Advanced Mode in your User Profile.
Using YAML: Add the following code to the lovelace section:
yaml
resources:
- url: /local/landroid-card.js
type: module
Add custom:landroid-card to Lovelace UI as you would with any other card (using either the editor or YAML configuration).
If you are upgrading from an older version of this card (v1.x / Landroid Cloud 6):
vacuum.mower → lawn_mower.mowersettings: → settings_card: in your card config (old key still works)action object format (see Shortcuts)Entities in
info_card,battery_card,statistics_cardandsettings_cardare now auto-discovered from the device — you can remove manual lists unless you want to override the order.
This card can be configured using the Lovelace UI editor.
entity.Note:
actions,shortcuts, andstatsare not yet supported in the visual editor — use the YAML/Code editor for these options.
The visual editor is organized into tabs: General, Battery 🔋, Info ℹ️, Statistics 📊, and Settings ⚙️. Entity order within each tab can be changed by drag & drop.
A typical example of using this card in YAML configuration:
type: custom:landroid-card
entity: lawn_mower.mower
# camera: camera.mower_camera # optional
# camera_view: live # optional: 'auto' | 'live'
# camera_controls: false # optional
# camera_muted: true # optional
image: default
image_size: '4'
show_animation: true
show_edgecut: true
show_status: true
show_toolbar: true
shortcuts:
- name: Notification
icon: mdi:bell
action:
action: perform-action
perform_action: automation.toggle
target:
entity_id: automation.mower_notify_status
stats:
default:
- entity_id: sensor.mower_blades_total_on_time
subtitle: Total blade time
value_template: '{{ as_timedelta((value | float(0) * 3600) | round(0) | string) }}'
- entity_id: sensor.mower_blades_current_on_time
subtitle: Current blade time
value_template: '{{ as_timedelta((value | float(0) * 3600) | round(0) | string) }}'
- entity_id: sensor.mower_total_worktime
subtitle: Work time
value_template: '{{ as_timedelta((value | float(0) * 3600) | round(0) | string) }}'
- entity_id: sensor.mower_distance_driven
value_template: '{{ (value | float(0) / 1000) | round(3) }}'
unit: km
subtitle: Distance
mowing:
- entity_id: sensor.mower_yaw
subtitle: Yaw
unit: °
- entity_id: sensor.mower_roll
subtitle: Roll
unit: °
- entity_id: sensor.mower_pitch
subtitle: Pitch
unit: °
Here is an explanation of each option:
| Name | Type | Default | Description |
|---|---|---|---|
type |
string |
custom:landroid-card |
Type of the card — must be custom:landroid-card |
entity |
string |
Required | An entity_id within the lawn_mower domain |
camera |
string |
Optional | An entity_id within the camera domain, for displaying the live camera stream |
camera_view |
string |
auto |
Camera stream mode: auto (let HA decide) or live (force live stream) |
camera_controls |
boolean |
false |
Show video playback controls on the camera stream |
camera_muted |
boolean |
true |
Mute audio in the camera stream |
image |
string |
default |
Path to an image of your mower. Use png or svg formats for best results |
image_size |
integer |
4 |
Image size — an integer from 1 to 8, where each unit equals 50 px (e.g., 2 → 100 px) |
image_left |
boolean |
false |
Show the image on the left side |
show_animation |
boolean |
true |
Show image animation while mowing or returning |
show_edgecut |
boolean |
true |
Show the edgecut button on the toolbar |
show_name |
boolean |
false |
Show the friendly name of the mower |
show_status |
boolean |
true |
Show the current status of the mower |
show_toolbar |
boolean |
true |
Show the toolbar with action buttons |
compact_view |
boolean |
false |
Use a compact view without an image |
settings_card |
object |
Optional | List of configuration entities shown when the ⚙️ button is clicked. Leave empty for auto-discovery from the device's config category. Replaces deprecated settings. |
battery_card |
object |
Optional | List of entities shown when the 🔋 button is clicked at the top right corner of the card. Leave empty to use defaults |
info_card |
object |
Optional | List of entities shown when the 🛜 button is clicked at the top left corner of the card. Leave empty to use defaults |
statistics_card |
object |
Optional | List of entities shown when the ⌚ button is clicked at the top middle of the card. Leave empty to use defaults |
stats |
object |
Optional | Custom per-state stats displayed below the mower image |
actions |
object |
Optional | Override default toolbar button actions with custom service calls |
shortcuts |
object |
Optional | List of custom shortcut buttons shown at the bottom right of the card |
settings_card objectDefines which configuration entities are shown when the ⚙️ button is clicked at the bottom of the card. You can find available entities in your device's Configuration section.
Note: If
settings_cardis not specified, entities withconfigcategory are discovered automatically. The oldsettingskey still works as a fallback.
settings_card:
- switch.mower_party_mode
- switch.mower_locked
- number.mower_raindelay
- number.mower_time_extension
- number.mower_torque
- select.mower_current_zone
- button.mower_start_cutting_edge
- button.mower_restart_baseboard
battery_card, info_card, statistics_card objectsDefines which entities are shown when the tip buttons are clicked at the top of the card.
Note: These lists are optional. If not specified, the card automatically detects the relevant entities from your device using
translation_key. Specify them only if you want to override the defaults or change the order.
To remove an entity from a card in the visual editor, simply clear its field — the card will revert to automatic detection.
battery_card:
- sensor.mower_battery
- sensor.mower_battery_temperature
- sensor.mower_battery_voltage
- sensor.mower_battery_charge_cycles
info_card:
- sensor.mower_rssi
- sensor.mower_serial_number
- update.mower_firmware
statistics_card:
- sensor.mower_total_worktime
- sensor.mower_blades_total_on_time
- sensor.mower_blades_current_on_time
- sensor.mower_distance_driven
stats objectYou can use any mower attribute or any entity by entity_id to display in the stats section:
| Name | Type | Description |
|---|---|---|
entity_id |
string |
An entity_id with a state, e.g., sensor.mower |
attribute |
string |
The attribute name to display, e.g., total_blade_time |
value_template |
string |
Jinja2 template returning a value. See [Home Assistant Templating][ha-templating]. The value variable represents the state of entity_id or attribute, e.g., "{{ as_timedelta((value \| float(0) * 60) \| string) }}" |
unit |
string |
Unit of measure, e.g., hours |
subtitle |
string |
Friendly label for the stat, e.g., Blade time |
```yaml stats: default:
$ claude mcp add landroid-card \
-- python -m otcore.mcp_server <graph>