Navimow Binding

This is a very early version of Navimow binding. I have only tested it with i210 AWD but I suspect it will work for all mowers.

Please consider this an “alpha” version - the features, channels, etc. may change radically in the future.

It is primarily based on the official Navimow SDK as well as the NavimowHA integration.

Note: You’ll need to install the built in mqtt binding or install the openhab-transport-mqtt feature.

Jump to download


Navimow Binding

This binding integrates Segway Navimow robotic lawn mowers with openHAB via the Navimow cloud service.

It provides real-time status updates and supports sending control commands (start, stop, pause, resume, return to base).

Supported Things

Thing Type Thing ID Description
Bridge bridge Navimow cloud account
Mower mower A single Navimow robotic lawn mower

Authorization

This binding uses OAuth2 to authenticate with the Navimow cloud.

  1. Add a navimow:bridge thing in the openHAB UI or things file.
    The bridge will initially appear as OFFLINE with the message “Not authorized”.

  2. Open a browser and navigate to:

    http://<openhab-host>:8080/navimow
    
  3. Click the Authorize button next to your bridge.
    You will be redirected to the Navimow login page.

  4. Log in with your Navimow account credentials.

  5. After a successful login you are redirected back to openHAB.
    The binding exchanges the authorization code for an access token and the bridge goes ONLINE automatically.

Token Expiry

Navimow access tokens are typically short-lived (often around 1–2 days).

  • If Navimow provides a refresh_token during authorization, the binding will try to refresh the access token automatically before expiry and retry once after an authentication rejection.
  • If no refresh_token is available, or the refresh token is no longer accepted by Navimow, the bridge goes OFFLINE with “Authentication failed” and you must reauthorize via http://<openhab-host>:8080/navimow.

Discovery

Once the bridge has been authorized, the binding will automatically discover all Navimow mowers associated with the account.
Go to Settings → Things → + and scan for new things under the Navimow binding.
Each discovered mower appears in the inbox with its name and device ID pre-filled.
This is the recommended way to add mower things.

Thing Configuration

Bridge (navimow:bridge)

  • pollingInterval (Integer, optional, default 3600): HTTP polling fallback interval in seconds. Set to 0 to disable.
  • apiBaseUrl (String, optional, default https://navimow-fra.ninebot.com)

Mower (navimow:mower)

Parameter Type Required Description
deviceId String Yes The unique device ID of the mower.

Finding Your Device ID

The Device ID is your mower’s serial number which can be found in the Navimow App -> Settings -> Device Information -> Basic info -> Serial number.

The easiest way to get the deviceId is through discovery: once the bridge is authorized, run a scan and the mower will appear in the inbox with its device ID already set.

Channels

Mower Channels

Channel ID Type Read/Write Description
status String Read Operational state: idle, mowing, paused, docked, charging, returning, error, unknown.
command String Write Send a command: start, stop, pause, resume, dock.
battery-level Number:Dimensionless Read Battery level in percent (0–100).
mow-start-type String Read Start type indicator.
current-mow-boundary Number Read Index / ID of the current mowing boundary / zone.
current-mow-progress Number:Dimensionless Read The mowing progress within the current boundary.
mowing-percentage Number:Dimensionless Read The overall mowing progress for the current task.
subtotal-area Number:Area Read Current activity subtotal area, published as square metres ().
mowing-week-area Number:Area Read Total area mowed this week, published as square metres ().
posture-theta Number:Angle Read The mower’s current heading angle. The binding publishes an Angle QuantityType in radians.
posture-x Number Read Posture X relative coordinate.
posture-y Number Read Posture Y relative coordinate.
error-code String Read Error code, or none if no error.

Full Example

Things File

Bridge navimow:bridge:myaccount "Navimow Account" {
    Thing mower mymower "My Mower" [deviceId="YOUR_DEVICE_ID"]
}

After adding the bridge, authorize it at http://<openhab-host>:8080/navimow.
The recommended approach is to add only the bridge in the things file and let discovery populate the mower thing.

Items File

String                 Navimow_Status             "Mower Status [%s]"                 { channel="navimow:mower:myaccount:mymower:status" }
String                 Navimow_Command            "Command"                           { channel="navimow:mower:myaccount:mymower:command" }
Number:Dimensionless   Navimow_Battery            "Battery [%d %%]"                   { channel="navimow:mower:myaccount:mymower:battery-level" }
String                 Navimow_MowStartType       "Mow Start Type [%s]"               { channel="navimow:mower:myaccount:mymower:mow-start-type" }
Number                 Navimow_CurrentBoundary    "Current Boundary [%d]"             { channel="navimow:mower:myaccount:mymower:current-mow-boundary" }
Number:Dimensionless   Navimow_CurrentMowProgress "Current Mow Progress [%d %%]"      { channel="navimow:mower:myaccount:mymower:current-mow-progress" }
Number:Dimensionless   Navimow_MowingPercentage   "Mowing Percentage [%d %%]"         { channel="navimow:mower:myaccount:mymower:mowing-percentage" }
Number:Area            Navimow_SubtotalArea       "Subtotal Area [%.1f m²]"           { channel="navimow:mower:myaccount:mymower:subtotal-area" }
Number:Area            Navimow_MowingWeekArea     "Mowing This Week [%.1f m²]"        { channel="navimow:mower:myaccount:mymower:mowing-week-area" }
Number:Angle           Navimow_PostureTheta       "Heading [%.2f °]"                  { channel="navimow:mower:myaccount:mymower:posture-theta" }
Number                 Navimow_PostureX           "Posture X [%.2f]"                  { channel="navimow:mower:myaccount:mymower:posture-x" }
Number                 Navimow_PostureY           "Posture Y [%.2f]"                  { channel="navimow:mower:myaccount:mymower:posture-y" }
String                 Navimow_ErrorCode          "Error Code [%s]"                   { channel="navimow:mower:myaccount:mymower:error-code" }

Download

  • v 0.0.4 2026-08-23 - Connection stability improvements:

    • Added separate MQTT state freshness tracking; attribute packets no longer suppress HTTP fallback.
    • Reduced MQTT stale threshold to 90 seconds.
    • Reduced fallback polling to 60 seconds.
    • Increased MQTT keepalive to 120 seconds.
    • Added INFO logging when HTTP fallback is used.
    • Cached successful MQTT credentials and reused them when the MQTT user-info API fails.

    Please ensure that the Navimow Account’s polling interval is changed from 3600 to 60

  • v 0.0.3 2026-06-16 - Improve connection stability

  • v 0.0.2 2026-05-07 - minor cosmetic improvements - easier link to authorization servlet

  • v 0.0.1 2026-05-07 - Initial release

Note: the navimow API doesn’t support commanding the mower to mow a certain zone. If you have any information on any other features not currently supported by this binding, please let me know!

Please report the mower models that you’ve tried this on and whether it works with them.

i120 lidar pro is on the way, will report next week.

Someone had the idea of translating the relative position (postureX, postureY) to real lat/long here: Endpoints? · Issue #8 · segwaynavimow/navimow-sdk · GitHub

That would make it possible to display the mower’s real time position on a map.

All we need is the ability to mark areas on a map using polygons so we can create an approximation of the mowing zones.

I’m eager to test this binding, but unfortunately our robot now finds that it’s station doesn’t have a GPS signal, although it hasn’t been moved since all was well last summer.

I’m frankly quite displeased with how our Navimow H500 can’t cope with walls or hedges nearby. Like gardens tend to be lawns with nothing around it :roll_eyes:

But it is what it is…

I got my navimow because I was unhappy with mammotion yuka mini.

However, the yuka seems to have better satellite reception or at least would put up with weaker signals better. My yuka used to be parked near the house wall, under eaves and it was perfectly happy with signals. My navimow wasn’t happy at all and I had to move its station inside the lawn. It’s still not perfectly happy (close to edge / fence) but it works so far.

I’ve only had navimow for 2 weeks, so time will tell.

I own an I105E and wanted to test the new binding, but I keep getting the following error:

URI: /navimow
STATUS: 500
MESSAGE: java.lang.NoSuchMethodError: ‘java.util.Map org.openhab.core.auth.client.oauth2.AccessTokenResponse.getExtraFields()’
SERVLET: org.openhab.binding.navimow.internal.NavimowAuthServlet
CAUSED BY: java.lang.NoSuchMethodError: ‘java.util.Map org.openhab.core.auth.client.oauth2.AccessTokenResponse.getExtraFields()’

However, the username and password are correct.

Regards, Rob69

It seems that this getExtraFields was recently added in 5.2 some 2 months ago (Merged March 12th). You would need to use a recent 5.2 milestone to use this binding.

I am using openHAB 5.1.
I will be trying out openHAB 5.2 on a trial basis soon.
Or I will wait until openHAB 5.2.

Regards, Rob69

Here are my findings for the i120 Lidar pro:

Channels status, command, battery-level, posture-theta, posture-x, posture-y, error-code are working.
Channels mow-start-type, current-mow-boundary, current-mow-progress, mowing-percentage, subtotal-area, mowing-week-area are all NULL.

Debug.log after disabling/enabling the mower Thing:
2026-05-17 15:57:44.595 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/location bytes=113
2026-05-17 15:57:44.617 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/location: [{"postureTheta":"3.119","postureX":"-0.405","postureY":"-0.203","time":1779026264237,"type":1,"vehicleState":1}]
2026-05-17 15:57:44.640 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT location payload: [{"postureTheta":"3.119","postureX":"-0.405","postureY":"-0.203","time":1779026264237,"type":1,"vehicleState":1}]
2026-05-17 15:57:44.660 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=location parsed[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=3.119,postureX=-0.405,postureY=-0.203] merged[state=docked,battery=80,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=3.119,postureX=-0.405,postureY=-0.203] (raw payload: [{"postureTheta":"3.119","postureX":"-0.405","postureY":"-0.203","time":1779026264237,"type":1,"vehicleState":1}])
2026-05-17 15:57:44.682 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 15:57:44.703 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 15:58:03.080 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/location bytes=68
2026-05-17 15:58:03.105 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/location: [{"taskDelay":false,"time":1779026282626,"type":4,"vehicleState":1}]
2026-05-17 15:58:03.133 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT location payload: [{"taskDelay":false,"time":1779026282626,"type":4,"vehicleState":1}]
2026-05-17 15:58:03.154 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=location parsed[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] merged[state=docked,battery=80,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=3.119,postureX=-0.405,postureY=-0.203] (raw payload: [{"taskDelay":false,"time":1779026282626,"type":4,"vehicleState":1}])
2026-05-17 15:58:03.177 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 15:58:03.200 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 15:58:17.205 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Unregistered listener for device <serial_number>
2026-05-17 15:58:54.105 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Registered listener for device <serial_number>
2026-05-17 15:58:54.154 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/state
2026-05-17 15:58:54.208 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/state
2026-05-17 15:58:54.237 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - HTTP getVehicleStatus response: {"payload":{"devices":[{"id":"<serial_number>","capacityRemaining":[{"unit":"PERCENTAGE","rawValue":80}],"vehicleState":"isDocked","descriptiveCapacityRemaining":"HIGH"}]},"requestId":"7638a774-fedd-4b14-be12-7e4a3623c86a"}
2026-05-17 15:58:54.255 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing HTTP device status payload: {"id":"<serial_number>","capacityRemaining":[{"unit":"PERCENTAGE","rawValue":80}],"vehicleState":"isDocked","descriptiveCapacityRemaining":"HIGH"}
2026-05-17 15:58:54.300 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 15:58:54.323 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 15:58:54.353 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/attributes
2026-05-17 15:58:54.399 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/attributes
2026-05-17 15:58:54.554 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/event
2026-05-17 15:58:54.600 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/event
2026-05-17 15:58:54.754 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/location
2026-05-17 15:58:54.796 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/location
2026-05-17 15:59:03.114 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/location bytes=68
2026-05-17 15:59:03.135 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/location: [{"taskDelay":false,"time":1779026342626,"type":4,"vehicleState":1}]
2026-05-17 15:59:03.157 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT location payload: [{"taskDelay":false,"time":1779026342626,"type":4,"vehicleState":1}]
2026-05-17 15:59:03.180 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=location parsed[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] merged[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] (raw payload: [{"taskDelay":false,"time":1779026342626,"type":4,"vehicleState":1}])
2026-05-17 15:59:03.204 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping battery update for <serial_number> because payload has no battery (payload: battery=null)
2026-05-17 15:59:03.231 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 15:59:03.289 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 16:00:07.584 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/location bytes=68
2026-05-17 16:00:07.608 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/location: [{"taskDelay":false,"time":1779026402625,"type":4,"vehicleState":1}]
2026-05-17 16:00:07.631 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT location payload: [{"taskDelay":false,"time":1779026402625,"type":4,"vehicleState":1}]
2026-05-17 16:00:07.651 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=location parsed[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] merged[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] (raw payload: [{"taskDelay":false,"time":1779026402625,"type":4,"vehicleState":1}])
2026-05-17 16:00:07.672 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping battery update for <serial_number> because payload has no battery (payload: battery=null)
2026-05-17 16:00:07.694 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 16:00:07.718 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 16:00:21.139 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/state bytes=88
2026-05-17 16:00:21.160 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/state: {"battery":80,"device_id":"<serial_number>","state":"isDocked","timestamp":1779026420799}
2026-05-17 16:00:21.183 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT state payload: {"battery":80,"device_id":"<serial_number>","state":"isDocked","timestamp":1779026420799}
2026-05-17 16:00:21.206 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=state parsed[state=docked,battery=80,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] merged[state=docked,battery=80,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] (raw payload: {"battery":80,"device_id":"<serial_number>","state":"isDocked","timestamp":1779026420799})
2026-05-17 16:00:21.231 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 16:00:21.259 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 16:00:38.628 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Unregistered listener for device <serial_number>
2026-05-17 16:01:03.083 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received topic=/downlink/vehicle/<serial_number>/realtimeDate/location bytes=68
2026-05-17 16:01:03.109 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT received on topic /downlink/vehicle/<serial_number>/realtimeDate/location: [{"taskDelay":false,"time":1779026462626,"type":4,"vehicleState":1}]
2026-05-17 16:01:03.130 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing MQTT location payload: [{"taskDelay":false,"time":1779026462626,"type":4,"vehicleState":1}]
2026-05-17 16:01:03.150 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted device=<serial_number> channel=location parsed[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] merged[state=unknown,battery=null,signal=null,lat=null,lon=null,error=null,boundary=null,progress=null,percentage=null,weekArea=null,subtotalArea=null,mowStartType=null,postureTheta=null,postureX=null,postureY=null] (raw payload: [{"taskDelay":false,"time":1779026462626,"type":4,"vehicleState":1}])
2026-05-17 16:01:03.172 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT accepted but not forwarded: no listener registered for device <serial_number>
2026-05-17 16:01:41.811 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Registered listener for device <serial_number>
2026-05-17 16:01:41.841 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/state
2026-05-17 16:01:41.898 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/state
2026-05-17 16:01:41.923 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - HTTP getVehicleStatus response: {"payload":{"devices":[{"id":"<serial_number>","capacityRemaining":[{"unit":"PERCENTAGE","rawValue":80}],"vehicleState":"isDocked","descriptiveCapacityRemaining":"HIGH"}]},"requestId":"f494fe85-e89e-4050-90e4-c63ee350dff1"}
2026-05-17 16:01:41.942 [DEBUG] [enhab.binding.navimow.internal.api.NavimowApi] - Parsing HTTP device status payload: {"id":"<serial_number>","capacityRemaining":[{"unit":"PERCENTAGE","rawValue":80}],"vehicleState":"isDocked","descriptiveCapacityRemaining":"HIGH"}
2026-05-17 16:01:41.966 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping signal update for <serial_number> because payload has no signal (payload: signalStrength=null from payload object)
2026-05-17 16:01:41.992 [DEBUG] [enhab.binding.navimow.internal.NavimowHandler] - Skipping location update for <serial_number> because payload has no complete coordinates (payload: lat=null lon=null)
2026-05-17 16:01:42.041 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/attributes
2026-05-17 16:01:42.085 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/attributes
2026-05-17 16:01:42.241 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/event
2026-05-17 16:01:42.282 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/event
2026-05-17 16:01:42.441 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - Subscribing to MQTT topic: /downlink/vehicle/<serial_number>/realtimeDate/location
2026-05-17 16:01:42.484 [DEBUG] [binding.navimow.internal.NavimowBridgeHandler] - MQTT successfully subscribed to: /downlink/vehicle/<serial_number>/realtimeDate/location

openHAB 5.2.0.M4, binding version 0.0.2.

Please note that I did not yet setup a mowing schedule, I tested only with one mowing zone and one time mowing.

Today, I installed an experimental OpenHAB 5.2 Milestone build—and, naturally, I installed the binding right away!
You can find the ID number within the app.
With a polling interval of 3600 seconds, I didn’t see any updates; at 0 seconds, everything works wonderfully—though the data traffic is, admittedly, immense.
By the way, how did you configure your polling interval?

Since I’ve been searching for over a year for a way to integrate my robotic lawnmower into my OpenHAB setup, I am absolutely thrilled!
Great work!!!

Were the channels null even during the manual mowing?

Leave the polling at default. It’s just for http data. The bulk of the channels are updated in near real time through mqtt.

Yes.

@sihui, try disabling the navimow account Bridge then reenabling it, then do a manual mow once it’s back online.

Sorry, I can’t try anymore, I returned the mower to the manufacturer :mechanic:

LOL! Oh well. What did you get instead?

Nothing yet. My 6 year old Worx (cable guided) is still working fine.
The Navimow is a great mower on grass areas (best I have seen so far), but lacks exact following of the outer boundary.

I’m hoping that in a few years they would have perfected edge trimming. For now it’s better than nothing for me. I can be away for a while without things turning into too much of a jungle.

Hopefully they (navimow) will improve their API over time. The location endpoint is an undocumented endpoint. The only “official” channels provided by navimow API are just the current status, battery and command.

Hello,
I am using an i208 LiDAR. Commands can be sent, and status information is displayed. Unfortunately, this is short-lived; after a while, no further status updates are sent—as if the connection to the Navimow has been lost. Status information transmission only resumes after “disconnecting” and “reconnecting” in openHAB. How can this problem be fixed? Are any of you experiencing similar issues?