Plugin Matterbridge para Magic Home y Gladys

¡Excelente! ¡Muy limpio :)!

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.

Matterbridge se lanza en un clic en Gladys:

Te confieso que había explorado esa posibilidad. Pero me encontré con varios problemas para activar IPv6 en mi red. Y también tengo servicios profesionales funcionando en mi casa, así que tengo un poco de miedo de liarlo todo.

Pero podría ser interesante explorarlo porque, de todos modos, aunque lo que he hecho funciona, está lejos de ser perfecto. Hay retraso, y si queremos empezar a cambiar los colores de varias cosas a la vez, eso plantea un problema.

En sí, si solo ejecutas Matterbridge en la misma máquina que Gladys, ni siquiera pasará por tu red, por lo que puedes « ignorar » la advertencia que dice que necesitas una interfaz ipv6. En mi opinión, funcionará de todos modos (no estoy seguro al 100%, pero por experiencia, funciona).

He creado un plugin Matterbridge personalizado para mis tiras LED Magic Home (5 controladores RGBWW expuestos en extendedColorLight). El encendido/apagado y el brillo funcionan perfectamente, pero los colores nunca se aplican.

Error en los registros de Gladys

ValidationDatatypeMismatchError/128: Se esperaba un número, se obtuvo un objeto.
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)

Causa identificada en matter.setValue.js línea ~160

await colorControl.moveToHueAndSaturation({
  hue: matterHue,
  saturation: matterSaturation,
  transitionTime: null,                    // ← debería ser 0
  optionsMask: { executeIfOff: true },     // ← objeto en lugar de un número (bitmap)
  optionsOverride: {},                     // ← objeto en lugar de 0
});

El optionsMask se pasa como objeto JS, pero ColorControl.moveToHueAndSaturation de la lib @matter/main espera un número (bitmap). El mismo patrón funciona para LevelControl.moveToLevel porque este cluster acepta objetos, pero  
ColorControl los rechaza.

Solución propuesta

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

Entorno

- Gladys v4 (imagen gladysassistant/gladys:v4)
- Matterbridge 3.6.1 (luligu/matterbridge:latest)
- Plugin personalizado matterbridge-magic-home con tipo de dispositivo extendedColorLight
- NAS Synology DS1520+, Docker, --network=host

¿Quieres que haga una nueva publicación ya que la integración ya no es la misma?

Me he permitido dividir la conversación para matterbridge y mantener el tutorial de MQTT limpio.

¡Muchísimas gracias!

¡Genial el plugin! ¿Lo has publicado en algún sitio?

Ah, a lo sumo puedes hacer una PR correctiva en Gladys (si está a tu alcance?)

Si no, puedo encargarme yo :slight_smile:

Puedo hacerlo, pero creo que sería mejor esperar a que el sistema de colores funcione en Matter y así poder publicar el plugin terminado.

Puedo mirar para hacer una PR, sí, pero solo lo he hecho una vez, y era diferente porque simplemente proponía un build para Windows en una aplicación.

Como lo sientas, y no dudes si tienes preguntas para crear un PR. Si no, yo me encargaré.

Vale, me lanzo :wink:

Gracias por la corrección @David-Digitis, está bien para mí, está fusionado y saldrá en la próxima versión de Gladys :slight_smile:

Parcheo en vivo en Gladys Assistant 4.72: