Guest User

Est-ce que le numéro d'endpoint change à la réinstallation d'un plugin ?

a guest
Jun 23rd, 2026
25
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. 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é.
  2.  
  3. ## Comment le numéro d'endpoint est persisté
  4.  
  5. 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`).
  6.  
  7. 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.
  8.  
  9. ## Les deux flux de désinstallation ne se comportent pas pareil
  10.  
  11. ### 1. Désinstallation npm (`/api/uninstall`)
  12.  
  13. ```414:422:packages/core/src/pluginManager.ts
  14. if (msg.result?.packageCommand === 'uninstall') {
  15. // ...
  16. if (plugin?.loaded) await this.shutdown(plugin, 'Matterbridge is uninstalling the plugin');
  17. await this.remove(msg.result.packageName);
  18. ```
  19.  
  20. 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.
  21.  
  22. Après redémarrage de Matterbridge + réinstallation du plugin :
  23. - 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é** ;
  24. - si l’`id` change (ou est absent / instable) → **nouveau numéro**.
  25.  
  26. ### 2. Suppression du plugin dans l’UI (`/api/removeplugin`) ou désactivation
  27.  
  28. ```1797:1801:packages/core/src/frontend.ts
  29. 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);
  30. // ...
  31. await this.server.fetch({ type: 'plugins_remove', src: this.server.name, dst: 'plugins', params: { nameOrPath: data.params.pluginName } }, this.serverFetchTimeout);
  32. ```
  33.  
  34. 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.
  35.  
  36. ## Et le re-pairing du bridge Matter (Apple Home, etc.) ?
  37.  
  38. Re-appairer le bridge **sans** reset Matterbridge :
  39. - le **Node ID Matter** peut changer (attribué par le commissioner) ;
  40. - les **numéros d’endpoint** restent dans le matter storage → **inchangés** en principe.
  41.  
  42. En revanche, un **factory reset** ou un reset commissioning Matterbridge efface le matter storage :
  43.  
  44. ```1731:1757:packages/core/src/matterbridge.ts
  45. if (message === 'shutting down with reset...') {
  46. // ...
  47. await this.matterbridgeContext?.clearAll();
  48. // ... clearAll sur fabrics, root, sessions ...
  49. ```
  50.  
  51. → tous les numéros d’endpoint sont **réattribués** au prochain démarrage.
  52.  
  53. ## Ce que le plugin doit garantir pour la stabilité
  54.  
  55. Le `uniqueId` est dérivé de `deviceName + serialNumber + vendorName + productName` :
  56.  
  57. ```2080:2080:packages/core/src/matterbridgeEndpoint.ts
  58. this.uniqueId = createUniqueId(deviceName, serialNumber, vendorName, productName);
  59. ```
  60.  
  61. Pour matter.js, c’est surtout l’**`id`** de l’endpoint qui compte. Le plugin devrait donc :
  62. - utiliser un **`id` stable** par appareil physique (ID hub, entité, MAC, etc.) ;
  63. - utiliser un **`serialNumber` stable** pour le même appareil.
  64.  
  65. 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.
  66.  
  67. ## Synthèse pratique
  68.  
  69. | Scénario | Numéro d’endpoint change ? |
  70. |---|---|
  71. | Désinstall npm + redémarrage + réinstall, même `id`, pas de reset | **Non** (en principe) |
  72. | Suppression/désactivation plugin (`removeAllDevices`) | **Oui** (très probablement) |
  73. | Factory reset / reset commissioning Matterbridge | **Oui** |
  74. | Re-pairing du bridge seul (sans reset Matterbridge) | **Non** |
  75. | Plugin qui change l’`id` ou le `serialNumber` | **Oui** |
  76.  
  77. 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
Comments
  • User was banned
  • User was banned
Add Comment
Please, Sign In to add comment