Unofficial / experimental custom integration. This project is not affiliated with, endorsed by, or sponsored by Kress, Positec, MTrab, or Home Assistant.
Native Home Assistant integration for the current Kress Fleet platform using the Fleet web application's private REST/SSO/MQTT interfaces.
Home Assistant domain: kress_fleet
License: GPL-3.0
Minimum Home Assistant version: 2026.8.0
Languages: English and German are bundled. User-visible entity names, select options and live-map captions follow the Home Assistant instance language; unsupported languages fall back to English.
- Kress Fleet sign-in with email + password; no manually copied cookies/tokens
- automatic discovery of owned and shared Fleet mowers across multiple locations
- one Home Assistant device per physical mower
- native
lawn_mowerentity with Start / Pause / Dock - targeted RTK zone mowing with a per-mower Mowing zone select and Mow selected zone button
- live MQTT telemetry over WebSockets
- live GPS
device_tracker - battery, status, signal, firmware, numeric zone and friendly Zone name sensors
- raw numeric Error code plus localized Error description sensors
- cloud, MQTT, RTK, rain and charging diagnostics
- active Fleet map discovery
- live-map camera with work-map geometry, coverage and No-Go areas
- active No-Go areas in red; disabled No-Go areas in grey/dashed style
- compact live mower marker; mower names only when multiple mowers share a map
- per-mower coverage period selector: Today through the last 7 calendar days
- coverage de-duplication when multiple mowers share the same map/window
- Home Assistant instance timezone for coverage and position timestamps shown in the live map
- background/lazy loading so multi-megabyte map coverage does not block Home Assistant startup
Friendly zone names are resolved from Fleet metadata and shown in the Zone name sensor and
live-map header. When protocol-1 RTK telemetry omits the current zone, the integration falls back
to the mower's precise dat.rtk.pos position and resolves it against Fleet's structured zone
contours; direct MQTT/task zone telemetry always remains authoritative. Zone names are intentionally
not drawn inside map polygons.
The integration keeps the raw numeric Fleet mower error in Error code for
backward-compatible automations and exposes a second Error enum sensor with
Home Assistant-localized text. Unknown future codes remain visible through the
numeric sensor and are reported as Unknown error by the description sensor.
Known community-documented protocol ranges are 0-20 and 100-120 (Vision /
RTK included). For example, code 106 resolves to Unreachable charging
station / Ladestation nicht erreichbar. The mapping is based on the
community-maintained Worx/Kress protocol documentation:
https://github.com/iobroker-community-adapters/ioBroker.worx/blob/master/docs/en/README.md
Version 0.3.14 adds native targeted-zone control based on the command emitted by the official Fleet web application. Each mower exposes a Mowing zone select whose options are built dynamically from that mower's Fleet map, plus a Mow selected zone button. No mower UUID, zone number or zone name is hard-coded.
The integration sends the Fleet RTK single-zone command shape
cmd=1, ls=34, le=0, cut.zo=0, cut.b=1, with cut.z containing the
selected Fleet zone ID. The normal MQTT publisher adds the mower UUID, timestamp
and command ID. The v0.3.13 temporary zone-probe attributes have been removed.
- Open HACS.
- Add
https://github.com/cm86/home-assistant-kress-fleetas a custom repository of type Integration. - Install Kress Fleet.
- Restart Home Assistant.
- Go to Settings -> Devices & services -> Add integration -> Kress Fleet.
- Sign in with the same Kress account used for Fleet.
Copy:
custom_components/kress_fleet
to:
/config/custom_components/kress_fleet
Restart Home Assistant and add Kress Fleet from Settings -> Devices & services.
No YAML configuration is required.
The live-map camera is rendered locally from Fleet map detail + coverage data. No Google Maps API key is required or exposed.
Layer scheme:
- light green: map area not covered in the selected period
- dark green: covered / mowed area
- red: active No-Go / exclusion area
- grey dashed: disabled No-Go area
Each mower exposes a Coverage period select. In an English Home Assistant instance the options are:
- Today
- Last 2 days
- Last 3 days
- Last 4 days
- Last 5 days
- Last 6 days
- Last 7 days
On a German Home Assistant instance the same stable internal options are presented as Heute, Letzte 2 Tage, and so on. The raw option keys remain language-neutral for automation stability.
Changing the select triggers an immediate coverage refresh. Afterwards the selected period is polled automatically:
- Today while working: about every 60 seconds
- 2-7 days while working: about every 5 minutes
- idle coverage: about every 10 minutes
Large coverage JSON remains in coordinator memory and is deliberately not stored as entity attributes or written to Recorder.
Fleet API timestamps remain UTC internally. The coverage from/to timestamps and the live
mower position timestamp displayed in Home Assistant are converted to the timezone
configured for the Home Assistant instance (for example Europe/Berlin), including DST.
One config entry represents the Fleet account, not one mower. All accessible physical mowers are discovered, including shared mowers returned by Fleet.
When multiple mowers use the same Fleet map and coverage window, /coverage is fetched once
and the in-memory snapshot is shared. Live MQTT state and GPS remain separate per mower.
type: picture-entity
entity: camera.YOUR_MOWER_LIVE_MAP
show_name: false
show_state: false
camera_view: autoThe companion Kress Fleet Card is maintained as a separate HACS dashboard repository; it is not bundled with this integration.
Temporarily enable:
logger:
logs:
custom_components.kress_fleet: debugWhen sharing logs or browser captures, remove credentials and secrets. In particular, never publish passwords, session cookies, XSRF values, OAuth authorization codes, MQTT tokens or signatures, Home Assistant camera access tokens, ICCID/IMSI values, or raw authenticated request headers.
Kress Fleet does not provide a public API contract for the interfaces used here. The integration is based on behavior observed in the Fleet web application and can break when Kress changes its SSO flow, REST schemas, map formats, MQTT authorization, topics, or payloads.
The current implementation has been live-tested with multiple accessible mowers across several Fleet locations, but that does not guarantee compatibility with every Kress model/account.
Kress, Fleet, Positec, Worx and related product names and marks belong to their respective owners. They are used only to identify compatibility. This repository intentionally does not bundle the official Kress/Fleet logo or other Kress artwork.
A neutral community icon can be submitted separately to home-assistant/brands if this
integration is prepared for HACS default-repository inclusion.
This project is a modified/derivative work based in part on concepts, structure and code from:
Both upstream projects are GPL-3.0. This derivative project is distributed under GPL-3.0 as well. See LICENSE, NOTICE and UPSTREAM.md.
No endorsement by the upstream authors or contributors is claimed or implied.
