Intégration externe - Mammotion

Hello,

Voici une nouvelle intégration externe qui sera disponible sous peu sur le store pour gérer ses tondeuses Mammotion :

je viens d’installer cette intégration et ça ne fonctionne pas
J’ai bien créé un 2ème compte mammotion pour éviter les déconnexions

je mets le journal dans le message suivant

[2026-09-29T09:46:08.275Z] [INFO] Démarrage de l'intégration Mammotion...
[2026-09-29T09:46:08.490Z] [INFO] [gladys-sdk] connecté à Gladys (http://)
[2026-09-29T10:25:10.406Z] [INFO] onConfigUpdated -> nouvelle configuration reçue
[2026-09-29T10:25:10.622Z] [INFO] [mammotion] Connexion au cloud Mammotion
[2026-09-29T10:25:15.441Z] [INFO] 1 tondeuse(s) trouvée(s) sur le compte Mammotion
[2026-09-29T10:25:15.452Z] [ERROR] Initialisation de Mammotion échouée GladysApiError: devices[0].poll_frequency: fréquence de sondage invalide
    at HttpClient.request (/app/node_modules/@gladysassistant/integration-sdk/lib/http-client.js:49:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async refreshMowers (file:///app/index.js:68:3)
    at async initialize (file:///app/index.js:110:20)
    at async file:///app/index.js:202:3
    at async GladysIntegration._runHandler (/app/node_modules/@gladysassistant/integration-sdk/lib/gladys-integration.js:1590:7)
    at async GladysIntegration._handleMessage (/app/node_modules/@gladysassistant/integration-sdk/lib/gladys-integration.js:1430:9) {
  status: 400,
  code: 'BAD_REQUEST'
}
[2026-09-29T10:25:19.213Z] [INFO] 1 tondeuse(s) trouvée(s) sur le compte Mammotion
[2026-09-29T10:28:41.138Z] [INFO] onConfigUpdated -> nouvelle configuration reçue
[2026-09-29T10:28:42.406Z] [INFO] 1 tondeuse(s) trouvée(s) sur le compte Mammotion
[2026-09-29T10:28:42.415Z] [ERROR] Initialisation de Mammotion échouée GladysApiError: devices[0].poll_frequency: fréquence de sondage invalide
    at HttpClient.request (/app/node_modules/@gladysassistant/integration-sdk/lib/http-client.js:49:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async refreshMowers (file:///app/index.js:68:3)
    at async initialize (file:///app/index.js:110:20)
    at async file:///app/index.js:202:3
    at async GladysIntegration._runHandler (/app/node_modules/@gladysassistant/integration-sdk/lib/gladys-integration.js:1590:7)
    at async GladysIntegration._handleMessage (/app/node_modules/@gladysassistant/integration-sdk/lib/gladys-integration.js:1430:9) {
  status: 400,
  code: 'BAD_REQUEST'
}
[2026-09-29T10:28:54.595Z] [INFO] 1 tondeuse(s) trouvée(s) sur le compte Mammotion
[2026-09-29T10:33:43.443Z] [INFO] 1 tondeuse(s) trouvée(s) sur le compte Mammotion
[2026-09-29T10:33:43.453Z] [ERROR] Initialisation de Mammotion échouée GladysApiError: devices[0].poll_frequency: fréquence de sondage invalide
    at HttpClient.request (/app/node_modules/@gladysassistant/integration-sdk/lib/http-client.js:49:13)
    at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
    at async refreshMowers (file:///app/index.js:68:3)
    at async initialize (file:///app/index.js:110:20) {
  status: 400,
  code: 'BAD_REQUEST'
}

C’est dispo en 1.0.1 :wink: :

Cause

  • Gladys n’accepte que quelques valeurs fixes pour poll_frequency, en millisecondes : 1000, 2000, 10000, 15000, 30000 ou 60000. Je l’ai vérifié dans le code source de Gladys.
  • L’intégration envoyait l’intervalle réglé par l’utilisateur, en secondes (par exemple 60). Gladys répondait donc « 400 invalid poll frequency ».
  • Cette erreur arrêtait le démarrage à chaque essai, d’où les erreurs répétées dans les logs.

Correction

  • src/devices/mower.jsCette session n’est pas en cours d’exécution, ses fichiers ne peuvent donc pas être ouverts. Envoyez un message pour la relancer. : la tondeuse est maintenant envoyée à Gladys avec 30000 ms si l’intervalle est sous 60 s, sinon 60000 ms.
  • index.js : comme Gladys interroge au plus toutes les 60 s, l’intégration ignore les demandes qui arrivent avant l’intervalle choisi. Une marge de 5 s absorbe les petits décalages de Gladys.
  • Le réglage dans l’écran de configuration ne change pas : toujours de 30 à 3600 s, 60 s par défaut.

petit soucis encore :

LOG

[2026-09-29T16:17:25.356Z] [INFO] Starting the Mammotion integration...
[2026-09-29T16:17:25.573Z] [INFO] [gladys-sdk] connected to Gladys (http://172.30.0.1:80)
[2026-09-29T16:17:26.212Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-09-29T16:17:32.304Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-09-29T16:17:32.415Z] [WARN] First poll failed for Luba-VPMBS8RA: user device not bind
[2026-09-29T16:20:26.253Z] [INFO] 1 mower(s) found on the Mammotion account

Correction publié dans la nouvelle version 1.0.2 :wink:

Bon ça ne fonctionne pas : le robot est bien découvert mais aucun état ne fonctionne



Peux-tu tester avec la nouvelle version 1.0.4 stp
Si tu as toujours des bugs, n’hésite pas a mettre les logs aussi qui peuvent être très utiles :wink:

La cause

  • Le message user device not bind vient d’Aliyun, l’ancien cloud de Mammotion.
  • Ta Luba est bien trouvée sur le compte Mammotion, mais elle n’est pas rattachée à Aliyun. Or l’intégration lisait l’état uniquement sur Aliyun, donc aucune valeur n’arrivait.
  • Les comptes et firmwares récents passent par le serveur MQTT de Mammotion. Là, c’est la tondeuse qui envoie elle-même son état (batterie, état, hauteur de coupe, compteurs). Il n’y a pas de lecture à la demande.

La correction

  • Nouveau fichier src/mammotion/mqtt.js : il se connecte au serveur MQTT Mammotion, suit chaque tondeuse et garde ses dernières valeurs.
  • À la découverte, une tondeuse absente d’Aliyun est marquée pour passer par MQTT.
  • Si Aliyun répond « not bind », l’intégration bascule aussi sur MQTT.
  • Les valeurs reçues sont envoyées à Gladys tout de suite, au plus une fois toutes les 15 s par tondeuse.
  • Les commandes Tonte et Retour à la base passent seulement par l’API Mammotion pour ces tondeuses.
  • Lint, format et tests passent (52 tests, dont 6 nouveaux).

Ce qu’il faut savoir

  • Les valeurs arrivent quand la tondeuse les publie, pas au démarrage. Il peut donc rester « Pas de valeur récente » quelques minutes.
  • Ta Luba est un ancien modèle. Je ne suis pas sûr qu’elle envoie ces messages d’état sans qu’on les demande.
  • Si rien n’arrive, l’étape suivante serait de lui demander ses rapports d’état et de les décoder. C’est plus lourd à coder.

Ça ne fonctionne toujours pas


Logs :

[2026-09-30T20:00:40.238Z] [INFO] Starting the Mammotion integration...
[2026-09-30T20:00:40.439Z] [INFO] [gladys-sdk] connected to Gladys 
[2026-09-30T20:00:40.739Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-09-30T20:00:45.731Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-09-30T20:00:46.245Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-09-30T20:00:46.304Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-09-30T20:01:16.125Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-01T14:35:37.820Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-01T14:36:34.624Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-01T14:36:34.626Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA
[2026-10-01T14:36:44.989Z] [WARN] Refresh after command failed for Luba-VPMBS8RA: states[0]: must have a numeric "state" or a string "text"

Ce serait bienque d’autres personnes puissent tester , car j’ai l’impression que mon modèle (Luba 2) qui date de mars 2025 est déjà trop vieux !! @JKBS64

Merci pour les logs
Tu peux tester avec la nouvelle version 1.0.5 stp :slight_smile:

La cause

  • Le texte « Statut » de la tondeuse était envoyé à Gladys au mauvais endroit : sous la forme state: { text: "..." }.
  • Gladys attend le texte dans un champ text séparé, comme text: "...".
  • Gladys refuse alors tout l’envoi, pas seulement cette ligne. C’est l’erreur states[0]: must have a numeric "state" or a string "text" dans vos logs.
  • Résultat : aucune valeur n’est enregistrée. D’où « Pas de valeur récente » et « Aucune valeur enregistrée » sur toutes les lignes.

Ce que j’ai changé

  • src/devices/mower.js : le statut est maintenant envoyé dans le champ text.

Ca y est le robot s’est bien connecté et a remonté les informations au bout de 1h !


donc les 2 boutons ne font rien, hélas, et les infos mettent très longtemps à remonter

Log

[2026-10-01T15:22:16.622Z] [INFO] Starting the Mammotion integration...
[2026-10-01T15:22:16.825Z] [INFO] [gladys-sdk] connected to Gladys (http://172.30.0.1:80)
[2026-10-01T15:22:17.155Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-10-01T15:22:21.985Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-01T15:22:22.526Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-10-01T15:22:22.581Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-10-01T15:22:40.572Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-01T16:02:24.996Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-01T16:02:24.998Z] [INFO] [mammotion] Sending "start" to Luba-VPMBS8RA
[2026-10-01T16:04:09.610Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-01T16:04:09.611Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA
[2026-10-01T16:06:29.162Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-01T16:06:29.163Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA

C’est corrigé en version 1.0.6

1. Les commandes Tonte / Retour à la base ne faisaient rien

  • Cause : l’ordre partait vers la mauvaise carte du robot. Sauf la Luba 1, toutes les tondeuses (dont ta Luba-VP) attendent ces ordres sur leur carte de « navigation ». On les envoyait à la carte principale.
  • Pourquoi aucune erreur dans les logs : le cloud acceptait l’ordre et le transmettait, puis la tondeuse l’ignorait sans rien dire.
  • Correction : l’ordre part vers la bonne carte, avec la même règle que PyMammotion (la bibliothèque utilisée par Home Assistant).

2. Les infos mettaient environ 1 h à arriver

  • Cause : on attendait que la tondeuse envoie son état d’elle-même, ce qu’elle fait rarement.
  • Correction : à chaque mise à jour, l’intégration demande son état à la tondeuse, comme le fait l’appli Mammotion. La réponse arrive en quelques secondes et Gladys est mis à jour pour l’état, la batterie et la hauteur de coupe.
  • Le temps de tonte total et la distance totale restent sur l’ancien rythme (ils bougent peu).
  • Le bouton Rafraîchir et la mise à jour 10 s après une commande font aussi cette demande.

Bon ce n’est pas concluant :

  • le bouton « retour à la base » fonctionne, mais l’appli mammotion se déconnecte sans arrêt puis se reconnecte
  • le bouton « tonte » ne fait rien, mais fait planter l’appli mammotion ..
    Les infos ne remontent toujours pas
    Je précise que j’ai bien 2 comptes mammotion différents

J’aimerais bien que quelqu’un teste sur un autre modèle !

D’autre part est-ce qu’il y aura d’autres fonctions/infos de disponible ?
parce que le but est de remplacer l’appli mammotion, comme le fait l’intégration externe « Dreame » qui permet de n’utiliser que gladys, et toutes les modifications faites sur gladys apparaissent très rapidement sur l’appli dreame

Log :

[2026-10-02T13:25:32.777Z] [INFO] Starting the Mammotion integration...
[2026-10-02T13:25:33.065Z] [INFO] [gladys-sdk] connected to Gladys (http://172.30.0.1:80)
[2026-10-02T13:25:33.400Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-10-02T13:25:38.161Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T13:25:38.796Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-10-02T13:25:38.830Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-10-02T13:33:35.019Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:dock = 1
[2026-10-02T13:33:35.021Z] [INFO] [mammotion] Sending "dock" to Luba-VPMBS8RA
[2026-10-02T13:33:53.821Z] [WARN] [mammotion] Report request refused for Luba-VPMBS8RA: Device not responding
[2026-10-02T13:37:18.218Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-02T13:37:18.219Z] [INFO] [mammotion] Sending "start" to Luba-VPMBS8RA

Effectivement il serait pas mal qu’une autre personne test mais j’ai quand même envoyé ton prompt à Claude :

Ce qui se passait, d’après tes logs (j’ai comparé avec PyMammotion, le code utilisé par Home Assistant) :

  • Infos qui ne remontent pas : la tondeuse n’écoute le cloud que ~10 s après un message « sync ». On ne l’envoyait jamais, donc elle ignorait nos demandes : c’est le « Device not responding » du log.
  • Appli qui se déconnecte sans arrêt : toutes les 60 s, on demandait un rapport à la tondeuse. Chaque demande remplace celle de l’appli, qui croit alors la tondeuse perdue. En plus, ça dépassait le quota du cloud Mammotion (environ 600 messages par 12 h).
  • Tonte qui plante l’appli : on envoyait un simple « start » sans trajet. L’appli, elle, prépare d’abord un trajet sur la carte (zones, réglages).

Ce que j’ai changé :

  • Un « sync » part avant chaque commande et chaque demande de rapport.
  • Une demande de rapport part au plus toutes les 5 min, plus juste après une commande ou un clic sur « Rafraîchir ». Aucune demande quand la tondeuse envoie déjà ses données, par exemple quand l’appli est ouverte.
  • Bouton Tonte : il reprend seulement une tonte en pause. Si aucune tâche n’est en pause, Gladys refuse (avec un message dans les logs) au lieu de faire planter l’appli. Une nouvelle tonte se lance donc encore depuis l’appli.
  • Nouvelles infos :
    • avancement dans l’état, par exemple « En tonte (45 %) » ;
    • temps de tonte restant (min) ;
    • « En charge » plus fiable ;
    • temps total et distance totale lus depuis la tondeuse.
  • Logs plus clairs : « First data received from … » quand les données arrivent, et un avertissement si le serveur refuse l’abonnement.

C’est dispo en 1.0.7

Je t’avoue que je ne vois plus l’intérêt de cette intégration, puisqu’elle n’est capable que de faire pause/reprise !
Même une tonte elle ne sait pas la lancer !
Est-ce mon modèle qui est en cause ou bien c’est l’api mammotion qui ne le permet pas ?

Tu peux lancer la tonte ici :

image

Peut être que le bouton n’est pas approprié
Tu as essayé la dernière version que j’ai déployé (1.0.7) ?

oui !
Et le bouton « tondre » fait planter mon appli mammotion et déconnecte le robot
remarque : je n’ai pas de bouton « rafraichir » et j’ai dû changer dans la config le temps de rafraichissement qui était resté à 60, remplacé par 300


Log :

[2026-10-02T14:28:59.403Z] [INFO] Starting the Mammotion integration...
[2026-10-02T14:28:59.623Z] [INFO] [gladys-sdk] connected to Gladys (http://172.30.0.1:80)
[2026-10-02T14:28:59.921Z] [INFO] [mammotion] Logged in to the Mammotion cloud
[2026-10-02T14:29:05.132Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T14:29:05.792Z] [INFO] [mammotion-mqtt] Connected to the Mammotion broker mqtt-eu.mammotion.com
[2026-10-02T14:29:05.826Z] [INFO] [mammotion-mqtt] Following Luba-VPMBS8RA on the Mammotion broker
[2026-10-02T14:29:05.947Z] [INFO] [mammotion-mqtt] First data received from Luba-VPMBS8RA (device_protobuf_msg_event)
[2026-10-02T14:30:34.618Z] [INFO] onConfigUpdated -> new configuration received
[2026-10-02T14:30:36.022Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T14:30:38.200Z] [INFO] 1 mower(s) found on the Mammotion account
[2026-10-02T14:32:39.644Z] [INFO] onSetValue <- ext:ext-prohand-gladys-mammotion:mower:nNlJJBp0Cxx538To70i6000000:mowing = 1
[2026-10-02T14:32:39.644Z] [WARN] Luba-VPMBS8RA: No paused job to resume: start a new job from the Mammotion app
[2026-10-02T14:37:05.631Z] [INFO] 1 mower(s) found on the Mammotion account

Bonjour, oui je vais tester ce week-end, mon modèle est un Yuka mini. Je vous tiens au jus.

Merci pour les retours ! En 1.0.8 :

  • le bouton Tonte lance maintenant une vraie tonte quand la tondeuse est prête : il reprend une tonte interrompue, sinon il prépare un trajet sur toutes les zones de la carte (comme Home Assistant), puis démarre ;
  • un ordre refusé n’envoie plus rien à la tondeuse : c’est ce qui faisait décrocher l’appli Mammotion ;
  • nouveau bouton Rafraîchir sur le tableau de bord (clique sur « Mettre à jour » dans l’onglet Découverte pour l’avoir) ;
  • le temps restant passe à 0 hors tonte ;
  • intervalle conseillé : 300 s.

Pour choisir une seule zone, il faut encore passer par l’appli. Si la tonte ne démarre pas, envoie-moi les logs : ils indiquent les zones trouvées et l’étape qui bloque.