Plugin Matterbridge pour Magic Home et Gladys

Excellent ! Super propre :slight_smile:

Si jamais tu veux faire plus simple, et permettre à d’autres gens d’utiliser cette intégration, tu pourrais écrire un petit plugin Matterbridge (avec l’aide de l’IA, relativement facile), comme ça cet appareil deviendrait Matter, et donc compatible Gladys (mais pas que!)

Le plugin c’est juste un simple fichier JS où tu mappes tes commandes LED Magic Home à un SDK Matter, et ensuite il faut juste héberger le plugin sur un repo Git pour ensuite l’installer dans Matterbridge.

Matterbridge se lance en un clic dans Gladys :

Je t’avoue que j’avais exploré cette possibilité. Mais je me suis heurté à pas mal de problèmes pour activer l’IPv6 sur mon réseau. Et j’ai des services professionnels qui tournent chez moi aussi donc j’ai un peu peur de foutre le bordel.

mais ça peut être intéressant à explorer parce que de toute façon même si ce que j’ai fait fonctionne c’est loin d’être parfait. il y a du délai, et si on veut commencer à changer les couleurs de plusieurs choses à la fois, ça pose problème.

En soit, si tu fais juste tourner Matterbridge sur la même machine que Gladys, ça passera même pas sur ton réseau, donc tu peux « ignorer » le warning qui te dit que tu as besoin d’une interface ipv6, à mon avis ça marchera quand même (pas sûr à 100%, mais d’expérience ça marche)

J’ai créé un plugin Matterbridge custom pour mes bandeaux LED Magic Home (5 contrôleurs RGBWW exposés en extendedColorLight). Le on/off et la luminosité fonctionnent parfaitement, mais les couleurs ne passent jamais.

Erreur dans les logs Gladys

ValidationDatatypeMismatchError/128: Expected number, got object.
at TlvNumberSchema.validate (/src/server/services/matter/node_modules/@matter/types/src/tlv/TlvNumber.ts:110:19)
at ObjectSchema.validate (…)
at Object.ClusterClient.commands. [as moveToHueAndSaturation]
at MatterHandler.setValue (/src/server/services/matter/lib/matter.setValue.js:160:24)

Cause identifiée dans matter.setValue.js ligne ~160

await colorControl.moveToHueAndSaturation({
  hue: matterHue,
  saturation: matterSaturation,
  transitionTime: null,                    // ← devrait être 0
  optionsMask: { executeIfOff: true },     // ← objet au lieu d'un nombre (bitmap)
  optionsOverride: {},                     // ← objet au lieu de 0
});

Le optionsMask est passé comme objet JS, mais ColorControl.moveToHueAndSaturation de la lib @matter/main attend un nombre (bitmap). Le même pattern fonctionne pour LevelControl.moveToLevel parce que ce cluster accepte les objets, mais  
ColorControl les refuse.

Fix proposé

await colorControl.moveToHueAndSaturation({
  hue: matterHue,
  saturation: matterSaturation,
  transitionTime: 0,
  optionsMask: 1,
  optionsOverride: 0,
});

Environnement

- Gladys v4 (image gladysassistant/gladys:v4)
- Matterbridge 3.6.1 (luligu/matterbridge:latest)
- Plugin custom matterbridge-magic-home avec device type extendedColorLight
- NAS Synology DS1520+, Docker, --network=host

Tu veux que je fasse un nouveau poste vu que ce n’est plus vraiment la même intégration ?

Je me suis permis de splitter la conversation pour matterbridge et garder le tuto MQTT propre.

Top merci !