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.
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