Tuya-Integration einrichten

Bonjour @pierre-gilles
Dans Gladys après la configuration de intégration Cloud Tuya, quand je fais le choix « Découverte tuya » , j’ai le retour « Aucun appareil n’a été découvert » même après le scan.

J’ai la même intégration pour HA qui fonctionne j’ai d’abord récupéré les infos Access Key, Secret Key, App account UID du projet créé pour HA. Puis j’ai créé un nouveau projet pour Gladys avec une nouvelle config. Les appareils Tuya sont bien liés au projet mais ils n’apparaissent pas dans Gladys
Dans les services Tuya est en erreur .
extrait de docker logs gladys
2024-10-26T12:19:33+0200 tuya.discoverDevices.js:38 (TuyaHandler.discoverDevices) Unable to load Tuya devices TypeError: Cannot destructure property ‹ list › of ‹ result › as it is undefined.
at TuyaHandler.loadDevices (/src/server/services/tuya/lib/tuya.loadDevices.js:25:11)
at processTicksAndRejections (node:internal/process/task_queues:95:5)
at TuyaHandler.discoverDevices (/src/server/services/tuya/lib/tuya.discoverDevices.js:35:15)
at discover (/src/server/services/tuya/api/tuya.controller.js:10:21)

Merci d’avance pour l’aide

Je te renvoie vers le message de @pierre-gilles à ce sujet…
Il semblerait que Tuya soit inutilisable pour le moment, jusqu’à ce que quelqu’un se penche dessus!

Merci pour la réponse,je serai patient

Salut @Francis66, merci pour ton retour !

Effectivement depuis cet été tous les utilisateurs ont le même retour que toi.

J’ai déjà travaillé dessus cet été mais impossible de trouver ce qui n’allait pas, j’étais persuadé jusque là que l’API Tuya n’était plus ouverte pour cet usage.

Par contre je suis très curieux de savoir comment fait HA du coup.

Tu as fais quelque chose de particulier côté HA ? Quand tu as créé les clés d’API pour HA, c’était le même process que dans Gladys ou ils font quelque chose de plus ?

Non je ne vois pas de différence notable. HA a développé une nouvelle intégration Tuya smart life pour éviter de revalider les droits dans Tuya IOT.
J’ai juste acheté 3 lampes Calex pour leur esthétique, je vais approfondir du côté de Tuya Covert pour voir si je peux éliminer le Cloud. Actuellement je m’équipe essentiellement en Zigbee2Mqtt

En fait quand je regarde le package Node.js qu’on utilise pour se connecter à Tuya, tout le monde se plaint du même souci, on est pas les seuls:

C’est rageant ces produits cloud, parce qu’on a développé ce service en juillet 2023 (Source: Gladys Assistant 4.26: Gladys devient compatible Tuya/SmartLife/LSC Connect!) , et un an après il est déjà inutilisable, bon a être re-écrit…

C’est pas sérieux ces API Cloud non-standard.

Désolé pour ma demande et d’avoir fait perdre du temps car finalement, l’intégration TUYA fonctionne très bien dans Gladys.

Ce dysfonctionnement était lié à 2 problèmes.

  1. Je n’avais plus de droits aux ressources API
  • acces à Cloud Develop Base Resource et IoT Core car la période Trial était dépassée.
  1. Pour la zone: j’avais renseigné Europe de l’ouest au lieu d’Europe Centrale

J’ai trouvé mes lampes dans « Découverte Tuya »

Ah incroyable ! Parce que tu n’es pas le seul à t’être plains ! Je vais envoyer ton post aux autres utilisateurs

@Francis66 j’ai rajouté un message dans la documentation, qui pointe vers ce topic:

Hello @Francis66

Merci d’avoir indiqué l’origine du problème. Je confirme que c’est la même chose chez moi.

En revanche, j’ai une question pratique, comment as-tu fait pour réactiver le service ? J’ai bien trouvé l’option de prolonger la période de trial mais ça ne me propose qu’une prolongation de 6 mois (qui doit être validée par Tuya…) ; du coup, il va falloir que je fasse cette action tous les 6 mois s’il faut passer par là.

Merci de confirmer la réponse au problème d’intégration Tuya cela va faire gagner du temps à Pierre-Gilles. Avant de commencer avec le kit de démarrage Gladys, j’étais sur HA, la procédure d’intégration est identique côté Tuya IOT. avec une période « trial » pour les autorisations. Suite à un mail de Tuya me signifiant l’expiration, j’ai demandé une prolongation de 6 mois qui m’a été accordée immédiatement. A l’échéance de la seconde validation en décembre 2023 mes commandes et automatisations avec du matériel Tuya ont continuer a être fonctionnelles !! ?
Par contre lors de l’intégration dans Gladys, Tuya a du contrôler mes droits. J’ai pu remplir un formulaire avec une demande exceptionnelle de prolongation de 1 à 6mois. La demande à été acceptée dans les10 mn suivantes. J’espère que mon intégration sera toujours fonctionnelle dans 6 mois…
Par contre je conseille de récupérer les « Local Key » associés au « Id » des appareils Tuya. les droits sont bloqués quand la date des autorisation est atteinte. Cela pourrait servir pour une utilisation locale.

Entschuldigung, dass ich ein altes Thema wieder aufgreife, aber ich habe ein Problem mit der Tuya-Integration:
Ich habe kürzlich meinen Internetanbieter gewechselt und seitdem reagieren die Lampen, die ich mit der Tuya-Integration verwendet habe, nicht mehr.

Zuerst habe ich versucht, die Lampen in der « Geräte »-Sektion der Integration zu löschen, um sie neu zu entdecken, aber nichts wurde gefunden… Ich habe diesen Beitrag gesehen: also habe ich meinen Zugriff auf « IoT Core » überprüft (ich habe « Cloud Develop Base Resouce » nicht gefunden) und tatsächlich war die Testphase abgelaufen (auch war ich auf dem Cloud Europe Central). Ich habe eine Verlängerung beantragt, die akzeptiert wurde. Seitdem habe ich die Entdeckung erneut versucht und immer noch nichts…

Aber in den Gladys-Logs habe ich dies, wenn ich die Konfiguration bestätige:

 <warn> service.start.js:44 (Service.start) Unable to st                                                    art service tuya Error: connect ETIMEDOUT 2a05:d014:afa:af00:568a:5cc6:4603:c040                                                    :443
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1555:16) {
  errno: -110,
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: '2xxxx:dxxx:axxxx:af00:568a:5cc6:4603:c040',
  port: 443,
  config: {
    url: 'https://openapi.tuyaeu.com/v1.3/iot-03/devices?last_row_key=&source_id                                                    =euxxxxxxxxxxxx&source_type=tuyaUser',
    method: 'get',
    data: '{}',
    headers: {
      Accept: 'application/json, text/plain, */*',
      t: '1737148959580',
      sign: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      client_id: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
      sign_method: 'HMAC-SHA256',
      access_token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
      Dev_lang: 'Nodejs',
      Dev_channel: 'SaaSFramework',
      'Signature-Headers': '',
      'Content-Type': 'application/json',
      'User-Agent': 'axios/0.21.4',
      'Content-Length': 2
    },
    params: {},
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    adapter: [Function: httpAdapter],
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    validateStatus: [Function: validateStatus],
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    }
  },
  request: <ref *1> Writable {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: false,
      needDrain: false,
      ending: false,
      ended: false,
      finished: false,
      destroyed: false,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: true,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      afterWriteTickInfo: null,
      buffered: [],
      bufferedIndex: 0,
      allBuffers: true,
      allNoop: true,
      pendingcb: 0,
      constructed: true,
      prefinished: false,
      errorEmitted: false,
      emitClose: true,
      autoDestroy: true,
      errored: null,
      closed: false,
      closeEmitted: false,
      [Symbol(kOnFinished)]: []
    },
    _events: [Object: null prototype] {
      response: [Function: handleResponse],
      error: [Function: handleRequestError]
    },
    _eventsCount: 2,
    _maxListeners: undefined,
    _options: {
      maxRedirects: 21,
      maxBodyLength: 10485760,
      protocol: 'https:',
      path: '/v1.3/iot-03/devices?last_row_key=&source_id=euxxxxxxxxxxxxxxxxxxx&s                                                    ource_type=tuyaUser',
      method: 'GET',
      headers: [Object],
      agent: undefined,
      agents: [Object],
      auth: undefined,
      hostname: 'openapi.tuyaeu.com',
      port: null,
      nativeProtocols: [Object],
      pathname: '/v1.3/iot-03/devices',
      search: '?last_row_key=&source_id=euxxxxxxxxxxxxxxxxxxxxxxx&source_type=tuyaUser'
    },
    _ended: false,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 2,
    _requestBodyBuffers: [ [Object] ],
    _onNativeResponse: [Function (anonymous)],
    _currentRequest: ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: true,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: false,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 2,
      _hasBody: true,
      _trailer: '',
      finished: false,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /v1.3/iot-03/devices?last_row_key=&source_id=euxxxxxxxxxxxxxxx                                                    AowJC&source_type=tuyaUser HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        't: 1737148959580\r\n' +
        'sign: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\                                                    r\n' +
        'client_id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n' +
        'sign_method: HMAC-SHA256\r\n' +
        'access_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\r\n' +
        'Dev_lang: Nodejs\r\n' +
        'Dev_channel: SaaSFramework\r\n' +
        'Signature-Headers: \r\n' +
        'Content-Type: application/json\r\n' +
        'User-Agent: axios/0.21.4\r\n' +
        'Content-Length: 2\r\n' +
        'Host: openapi.tuyaeu.com\r\n' +
        'Connection: close\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'GET',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/v1.3/iot-03/devices?last_row_key=&source_id=euxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&s                                                    ource_type=tuyaUser',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'openapi.tuyaeu.com',
      protocol: 'https:',
      _redirectable: [Circular *1],
      [Symbol(kCapture)]: false,
      [Symbol(kBytesWritten)]: 0,
      [Symbol(kNeedDrain)]: false,
      [Symbol(corked)]: 0,
      [Symbol(kOutHeaders)]: [Object: null prototype],
      [Symbol(errored)]: null,
      [Symbol(kHighWaterMark)]: 16384,
      [Symbol(kRejectNonStandardBodyWrites)]: false,
      [Symbol(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://openapi.tuyaeu.com/v1.3/iot-03/devices?last_row_key=&s                                                    ource_id=euxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&source_type=tuyaUser',
    [Symbol(kCapture)]: false
  },
  response: undefined,
  isAxiosError: true,
  toJSON: [Function: toJSON]
}

Es scheint, dass es sich um ein Timeout handelt, aber ich weiß nicht warum…

Es funktioniert problemlos mit der Smart Home-App meines Telefons und ich kann eine Lampe von Gladys aus problemlos pingen.

Ich frage mich, ob sich die API-URL geändert hat oder so etwas?! ^^

Hallo @Xenicle, bist du sicher, dass du kein Netzwerkproblem oder eine falsche Konfiguration hast?

Wenn ich die URL öffne, die du angibst, ist dort tatsächlich ein Server am Ende:

(okay, es fehlt ein Token zum Testen, aber der Server ist da)

Ich werde das überprüfen! Daran habe ich auch schon gedacht, aber noch nicht « gecheckt »…

Aber vom Mini-PC aus:

gladys:~$ httping -c 3 -g https://openapi.tuyaeu.com/v1.3/iot-03/devices?last_row_key=&source_id=&source_type=tuyaUser
[2] 181345
[3] 181346
gladys@gladys:~$ SSL automatisch aktiviert aufgrund der https-URL
PING openapi.tuyaeu.com:443 (/v1.3/iot-03/devices?last_row_key=):
verbunden mit 3.69.78.245:443 (617 Bytes), seq=0 time=132,80 ms
verbunden mit 3.69.78.245:443 (617 Bytes), seq=1 time= 72,15 ms
verbunden mit 3.69.78.245:443 (617 Bytes), seq=2 time= 70,65 ms
--- https://openapi.tuyaeu.com/v1.3/iot-03/devices?last_row_key= ping statistics ---
3 Verbindungen, 3 erfolgreich, 0,00% fehlgeschlagen, Zeit 3278ms
round-trip min/avg/max = 70,6/91,9/132,8 ms