Problema con Gladys Plus

Tengo un problema desde ayer: mi Gladys ya no interactúa con mis dispositivos y no está « actualizada ».
Todos mis gráficos se detuvieron el 2 de junio (cuando todo funcionaba hasta hace unos dos días).

Cuando accedo a mi instancia local, todo está actualizado, sin problemas… ¿Qué está pasando? :thinking:
¿Alguna pista por tu parte @pierre-gilles?

Tu instancia local debe estar desconectada de Gladys Plus, no hay una única razón, puede ser muchas cosas:

  • Problema de conexión a internet en tu casa
  • Lentitud en tu instancia que « acumula » tareas por hacer y se vuelve demasiado lenta para responder

Vale, funciona, lo miraré al llegar a casa :+1:

Bueno… Hoy funciona ^^

¡Quizás un problema de red en mi casa!

Bueno, tengo un problema: el problema se repite.
Sin embargo, en mi caso: ningún problema de red, no tengo problemas de alimentación ya que todo está en un UPS.

Dado que no puedo saber cuándo se produce la desconexión, estoy un poco perdido en cuanto a los registros.

Lo que noto esta mañana es que mis registros de Gladys están totalmente contaminados por errores de Telegram:

2024-06-28T09:05:27+0200 <warn> message.connect.js:19 (TelegramBot.<anonymous>) Telegram polling error, code = ETELEGRAM, message = ETELEGRAM: 409 Conflict: terminated by other getUpdates request; make sure that only one bot instance is running

Hay cientos de ellos en los pocos registros que he revisado.

Además, le pregunto a ChatGPT qué opina, y me sugiere probar un comando:

ps aux | grep node

Lo que devuelve:

root        1995  0.0  0.0    816   384 ?        Ss   juin26   0:07 /sbin/tini -- node index.js
root        2009  3.7  3.7 21538828 301480 ?     Ssl  juin26 100:08 node index.js
root        2011  0.0  1.9 390480 159928 pts/0   Ssl+ juin26   1:10 /app/presearch-node
root        2127  0.9  1.7 362256 139616 ?       Sl   juin26  24:28 node index.js
root        3118  0.0  0.0   2796  1792 ?        Ss   juin26   0:00 fusermount3 -o rw,nosuid,nodev,fsname=portal,auto_unmount,subtype=portal -- /run/user/1000/doc
guilhem    35783  0.4  2.1 11333556 172344 pts/0 Sl+  juin26  11:19 node-red
guilhem   353315  0.0  0.0  11780  2560 pts/1    S+   09:09   0:00 grep --color=auto node

Si esto le dice algo a alguno de ustedes…? :thinking:

Ya has intentado limpiar los registros de Telegram, eso te ayudará a ver las cosas más claras :slight_smile:

Este error se debe a que has utilizado la misma clave de API para Gladys y para otro software (por ejemplo: Node-RED).

En Telegram, una clave de API = un cliente.

Entonces, ¿debo hacer algo diferente en este punto?
En resumen, ¿debo crear un bot conectado a Gladys y un bot conectado a NodeRed?

He buscado si es posible tener varias claves de API para un mismo bot (misma conversación), y al parecer no es posible

Por lo tanto, sí, hay que crear un nuevo bot en BotFather, pero así habrá 2 conversaciones

Eso no es grave, me adaptaré. Por otro lado, lo que me parece extraño es que no encuentro ningún flujo de node-red que utilice la misma API que la configurada en Gladys …!

Lo que @guim31 describe es muy similar a lo que he observado en mi caso. Aquí: Gladys devient injoignable après quelques heures de fonctionnement - #9 par pierre-gilles

Y sí, tenía un flujo de node-red que utilizaba el mismo Telegram que Gladys. Desactivé ese flujo de node-red, y Gladys funciona mucho mejor desde entonces.
Pero aún no es perfecto, tuve otro bloqueo después, pero no pude analizarlo en ese momento… Así que estoy en ‹ observación ›, con una escena de Gladys que se activa cada hora y me escribe un ‹ keep alive › en Telegram, para detectar eficazmente la próxima caída :wink:

Pero bueno, en este momento tengo muy poco tiempo para sentarme y analizar todo esto seriamente…

Bueno… Vuelve a ocurrir.

Sin embargo, estoy bien conectado a Internet:

¿De tu lado @pierre-gilles no hay ningún problema con las conexiones a Gladys Plus?

Puede haber una pequeña confusión, el « 33ms ping » solo significa que tu frontend está conectado al backend de Gladys (en modo local puro), no significa que Gladys esté conectada a internet.

Ningún problema particular ayer en la infraestructura. No tengo detalles por instancia, sin embargo.

¿Has mirado los logs para ver si algo no iba bien? ¿La actividad en tu máquina?

¡AH!

Quizás una pista:


2024-07-02T04:00:00+0200 <info> device.purgeStates.js:29 (DeviceManager.purgeStates) Purging device feature states of the last 90 days. States older than Wed Apr 03 2024 04:00:00 GMT+0200 (Central European Summer Time) will be purged.
2024-07-02T04:00:06+0200 <warn> device.calculateAggregate.js:95 (Socket.<anonymous>) device.calculateAggregate stderr: Error
    at Database.<anonymous> (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:179:27)
    at /src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:177:50
    at new Promise (<anonymous>)
    at Query.run (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:177:12)
    at /src/server/node_modules/sequelize/lib/sequelize.js:314:28
    at async SQLiteQueryInterface.bulkUpdate (/src/server/node_modules/sequelize/lib/dialects/abstract/query-interface.js:366:12)
    at async t_device_feature.update (/src/server/node_modules/sequelize/lib/model.js:1958:28)
    at async /src/server/lib/device/device.calculcateAggregateChildProcess.js:153:5 {
  name: 'SequelizeTimeoutError',
  parent: [Error: SQLITE_BUSY: database is locked] {
    errno: 5,
    code: 'SQLITE_BUSY',
    sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3'
  },
  original: [Error: SQLITE_BUSY: database is locked] {
    errno: 5,
    code: 'SQLITE_BUSY',
    sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3'
  },
  sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3',
  parameters: {}
}
all values are hidden
2024-07-02T04:00:06+0200 <warn> device.calculateAggregate.js:101 (ChildProcess.<anonymous>) device.calculateAggregate: Exiting child process with code 1
2024-07-02T04:00:19+0200 <info> device.purgeAggregateStates.js:31 (DeviceManager.purgeAggregateStates) Purging device feature states of the last 365 days. States older than Mon Jul 03 2023 04:00:19 GMT+0200 (Central European Summer Time) will be purged.
2024-07-02T04:00:19+0200 <error> device.onHourlyDeviceAggregateEvent.js:22 (DeviceManager.onHourlyDeviceAggregateEvent) Error: Error
    at Database.<anonymous> (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:179:27)
    at /src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:177:50
    at new Promise (<anonymous>)
    at Query.run (/src/server/node_modules/sequelize/lib/dialects/sqlite/query.js:177:12)
    at /src/server/node_modules/sequelize/lib/sequelize.js:314:28
    at async SQLiteQueryInterface.bulkUpdate (/src/server/node_modules/sequelize/lib/dialects/abstract/query-interface.js:366:12)
    at async t_device_feature.update (/src/server/node_modules/sequelize/lib/model.js:1958:28)
    at async /src/server/lib/device/device.calculcateAggregateChildProcess.js:153:5 {
  name: 'SequelizeTimeoutError',
  parent: [Error: SQLITE_BUSY: database is locked] {
    errno: 5,
    code: 'SQLITE_BUSY',
    sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3'
  },
  original: [Error: SQLITE_BUSY: database is locked] {
    errno: 5,
    code: 'SQLITE_BUSY',
    sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3'
  },
  sql: 'UPDATE `t_device_feature` SET `last_hourly_aggregate`=$1,`updated_at`=$2 WHERE `id` = $3',
  parameters: {}
}
all values are hidden
    at ChildProcess.<anonymous> (/src/server/lib/device/device.calculateAggregate.js:102:23)
    at ChildProcess.emit (node:events:517:28)
    at maybeClose (node:internal/child_process:1098:16)
    at Process.ChildProcess._handle.onexit (node:internal/child_process:303:5)

¿Podría ser eso?

Porque noto esta mañana que mi conexión a Gladys Plus se ha caído de nuevo… :frowning:

No sé si es realmente la causa de tus problemas ^^

Joder … :expressionless: lo creía
Voy a seguir buscando, el problema es que nunca sé cuándo se cae la conexión, me doy cuenta cuando ya estoy fuera de casa generalmente

Hola,
¿No hay posibilidad de crear una escena para marcar la hora del problema?

Me encantaría, pero no sé cómo hacerlo…

Lo que observo es que, en el momento en que reinicio Gladys, la memoria utilizada disminuye drásticamente:

image

Pasamos de 1,9 GB de RAM a aproximadamente 250 MB

Aquí están los registros de inicio (no sé qué es interesante para investigar o no):

Container started
2024-07-02T13:14:19+0200 <info> job.purge.js:17 (Job.purge) Eliminando todos los trabajos en segundo plano creados antes = Tue Jun 25 2024 13:14:19 GMT+0200 (Hora de verano de Europa central)
2024-07-02T13:14:21+0200 <info> index.js:14 (Object.start) iniciando servicio Alexa
2024-07-02T13:14:21+0200 <info> index.js:20 (Object.start) Iniciando servicio Open Weather
2024-07-02T13:14:21+0200 <info> index.js:88 (Object.start) Iniciando servicio CalDAV
2024-07-02T13:14:21+0200 <info> index.js:15 (Object.start) Iniciando servicio enedis
2024-07-02T13:14:21+0200 <info> index.js:18 (Object.start) Iniciando servicio GoogleCast
2024-07-02T13:14:21+0200 <info> index.js:16 (Object.start) Iniciando servicio Z-Wave JS UI
2024-07-02T13:14:21+0200 <info> service.start.js:40 (Service.start) El servicio zwavejs-ui no está configurado, por lo que no se inició.
2024-07-02T13:14:21+0200 <info> index.js:17 (Object.start) Iniciando servicio Sonos
2024-07-02T13:14:21+0200 <info> index.js:17 (Object.start) Iniciando servicio Netatmo 2c286e6d-2a29-4b91-acff-6f4d942430a4
2024-07-02T13:14:21+0200 <info> service.start.js:40 (Service.start) El servicio netatmo no está configurado, por lo que no se inició.
2024-07-02T13:14:21+0200 <info> init.js:14 (NodeRedManager.init) Nodered: no está habilitado, se omite...
2024-07-02T13:14:21+0200 <info> index.js:27 (Object.start) Iniciando servicio MELCloud 1ef9a32d-2664-4a3b-8824-ac983bb3cc12
2024-07-02T13:14:21+0200 <info> service.start.js:40 (Service.start) El servicio melcloud no está configurado, por lo que no se inició.
2024-07-02T13:14:21+0200 <info> index.js:17 (Object.start) Iniciando servicio Tuya d94188bc-9520-4043-9171-3e8dc9c4ee48
2024-07-02T13:14:21+0200 <info> service.start.js:40 (Service.start) El servicio tuya no está configurado, por lo que no se inició.
2024-07-02T13:14:21+0200 <info> index.js:16 (Object.start) Iniciando servicio Nextcloud Talk
2024-07-02T13:14:21+0200 <info> service.start.js:40 (Service.start) El servicio nextcloud-talk no está configurado, por lo que no se inició.
2024-07-02T13:14:21+0200 <info> index.js:17 (Object.start) Iniciando servicio LAN Manager
2024-07-02T13:14:21+0200 <info> lan-manager.initPresenceScanner.js:18 (LANManager.initPresenceScanner) Configuración de LANManager: iniciando escáner de presencia
2024-07-02T13:14:21+0200 <info> index.js:16 (Object.start) iniciando servicio Broadlink
2024-07-02T13:14:22+0200 <info> index.js:18 (Object.start) Iniciando servicio HomeKit
2024-07-02T13:14:22+0200 <info> index.js:14 (Object.start) iniciando servicio GoogleActions
2024-07-02T13:14:22+0200 <info> init.js:63 (Zigbee2mqttManager.init) Zigbee2mqtt USB dongle conectado a /dev/ttyUSB0
2024-07-02T13:14:22+0200 <info> checkForContainerUpdates.js:14 (Zigbee2mqttManager.checkForContainerUpdates) Comprobando las versiones instaladas actuales y las actualizaciones requeridas...
2024-07-02T13:14:22+0200 <info> installMqttContainer.js:114 (Zigbee2mqttManager.installMqttContainer) Contenedor del broker MQTT iniciado correctamente
2024-07-02T13:14:22+0200 <info> configureContainer.js:23 (Zigbee2mqttManager.configureContainer) El contenedor Z2M está siendo configurado...
2024-07-02T13:14:22+0200 <info> configureContainer.js:36 (Zigbee2mqttManager.configureContainer) El archivo de configuración Z2M ya existe.
2024-07-02T13:14:23+0200 <info> installZ2mContainer.js:90 (Zigbee2mqttManager.installZ2mContainer) Contenedor Zigbee2mqtt iniciado correctamente
2024-07-02T13:14:23+0200 <info> connect.js:25 (Zigbee2mqttManager.connect) Conectando Gladys al broker MQTT mqtt://localhost:1884...
2024-07-02T13:14:23+0200 <error> index.js:20 (process.<anonymous>) uncaughtException catched: uncaughtException
2024-07-02T13:14:23+0200 <error> index.js:21 (process.<anonymous>) Error: El nombre del servicio ya está en uso en la red
    at Registry._onProbeComplete (/src/server/services/homekit/node_modules/bonjour-hap/lib/Registry.js:108:27)
    at Prober.done (/src/server/services/homekit/node_modules/bonjour-hap/lib/Prober.js:67:10)
    at Prober.onMDNSresponse (/src/server/services/homekit/node_modules/bonjour-hap/lib/Prober.js:61:102)
    at EventEmitter.emit (node:events:517:28)
    at Socket.<anonymous> (/src/server/services/homekit/node_modules/multicast-dns/index.js:49:43)
    at Socket.emit (node:events:517:28)
    at UDP.onMessage (node:dgram:942:8)
2024-07-02T13:14:23+0200 <info> connect.js:35 (MqttClient.<anonymous>) Conectado al contenedor MQTT mqtt://localhost:1884
2024-07-02T13:14:23+0200 <info> subscribe.js:12 (Zigbee2mqttManager.subscribe) Suscribiéndose al tema MQTT zigbee2mqtt/#
2024-07-02T13:14:23+0200 <info> index.js:18 (Object.start) Iniciando servicio TP-Link
2024-07-02T13:14:23+0200 <info> index.js:17 (Object.start) Iniciando servicio eWeLink
2024-07-02T13:14:23+0200 <warn> service.start.js:44 (Service.start) No se pudo iniciar el servicio ewelink Error500:
    at EweLinkHandler.throwErrorIfNeeded (/src/server/services/ewelink/lib/device/index.js:65:11)
    at EweLinkHandler.connect (/src/server/services/ewelink/lib/device/connect.js:43:14)
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
    at Object.start (/src/server/services/ewelink/index.js:18:5)
    at Service.start (/src/server/lib/service/service.start.js:33:7) {
  status: 500,
  code: 'SERVER_ERROR',
  error: 'eWeLink: Sign:oauthClient enable invalid'
}
2024-07-02T13:14:23+0200 <info> index.js:15 (Object.start) Iniciando servicio Bluetooth
2024-07-02T13:14:23+0200 <info> index.js:15 (Object.start) Iniciando servicio Tasmota
2024-07-02T13:14:23+0200 <info> index.js:14 (Object.start) Iniciando servicio Xiaomi
2024-07-02T13:14:23+0200 <info> index.js:13 (Object.start) Iniciando servicio usb
2024-07-02T13:14:23+0200 <info> index.js:19 (Object.start) Iniciando servicio Telegram
2024-07-02T13:14:23+0200 <info> index.js:18 (Object.start) Iniciando servicio RTSP
2024-07-02T13:14:23+0200 <info> index.js:18 (Object.start) Iniciando servicio Philips Hue
2024-07-02T13:14:23+0200 <info> index.js:16 (Object.start) Iniciando servicio MQTT
2024-07-02T13:14:23+0200 <info> updateContainer.js:13 (MqttHandler.updateContainer) MQTT: comprobando cambios requeridos...
2024-07-02T13:14:23+0200 <info> updateContainer.js:41 (MqttHandler.updateContainer) MQTT: no se requiere actualización del contenedor
2024-07-02T13:14:23+0200 <info> connect.js:38 (MqttClient.<anonymous>) Conectado al servidor MQTT mqtt://localhost
2024-07-02T13:14:23+0200 <info> subscribe.js:12 (MqttHandler.subscribe) Suscribiéndose al tema MQTT stat/+/+
2024-07-02T13:14:23+0200 <info> subscribe.js:12 (MqttHandler.subscribe) Suscribiéndose al tema MQTT tele/+/+
2024-07-02T13:14:23+0200 <info> subscribe.js:12 (MqttHandler.subscribe) Suscribiéndose al tema MQTT gladys/master/#
2024-07-02T13:14:23+0200 <info> index.js:26 (Object.start) Iniciando servicio EDF Tempo
2024-07-02T13:14:23+0200 <info> index.js:17 (Object.start) Iniciando servicio Ecowatt
2024-07-02T13:14:23+0200 <info> index.js:21 (Object.start) Iniciando servicio de ejemplo
2024-07-02T13:14:23+0200 <info> scene.dailyUpdate.js:58 () Hoy el amanecer es a las 6:18, en tu zona horaria = Europe/Paris
2024-07-02T13:14:23+0200 <info> scene.dailyUpdate.js:59 () Hoy el atardecer es a las 21:42, en tu zona horaria = Europe/Paris
2024-07-02T13:14:23+0200 <info> scene.dailyUpdate.js:70 () El sol salió esta mañana. No programando para hoy.
2024-07-02T13:14:23+0200 <info> scene.dailyUpdate.js:81 () El atardecer está programado, en 8 horas.
2024-07-02T13:14:24+0200 <info> index.js:64 (Server.<anonymous>) Servidor escuchando en el puerto 80
2024-07-02T13:14:24+0200 <info> index.js:884 (Socket.<anonymous>) Gladys Gateway: conectado en websockets

@guim31 ¿Nos puedes recordar tu hardware y tu conexión a Internet (¿fibra? ¿ADSL?)? :slight_smile:

De lo que describes, parece que tu instancia de Gladys está acumulando datos en la memoria con el tiempo, lo que puede deberse a muchos factores.

Parece mucho un problema de recursos, lo que necesitarías hacer es tener análisis precisos de todas las métricas de tu servidor a lo largo del tiempo.

Yo personalmente uso Netdata en muchos de mis servidores (https://www.netdata.cloud/)

Es un software de código abierto que se instala localmente y te da toneladas de datos sobre tu servidor, con historial.

Luego, esto permite visualizar en tu navegador todos estos datos

Voy a instalar Netdata, ya lo he utilizado para mi NAS, pero debo admitir que me pierdo entre tanta información (¡sobre todo porque la herramienta es súper potente!).

Tengo un mini PC con un Core i3 y 8 GB de RAM.
Conexión de fibra con Free que parece bastante estable.