Si alguna vez quieres hacerlo más simple y permitir que otras personas utilicen esta integración, podrías escribir un pequeño plugin Matterbridge (con la ayuda de la IA, relativamente fácil), así este dispositivo se convertiría en Matter y, por lo tanto, compatible con Gladys (¡pero no solo con Gladys!)
El plugin es solo un simple archivo JS donde mapeas tus comandos LED Magic Home a un SDK Matter, y luego solo necesitas alojar el plugin en un repositorio Git para luego instalarlo en 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
Je peux mais je me dis que ce serait peut-être mieux d’attendre que le système des couleurs fonctionne dans Matter et puis comme ça je publie le plugin terminé.
Je peux regarder pour faire une PR, oui, mais je n’ai fait ça qu’une seule fois, et c’était différent parce que je proposais simplement un build pour Windows sur une application.