Integración externa - Mammotion

Hola,

Aquí tienes una nueva integración externa que estará disponible pronto en la tienda para gestionar tus cortadoras de césped Mammotion:

acabo de instalar esta integración y no funciona
He creado una 2ª cuenta de mammotion para evitar desconexiones

pongo el registro en el siguiente mensaje

[2026-09-29T09:46:08.275Z] [INFO] Iniciando la integración de Mammotion...
[2026-09-29T09:46:08.490Z] [INFO] [gladys-sdk] conectado a Gladys (http://)
[2026-09-29T10:25:10.406Z] [INFO] onConfigUpdated -> nueva configuración recibida
[2026-09-29T10:25:10.622Z] [INFO] [mammotion] Iniciado sesión en la nube de Mammotion
[2026-09-29T10:25:15.441Z] [INFO] 1 cortacésped(s) encontrado(s) en la cuenta de Mammotion
[2026-09-29T10:25:15.452Z] [ERROR] Error de inicialización de Mammotion GladysApiError: devices[0].poll_frequency: frecuencia de sondeo no válida
    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 cortacésped(s) encontrado(s) en la cuenta de Mammotion
[2026-09-29T10:28:41.138Z] [INFO] onConfigUpdated -> nueva configuración recibida
[2026-09-29T10:28:42.406Z] [INFO] 1 cortacésped(s) encontrado(s) en la cuenta de Mammotion
[2026-09-29T10:28:42.415Z] [ERROR] Error de inicialización de Mammotion GladysApiError: devices[0].poll_frequency: frecuencia de sondeo no válida
    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 cortacésped(s) encontrado(s) en la cuenta de Mammotion
[2026-09-29T10:33:43.443Z] [INFO] 1 cortacésped(s) encontrado(s) en la cuenta de Mammotion
[2026-09-29T10:33:43.453Z] [ERROR] Error de inicialización de Mammotion GladysApiError: devices[0].poll_frequency: frecuencia de sondeo no válida
    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'
}

Está disponible en 1.0.1 :wink:

Causa

  • Gladys solo acepta algunos valores fijos para poll_frequency, en milisegundos: 1000, 2000, 10000, 15000, 30000 o 60000. Lo verifiqué en el código fuente de Gladys.
  • La integración enviaba el intervalo configurado por el usuario, en segundos (por ejemplo 60). Gladys respondía « 400 frecuencia de sondeo no válida ».
  • Este error detenía el inicio en cada intento, de ahí los errores repetidos en los registros.

Corrección

  • src/devices/mower.js: el cortacésped ahora se envía a Gladys con 30000 ms si el intervalo es inferior a 60 s, de lo contrario 60000 ms.
  • index.js: como Gladys consulta como máximo cada 60 s, la integración ignora las solicitudes que llegan antes del intervalo elegido. Un margen de 5 s absorbe los pequeños desfases de Gladys.
  • El ajuste en la pantalla de configuración no cambia: sigue siendo de 30 a 3600 s, 60 s por defecto.

pequeño problema aún:

LOG

[2026-09-29T16:17:25.356Z] [INFO] Iniciando la integración de Mammotion...
[2026-09-29T16:17:25.573Z] [INFO] [gladys-sdk] conectado a Gladys (http://172.30.0.1:80)
[2026-09-29T16:17:26.212Z] [INFO] [mammotion] Iniciado sesión en la nube de Mammotion
[2026-09-29T16:17:32.304Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion
[2026-09-29T16:17:32.415Z] [WARN] Primera consulta fallida para Luba-VPMBS8RA: dispositivo del usuario no vinculado
[2026-09-29T16:20:26.253Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion

Corrección publicada en la nueva versión 1.0.2 :wink:

Bueno, no funciona: el robot está bien detectado pero ningún estado funciona



¿Podrías probar con la nueva versión 1.0.4 por favor?
Si aún tienes errores, no dudes en incluir los registros también, que pueden ser muy útiles :wink:

La causa

  • El mensaje user device not bind proviene de Aliyun, la antigua nube de Mammotion.
  • Tu Luba está bien encontrada en la cuenta de Mammotion, pero no está vinculada a Aliyun. Sin embargo, la integración solo leía el estado en Aliyun, por lo que no llegaba ningún valor.
  • Las cuentas y firmwares recientes pasan por el servidor MQTT de Mammotion. Allí, es la cortadora la que envía su propio estado (batería, estado, altura de corte, contadores). No hay lectura bajo demanda.

La corrección

  • Nuevo archivo src/mammotion/mqtt.js: se conecta al servidor MQTT de Mammotion, sigue cada cortadora y guarda sus últimos valores.
  • Al descubrir, una cortadora ausente de Aliyun se marca para pasar por MQTT.
  • Si Aliyun responde « not bind », la integración también cambia a MQTT.
  • Los valores recibidos se envían a Gladys de inmediato, como máximo una vez cada 15 segundos por cortadora.
  • Los comandos de Corte y Regreso a la base solo pasan por la API de Mammotion para estas cortadoras.
  • Lint, formato y pruebas pasan (52 pruebas, incluyendo 6 nuevas).

Lo que hay que saber

  • Los valores llegan cuando la cortadora los publica, no al inicio. Por lo tanto, puede quedar « Sin valor reciente » durante unos minutos.
  • Tu Luba es un modelo antiguo. No estoy seguro de que envíe estos mensajes de estado sin que se los pidamos.
  • Si no llega nada, el siguiente paso sería pedirle sus informes de estado y decodificarlos. Es más pesado de codificar.

Sigue sin funcionar


Registros:

[2026-09-30T20:00:40.238Z] [INFO] Iniciando la integración de Mammotion...
[2026-09-30T20:00:40.439Z] [INFO] [gladys-sdk] conectado a Gladys
[2026-09-30T20:00:40.739Z] [INFO] [mammotion] Iniciado sesión en la nube de Mammotion
[2026-09-30T20:00:45.731Z] [INFO] 1 cortacésped(s) encontrado en la cuenta de Mammotion
[2026-09-30T20:00:46.245Z] [INFO] [mammotion-mqtt] Conectado al broker de Mammotion mqtt-eu.mammotion.com
[2026-09-30T20:00:46.304Z] [INFO] [mammotion-mqtt] Siguiendo Luba-VPMBS8RA en el broker de Mammotion
[2026-09-30T20:01:16.125Z] [INFO] 1 cortacésped(s) encontrado en la cuenta de Mammotion
[2026-10-01T14:35:37.820Z] [INFO] 1 cortacésped(s) encontrado en la cuenta de Mammotion
[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] Enviando "dock" a Luba-VPMBS8RA
[2026-10-01T14:36:44.989Z] [WARN] Error al actualizar después del comando para Luba-VPMBS8RA: states[0]: debe tener un "state" numérico o un "text" de cadena

Sería genial que otras personas pudieran probarlo, porque tengo la sensación de que mi modelo (Luba 2), que data de marzo de 2025, ya está demasiado anticuado. @JKBS64

Gracias por los registros
¿Puedes probar con la nueva versión 1.0.5 por favor :slight_smile:

La causa

  • El texto « Estado » del cortacésped se enviaba a Gladys en el lugar equivocado: en la forma state: { text: "..." }.
  • Gladys espera el texto en un campo text separado, como text: "...".
  • Gladys rechaza entonces todo el envío, no solo esa línea. Es el error states[0]: must have a numeric "state" or a string "text" en tus registros.
  • Resultado: ningún valor se registra. De ahí « No hay valor reciente » y « No hay valor registrado » en todas las líneas.

Lo que he cambiado

  • src/devices/mower.js: el estado ahora se envía en el campo text.

¡Por fin el robot se ha conectado correctamente y ha subido la información después de 1 hora!


por lo tanto, los 2 botones no hacen nada, lamentablemente, y las informaciones tardan mucho en subir

Registro

[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

Se corrigió en la versión 1.0.6

1. Los comandos de Corte / Regreso a la base no hacían nada

  • Causa: la orden se enviaba a la tarjeta equivocada del robot. Excepto la Luba 1, todas las cortadoras (incluida tu Luba-VP) esperan estos comandos en su tarjeta de «navegación». Se enviaban a la tarjeta principal.
  • Por qué no había errores en los registros: la nube aceptaba la orden y la transmitía, luego la cortadora la ignoraba sin decir nada.
  • Corrección: la orden se envía a la tarjeta correcta, con la misma regla que PyMammotion (la biblioteca utilizada por Home Assistant).

2. Las informaciones tardaban aproximadamente 1 hora en llegar

  • Causa: se esperaba a que la cortadora enviara su estado por sí misma, lo cual hace rara vez.
  • Corrección: en cada actualización, la integración solicita el estado a la cortadora, como lo hace la aplicación Mammotion. La respuesta llega en unos segundos y Gladys se actualiza para el estado, la batería y la altura de corte.
  • El tiempo total de corte y la distancia total siguen el ritmo anterior (cambian poco).
  • El botón Actualizar y la actualización 10 segundos después de un comando también hacen esta solicitud.

Bueno, no es concluyente:

  • el botón « volver a la base » funciona, pero la aplicación mammotion se desconecta constantemente y luego se reconecta
  • el botón « corte » no hace nada, pero hace que la aplicación mammotion se bloquee…
    Las informaciones no se envían
    Aclaro que tengo 2 cuentas mammotion diferentes

¡Me gustaría que alguien lo probara en otro modelo!

Por otro lado, ¿habrá más funciones/informaciones disponibles?
porque el objetivo es reemplazar la aplicación mammotion, como hace la integración externa « Dreame » que permite usar solo gladys, y todos los cambios realizados en gladys aparecen muy rápidamente en la aplicación dreame

Registro:

[2026-10-02T13:25:32.777Z] [INFO] Iniciando la integración de Mammotion...
[2026-10-02T13:25:33.065Z] [INFO] [gladys-sdk] conectado a Gladys (http://172.30.0.1:80)
[2026-10-02T13:25:33.400Z] [INFO] [mammotion] Iniciado sesión en la nube de Mammotion
[2026-10-02T13:25:38.161Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion
[2026-10-02T13:25:38.796Z] [INFO] [mammotion-mqtt] Conectado al broker de Mammotion mqtt-eu.mammotion.com
[2026-10-02T13:25:38.830Z] [INFO] [mammotion-mqtt] Siguiendo Luba-VPMBS8RA en el broker de Mammotion
[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] Enviando "dock" a Luba-VPMBS8RA
[2026-10-02T13:33:53.821Z] [WARN] [mammotion] Solicitud de informe rechazada para Luba-VPMBS8RA: Dispositivo no responde
[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] Enviando "start" a Luba-VPMBS8RA

Efectivamente, sería bueno que otra persona lo probara, pero de todos modos envié tu solicitud a Claude:

Lo que pasaba, según tus registros (lo comparé con PyMammotion, el código utilizado por Home Assistant):

  • Información que no se transmite: el cortacésped solo escucha la nube ~10 segundos después de un mensaje « sync ». Nunca lo enviábamos, por lo que ignoraba nuestras solicitudes: es el « Device not responding » del registro.
  • Aplicación que se desconecta constantemente: cada 60 segundos, le pedíamos un informe al cortacésped. Cada solicitud reemplaza la de la aplicación, que entonces cree que el cortacésped está perdido. Además, superaba el límite del cloud Mammotion (alrededor de 600 mensajes cada 12 horas).
  • Corte que hace que la aplicación falle: enviábamos un simple « start » sin ruta. La aplicación, sin embargo, primero prepara una ruta en el mapa (zonas, ajustes).

Lo que he cambiado:

  • Un « sync » se envía antes de cada comando y cada solicitud de informe.
  • Una solicitud de informe se envía como máximo cada 5 minutos, solo después de un comando o un clic en « Actualizar ». No hay solicitud cuando el cortacésped ya está enviando sus datos, por ejemplo cuando la aplicación está abierta.
  • Botón Corte: solo reanuda un corte en pausa. Si no hay ninguna tarea en pausa, Gladys se niega (con un mensaje en los registros) en lugar de hacer que la aplicación falle. Un nuevo corte se inicia desde la aplicación.
  • Nuevas informaciones:
    • avance en el estado, por ejemplo « Cortando (45 %) »;
    • tiempo de corte restante (min);
    • « Cargando » más fiable;
    • tiempo total y distancia total leídos desde el cortacésped.
  • Registros más claros: « First data received from … » cuando los datos llegan, y una advertencia si el servidor rechaza la suscripción.

Está disponible en 1.0.7

Te confieso que ya no veo el interés de esta integración, ya que solo es capaz de hacer pausas/reanudaciones. ¡Incluso un corte de césped no sabe cómo iniciarlo! ¿Es mi modelo el que está en causa o es la API de mammotion la que no lo permite?

Puedes iniciar el corte de césped aquí:

image

Quizás el botón no sea adecuado
¿Has probado la última versión que desplegué (1.0.7)?

¡sí!
Y el botón « cortar » hace que mi aplicación mammotion se bloquee y desconecte el robot
nota: no tengo un botón « actualizar » y tuve que cambiar en la configuración el tiempo de actualización que se había quedado en 60, reemplazado por 300


Registro:

[2026-10-02T14:28:59.403Z] [INFO] Iniciando la integración de Mammotion...
[2026-10-02T14:28:59.623Z] [INFO] [gladys-sdk] conectado a Gladys (http://172.30.0.1:80)
[2026-10-02T14:28:59.921Z] [INFO] [mammotion] Iniciado sesión en la nube de Mammotion
[2026-10-02T14:29:05.132Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion
[2026-10-02T14:29:05.792Z] [INFO] [mammotion-mqtt] Conectado al broker de Mammotion mqtt-eu.mammotion.com
[2026-10-02T14:29:05.826Z] [INFO] [mammotion-mqtt] Siguiendo Luba-VPMBS8RA en el broker de Mammotion
[2026-10-02T14:29:05.947Z] [INFO] [mammotion-mqtt] Primeros datos recibidos de Luba-VPMBS8RA (device_protobuf_msg_event)
[2026-10-02T14:30:34.618Z] [INFO] onConfigUpdated -> nueva configuración recibida
[2026-10-02T14:30:36.022Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion
[2026-10-02T14:30:38.200Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion
[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 hay ningún trabajo pausado para reanudar: iniciar un nuevo trabajo desde la aplicación de Mammotion
[2026-10-02T14:37:05.631Z] [INFO] 1 cortacésped(es) encontrado(s) en la cuenta de Mammotion

Hola, sí, lo probaré este fin de semana, mi modelo es un Yuka mini. Les mantendré informados.

¡Gracias por los comentarios! En la versión 1.0.8:

  • el botón Cortar ahora inicia un corte real cuando el cortacésped está listo: reanuda un corte interrumpido, de lo contrario, prepara un recorrido en todas las zonas del mapa (como Home Assistant), luego lo inicia;
  • una orden rechazada ya no envía nada al cortacésped: era lo que hacía que la aplicación Mammotion se desconectara;
  • nuevo botón Actualizar en el panel de control (haz clic en « Actualizar » en la pestaña Descubrimiento para tenerlo);
  • el tiempo restante se pone a 0 fuera del corte;
  • intervalo recomendado: 300 s.

Para elegir una sola zona, aún hay que pasar por la aplicación. Si el corte no comienza, envíame los registros: indican las zonas encontradas y el paso que falla.