This is an unofficial, community project and is not affiliated with, endorsed by, sponsored by, or approved by Anthbot.
All product names, logos, and trademarks are property of their respective owners. See NOTICE.md.
This repository contains a custom integration for Anthbot robotic mowers:
custom_components/anthbot_genie
This integration supports the Anthbot Genie 600, M5, and M9 models. It auto-discovers all account-bound mowers via:
GET https://api.anthbot.com/api/v1/device/bind/list
For each mower, it auto-fetches its cloud region/IoT endpoint via:
GET https://api.anthbot.com/api/v1/device/v2/region?sn=<sn>
Then it polls the AWS IoT device shadow endpoint per discovered sn using automatic SigV4 signing:
GET https://<iot_endpoint>/things/<sn>/shadow?name=property
It also fetches the mower area definition file from Anthbot cloud to discover:
- manual zones
- auto-zones
From state.reported it exposes:
lawn_mower.<device>mappingrobot_sta.valueormode.valueto the standard Home Assistantmowing/paused/docked/returningactivities, withstart_mowing,pause, anddockactionssensor.<device>_battery_levelfromelec.value(M5/M9) orelec(Genie 600)sensor.<device>_mower_statusfromrobot_sta.valueormode.valuesensor.<device>_cutting_heightfromparam_set.cutter_height/mow_remote.cutter_heightsensor.<device>_voice_volumefromvolumesensor.<device>_mowing_timefrommowing_time_new.value(session elapsed time)sensor.<device>_mowing_areafrommowing_area_new.value(session mowed area)sensor.<device>_mowing_time_totalfrommowing_time.value(M5/M9 total time)sensor.<device>_mowing_area_totalfrommowing_area.value(M5/M9 total area)sensor.<device>_custom_mowing_directionfromparam_set.mow_headsensor.<device>_custom_mowing_direction_enabledfromparam_set.enable_adaptive_head(mapped to enabled/disabled)sensor.<device>_modefrommode.value(M5/M9)sensor.<device>_error_codefromerror.value(M5/M9)sensor.<device>_ip_addressfromnet_config.ip(M5/M9)sensor.<device>_wifi_ssidfromnet_config.ssid(M5/M9)sensor.<device>_rtk_statefromrtk.state(M5/M9)sensor.<device>_map_areafrommap.map_area(M5/M9)sensor.<device>_mapping_task_statefrommapping_task.state(M5/M9)sensor.<device>_zonesfor discovered manual zonessensor.<device>_auto_zonesfor discovered auto-zonesbinary_sensor.<device>_connectionfromonlinebinary_sensor.<device>_chargingfromrobot_sta.valueormode.valueswitch.<device>_custom_mowing_direction_enabledto toggleparam_set.enable_adaptive_headswitch.<device>_rain_perception_enabledto togglerain_switchswitch.<device>_base_station_mowing_enabledto toggle Anthbot's nest/base-station mowing modeswitch.<device>_base_station_visual_inspection_enabledto toggle visual inspection for that modenumber.<device>_base_station_mow_count_settingfor 1x/2x nest mowing passesnumber.<device>_base_station_mow_height_settingfor nest mowing heightselect.<device>_base_station_visual_inspection_levelfor nest visual inspection level (Low,Medium,High)
Entity attributes also include:
serial_numbermower_statusrobot_status_rawmode(M5/M9)error_code(M5/M9)cutting_heightmowing_timemowing_areamowing_time_total(M5/M9)mowing_area_total(M5/M9)voice_volumecustom_mowing_directioncustom_mowing_direction_enabledbase_station_mowing_enabledbase_station_mow_countbase_station_mow_heightbase_station_visual_inspection_enabledbase_station_visual_inspection_levelbase_station_mowing_activerain_continue_timevoice_statusip_address(M5/M9)wifi_ssid(M5/M9)rtk_state(M5/M9)map_area(M5/M9)mapping_task_state(M5/M9)`
The dedicated zone sensors also expose:
- manual zone ids, names, and active zone ids
- auto-zone ids and names
For easier control, the integration also creates per-zone buttons on the mower device:
Zone <name>for each manual zoneAuto zone <name>for each auto-zone
Each of those button entities exposes the zone-specific metadata as attributes and can be pressed directly from the device page.
- Open HACS -> Integrations -> top-right menu ->
Custom repositories. - Add repository URL:
https://github.com/vincentjanv/anthbot_genie_ha - Category:
Integration - Install
Anthbot HAfrom HACS and restart Home Assistant. - Add integration:
Settings -> Devices & Services -> Add Integration -> Anthbot HA.
- Copy
custom_components/anthbot_genieinto your Home Assistant config directory. - Restart Home Assistant.
- Add integration:
Settings -> Devices & Services -> Add Integration -> Anthbot HA. - In config, enter Anthbot
username/password, select your country (area code dropdown). - The rest (device discovery, region, IoT endpoint, shadow auth signing) is automatic.
Starting with Home Assistant 2026.3, custom integrations can ship their own brand images directly. This integration includes local brand assets at:
custom_components/anthbot_genie/brand/icon.pngcustom_components/anthbot_genie/brand/logo.png
Home Assistant serves these through its local brands API, so the Anthbot icon will be displayed in your Home Assistant integration list and device pages. No separate home-assistant/brands PR is required for HACS/custom installs.
Starting with Home Assistant 2026.3, custom integrations can ship their own brand images directly. This integration includes local brand assets at:
custom_components/anthbot_genie/brand/icon.pngcustom_components/anthbot_genie/brand/logo.png
Home Assistant serves these through its local brands API, so no separate home-assistant/brands PR is required for HACS/custom installs.
The integration provides these Home Assistant services:
anthbot_genie.start_full_mowanthbot_genie.stop_mowanthbot_genie.return_to_dockanthbot_genie.set_mow_height(mow_height: 30..70 in 5 mm steps)anthbot_genie.set_voice_volume(voice_volume: 0..100)anthbot_genie.set_custom_mowing_direction(mow_direction: 0..180,enable_custom_direction: true/false)anthbot_genie.start_zone_mow(zones: id, name, comma-separated string, or YAML list)anthbot_genie.start_auto_zone_mow(auto_zones: id, name, comma-separated string, or YAML list)
You can target by Anthbot entities (target.entity_id) and/or by serial_number.
Examples:
service: anthbot_genie.start_zone_mow
target:
entity_id: sensor.cleaver_zones
data:
zones: [100]service: anthbot_genie.start_auto_zone_mow
target:
entity_id: sensor.cleaver_auto_zones
data:
auto_zones: "1, Front area"The integration also creates control entities on each mower device page:
- Lawn mower:
lawn_mower.<device>with the standardstart_mowing,pause, anddockactions - Buttons:
Start full mow,Stop mow,Return to dock - Buttons: one
Zone <name>per manual zone - Buttons: one
Auto zone <name>per auto-zone - Number controls (sliders):
Cutting height(30..70 mm),Volume(0..100 %) - Number control (slider):
Mowing direction(0..180°) - Number control (slider):
Rain delay(0..12 hours) - Number control (slider):
Anti-theft radius(1..100 m) - Number controls (sliders):
Base station mow count(1..2),Base station cutting height(30..70 mm) - Selects:
Obstacle avoidance level,Base station obstacle avoidance level(Low,Medium,High) - Switches:
Rain detection,Camera,Obstacle avoidance,Anti-theft protection,Indoor mode,Diagnostics logging - Switch:
Custom mowing direction - Switches:
Base station mowing,Base station obstacle avoidance - Sensors:
Zones,Auto zoneswith zone ids/names summaries
You can trigger/test commands directly from those entities in the device page.
Settings entities show as unavailable when the mower does not report that
setting, rather than sitting at unknown forever. Which settings exist differs
per model — a Genie 600 has no base-station ("nest") settings, an M5 has no
nest_param_set unless a base station is paired.
The write path follows what the official app does, per
PROTOCOL.md:
- Mowers that report a
device_configobject (M-series) get a singledevice_configcommand with a partial update — this is what the app's own settings screen sends. - Older Genie firmware gets the per-setting commands (
volume_ctl,ctl_rainer,indoor_switch, …), each with its own payload shape. - Mowing parameters go out as a partial
param_setupdate on both.
The choice is made from what the mower actually reports, not from its model name, because the app itself never branches on model.
If a setting occasionally does not take effect, the mower was most likely not
accepting commands at that moment (it reports online: 0 when asleep). Simply
try again — this is a device state, not an integration bug.
Recent community contributions include:
- Anthbot M5/M9 model support by
@riza-aslan. - Standard Home Assistant
lawn_mowerentity support by Denis Kot /DenisBYin PR #12. - Polish translations by Tomasz Terlecki /
tazmanskain PR #9.
Feel free to make a contribution at https://buymeacoffee.com/vincentjanv if this integration helped you in any way...
If you have any issues with this integration, feel free to open an issue in this repository. For discussions on improving this repository, please join the global Anthbot community on Facebook at https://www.facebook.com/groups/anthbotglobalcommunity of if you're living in the Nordics, at https://www.facebook.com/groups/anthbotnordicscommunity .
