Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- La réponse courte : **pas systématiquement**. Ça dépend surtout de **comment** le plugin est désinstallé, et si le **stockage Matter** est conservé.
- ## Comment le numéro d'endpoint est persisté
- Le numéro d'endpoint Matter est géré par **matter.js**, pas directement par le plugin. Il est stocké dans le **matter storage** (`~/.matterbridge/matterstorage/`), indexé par l’`id` de l’endpoint (la clé passée au constructeur `MatterbridgeEndpoint`).
- Matterbridge garde aussi une carte `uniqueId → numéro` dans le stockage du plugin (`checkEndpointNumbers()`), mais c’est **uniquement pour le suivi et les logs** — ce n’est pas ce mécanisme qui restaure les numéros.
- ## Les deux flux de désinstallation ne se comportent pas pareil
- ### 1. Désinstallation npm (`/api/uninstall`)
- ```414:422:packages/core/src/pluginManager.ts
- if (msg.result?.packageCommand === 'uninstall') {
- // ...
- if (plugin?.loaded) await this.shutdown(plugin, 'Matterbridge is uninstalling the plugin');
- await this.remove(msg.result.packageName);
- ```
- Ici, `shutdown` est appelé **sans** `removeAllDevices`. Les endpoints **ne sont pas supprimés** de l’aggregator Matter (`device.delete()` n’est pas appelé). Le matter storage reste sur disque.
- Après redémarrage de Matterbridge + réinstallation du plugin :
- - si le plugin recrée les appareils avec le **même `id`** d’endpoint → matter.js retrouve l’entrée en storage → **le numéro d’endpoint est en principe conservé** ;
- - si l’`id` change (ou est absent / instable) → **nouveau numéro**.
- ### 2. Suppression du plugin dans l’UI (`/api/removeplugin`) ou désactivation
- ```1797:1801:packages/core/src/frontend.ts
- await this.server.fetch({ type: 'plugins_shutdown', src: this.server.name, dst: 'plugins', params: { plugin: data.params.pluginName, reason: 'The plugin has been removed.', removeAllDevices: true, force: true } }, this.serverFetchTimeout);
- // ...
- await this.server.fetch({ type: 'plugins_remove', src: this.server.name, dst: 'plugins', params: { nameOrPath: data.params.pluginName } }, this.serverFetchTimeout);
- ```
- Ici, `removeAllDevices: true` appelle `removeAllBridgedEndpoints` → `device.delete()`, ce qui **efface l’endpoint du stockage Matter**. Au prochain ajout, matter.js attribue en général un **nouveau numéro**, même si l’`id` est identique.
- ## Et le re-pairing du bridge Matter (Apple Home, etc.) ?
- Re-appairer le bridge **sans** reset Matterbridge :
- - le **Node ID Matter** peut changer (attribué par le commissioner) ;
- - les **numéros d’endpoint** restent dans le matter storage → **inchangés** en principe.
- En revanche, un **factory reset** ou un reset commissioning Matterbridge efface le matter storage :
- ```1731:1757:packages/core/src/matterbridge.ts
- if (message === 'shutting down with reset...') {
- // ...
- await this.matterbridgeContext?.clearAll();
- // ... clearAll sur fabrics, root, sessions ...
- ```
- → tous les numéros d’endpoint sont **réattribués** au prochain démarrage.
- ## Ce que le plugin doit garantir pour la stabilité
- Le `uniqueId` est dérivé de `deviceName + serialNumber + vendorName + productName` :
- ```2080:2080:packages/core/src/matterbridgeEndpoint.ts
- this.uniqueId = createUniqueId(deviceName, serialNumber, vendorName, productName);
- ```
- Pour matter.js, c’est surtout l’**`id`** de l’endpoint qui compte. Le plugin devrait donc :
- - utiliser un **`id` stable** par appareil physique (ID hub, entité, MAC, etc.) ;
- - utiliser un **`serialNumber` stable** pour le même appareil.
- Si le plugin régénère un `serialNumber` ou un `id` à chaque démarrage, le numéro d’endpoint peut changer même si le matter storage est intact.
- ## Synthèse pratique
- | Scénario | Numéro d’endpoint change ? |
- |---|---|
- | Désinstall npm + redémarrage + réinstall, même `id`, pas de reset | **Non** (en principe) |
- | Suppression/désactivation plugin (`removeAllDevices`) | **Oui** (très probablement) |
- | Factory reset / reset commissioning Matterbridge | **Oui** |
- | Re-pairing du bridge seul (sans reset Matterbridge) | **Non** |
- | Plugin qui change l’`id` ou le `serialNumber` | **Oui** |
- En pratique, le cycle **installer → désinstaller (npm) → redémarrer → réinstaller → re-appairer le même appareil dans le plugin** peut conserver les numéros d’endpoint, **à condition** que le matter storage n’ait pas été effacé et que le plugin utilise des identifiants stables. En revanche, si l’utilisateur **supprime** le plugin depuis l’UI (ou fait un reset), les numéros repartent très probablement de zéro.
Advertisement