Guest User

Qui génère le NodeId dans le cas de Matterbridge ?

a guest
Jun 23rd, 2026
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. La réponse dépend de ce qu’on entend par « Node ID » — dans Matterbridge, il y a en fait **plusieurs identifiants distincts**.
  2.  
  3. ## 1. Node ID Matter (protocole, `bigint`)
  4.  
  5. C’est l’identifiant du nœud sur un fabric Matter (ex. `116` dans les données de test). **Ni Matterbridge ni le plugin ne le génèrent.**
  6.  
  7. Il est **attribué par le commissioner** (Apple Home, Google Home, etc.) lors du **commissioning**, puis stocké par **matter.js** dans les credentials opérationnels. Matterbridge se contente de l’exposer via `fabricInformations` :
  8.  
  9. ```3337:3347:packages/core/src/matterbridge.ts
  10. private sanitizeFabricInformations(fabricInfo: ExposedFabricInformation[]): SanitizedExposedFabricInformation[] {
  11. return fabricInfo.map((info) => {
  12. return {
  13. fabricIndex: info.fabricIndex,
  14. fabricId: info.fabricId.toString(),
  15. nodeId: info.nodeId.toString(),
  16. rootNodeId: info.rootNodeId.toString(),
  17. // ...
  18. ```
  19.  
  20. **Cas particulier des appareils bridgés** : ils **n’ont pas leur propre Node ID Matter**. Ils partagent celui du bridge (ou du plugin en mode `childbridge`). Ce qui les distingue, c’est leur **numéro d’endpoint**.
  21.  
  22. En mode `server`, chaque appareil a son propre `ServerNode` et reçoit donc **son propre Node ID Matter** au moment du pairing.
  23.  
  24. ---
  25.  
  26. ## 2. `storeId` / `serverNode.id` (clé de stockage interne)
  27.  
  28. C’est un identifiant **texte** pour le stockage persistant (`"Matterbridge"`, nom du plugin, etc.). **C’est Matterbridge (le core) qui le choisit**, pas le plugin :
  29.  
  30. | Contexte | `storeId` |
  31. |---|---|
  32. | Bridge principal | `"Matterbridge"` |
  33. | Plugin dynamique / accessoire | `plugin.name` |
  34. | Mode `server` (appareil autonome) | `device.deviceName` sans espaces ni `.` |
  35.  
  36. ```2514:2524:packages/core/src/matterbridge.ts
  37. this.matterbridgeContext = await this.createServerNodeContext(
  38. 'Matterbridge',
  39. 'Matterbridge',
  40. // ...
  41. ```
  42.  
  43. ```1032:1040:packages/core/src/matterNode.ts
  44. this.matterStorageContext = await this.createServerNodeContext(
  45. device.deviceName.replace(/[ .]/g, ''),
  46. device.deviceName,
  47. // ...
  48. ```
  49.  
  50. Ce n’est **pas** le Node ID Matter du protocole.
  51.  
  52. ---
  53.  
  54. ## 3. `id` de l’endpoint (clé interne de l’appareil bridgé)
  55.  
  56. Le **plugin** le fournit en créant le `MatterbridgeEndpoint` :
  57.  
  58. ```typescript
  59. new MatterbridgeEndpoint(onOffLight, { id: 'MaLampe' })
  60. ```
  61.  
  62. Matterbridge **normalise** ensuite cet `id` :
  63. - suppression des espaces et des `.`
  64. - si caractères non latins → hash MD5 via `generateUniqueId()`
  65.  
  66. ```372:380:packages/core/src/matterbridgeEndpoint.ts
  67. if (options.id && checkNotLatinCharacters(options.id)) {
  68. options.id = generateUniqueId(options.id);
  69. // ...
  70. id: options.id?.replace(/[ .]/g, ''),
  71. ```
  72.  
  73. ---
  74.  
  75. ## 4. Numéro d’endpoint Matter
  76.  
  77. Le plugin peut le fixer via `options.number`. Sinon, **matter.js** assigne le prochain numéro disponible à l’ajout de l’endpoint. Matterbridge suit ces changements dans `checkEndpointNumbers()`.
  78.  
  79. ---
  80.  
  81. ## Synthèse
  82.  
  83. | Identifiant | Qui le définit ? |
  84. |---|---|
  85. | **Node ID Matter** (`bigint`) | Le **commissioner** (écosystème Matter), pas Matterbridge ni le plugin |
  86. | **`storeId`** du `ServerNode` | **Matterbridge** (core) |
  87. | **`id` de l’endpoint** | Le **plugin** (avec normalisation par Matterbridge) |
  88. | **Numéro d’endpoint** | Le **plugin** (optionnel) ou **matter.js** (auto) |
  89.  
  90. En pratique : pour un appareil bridgé classique, le plugin choisit l’`id` interne et éventuellement le numéro d’endpoint ; le **Node ID Matter** n’existe qu’au niveau du bridge/plugin parent et est fixé au pairing.
  91.  
  92.  
Advertisement
Add Comment
Please, Sign In to add comment