Ah finally, it’s better!
The « mow » button correctly starts a mow/pause/resume
The « refresh » button works well: the information appears immediately
But there is still a problem: the robot starts a mow on 1 single zone and with default parameters that are not good. I don’t know where it gets them from?
They don’t come from the Mammotion app: they are hardcoded in src/mammotion/commands.js:210 (buildRouteContent). These are the default values from Home Assistant:
1 border tour
25 cm between passes
speed 0.3 m/s
obstacle detection enabled
no automatic direction change
Cutting height (src/mammotion/client.js:504): the last height sent by the robot. If it hasn’t sent any, it’s 60 mm (DEFAULT_BLADE_HEIGHT_MM, line 52).
The Mammotion app keeps its settings in the phone. Gladys can’t read them.
Why only one zone
Gladys asks the robot for the list of zones (buildZoneListRequestContent, the « zone name list »), then starts mowing on all received zones.
Most likely hypothesis: this list only contains zones that have a name. Zones without a name are ignored. I haven’t checked this yet.
Another possibility: the robot sends the list in multiple messages and Gladys only keeps the first one.
To decide, look in the Gladys logs for the line:
planning a route over N zone(s) (…)
It indicates how many zones were found, and which ones.
What I propose to fix
Retrieve the real list of all zones (the list of « map hashes », not just those that have a name).
Make the settings modifiable in the service config: height, spacing, speed, border tours, zones to mow.
Do you want me to make these changes? If so, send me the log line above and your usual settings in the app.
[2026-10-02T15:35:24.944Z] [INFO] Starting the Mammotion integration...
[2026-10-02T15:35:25.154Z] [INFO] [gladys-sdk] connected to Gladys (http://172.30.0.1:80)
[2026-10-02T15:35:25.533Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-10-02T15:35:26.763Z] [WARN] [mammotion] Aliyun bindings unavailable: fetch failed
[2026-10-02T15:35:26.764Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T15:35:30.804Z] [INFO] [mammotion] Luba-VPMBS8RA is not on Aliyun, switching to the Mammotion broker
[2026-10-02T15:35:31.340Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-10-02T15:35:31.374Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-10-02T15:35:31.517Z] [INFO] [mammotion-mqtt] First data received from Luba-VPMBS8RA (device_protobuf_msg_event)
[2026-10-02T15:37:37.269Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T15:39:27.365Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-02T15:39:28.121Z] [INFO] [mammotion] Luba-VPMBS8RA: planning a route over 1 zone(s) (Derrière), blade at 50 mm
[2026-10-02T15:39:28.464Z] [INFO] [mammotion] Luba-VPMBS8RA: route planned (result 0)
[2026-10-02T15:39:28.464Z] [INFO] [mammotion] Sending "start" to Luba-VPMBS8RA
[2026-10-02T15:40:07.907Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
[2026-10-02T15:42:13.573Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
[2026-10-02T15:42:31.332Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 0
[2026-10-02T15:42:31.333Z] [INFO] [mammotion] Sending "pause" to Luba-VPMBS8RA
[2026-10-02T15:43:01.106Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-02T15:43:01.107Z] [INFO] [mammotion] Sending "resume" to Luba-VPMBS8RA
[2026-10-02T15:43:37.579Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-02T15:43:37.580Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA
[2026-10-02T15:44:32.548Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
[2026-10-02T15:46:20.191Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
et voici la ligne en question : ```
[2026-10-02T15:39:28.121Z] [INFO] [mammotion] Luba-VPMBS8RA: planning a route over 1 zone(s) (Derrière), blade at 50 mm
[2026-10-02T15:39:28.464Z] [INFO] [mammotion] Luba-VPMBS8RA: route planned (result 0)
Cutting height: 60 mm
Speed: 0.6 m/s
32 cm between passes
Cutting angle: 111°
Mowing trajectory mode: zigzag trajectory
Perimeter mowing lap: 0
Obstacle detection mode: disabled
Mowing lap for restricted areas: 0
Order of routes: Zigzag first
Start progression: 0%
I pushed corrections based on your feedback in 1.0.9
The cause
To know the zones, Gladys asked the robot for its list of zones. However, this list only contains zones that have a name in the Mammotion app. In my case, only « Derrière » had one, out of 6 zones.
The mowing settings were hardcoded in the code. These are the default values of Home Assistant: 1 perimeter pass, 25 cm, 0.3 m/s, obstacle detection enabled.
The Mammotion app keeps its settings in the phone: Gladys cannot read them.
What has changed
Gladys now reads all elements of the map and keeps the zones, with or without a name (same method as the PyMammotion library used by Home Assistant).
The type of each map element is only requested once, to avoid overloading the Mammotion cloud.
If the robot does not respond, Gladys reverts to the old behavior (only named zones).
New section « New mowing » in the integration configuration:
Zones to mow (names separated by commas, empty = all zones)
Cutting height, speed, spacing of trajectories, angle
Trajectory mode (zigzag / checkerboard), order of routes
Perimeter passes, passes of forbidden zones
Obstacle detection mode
The logs now display the zones and all settings sent to the robot.
Default values
60 mm, 0.6 m/s, 32 cm, 111°, zigzag, zigzag first, 0 perimeter passes, 0 passes of forbidden zones, obstacle detection disabled.
Points to confirm on a real robot
The angle is sent in « relative » mode. To be verified against « Customize » in the app.
« Disabled » for obstacle detection corresponds to the value 0 (direct contact). To be confirmed.
A zone without a name is called « zone 1 », « zone 2 »… in the logs. To select it in « Zones to mow », it is better to give it a name in the app.
now: input / binary, the standard yes/no measurement of Gladys
same 0/1 value, and it still works in scenes
New identifier charging-state (instead of charging): the old measurement is no longer fed.
In addition: a battery at 0% coming from the cloud is ignored. Protobuf reports already did this. A 0% of this type would trigger the same false alert.
Doc: README, docs/fr.md and docs/en.md updated, with an entry in troubleshooting.
Tests: a test checks that only the battery in % remains in the battery category.
For Chris75, after the update
Open the Discovery tab and click Update on the mower.
Gladys then removes the old « Charging » measurement. I checked in Gladys’s code (device.create.js). The alert stops.
Until this click is made, the old measurement remains recorded with its last value. The Saturday alert can therefore still go out.
I have a problem saving the configuration:
the movement speed selection only accepts 2 values: 0.2 and 1.2
therefore the default value (0.6) is not accepted
So the « mow » button always starts mowing by default with the mammotion app settings
Another issue: the « return to base » button does make the robot return to its base, but leaves the state in « paused » and thus the mammotion app also remains paused and you have to stop on the mammotion app
Last question: it would be to be able to control the robot as the external integration « dreame » does, that is, to be able to make all the settings in devices (and not at the configuration level) and then start a mow with these settings
You’ve worked so well and fixed a lot of issues in a very short time. My robot was discovered right away, I’m now trying to understand all the elements that come up, and then create scenes tailored to my needs. I won’t be much help, I’m unfortunately more of a follower. I’m actually discovering Gladys…
cutting height adjustment: from 25 mm to 70 mm in 5 mm increments
activity speed adjustment: from 0.2 m/s to 0.8 m/s in 0.1 m/s increments
trajectory spacing adjustment: from 20 cm to 32 cm in 1 cm increments
trajectory cutting angle adjustment: there are 2 settings
– choice between « optimal », « customize », « random »
– then if you choose « customize » there is an angle setting: from 0° to 180° in 1° increments (important to have nice parallel/perpendicular lines to the house)
Everything you asked for is in 1.1.0, including the map.
Lists follow the mower model
Gladys reads the model from the mower’s name (Luba-VP… for you).
On your Luba 2 X:
cutting height: 25 to 70 mm in 5 mm increments
speed: 0.2 to 0.8 m/s in 0.1 increments
spacing: 20 to 32 cm in 1 cm increments
No-mow zones: 0 to 3.
Cutting angle
New Angle Type list: Optimal, Custom, Random.
Then Custom Angle: 0 to 180° in 1° increments.
New settings
Adaptive zigzag added in the trajectory mode.
Start progression: 0 to 99 % in 1 % increments.
Multiple mowing zones
A « Mowing Zone – … » switch per map zone (it replaces the old « Mowing Zones » list).
You turn on the desired zones, then Mow.
If no zone is turned on, the mower mows all zones.
New values during mowing
Mowing progress (%)
Mowing time elapsed (min), in addition to the remaining time
Area to mow (m²)
The map
The mower now has a Map: an image with the zones and their name, the no-mow zones in gray and the mower as a red dot.
Bright green: the zones of the next mow. Pale green: the others.
The image follows the mower during mowing.
To display it: on the dashboard, add a Camera widget and choose the mower.
After the update
Discovery tab → Update on the mower. Without this, the new features won't appear.
The zone switches and the map arrive once the map is read: the mower must be turned on at the start of the integration.
On the first startup, Gladys reads the outline of the zones once. It's a bit longer than usual.
To test on your side, Chris75
Angle type and adaptive zigzag: I'm not 100% sure about the values sent to the mower. Can you start a mow from the Mammotion app with:
angle « Custom » (e.g. 45°)
then angle « Random »
then « Adaptive zigzag » mode
After each test, look for « route settings seen » in the integration logs and paste the lines. I'll correct if needed.
The map: is it in the right direction compared to the app, or rotated or inverted? Is the red dot in the right place? A screenshot would help.
The settings: does a mow started from Gladys go with the chosen zones, the right height and the right speed?
[2026-10-04T16:23:24.635Z] [INFO] Starting the Mammotion integration...
[2026-10-04T16:23:24.840Z] [INFO] [gladys-sdk] connected to Gladys (*******)
[2026-10-04T16:23:25.217Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-10-04T16:23:26.287Z] [WARN] [mammotion] Aliyun bindings unavailable: fetch failed
[2026-10-04T16:23:26.288Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-04T16:23:31.092Z] [INFO] [mammotion] Luba-VPMBS8RA is not on Aliyun, switching to the Mammotion broker
[2026-10-04T16:23:31.788Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-10-04T16:23:31.843Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-10-04T16:23:32.011Z] [INFO] [mammotion-mqtt] First data received from Luba-VPMBS8RA (device_protobuf_msg_event)
[2026-10-04T16:24:44.627Z] [INFO] Luba-VPMBS8RA: zones Derrière, zone 2, Bas, Devant, zone 5, zone 6
[2026-10-04T16:27:51.602Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-04T16:50:41.617Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-devant = 1
[2026-10-04T16:50:41.618Z] [INFO] Luba-VPMBS8RA: zones derriere,devant for the next job
[2026-10-04T16:50:56.978Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-bas = 1
[2026-10-04T16:50:56.978Z] [INFO] Luba-VPMBS8RA: zones derriere,devant,bas for the next job
[2026-10-04T16:52:44.371Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
[2026-10-04T16:57:34.331Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-bas = 0
[2026-10-04T16:57:34.332Z] [INFO] Luba-VPMBS8RA: zones derriere,devant for the next job
[2026-10-04T16:57:35.023Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-derriere = 0
[2026-10-04T16:57:35.023Z] [INFO] Luba-VPMBS8RA: zones devant for the next job
[2026-10-04T16:58:15.647Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-derriere = 1
[2026-10-04T16:58:15.648Z] [INFO] Luba-VPMBS8RA: zones devant,derriere for the next job
[2026-10-04T17:03:02.267Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:zone-devant = 0
[2026-10-04T17:03:02.268Z] [INFO] Luba-VPMBS8RA: zones derriere for the next job
[2026-10-04T17:03:24.417Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-blade-height = 60
[2026-10-04T17:03:24.418Z] [INFO] Luba-VPMBS8RA: blade_height = 60 for the next job
[2026-10-04T17:03:34.830Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-mowing-speed = 0.6
[2026-10-04T17:03:34.830Z] [INFO] Luba-VPMBS8RA: mowing_speed = 0.6 for the next job
[2026-10-04T17:03:40.082Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-angle-mode = custom
[2026-10-04T17:03:40.082Z] [INFO] Luba-VPMBS8RA: angle_mode = custom for the next job
[2026-10-04T17:03:55.381Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-mowing-pattern = zigzag
[2026-10-04T17:03:55.381Z] [INFO] Luba-VPMBS8RA: mowing_pattern = zigzag for the next job
[2026-10-04T17:03:56.737Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-border-laps = 0
[2026-10-04T17:03:56.738Z] [INFO] Luba-VPMBS8RA: border_laps = 0 for the next job
[2026-10-04T17:04:01.578Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-obstacle-detection = off
[2026-10-04T17:04:01.578Z] [INFO] Luba-VPMBS8RA: obstacle_detection = off for the next job
[2026-10-04T17:07:41.915Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-start-progress = 20
[2026-10-04T17:07:41.915Z] [INFO] Luba-VPMBS8RA: start_progress = 20 for the next job
[2026-10-04T17:07:55.485Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:setting-blade-height = 70
[2026-10-04T17:07:55.486Z] [INFO] Luba-VPMBS8RA: blade_height = 70 for the next job
[2026-10-04T17:08:19.789Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-04T17:08:21.624Z] [INFO] [mammotion] Luba-VPMBS8RA: planning a route over 1 zone(s) (Derrière), blade at 70 mm, 0.6 m/s, 32 cm, angle custom 111°, zigzag, 0 border lap(s), start at 20 %, obstacle detection off
[2026-10-04T17:08:21.922Z] [INFO] [mammotion-mqtt] Luba-VPMBS8RA: route settings seen {"subCmd":0,"edgeMode":0,"knifeHeight":70,"channelWidth":32,"ultraWave":0,"channelMode":0,"toward":111,"speed":0.6,"zones":1,"reserved":[11,10,10,30,11,18,20,40],"towardMode":1,"towardIncludedAngle":0}
[2026-10-04T17:08:21.922Z] [INFO] [mammotion] Luba-VPMBS8RA: route planned (result 0)
[2026-10-04T17:08:21.922Z] [INFO] [mammotion] Sending "start" to Luba-VPMBS8RA
[2026-10-04T17:10:18.054Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:refresh = 1
[2026-10-04T17:13:53.737Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-04T17:13:53.748Z] [INFO] [mammotion] Sending "stop" to Luba-VPMBS8RA
[2026-10-04T17:13:56.489Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA
The device page sends the entire device to Gladys, and Gladys refuses anything over 100 KB.
The « Custom Angle » list (181 choices) and « Startup Progression » list (100 choices), along with the map image, exceeded this limit.
These two settings are now sliders (in 1° increments): 0 to 180° and 0 to 99 %.
If the error persists, could you check Gladys’s logs (not the integration logs) at the moment you click Save? I’m looking for a line with « too large » or « PayloadTooLarge ».
Custom Angle: 111° interpreted as 69°
The mower counts the angle in the opposite direction (69 = 180 − 111).
Gladys now sends the angle as the app does: 111° in Gladys = 111° in the app.
« Zone 2 » instead of « Zone 1 »
The app numbers unnamed zones starting from 0, Gladys started from 1.
This is fixed: Zone 1, Zone 4, Zone 5, as in the app.
The switch « Mowing Zone – zone 2 » becomes « Mowing Zone – Zone 1 ». Don’t forget to turn it back on in your scenes.
Path spacing
Luba 2 X: 20 to 35 cm in 1 cm increments.
Mammotion Cloud Quota
The map doesn't send any additional messages. It uses the position that the mower already sends during mowing.
The integration requests the status at most once every 5 minutes (about 144 times in 12 hours). The « Refresh » button adds one each time you press it.
After the update
Discovery tab → Update on the mower. Without this, the sliders and new zone names won't appear.
Then, re-select the angle and progression on the sliders.
For you to test, Chris75
Angle 111° from Gladys: does the app display « Customize 111 »?
Does device saving work?
And when it's daylight: the rest of the tests (angle type « Random », adaptive zigzag, map direction).
Regarding the « mowing » and « return to base » devices:
if I stop « mowing » then I do « return to base », the robot stops mowing, returns to its base, but you have to press « stop » in the mammotion app to complete the task
all that’s missing is the selector for multiple mowing zones, and this selector must respect the order in which the zones are selected (like in the mammotion app)
Currently I select the 6 zones via switches, and the order is not respected