Il me semblait bien… ![]()
tu m’avais annoncé ce mon distributeur devait exposer.
Ton F14-W devrait alors exposer :
• Distribuer — un bouton qui donne une portion (utilisable dans une scène,
par exemple tous les jours à 8h)
• Dernière quantité distribuée
• Distribution lente
• Voyant
• Batterie
Je pense que tu n’a pas vu mon retour.
Le distributeur n’expose pas tout se qu’il devrait, seulement le bouton de distribution.
Pour se que tu m’a demandé j’ai trouvé ça.
[2026-08-05T18:08:07.095Z] [INFO] [tuya] [Tuya][poll][local] device=bf15bc151aba2c
Bonjour !
J’ai un souci avec l’action ‹ sonnette sonne ›.
L’action apparaît bien, bien détectée mais la scène ne se déclenche pas…
Pourtant, ça a fonctionné !
Rien de spécial dans les logs. J’ai l’impression que c’est plutôt côté core…
[2026-09-03T16:26:54.376Z] [INFO] [tuya] [Tuya][push] device=bf8a5bf8acc4540a41rere local push published 1 change(s)
[2026-09-03T16:26:54.414Z] [INFO] [tuya] [Tuya][push] device=bf8a5bf8acc4540a41rere local push published 1 change(s)
[2026-09-03T16:26:54.520Z] [INFO] [tuya] [Tuya][push] device=bf8a5bf8acc4540a41rere local push published 1 change(s)
[2026-09-03T16:26:54.718Z] [INFO] [tuya] [Tuya][push] device=bf8a5bf8acc4540a41rere local push published 1 change(s)
[2026-09-03T16:26:55.913Z] [INFO] [tuya] [Tuya][media] doorbell_pic event fired (device=ext:ext-terdious-gladys-tuya:device:bf0e59548489fcb4ea62of)
[2026-09-03T16:26:57.110Z] [INFO] [tuya] [Tuya][media] doorbell_pic snapshot published (device=ext:ext-terdious-gladys-tuya:device:bf0e59548489fcb4ea62of)
Édit :
2026-09-03T18:26:54+0200 <error> device.poll.js:30 (DeviceManager.poll) There was an error while polling device production-solaire-bf8a5bf8acc4540a41rere
2026-09-03T18:26:54+0200 <error> device.poll.js:31 (DeviceManager.poll) ExternalIntegrationUnavailableError: EXTERNAL_INTEGRATION_COMMAND_TIMEOUT
at Timeout._onTimeout (/src/server/lib/external-integration/externalIntegration.sendCommand.js:32:14)
at listOnTimeout (node:internal/timers:685:17)
at processTimers (node:internal/timers:618:7)
2026-09-03T18:26:55+0200 <warn> scene.executeActions.js:47 (executeAction) ExternalIntegrationUnavailableError: No Tuya snapshot available yet (it updates on a ring or a motion event)
at ExternalIntegration.handleCommandResult (/src/server/lib/external-integration/externalIntegration.handleCommandResult.js:29:7)
at WebSocket.<anonymous> (/src/server/api/websockets/index.js:161:45)
at WebSocket.emit (node:events:514:28)
at Receiver.receiverOnMessage (/src/server/node_modules/ws/lib/websocket.js:807:20)
at Receiver.emit (node:events:514:28)
at Receiver.dataMessage (/src/server/node_modules/ws/lib/receiver.js:448:14)
at Receiver.getData (/src/server/node_modules/ws/lib/receiver.js:377:17)
at Receiver.startLoop (/src/server/node_modules/ws/lib/receiver.js:158:22)
at Receiver._write (/src/server/node_modules/ws/lib/receiver.js:94:10)
at writeOrBuffer (node:internal/streams/writable:574:12)
at _write (node:internal/streams/writable:503:10)
at Receiver.Writable.write (node:internal/streams/writable:512:10)
at Socket.socketOnData (/src/server/node_modules/ws/lib/websocket.js:882:35)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:567:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:518:3)
at Socket.Readable.push (node:internal/streams/readable:398:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
2026-09-03T18:26:55+0200 <warn> scene.executeActions.js:47 (executeAction) ExternalIntegrationUnavailableError: No Tuya snapshot available yet (it updates on a ring or a motion event)
at ExternalIntegration.handleCommandResult (/src/server/lib/external-integration/externalIntegration.handleCommandResult.js:29:7)
at WebSocket.<anonymous> (/src/server/api/websockets/index.js:161:45)
at WebSocket.emit (node:events:514:28)
at Receiver.receiverOnMessage (/src/server/node_modules/ws/lib/websocket.js:807:20)
at Receiver.emit (node:events:514:28)
at Receiver.dataMessage (/src/server/node_modules/ws/lib/receiver.js:448:14)
at Receiver.getData (/src/server/node_modules/ws/lib/receiver.js:377:17)
at Receiver.startLoop (/src/server/node_modules/ws/lib/receiver.js:158:22)
at Receiver._write (/src/server/node_modules/ws/lib/receiver.js:94:10)
at writeOrBuffer (node:internal/streams/writable:574:12)
at _write (node:internal/streams/writable:503:10)
at Receiver.Writable.write (node:internal/streams/writable:512:10)
at Socket.socketOnData (/src/server/node_modules/ws/lib/websocket.js:882:35)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:567:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:518:3)
at Socket.Readable.push (node:internal/streams/readable:398:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
2026-09-03T18:26:55+0200 <warn> scene.executeActions.js:47 (executeAction) ExternalIntegrationUnavailableError: No Tuya snapshot available yet (it updates on a ring or a motion event)
at ExternalIntegration.handleCommandResult (/src/server/lib/external-integration/externalIntegration.handleCommandResult.js:29:7)
at WebSocket.<anonymous> (/src/server/api/websockets/index.js:161:45)
at WebSocket.emit (node:events:514:28)
at Receiver.receiverOnMessage (/src/server/node_modules/ws/lib/websocket.js:807:20)
at Receiver.emit (node:events:514:28)
at Receiver.dataMessage (/src/server/node_modules/ws/lib/receiver.js:448:14)
at Receiver.getData (/src/server/node_modules/ws/lib/receiver.js:377:17)
at Receiver.startLoop (/src/server/node_modules/ws/lib/receiver.js:158:22)
at Receiver._write (/src/server/node_modules/ws/lib/receiver.js:94:10)
at writeOrBuffer (node:internal/streams/writable:574:12)
at _write (node:internal/streams/writable:503:10)
at Receiver.Writable.write (node:internal/streams/writable:512:10)
at Socket.socketOnData (/src/server/node_modules/ws/lib/websocket.js:882:35)
at Socket.emit (node:events:514:28)
at addChunk (node:internal/streams/readable:567:12)
at readableAddChunkPushByteMode (node:internal/streams/readable:518:3)
at Socket.Readable.push (node:internal/streams/readable:398:5)
at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
Donc, si, il y a dans les logs le fait que j’envoie trois fois le snapshot et qu’il n’existe pas… Enfin, pas encore ?
Édit 2 : Je suis con… J’ai configuré l’intégration telegram externe et ça ne s’est pas modifié dans la scène qui envoyait donc le message via une voix/voie inexistante…
Salut @elfedagger, désolé pour le délai.
En effet je n’ai pas vu ton retour précédent.
Ton distributeur n’expose probablement pas les mêmes codes Tuya que le modèle sur lequel je me suis basé. J’esperais que ce serait mieux que ça, desolé.
La 1.13.1 est sortie ce matin (mets à jour depuis le store d’ici une heure), mais elle ne créera pas de feature en plus par elle-même. Pour que je corrige le mapping pour ton modèle, j’ai besoin de deux lignes de log de l’intégration, après une mise à jour puis un scan dans Découverte :
la ligne qui commence par [Tuya][discovery] « F14-W » (elle indique features=1 et la liste UNMANAGED=[…] des codes que je ne gère pas encore) ;
la ligne complète [Tuya][poll][local] device=… DPS snapshot: … (celle que tu as envoyée est coupée après l’identifiant).
Envoie-les sans la clé locale ni ton IP si elles apparaissent à côté. Avec ça je tente de sortir une version corrigée dans la foulée.
Salut @GBoulvin,
Bah mince !! Desolé, alors je suis etonné du delire, Claude tente un truc mais pas sûr que ca arrange… je te transmet son message ![]()
Merci pour les logs, ils disent tout, et non, ce n’est pas côté core.
La scène se déclenche bien (ta capture « Sonnerie : il y a quelques secondes » le confirme). Ce qui échoue, ce sont tes trois actions « envoyer l’image » : l’intégration tirait la sonnerie avant d’avoir fini de télécharger la photo (1,2 s d’écart dans tes logs). La scène demandait donc l’image trop tôt. Avant, tu récupérais en fait la photo de la sonnerie précédente sans le voir ; la mise à jour de ce matin a redémarré le conteneur, vidé le cache, et l’erreur est devenue visible.
Corrigé dans la 1.13.2 (dispo dans le store d’ici une heure) : la photo est publiée d’abord, la sonnerie ensuite, et une demande d’image pendant le téléchargement attend au lieu d’échouer. Après la mise à jour, appuie sur la sonnette une première fois pour amorcer, puis la scène doit envoyer la bonne photo du visiteur.
J’ai récupéré ça.
[2026-09-03T22:31:25.479Z] [INFO] [tuya] [Tuya][discovery] "F14-W" id=************** type=pet-feeder product_id=*************** category=cwwsq features=1 UNMANAGED=[meal_plan_num, battery_val, meal_plan2, feed_record, vip_alarm, battery_alarm]
[2026-09-03T22:31:25.480Z] [WARN] [tuya] Tuya function with "basic_indicator" code is not managed
[2026-09-03T22:31:25.481Z] [WARN] [tuya] Tuya function with "motion_record" code is not managed
[2026-09-03T22:31:25.481Z] [WARN] [tuya] Tuya function with "motion_interval" code is not managed
[2026-09-03T22:31:25.481Z] [WARN] [tuya] Tuya function with "record_switch1" code is not managed
[2026-09-03T22:31:25.482Z] [WARN] [tuya] Tuya function with "decibel_upload" code is not managed
[2026-09-03T22:31:25.482Z] [WARN] [tuya] Tuya function with "ipc_mute_record" code is not managed
[2026-09-03T22:31:25.482Z] [WARN] [tuya] Tuya function with "ipc_detection_area" code is not managed
[2026-09-03T22:31:25.482Z] [WARN] [tuya] Tuya function with "multi_motion_area" code is not managed
[2026-09-03T22:31:21.250Z] [INFO] [tuya] [Tuya][poll][local] device=************** DPS snapshot: 4="standby" (UNMAPPED) | 106=2957 (UNMAPPED) | 108="7f0800317f143021" (UNMAPPED) | 112="{"value":2,"type":2}" (UNMAPPED) | 113=0 (UNMAPPED) | 114=0 (UNMAPPED)
Merci, c’est exactement ce qu’il fallait. Ton distributeur est une variante : il n’expose pas les codes standard sur lesquels j’ai construit le support (feed_report, slow_feed, battery_percentage…) mais d’autres (feed_record, battery_val, battery_alarm…). Seul le bouton de distribution est commun, d’où une seule fonctionnalité.
Je préfère ne pas mapper à l’aveugle (afficher une batterie à « 2957 % » ne t’aiderait pas). Je viens de sortir la 1.13.3 qui ajoute la dernière info manquante : mets à jour depuis le store d’ici une heure, attends une minute, puis envoie-moi en MP la ligne qui contient [Tuya][poll][cloud] et status snapshot pour ton distributeur (elle n’apparaît qu’une fois, au premier relevé après le redémarrage). Avec ça, je sors le support de ton modèle dans la foulée : dernier repas, batterie, alarmes.
Les lignes basic_indicator / motion_record que tu as copiées viennent d’une caméra, pas du distributeur, tu peux les ignorer.
Tuya (intégration externe) — v1.20.0 : 6 nouveaux types d’appareils + l’intégration en 4 langues
Bonjour à tous ![]()
Depuis la v1.11.0, l’intégration externe Tuya a beaucoup bougé : voici le récap jusqu’à la v1.20.0, qui vient de sortir.
Nouveaux appareils pris en charge
- Robots aspirateurs (Honiture Q6 Pro) : départ/arrêt, pause, retour à la base, état, batterie, puissance d’aspiration, niveau d’eau, modes, usure des brosses.
- Distributeurs de croquettes (catégorie
cwwsq, dont le F14-W) : distribution à la demande, dernière quantité servie, batterie, repas programmés. - Ventilateurs / VMC double flux (catégorie
fs, ex. AV-TTW5-W) : marche/arrêt, vitesse, lumière, sécurité enfant, sens du flux d’air, oscillation. - Déshumidificateurs (catégorie
cs, ex. Qlima D825A) : humidité, température, vitesse, minuterie, mode, humidité cible, sécurité enfant. - Capteurs température / humidité (catégorie
wsdcg, ex. Konyks Termo) : température, humidité, batterie faible. - Osmoseurs / purificateurs d’eau (catégorie
js, ex. The Box) : TDS entrée/sortie, vie restante de chaque filtre (PP, CTO, RO) en % et en jours, état de fonctionnement.
L’intégration en français, anglais, allemand et espagnol
- Nouvelle option « Noms des fonctionnalités » : les noms et les libellés d’options des appareils nouvellement découverts en français, anglais, allemand ou espagnol. Un grand merci à @spenceur pour la PR !

- Toute l’intégration est maintenant traduite dans les 4 langues de Gladys : configuration, actions, messages de connexion, infobulles du badge Cloud et documentation.
Outils et corrections
- Action « Diagnostic d’un appareil » : un appareil mal ou pas reconnu ? Lancez l’action, copiez le résultat dans une issue GitHub, et je peux l’ajouter. Le rapport ne contient ni clé locale, ni IP, ni identifiant Tuya.
- Climatiseurs : les modes Chauffage et Ventilation sont de nouveau sélectionnables.
- Sonnettes : la photo du visiteur arrive avant la sonnerie (pratique pour l’envoyer dans une scène).
Prérequis
- Gladys ≥ 4.86.1 pour une nouvelle installation depuis le store (et pour la puissance d’aspiration / niveau d’eau de l’aspirateur).
- Une intégration déjà installée continue de se mettre à jour sur n’importe quelle version de Gladys.
Appareils déjà créés
- Les nouveaux types d’appareils : relancez simplement une découverte.
- L’option « Noms des fonctionnalités » ne renomme pas les fonctionnalités déjà créées : seuls les libellés des listes (ex. puissance d’aspiration) suivent la nouvelle langue à la découverte suivante. Pour les noms : renommez à la main, ou supprimez puis recréez l’appareil.
Retours bienvenus
Ces points m’intéressent particulièrement :
- Déshumidificateur, osmoseur, capteur Konyks Termo et distributeur F14-W : tout remonte bien, et les commandes fonctionnent-elles ?
- Les noms des fonctionnalités en allemand / espagnol, pour ceux qui utilisent Gladys dans ces langues.
Le détail de chaque version est dans le changelog : gladys-tuya/CHANGELOG.md at master · Terdious/gladys-tuya · GitHub
Merci d’avance pour vos retours ![]()
v1.21.0 — correctif climatiseurs réglés en °F
Petite mise à jour corrective juste derrière la 1.20.0 :
- Climatiseurs dont l’écran est réglé en °F : la température ambiante n’est plus divisée par 10 sur les modèles qui envoient des degrés entiers (24 °C s’affichait « 2,4 »), et la consigne comme la température ambiante ne sont plus étiquetées °F alors que l’appareil envoie des °C. Gladys convertit maintenant correctement dans l’unité que vous avez choisie.
- Rien ne change pour les clims réglées en °C ni pour les autres appareils.
Si votre clim est concernée : supprimez-la puis recréez-la depuis l’onglet Découverte, pour qu’elle reprenne la bonne unité.
Nouveauté côté projet : chaque version a maintenant ses notes de version sur GitHub, et tout le détail est dans le changelog.
Merci à @Lucid_Wray pour son rapport de bug très précis ![]()
v1.22.0 — climatiseurs « exotiques » (ex. MEDION P502)
Nouvelle version pour les climatiseurs Tuya qui ne parlent pas le vocabulaire standard :
- Modes : reconnus quelle que soit leur écriture (
COOL,cool,cold…), et envoyés exactement comme l’appareil les attend. Fini la clim bloquée dans un mode. - Vitesse de ventilation : les clims qui déclarent leurs vitesses en simples niveaux (« 1 », « 2 »…) affichent maintenant Faible / Fort (jusqu’à 5 niveaux), au lieu d’une liste de 8 choix sans effet.
- Oscillation : le balayage marche/arrêt (
Shake) apparaît comme un interrupteur « Oscillation », en cloud comme en local.
Rien ne change pour les clims qui fonctionnaient déjà. Si la vôtre est concernée, relancez une découverte (ou supprimez puis recréez la clim) pour qu’elle prenne en compte son propre vocabulaire.
Merci à VV69004, dont le travail sur la MEDION P502 très bien documenté a permis d’intégrer tout ça proprement pour tout le monde ![]()
v1.23.0 et v1.24.0 — vannes d’arrosage, listes d’appareils et fiabilité
Nouveautés
- Vannes d’arrosage / programmateurs Tuya (catégorie
sfkzq, ex. R2601) : ouverture/fermeture, état de la vanne (l’eau coule ou non), débit instantané, batterie, verrou enfant, mode d’arrosage (auto/manuel), durée d’arrosage manuel. Elles utilisent la catégorie « vanne d’eau » de Gladys. Les programmes d’arrosage restent dans l’application Tuya pour l’instant. - Listes déroulantes dans les actions : « Détecter le protocole local » et « Diagnostic d’un appareil » proposent maintenant la liste de vos appareils. Un second champ accepte toujours un nom ou un identifiant Tuya pour un appareil pas encore créé dans Gladys.
- Diagnostic plus complet : il indique aussi la plage, l’unité et l’échelle de chaque valeur numérique. C’est grâce à ça que la vanne a pu être ajoutée en une version.
Fiabilité
- Une coupure brève entre Gladys et l’intégration ne relance plus toute la connexion cloud ni un scan complet du réseau.
- La détection manuelle du protocole local ne peut plus être annulée par une découverte lancée au même moment.
- Arrêt plus propre : les connexions locales aux appareils sont fermées avant l’arrêt du conteneur.
Vanne déjà ajoutée : bouton « Mettre à jour » dans l’onglet Découverte (ou supprimez-la puis recréez-la) pour obtenir ses nouvelles fonctionnalités.
Appel aux possesseurs de caméras PTZ Tuya (@GBoulvin
)
Gladys sait maintenant piloter les caméras motorisées (déplacements, zoom, positions enregistrées), et je voudrais l’ajouter aux caméras Tuya (LSC PTZ…). Il me faut juste le résultat de l’action « Diagnostic d’un appareil » (onglet Configuration de l’intégration, choisissez la caméra dans la liste) : collez-le ici ou dans l’issue #26. Le rapport ne contient ni clé locale, ni adresse IP, ni identifiant Tuya.
Le détail est dans le changelog. Merci pour vos retours ![]()
Voici la première, dual band :
Tuya device diagnostic — "Caméra salon"
model=LSC PTZ Camera Dualband product_id=rogprwflblumx2co category=sp
detected type=camera mapped features=8
Cloud status (24 codes):
alarm_message = undefined [ignored on purpose]
basic_flip = false [switch/binary]
basic_nightvision = "0" [ignored on purpose]
basic_osd = true [ignored on purpose]
basic_private = false [switch/binary]
decibel_sensitivity = "0" [ignored on purpose]
decibel_switch = false [ignored on purpose]
humanoid_filter = false [switch/binary]
motion_area = "{"num":1,"region0":{"x":0, "y":0, "xlen":100, "ylen":100 }}" [ignored on purpose]
motion_area_switch = false [ignored on purpose]
motion_sensitivity = "1" [ignored on purpose]
motion_switch = false [switch/binary]
motion_tracking = false [switch/binary]
movement_detect_pic = <snapshot payload> [motion-sensor/binary]
ptz_calibration = false [ignored on purpose]
ptz_control = "7" [ignored on purpose]
ptz_stop = true [ignored on purpose]
record_mode = "1" [ignored on purpose]
record_switch = true [switch/binary]
sd_format = true [ignored on purpose]
sd_format_state = 0 [ignored on purpose]
sd_status = 5 [ignored on purpose]
sd_storge = "0|0|0" [ignored on purpose]
siren_switch = false [siren/binary]
Declared enum ranges:
basic_nightvision: 0, 1, 2 (functions+status+model)
decibel_sensitivity: 0, 1 (functions+status+model)
motion_sensitivity: 0, 1, 2 (functions+status+model)
ptz_control: 1, 2, 3, 4, 5, 6, 7, 0 (functions+status+model)
record_mode: 1, 2 (functions+status+model)
LAN DPS snapshot: unavailable (Local poll timeout).
This report contains no local key, IP address nor Tuya device id: it can be pasted as-is in a GitHub issue
Et la seconde (LSC également, plus ancienne)
Tuya device diagnostic — "Caméra entrée"
model=LSC PTZ Camera product_id=n7h0m2x7i2yzol0p category=sp
detected type=camera mapped features=8
Cloud status (23 codes):
alarm_message = undefined [ignored on purpose]
basic_anti_flicker = "1" [UNMANAGED]
basic_flip = false [switch/binary]
basic_nightvision = "0" [ignored on purpose]
basic_osd = true [ignored on purpose]
basic_private = false [switch/binary]
decibel_sensitivity = "0" [ignored on purpose]
decibel_switch = false [ignored on purpose]
humanoid_filter = false [switch/binary]
motion_sensitivity = "0" [ignored on purpose]
motion_switch = false [switch/binary]
motion_tracking = false [switch/binary]
movement_detect_pic = <snapshot payload> [motion-sensor/binary]
ptz_calibration = false [ignored on purpose]
ptz_control = "5" [ignored on purpose]
ptz_stop = true [ignored on purpose]
record_mode = "2" [ignored on purpose]
record_switch = true [switch/binary]
sd_format = true [ignored on purpose]
sd_format_state = 0 [ignored on purpose]
sd_status = 1 [ignored on purpose]
sd_storge = "30272512|15700992|14571520" [ignored on purpose]
siren_switch = false [siren/binary]
Declared but not reported: initiative_message
Declared enum ranges:
basic_anti_flicker: 0, 1, 2 (functions+status+model)
basic_nightvision: 0, 1, 2 (functions+status+model)
decibel_sensitivity: 0, 1 (functions+status+model)
motion_sensitivity: 0, 1, 2 (functions+status+model)
ptz_control: 1, 2, 3, 4, 5, 6, 7, 0 (functions+status+model)
record_mode: 1, 2 (functions+status+model)
LAN DPS snapshot:
109="30272512|15700992|14571520" (UNMAPPED)
This report contains no local key, IP address nor Tuya device id: it can be pasted as-is in a GitHub issue.




