A Home Assistant custom integration for CloudHawk lawn mowers using Bluetooth Low Energy (BLE) communication.
- Status - Current mower operation status (IDLE, MOWING, RETURNING, CHARGING)
- Battery Level - Current battery percentage with charging status
- Signal Type - Boundary signal selection (S1, S2, etc.)
- Firmware Version - Current mower firmware
- Serial Number - Device serial number
- Fault Records - Number of fault records with recent details
- Mow Now - Begin regular mowing cycle
- Spiral Cut - Start spiral cutting pattern
- Edge Cut - Start edge cutting along boundaries
- Stop Mowing - Immediately stop the mower
- Return to Dock - Send mower back to charging station
- Boundary Trimming - Shows if edge trimming is enabled
- Ultrasonic Sensor - Shows if ultrasonic obstacle detection is enabled
-
Copy the
custom_components/cloudhawkfolder to your Home Assistantcustom_componentsdirectory:homeassistant/ └── custom_components/ └── cloudhawk/ ├── __init__.py ├── manifest.json ├── config_flow.py ├── sensor.py ├── button.py ├── switch.py ├── services.yaml └── cloudhawk_mower.py -
Restart Home Assistant
-
Go to Settings → Devices & Services → Add Integration
-
Search for "CloudHawk" and select it
This integration will be available through HACS in the future. For now, please use manual installation.
If your CloudHawk mower is discoverable via Bluetooth, it should appear automatically:
- Go to Settings → Devices & Services
- Look for "CloudHawk Lawn Mower" in discovered devices
- Click Configure and follow the setup wizard
- Go to Settings → Devices & Services → Add Integration
- Search for "CloudHawk"
- Enter the mower's Bluetooth MAC address
- Enter a friendly name (optional)
- Click Submit
You can find your mower's address using:
# On Linux/macOS with bluetoothctl
bluetoothctl
scan on
# Look for device named like "SN0190104721"
# On macOS with system_profiler
system_profiler SPBluetoothDataTypeOr use the included scanner:
python3 bluetooth_scanner.pytype: entities
title: CloudHawk Mower
entities:
- entity: sensor.cloudhawk_mower_battery_level
- entity: sensor.cloudhawk_mower_signal_type
- entity: switch.cloudhawk_mower_boundary_trimming
- entity: sensor.cloudhawk_mower_working_hours
- entity: sensor.cloudhawk_mower_fault_recordstype: horizontal-stack
cards:
- type: button
tap_action:
action: call-service
service: button.press
target:
entity_id: button.cloudhawk_mower_start_mowing
icon: mdi:play
name: Mow Now
- type: button
tap_action:
action: call-service
service: button.press
target:
entity_id: button.cloudhawk_mower_stop_mowing
icon: mdi:stop
name: Stop
- type: button
tap_action:
action: call-service
service: button.press
target:
entity_id: button.cloudhawk_mower_return_to_dock
icon: mdi:home
name: Dockautomation:
- alias: "Start Mowing Weekdays"
trigger:
platform: time
at: "09:00:00"
condition:
condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
action:
service: button.press
target:
entity_id: button.cloudhawk_mower_start_mowingautomation:
- alias: "Stop Mowing on Low Battery"
trigger:
platform: numeric_state
entity_id: sensor.cloudhawk_mower_battery_level
below: 20
action:
service: button.press
target:
entity_id: button.cloudhawk_mower_return_to_dockautomation:
- alias: "Mower Fault Alert"
trigger:
platform: state
entity_id: sensor.cloudhawk_mower_fault_records
condition:
condition: template
value_template: "{{ trigger.to_state.state | int > trigger.from_state.state | int }}"
action:
service: notify.mobile_app_your_phone
data:
title: "Mower Fault"
message: "CloudHawk mower has {{ trigger.to_state.state }} fault records"The integration provides services that can be called from automations or scripts:
cloudhawk.start- Start regular mowingcloudhawk.start_once- Start single mowing sessioncloudhawk.stop- Stop mowingcloudhawk.dock- Return to dock
Example service call:
service: cloudhawk.start_once
target:
device_id: your_device_id- Mower not discovered: Ensure Bluetooth is enabled
- Connection timeout: Move Home Assistant closer to the mower
- Intermittent disconnections: Check Bluetooth interference from other devices
Enable debug logging by adding to configuration.yaml:
logger:
default: info
logs:
custom_components.cloudhawk: debug- "Cannot connect": Mower may be off or out of range
- Sensors showing "Unknown": Connection may be unstable, check distance
- Commands not working: Ensure mower is powered on and within range
- Uses Bluetooth Low Energy (BLE)
- Custom protocol with
55AAheader - Service UUID:
0000ff12-0000-1000-8000-00805f9b34fb - Write UUID:
0000ff01-0000-1000-8000-00805f9b34fb - Notify UUID:
0000ff02-0000-1000-8000-00805f9b34fb
- Real-time data updates via BLE notifications (no polling)
- Commands trigger immediate data refresh
- Background connection maintenance
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
This is an unofficial integration created through reverse engineering. Use at your own risk. The developers are not affiliated with CloudHawk.