Probleme de decouverte d'appareil dans Zigbee2mqtt

toujours pas d’ID

pi@gladys:// $ docker exec -it gladys /bin/sh
/src/server # sqlite3 /var/lib/gladysassistant/gladys-production.db
SQLite version 3.44.2 2023-11-24 11:41:44
Enter « .help » for usage hints.
sqlite> .mode column
sqlite> .headers on
sqlite> SELECT id, name, selector, external_id FROM t_device_feature WHERE external_id = ‹ zigbee2mqtt:detecteur couloir:light-sensor:decimal:illuminance ›;
sqlite>

Bonjour @cicoub13
Est ce que je devrai avoir un affichage du uuid? car la je reste bloque sur l’invite : sqlite> et je n’e sais pas en sortir .exit , ne m’en fait pas sortir
Et pour les suppressions je suis sensé remplacé :

id = '<uuid>';

par :
id = 'mon uuid'; ;enlevant ça : <>
En fait je ne connais pas du tout le Sql
Merci pour ton aide

Ne serais-tu pas plus à l’aise sur un logiciel externe en exportant ta base pour au moins avoir l’uuid ?

Tu peux consulter le post de Pierre-Gilles :

Pour ma part je ne passe quasi que par ça !!

Eteindre Gladys, telecharge la base de donnée sur ton PC/Mac et tu consultes.
Si tu as fais un backup avant, tu peux supprimer dans TablePlus puis réimporter ta base (attention aux droits, moi je suis obligé d’ouvrir les droits à tous puis je remet en etat ensuite)

Bonjour @Terdious
je vais regardé ça, je te remercie pour ta reponse :wink:

1 « J'aime »

Bonjour @Terdious ,@pierre-gilles
Il amene sur quoi ce lien ? car pour le moment, il ne fonctionne plus

Bonjour @Psoy,

Plus rien, c’était les prémices de Gladys V4 à sa conception je crois ^^

Au temps pour moi, j’aurais dû être plus précis, je parlais de ce lien dans le post :

Pas de soucis,
Pour Tabplus c’est bon , il ne me reste plus qu’ apprendre comment ca fonctionne, j’ai deja ouvert la db sur Tabplus, c’est un premier pas :grinning:
merci encore

1 « J'aime »

C’est bizarre que tu n’ais aucune ligne avec ce filtre alors que le serveur répond CONFLICT.
Essaye de regarder la table t_device_feature

Bonjour @cicoub13
j’ai regarder dans la table t_device_feature, il n’y as pas de trace de mon detecteur , donc je pense qu’il a bien été supprimé. Par contre là ou j’ai une doute c’est sur les deux fonctions de luminosité. Elles sont nommées différemment sur Zm2Mqtt et dans gladys elles ont le meme nom, comment je peux voir si c’est le meme lien mqtt?

Bonsoir @pierre-gilles
je viens de voir un probleme dans les « Taches » des parametres de Gladys
j’ai remonté l’historique jusqu’au debut , donc 7 jours de recul, et j’ai trouvé cette erreur qui ce repete tous les jours :

Agrégation donnée capteur horaire
il y a 5 jours

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: {}
}

Est ce que mon probleme ne serait pas lié ?
Merci de ta réponse
donc meme avec la V4.37 j’ai le meme probleme

C’est une erreur assez classique quand ton disque n’est pas assez performant pour encaisser le volume de lecture/écriture :slight_smile: Pas de liens avec ton souci.

Pour installer Gladys, si tu comptes avoir une jolie installation avec pas mal de capteurs, je conseille vraiment d’être sur un bon SSD sur un mini-PC, sinon tu es vite limité. Tu es sur micro-SD actuellement ?

Ce que je recommande c’est le Beelink qui est livré avec un SSD NVMe bien puissant : https://amzn.to/3UQgLkq (actuellement à 199€ grâce au coupon de 60€)

Bonjour @pierre-gilles
Je suis sur un ssd de 120Go deja et un RPI3b+. J’evisage de passé sur un RPI4B que j’ai acheté ? qu’est ce que tu en pense. ça peut le faire ?

la gestion des appareils zigbee a dû etre modifié.
Voici mon detecteur declarée dans Gladys il y a 20jours (apres une restauration de ma BD) :
image
le voici le meme capteur qui me genere l’erreur :


Avant il n’y avait qu’une foction luminosité, maintenant il y en a 2.
Est ce que quelqu’un peut verifier ça s’il vous plait

Oui il y eu un ajout d’une illuminance il y a 2 mois dans la version 4.33.

Il y a sûrement un lien avec ton problème

Oui, on vient de vérifier c’est bien un doublon !!

Bon d’après la doc zigbee2mqtt du capteur, l’expose est le même pour les 2 illuminances :

Du coup forcément, même selector et même external_id.

Donc tant que je n’avais pas fait de mise à jour le capteur fonctionnait, j’ai une mise a jour , j’ai eu l’erreur . Maintenant que je l’ai supprimé, je ne peux plus l’intégrer dans Gladys

@Terdious
Bon d’après la doc zigbee2mqtt du capteur, l’expose est le même pour les 2 illuminances :

dans zigbee2Mqtt elles sont differentes non?
{
« battery »: 100,
« device_temperature »: 27,
« illuminance »: 6,
« illuminance_lux »: 6,
« linkquality »: 117,
« occupancy »: false,
« power_outage_count »: 173,
« voltage »: 3065
}

En effet ^^ My bad !! Et ton expose côté Gladys le confirme puisque tu as bien une feature avec l’unité et l’autre sans :

name Illuminance
read_only true
has_feedback false
min 0
max 100000
category light-sensor
type decimal
unit lux
external_id zigbee2mqtt:detecteur_couloir:light-sensor:decimal:illuminance
selector zigbee2mqtt-detecteur-couloir-light-sensor-decimal-illuminance

et

5 Object { name: Illuminance, read_only: true, has_feedback: false, … }
name Illuminance
read_only true
has_feedback false
min 0
max 100000
category light-sensor
type decimal
unit null
external_id zigbee2mqtt:detecteur_couloir:light-sensor:decimal:illuminance
selector zigbee2mqtt-detecteur-couloir-light-sensor-decimal-illuminance

Ducoup , j’ai ce device là, qui m’a fait la meme, mais a un moment , je ne sais pourquoi , il s’est bien integré.

Comme je connais la technique maintenant je vais pouvoir investiguer

Maintenant il faut attendre qu’un Dev intervienne, je pense, ce n’est pas resovable directement, c’est ça ?
En tout cas un grand merci @Terdious, d’avoir pris le temps de m’aider :wink:

Fiouf j’ai galéré à trouver mais j’ai pu avoir un expose complet du capteur. Je réitère (en modifiant le terme « expose » par « property ») et confirme donc ce que je disais au départ :

Du coup j’ai pu trouver un expose de ce capteur ici : Aqara human body movement and illuminance sensor RTCGQ11LM not reporting battery level · Issue #11616 · Koenkk/zigbee2mqtt · GitHub

On peut voir dans ce dernier :

[
  {
    "definition": null,
    "endpoints": {
      [...]
    },
    "friendly_name": "Coordinator",
    "ieee_address": "0x00124b0024cae636",
    "interview_completed": true,
    "interviewing": false,
    "network_address": 0,
    "supported": false,
    "type": "Coordinator"
  },
  {
    "definition": {
      "description": "Aqara human body movement and illuminance sensor",
      "exposes": [
        {
          "access": 1,
          "description": "Remaining battery in %",
          "name": "battery",
          "property": "battery",
          "type": "numeric",
          "unit": "%",
          "value_max": 100,
          "value_min": 0
        },
        {
          "access": 1,
          "description": "Indicates whether the device detected occupancy",
          "name": "occupancy",
          "property": "occupancy",
          "type": "binary",
          "value_off": false,
          "value_on": true
        },
        {
          "access": 1,
          "description": "Measured temperature value",
          "name": "temperature",
          "property": "temperature",
          "type": "numeric",
          "unit": "°C"
        },
        {
          "access": 1,
          "description": "Voltage of the battery in millivolts",
          "name": "voltage",
          "property": "voltage",
          "type": "numeric",
          "unit": "mV"
        },
        {
          "access": 1,
          "description": "Measured illuminance in lux",
          "name": "illuminance_lux",
          "property": "illuminance",
          "type": "numeric",
          "unit": "lx"
        },
        {
          "access": 1,
          "description": "Measured illuminance in lux",
          "name": "illuminance",
          "property": "illuminance",
          "type": "numeric",
          "unit": "lx"
        },
        {
          "access": 1,
          "description": "Link quality (signal strength)",
          "name": "linkquality",
          "property": "linkquality",
          "type": "numeric",
          "unit": "lqi",
          "value_max": 255,
          "value_min": 0
        }
      ],
      "model": "RTCGQ11LM",
      "options": [
        {
          "access": 2,
          "description": "Time in seconds after which occupancy is cleared after detecting it (default 90 seconds).",
          "name": "occupancy_timeout",
          "property": "occupancy_timeout",
          "type": "numeric",
          "value_min": 0
        },
        {
          "access": 2,
          "description": "Sends a message the last time occupancy was detected. When setting this for example to [10, 60] a {\"no_occupancy_since\": 10} will be send after 10 seconds and a {\"no_occupancy_since\": 60} after 60 seconds.",
          "item_type": "number",
          "name": "no_occupancy_since",
          "property": "no_occupancy_since",
          "type": "list"
        },
        {
          "access": 2,
          "description": "Number of digits after decimal point for illuminance, takes into effect on next report of device.",
          "name": "illuminance_precision",
          "property": "illuminance_precision",
          "type": "numeric",
          "value_max": 3,
          "value_min": 0
        },
        {
          "access": 2,
          "description": "Calibrates the illuminance value (percentual offset), takes into effect on next report of device.",
          "name": "illuminance_calibration",
          "property": "illuminance_calibration",
          "type": "numeric"
        },
        {
          "access": 2,
          "description": "Number of digits after decimal point for illuminance_lux, takes into effect on next report of device.",
          "name": "illuminance_lux_precision",
          "property": "illuminance_lux_precision",
          "type": "numeric",
          "value_max": 3,
          "value_min": 0
        },
        {
          "access": 2,
          "description": "Calibrates the illuminance_lux value (percentual offset), takes into effect on next report of device.",
          "name": "illuminance_lux_calibration",
          "property": "illuminance_lux_calibration",
          "type": "numeric"
        },
        {
          "access": 2,
          "description": "Number of digits after decimal point for temperature, takes into effect on next report of device.",
          "name": "temperature_precision",
          "property": "temperature_precision",
          "type": "numeric",
          "value_max": 3,
          "value_min": 0
        },
        {
          "access": 2,
          "description": "Calibrates the temperature value (absolute offset), takes into effect on next report of device.",
          "name": "temperature_calibration",
          "property": "temperature_calibration",
          "type": "numeric"
        }
      ],
      "supports_ota": false,
      "vendor": "Xiaomi"
    },
    "endpoints": {
      "1": {
        "bindings": [],
        "clusters": {
          "input": [
            "genBasic",
            "65535",
            "msOccupancySensing",
            "msIlluminanceMeasurement",
            "ssIasZone",
            "genPowerCfg",
            "genIdentify"
          ],
          "output": [
            "genBasic",
            "genOta"
          ]
        },
        "configured_reportings": [],
        "scenes": []
      }
    },
    "friendly_name": "motion_sensor_office",
    "ieee_address": "0x00158d0007755b21",
    "interview_completed": true,
    "interviewing": false,
    "manufacturer": "LUMI",
    "model_id": "lumi.sensor_motion.aq2",
    "network_address": 52233,
    "power_source": "Battery",
    "supported": true,
    "type": "EndDevice"
  }
]

que le capteur « RTCGQ11LM » expose les propriétés suivantes :

        {
          "access": 1,
          "description": "Measured illuminance in lux",
          "name": "illuminance_lux",
          "property": "illuminance",
          "type": "numeric",
          "unit": "lx"
        },
        {
          "access": 1,
          "description": "Measured illuminance in lux",
          "name": "illuminance",
          "property": "illuminance",
          "type": "numeric",
          "unit": "lx"
        },

contrairement au model « ZSS-ZK-THL » par exemple qui lui expose bien :


        {
          "access": 1,
          "description": "Raw measured illuminance",
          "label": "Illuminance",
          "name": "illuminance",
          "property": "illuminance",
          "type": "numeric"
        },
        {
          "access": 1,
          "description": "Measured illuminance in lux",
          "label": "Illuminance (lux)",
          "name": "illuminance_lux",
          "property": "illuminance_lux",
          "type": "numeric",
          "unit": "lx"
        },

Il y a donc un souci côté Zigbee2mqtt car on a bien un ‹ name › et un ‹ label › différent mais les ‹ property › et ‹ description › eux sont identique. Et si je ne dis pas de bêtise, on utilise le 'property pour faire les ‹ external_id › et ‹ selector › . Et je ne vois pas trop comment traiter ce cas (sauf à faire une exception dans notre code).

Notre code avec la ligne cause du problème lorsque Zigbee2mqtt fait une erreur à ce niveau (je pense) dans le fichier server/services/zigbee2mqtt/utils/features/completeFeature.js :


Et on voit en dessous que le « name » est également tiré de l’exposes ‹ property › d’où le fait qu’on est 2 fois une feature nommée « Illuminance ».

Malheureusement @Psoy il faudrait faire une issue côté Zigbee2mqtt pour ce device. En attendant y a peut-être moyen de te l’ajouter en mode bidouille si tu veux. Mais je ne sais pas ce que donnerons les maj de datas

image
Un oubli de leur part ?