¡Pensándolo bien, tú que tienes unos cuantos Shelly, una integración de Shelly también sería genial!! ![]()
Es cierto que los gestiono todos bajo node red en este caso
Bien visto, hay mucho que hacer ^^ Empiezo a tener una pequeña gama ^^
Edición:
@pierre-gilles y para Tuya, ¿qué hacemos? Veo que te pido mucho para estas PR desde enero…
¿Podría entrar en este formato?
Para mí, Tuya es un candidato perfecto para las integraciones externas. Veo que hoy soy un cuello de botella, cuando podríamos avanzar mucho más rápido si pudieras desarrollar de manera autónoma. ![]()
Creo que puedes pedirle a Claude que lleve el trabajo que ya has hecho al nuevo formato de integraciones externas. Normalmente, esta V1 cubre todo lo que Tuya necesita. Si identificas una limitación, dime y la haremos evolucionar.
Lo mismo para Netatmo, por cierto. ![]()
Y si, a medida que avanzas en el desarrollo, te das cuenta de que faltan componentes de interfaz, APIs o cualquier capacidad, avísame. Mi objetivo es que las integraciones externas puedan hacer exactamente lo mismo que una integración interna.
Al final, es toda la filosofía de esta arquitectura: hoy el proyecto avanza de manera bastante lineal porque muchas cosas pasan por mí. Quiero que Gladys pueda finalmente aprovechar el poder del colectivo y que su desarrollo se vuelva exponencial en lugar de lineal.
Todavía no había dado mi opinión, aunque seguía el tema muy de cerca.
Me parece una excelente idea y, sobre todo, que todo esté tan bien delimitado.
Se parece a HA, se parece a Jeedom, pero es Gladys de verdad.
El hecho de que no se pueda modificar el frontend es realmente la base y es un excelente freno a los desarrollos que se descontrolan y son difíciles de mantener.
Bueno, es un no desarrollador quien lo dice, pero soy de los que prefieren blindar desde el principio para tener siempre algo funcional después.
Dicho esto, no estoy seguro de haberlo entendido todo a nivel de desarrollo: ¿funcionará como la fábrica de plugins matterbridge?
¿Podrá un no desarrollador hacer que se desarrolle automáticamente un plugin?
Me gustaría desarrollar un MELCloud Home además del MELCloud clásico que intenté hacer con la fábrica. Desafortunadamente, faltan cosas en Matter para gestionar todo en este climatizador, por ejemplo.
También tengo Onkyo y MarantzDenon (para la música), Ecovacs (robot cortacésped), Freebox, y ¿por qué no un watchdog de VM/LXC/docker/ordenador/servidores que pensaba hacer con la integración LAN Manager (que solo hace la presencia).
Eso es todo por mi parte por ahora ![]()
A largo plazo, podríamos imaginar una fábrica de integraciones, pero por ahora el objetivo principal es reducir drásticamente la barrera de entrada para el desarrollo de integraciones y, sobre todo, permitir la publicación de integraciones sin que yo tenga que revisarlas.
La idea es hacer que el proceso sea tan sencillo y accesible que cualquier desarrollador del proyecto pueda crear integraciones rápidamente, sin fricciones, y así multiplicar naturalmente el número de integraciones disponibles.
Si estás motivado para ayudar, incluso sin ser desarrollador, podrás ayudarnos desde el principio, solo necesitas una cuenta de GitHub y un Claude/Cursor ![]()
@Terdious he pedido a Fable que me haga un análisis de los puntos faltantes para migrar netatmo y Tuya a integraciones externas:
Voy a hacer evolucionar la especificación y la implementación.
Los puntos faltantes — cuatro, uno de ellos bloqueante
1. Autorización OAuth2 authorization-code: bloqueante para Netatmo. El flujo principal (netatmo.retrieveTokens) es controlado por el frontend: construye la URL de autorización, el usuario da su consentimiento en netatmo.com, es redirigido al frontend de Gladys que devuelve {codeOAuth, state, redirectUri} al servicio. Sin embargo, la pantalla de Configuración generada no tiene ni botón « Conectar », ni ruta de callback, ni canal para transmitir el código a la integración. Sería necesario: un tipo de campo oauth2 en el config_schema (renderizado = botón), una ruta de callback genérica del frontend, y dos relays servidor→integración (« dame tu URL de autorización » y « aquí tienes el código ») — la integración intercambia luego los tokens ella misma y los guarda en la configuración fuera del esquema.
2. command-result no transporta datos. El acuse de recibo solo lleva success/error. El punto 1 exige que la integración responda algo (la URL de autorización), y los comandos futuros también (camera.get-image…). Falta un campo data opcional en command-result — extensión trivial, retrocompatible, pero mejor fijarlo en los contratos v1 ahora.
3. El estado de la aplicación es invisible. Netatmo core muestra « Processing token », « Disconnected », « token expirado, reconectarse ». Nuestra máquina de estados solo ve la salud del contenedor: una integración Netatmo cuyo refresh token muere sería RUNNING (WS conectado) pero rota en silencio. Falta un pequeño POST /api/integration/v1/connection_status { connected, message: {en, fr} } mostrado en la pantalla de Configuración.
4. Descubrimiento local broadcast (modo local de Tuya). tuya.localScan escucha broadcasts UDP LAN (puertos 6666/6667/7000) — un contenedor en bridge no los recibe (los broadcasts no atraviesan el NAT de Docker; el core solo se salva porque está en network=host). El escaneo local unicast hacia una IP conocida atraviesa el NAT, por lo que el modo local seguiría siendo parcialmente posible (IPs obtenidas a través de la nube), pero no el escaneo broadcast — es exactamente el « descubrimiento mediado » ya previsto en la fase 2, confirmado como necesario por este caso.
Nueva especificación: https://github.com/GladysAssistant/Gladys/blob/claude/focused-turing-q9vf41/PLAN_INTEGRATIONS_EXTERNES.md
El núcleo + el SDK en curso de implementación…
Ok, casi todo ha sido implementado por Fable:
- [no probado] SDK JS con el ámbito faltante para Tuya/Netatmo/Frigate: feat: add OAuth2 relay, connection status and sub-container lifecycle (spec C.8 update) by Pierre-Gilles · Pull Request #5 · GladysAssistant/integration-sdk-js · GitHub
- [probado] PR Gladys « base » que probé esta semana: External integrations (RFC phase 1): Docker supervisor, host API, integration WebSocket, decentralized store and generic frontend by Pierre-Gilles · Pull Request #2665 · GladysAssistant/Gladys · GitHub
- [no probado] PR Gladys « subcontainers » para Frigate: External integrations phase 2 : sous-conteneurs, réseau privé et accès matériel by Pierre-Gilles · Pull Request #2677 · GladysAssistant/Gladys · GitHub
- [no probado] PR Gladys « Comunicación » para Telegram, etc…: External integrations phase 2 : type « communication » (canaux de messagerie) by Pierre-Gilles · Pull Request #2678 · GladysAssistant/Gladys · GitHub
- [no probado] PR Gladys « Tuya/Netatmo »: External integrations: OAuth2, connection status, mediated discovery and field feedback (Netatmo/Tuya cases) by Pierre-Gilles · Pull Request #2680 · GladysAssistant/Gladys · GitHub
Las palabras de Claude
:
Por lo tanto, en efecto, para Tuya es indispensable.
¿Necesitas que lo pruebe? ¿Cómo? ^^
El único punto negro visible es que sin escaneo UDP, el usuario debe ingresar todas las direcciones IP de sus dispositivos. Un menor inconveniente, pero lamentable en comparación con hoy ![]()
¡Pensé que Claude lo había hecho delgado! Lo voy a volver a contactar
Para las pruebas, retomo el lunes, después si quieres probar tus desarrollos contra los PR que he hecho, puedes ![]()
Sigo el tema un poco de lejos, pero es realmente una buena idea ![]()
Por otro lado, ¿no hay riesgo de que esto pueda solaparse con la matterbridge-ai-plugin-factory si podemos desarrollar plugins como en este último, pero directamente integrados en Gladys?
Me encantaría tener un plugin de Daikin y Overkiz en las integraciones externas, si es posible ![]()
Gracias
@terdious ¡Genial!
La especificación, Gladys y el SDK están actualizados con el escaneo de red integrado, por lo que normalmente tienes todo lo que necesitas para Tuya. Todavía no he probado nada por mi parte, retomaré el tema el lunes.
@prohand Esto claramente compite con Matterbridge, pero la ventaja aquí es que está directamente integrado en Gladys, por lo que es más fácil de implementar y mantener. Creo que los dos tienen su lugar: cada uno tiene sus puntos fuertes y sus limitaciones, y siempre es bueno tener un poco de competencia. ![]()
Hoy me hacía más o menos la misma pregunta, pero al releer las solicitudes de funciones, me encontré con una solicitud de un plugin « precios de los combustibles ».
Y para este tipo de cosas, creo que estamos (o al menos eso me parece) justo en lo que se supone que debe hacer una integración externa, mientras que el plugin Matterbridge no es útil en este caso.
¿Tengo razón?
Completamente ![]()
Prueba Tuya, Integración externa vs Integración principal:
Jajaja, en los logs ^^ :
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "child_lock" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "unix_time" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "log_server_url" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "log_server_port" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "dev_token" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "hydraulic_pressure" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "temp_mode_flag" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "program_num" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "irri_instant_flow" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "soft_ver" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "dev_state" no está gestionada
[2026-07-18T23:59:11.547Z] [WARN] [tuya] La función Tuya con el código "app_features" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "temp_current" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "heat" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "light" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "countdown_left" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "sleep" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "health" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "windspeed" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "mode_ECO" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "mode_dry" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "windshake" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "Fault" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "Countdown" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "use_number" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "total_time" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "electricity" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "electricity_number" no está gestionada
[2026-07-18T23:59:11.548Z] [WARN] [tuya] La función Tuya con el código "unit" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "horizontal" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "vertical" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "swing3d" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "clean" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "type" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "fault2" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "current_mode" no está gestionada
[2026-07-18T23:59:11.549Z] [WARN] [tuya] La función Tuya con el código "heat8" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "fan_speed_enum" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "eco" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "drying" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "cleaning" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "temp_unit_convert" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "temp_current" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "heat" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "light" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "countdown_left" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "sleep" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "health" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "windspeed" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "mode_ECO" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "mode_dry" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "windshake" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "Fault" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "Countdown" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "use_number" no está gestionada
[2026-07-18T23:59:11.550Z] [WARN] [tuya] La función Tuya con el código "total_time" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "electricity" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "electricity_number" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "unit" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "horizontal" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "vertical" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "swing3d" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "clean" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "type" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "fault2" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "current_mode" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "heat8" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "temp_current" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "heat" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "light" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "countdown_left" no está gestionada
[2026-07-18T23:59:11.551Z] [WARN] [tuya] La función Tuya con el código "sleep" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "health" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "windspeed" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "mode_ECO" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "mode_dry" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "windshake" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "Fault" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "Countdown" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "use_number" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "total_time" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "electricity" no está gestionada
```[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "electricity_number" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "unit" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "horizontal" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "vertical" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "swing3d" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "clean" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "type" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "fault2" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "current_mode" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "heat8" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "child_lock" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_1" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_2" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_3" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_4" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_5" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_6" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "week_program_7" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "vacation_duration" no está gestionada
[2026-07-18T23:59:11.552Z] [WARN] [tuya] La función Tuya con el código "boost_duration" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "electricity_statistics" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "elec_statistics_day" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "elec_statistics_month" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "elec_statistics_year" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_current" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "average_power" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_correction" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "fault" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "air_pressure_index" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "support_features" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "window_check" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "window_state" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "window_keep_time" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_unit_convert" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "app_features" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "switch_diff" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "upper_temp" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "lower_temp" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "running_mode" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "night_led_config" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "ecowatt_url" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "fan_speed_enum" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "eco" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "drying" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "cleaning" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_unit_convert" no está gestionada
[2026-07-18T23:59:11.553Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "temp_current" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "heat" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "light" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "countdown_left" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "sleep" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "health" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "windspeed" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "mode_ECO" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "mode_dry" no está gestionada
[2026-07-18T23:59:11.554Z] [WARN] [tuya] La función Tuya con el código "windshake" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "Fault" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "Countdown" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "use_number" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "total_time" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "electricity" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "electricity_number" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "unit" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "horizontal" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "vertical" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "swing3d" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "clean" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "type" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "fault2" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "current_mode" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "heat8" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "mode" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "temp_set" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "timer_switch" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "travel_switch" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "cur_mode" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "travel_time" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "week_data" no está gestionada
[2026-07-18T23:59:11.555Z] [WARN] [tuya] La función Tuya con el código "lock_switch" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "VoltageA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "CurrentA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ActivePowerA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "PowerFactorA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ReactivePowerA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "EnergyConsumedA" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "VoltageB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "CurrentB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ActivePowerB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "PowerFactorB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ReactivePowerB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "EnergyConsumedB" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "VoltageC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "CurrentC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ActivePowerC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "PowerFactorC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ReactivePowerC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "EnergyConsumedC" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "EnergyConsumed" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "Current" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ActivePower" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "ReactivePower" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "Frequency" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "Temperature" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "DeviceStatus" no está gestionada
[2026-07-18T23:59:11.556Z] [WARN] [tuya] La función Tuya con el código "voltage_phase_seq" no está gestionada
[2026-07-18T23:59:12.193Z] [INFO] onScanRequest -> descubriendo dispositivos Tuya
[2026-07-18T23:59:12.333Z] [INFO] [tuya] 10 dispositivos Tuya encontrados
[2026-07-18T23:59:13.233Z] [INFO] [tuya] [Tuya][localScan] Iniciando escaneo de difusión UDP mediada durante 10s
Ahora intentaremos avanzar ^^
Tenga en cuenta que para la prueba, tomé tus ramas en desarrollo que ejecuté localmente en modo desarrollo (fuera del contenedor).
Después de algunos problemas con:
- el manifiesto (descripción en/fr demasiado larga, Fable dice que no está explicado)
- la integración del SDK, pude descargar la imagen tuya de mi rama
test-e2e-sdk-pr5:ghcr.io/terdious/gladys-tuya:dev
No tengo nada en el menú de descubrimiento. Pero en los registros, creo ver el problema:
2026-07-19T01:54:32+0200 <debug> externalIntegration.saveStatus.js:15 (ExternalIntegration.saveStatus) External integration ext-dev-tuya: status LOADING
2026-07-19T01:54:32+0200 <debug> gateway.forwardWebsockets.js:14 (Gateway.forwardWebsockets) Gateway: not connected. Prevent forwarding event.
2026-07-19T01:54:33+0200 <info> externalIntegration.integrationConnected.js:19 (ExternalIntegration.integrationConnected) External integration ext-dev-tuya connected in websocket
2026-07-19T01:54:33+0200 <debug> externalIntegration.saveStatus.js:15 (ExternalIntegration.saveStatus) External integration ext-dev-tuya: status RUNNING
2026-07-19T01:54:33+0200 <debug> gateway.forwardWebsockets.js:14 (Gateway.forwardWebsockets) Gateway: not connected. Prevent forwarding event.
2026-07-19T01:55:00+0200 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Sat, 18 Jul 2026 23:55:00 GMT
2026-07-19T01:55:13+0200 <debug> lan-manager.scanPresence.js:25 (LANManager.scanPresence) LANManager: 0 presence sensor features
2026-07-19T01:56:00+0200 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Sat, 18 Jul 2026 23:56:00 GMT
2026-07-19T01:57:00+0200 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Sat, 18 Jul 2026 23:57:00 GMT
2026-07-19T01:57:13+0200 <debug> lan-manager.scanPresence.js:25 (LANManager.scanPresence) LANManager: 0 presence sensor features
2026-07-19T01:58:00+0200 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Sat, 18 Jul 2026 23:58:00 GMT
2026-07-19T01:58:40+0200 <debug> errorMiddleware.js:26 (errorMiddleware) BadParameters [Error]: devices[0].poll_frequency: invalid poll frequency
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/lib/external-integration/externalIntegration.setDiscoveredDevices.js:43:13
at Array.map (<anonymous>)
at ExternalIntegration.setDiscoveredDevices (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/lib/external-integration/externalIntegration.setDiscoveredDevices.js:32:37)
at publishDiscoveredDevices (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/controllers/integrationHost.controller.js:64:46)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:26
From previous event:
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:18
at Layer.handle [as handle_request] (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/layer.js:95:5)
at next (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/route.js:144:13)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/externalIntegrationAuthMiddleware.js:30:5
2026-07-19T01:59:00+0200 <debug> scene.checkCalendarTriggers.js:25 (SceneManager.checkCalendarTriggers) Checking calendar triggers at Sat, 18 Jul 2026 23:59:00 GMT
2026-07-19T01:59:02+0200 <debug> errorMiddleware.js:26 (errorMiddleware) ConflictError: EXTERNAL_INTEGRATION_SCAN_ALREADY_RUNNING
at ExternalIntegration.runNetworkDiscoveryScan (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/lib/external-integration/networkDiscovery/networkDiscovery.runScan.js:47:11)
at networkDiscoveryScan (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/controllers/integrationHost.controller.js:104:54)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:26
From previous event:
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:18
at Layer.handle [as handle_request] (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/layer.js:95:5)
at next (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/route.js:144:13)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/externalIntegrationAuthMiddleware.js:30:5
2026-07-19T01:59:02+0200 <debug> errorMiddleware.js:26 (errorMiddleware) BadParameters [Error]: devices[0].poll_frequency: invalid poll frequency
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/lib/external-integration/externalIntegration.setDiscoveredDevices.js:43:13
at Array.map (<anonymous>)
at ExternalIntegration.setDiscoveredDevices (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/lib/external-integration/externalIntegration.setDiscoveredDevices.js:32:37)
at publishDiscoveredDevices (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/controllers/integrationHost.controller.js:64:46)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:26
From previous event:
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/asyncMiddleware.js:4:18
at Layer.handle [as handle_request] (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/layer.js:95:5)
at next (/home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/node_modules/express/lib/router/route.js:144:13)
at /home/gladys/GladysDev/gladys-external-integration-test/Gladys/server/api/middlewares/externalIntegrationAuthMiddleware.js:30:5
Después de los parches, funciona
![]()
Pero no hay localización, ya que hay que declarar la dirección IP en el dispositivo junto con la versión del protocolo (la versión principal de Tuya escanea los diferentes protocolos para determinar el correcto una vez introducida la IP):
Pero bueno, por ahora funciona a medias (comando OK, estado de retorno KO).
Continuará ^^
Algunas observaciones:
-
salvo error por mi parte, en desarrollo, ¿no sería posible actualizar la imagen de manera más sencilla, especialmente cuando el manifiesto no cambia?
Y, en el caso de estar en una etiqueta de desarrollo, ¿no sería posible modificar el manifiesto directamente desde la configuración. -
No se pueden marcar las integraciones externas como favoritas
-
Sería genial poder filtrar las integraciones externas













