Prises en charge des devices avec l'application Smartlife/tuya

Merci, je vais tester cela :slight_smile:

J’ai regardé sur le site que tu m’a donné mais n’ayant pas de zigbee de mon coté (je ne fonctionne qu’en wifi). Donc je ne sais pas trop comment faire :frowning:

Super :slight_smile:

J’ai pas encore trop bien compris les logs sur Tuya. Pour l’instant mon seul control était d’appeller l’api pour connaitre l’état du device pour voir si la valeur avait changé. Mais cela sera plus simple à tester avec un device réel :slight_smile:

Les appareils Tuya que je t’ai envoyé ( https://www.domadoo.fr/fr/peripheriques/6211-nous-prise-intelligente-wifi-mesure-de-consommation-10a-5907772033999.html?domid=17 et https://www.domadoo.fr/fr/peripheriques/6294-nous-ampoule-intelligente-rgb-wifi-tuya-format-e27-5907772033142.html?domid=17 ) fonctionnent en Wi-Fi sans passerelle :slight_smile: Ce n’est pas du Zigbee.

Ce que je te propose, c’est de t’acheter ces 2 appareils. On peut voir les détails en privée si ça t’intéresse (adresse, téléphone)

Bon, Bonne nouvelle avec les devices envoyer par @pierre-gilles, j’ai pu bien avancer. Merci beaucoup
Maintenant l’intégration est complètement fonctionnelle avec des vrai devices.
Je vais surement avoir besoin de volontaire pour tester (pour le moment, je n’ai intégré que les boutons et les lumières).

@pierre-gilles, j’ai enfin compris pour l’utilisation des devices virtuel. Il faut linker ton App Tuya dans ton project Tuya. Et après tu pourra rajouter des devices virtuel sur ton application. Comme cela tu peux voir le resultat dans l’app Tuya sur ton mobile.

Pour finir, Je ne me rapel plus comment on rajoute de la doc pour une integration parce que la configuration de Tuya est un peu « complexe ». Est ce que quelqu’un a une idée ?

1 « J'aime »

C’est ici v4-website/integrations at master · GladysAssistant/v4-website · GitHub

Cool! Tant mieux si ça t’a aidé les device physique :slight_smile:

Il te reste quoi du coup pour avoir une 1ere version de test ?

Je vais te faire une review au niveau de l’UI / UX et du code.

Hésite pas à faire un build Docker ici si tu veux des testeurs :

Merci pour le lien

Normalement rien.

Cool, merci

Je suis en train de le faire, mais j’ai vu une petite coquille dans la doc. Il est demandé de créer des variables mais en fait si je me trompe pas il faut créer des secrets

1 « J'aime »

Je t’ai fais une petite review: Tuya Integration by callemand · Pull Request #1788 · GladysAssistant/Gladys · GitHub

Je pense effectivement qu’il y a une petite passe à faire sur l’UX de la configuration, parce que là en tant que nouvel utilisateur c’est compliqué, dur de savoir ce qu’il faut faire quand tu arrives sur cette page :stuck_out_tongue:

Ok ! Mets l’image ici dès que c’est prêt :slight_smile: Ah effectivement, je corrige

1 « J'aime »

La petite image docker :

delogzway/gladys:tuya
1 « J'aime »

@Lokkye J’aimerais partager ton image avec la communauté (envoyer un email un peu large), après c’est un peu « brut » pour tester ^^

La en l’état quelqu’un il arrive sur la page de configuration il est vraiment perdu

Est-ce que tu pourrais améliorer cette page (avec des explications et des liens), faire un mini-post explicatif (ici sur le forum), et ensuite je partagerais ce post ?

Merci pour tout le travail :pray:

Voici la documentation pour avoir les infos pour utiliser Tuya.

  1. Créer un compte sur http://iot.tuya.com

  2. Créer un project cloud dans la section « Cloud » → « Development » → « Create Cloud Project »

  3. Choisissez un nom de projet, renseignez les différents champs :

    • Project Name : Le nom de votre project (ex: Gladys)
    • Industry : Smart Home ;
    • Development method : Smart Home ;
    • Data Center : Central Europe Data Center (même si vous vivez en Europe de l’Ouest, c’est mieux, sinon sélectionnez le datacenter le plus proche de chez vous).
      Cliquez sur « Create ».
  4. Autorisez les services API suivants :
    (Elles sont normalement sélectionnées par default)

  5. Copier les informations d’« Access key » et de « Secret Key » dans Gladys

  6. Allez sur l’onglet Devices puis Link Tuya App Account et cliquez sur le bouton Add App Account à droite.

  7. Scannez le QR Code avec votre application Smart Life en vous rendant dans Profil puis sur le scanner de codes situé en haut à droite.

  8. Sélectionnez Automatic Link puis Read, Write and Manage et validez avec OK .

  9. Copier l’information « App account UID » dans Gladys.

  10. Enregistrer la configuration sur Gladys, allez dans l’onglet « Découverte Tuya » et TADAM… vos appareils sont apparus

1 « J'aime »

@pierre-gilles : Et voila le résultat dans Gladys :

2 « J'aime »

Merci des changements, c’est beaucoup plus clair ! Tu as mis à jour l’image Docker ? :slight_smile:

Si oui, je partage avec la communauté !

Je viens de mettre a jour l’image docker :slight_smile:

1 « J'aime »

Merci @Lokkye :pray:

Je communique aujourd’hui sur le sujet, et je l’ajoute à la newsletter qui partira en fin de semaine !

2 « J'aime »

Hello,

Merci pour le développement de cette fonctionnalité. J’attends une prise connectée avec lecture des données de consommation (on/off, intensité, tension, énergie consommée…) d’ici la semaine prochaine.

Je pourrai tester à ce moment :slight_smile:

1 « J'aime »

Bonjour,

Je viens de recevoir ma prise (modèle PE-01E).

J’ai bien suivi le tuto pour la création du compte développeur ; tout est clair. Une remarque, « Smart Home Scene Linkage » est déprécié (c’est quand même bien présent avec je pense la nouvelle API « Smart Home Basic Service »).

Une fois tous les éléments renseignés dans Gladys dans la partie configuration, j’aurais apprécié un message qui confirme que tous les éléments renseignés permettent la connexion en vert quand ça fonctionne et en rouge dans le cas inverse (j’ai l’impression qu’on retrouve l’info lorsqu’on scanne ?). C’est un détail quand on voit le temps qu’on va passer sur cet écran mais ce serait un vrai plus pour lever tout doute de mauvaise configuration.

Je vais ensuite sur la partie « Découverte Tuya » ; une animation m’indique qu’un scan est en cours. Malheureusement, aucun device n’est trouvé (alors que bien présent sur l’application Tuya) ; est-ce que c’est parce qu’il n’est pas géré pour le moment ou il y a un délai entre la création et l’apparition dans le Cloud Tuya ?

Merci encore pour les dev en cours :slight_smile:

Edit : ma prise est bien affichée dans le cloud Tuya

1 « J'aime »

@PhilippeMA : Déjà merci d’avoir testé :slight_smile:
Est ce que tu pourrais me montrer ta configuration dans gladys ?
Est ce que tu pourrais m’envoyer les logs de gladys lorsque tu clic sur le bouton pour scanner les devices ?

1 « J'aime »

Bonjour @Lokkye,

Voici les logs :

2023-06-26T12:25:35+0200 <error> tuya.discoverDevices.js:38 (TuyaHandler.discoverDevices) Unable to load Tuya devices Error: getaddrinfo EAI_AGAIN openapi-weaz.tuyaeu.com
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:107:26) {
  errno: -3001,
  code: 'EAI_AGAIN',
  syscall: 'getaddrinfo',
  hostname: 'openapi-weaz.tuyaeu.com',
  config: {
    url: 'https://openapi-weaz.tuyaeu.com/v1.0/token?grant_type=1',
    method: 'get',
    headers: {
      Accept: 'application/json, text/plain, */*',
      t: '1687775130691',
      sign: 'MONSIGN',
      client_id: 'MONCLIENTID',
      sign_method: 'HMAC-SHA256',
      access_token: '',
      Dev_lang: 'Nodejs',
      Dev_channel: 'SaaSFramework',
      'Signature-Headers': '',
      'User-Agent': 'axios/0.21.4'
    },
    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
    },
    data: undefined
  },
  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.0/token?grant_type=1',
      method: 'GET',
      headers: [Object],
      agent: undefined,
      agents: [Object],
      auth: undefined,
      hostname: 'openapi-weaz.tuyaeu.com',
      port: null,
      nativeProtocols: [Object],
      pathname: '/v1.0/token',
      search: '?grant_type=1'
    },
    _ended: true,
    _ending: true,
    _redirectCount: 0,
    _redirects: [],
    _requestBodyLength: 0,
    _requestBodyBuffers: [],
    _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: 0,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      socket: [TLSSocket],
      _header: 'GET /v1.0/token?grant_type=1 HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        't: 1687775130691\r\n' +
        'sign: MONSIGN\r\n' +
        'client_id: MONCLIENTID\r\n' +
        'sign_method: HMAC-SHA256\r\n' +
        'access_token: \r\n' +
        'Dev_lang: Nodejs\r\n' +
        'Dev_channel: SaaSFramework\r\n' +
        'Signature-Headers: \r\n' +
        'User-Agent: axios/0.21.4\r\n' +
        'Host: openapi-weaz.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.0/token?grant_type=1',
      _ended: false,
      res: null,
      aborted: false,
      timeoutCb: null,
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: false,
      host: 'openapi-weaz.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(kUniqueHeaders)]: null
    },
    _currentUrl: 'https://openapi-weaz.tuyaeu.com/v1.0/token?grant_type=1',
    [Symbol(kCapture)]: false
  },
  response: undefined,
  isAxiosError: true,
  toJSON: [Function: toJSON]
}

La configuration dans Glayds :

@PhilippeMA: Le compte Tuya est configuré sur Central Europe (ce qui est très bien) mais sur gladys c’est configuré en Western Europe, est ce que tu pourrais changer en Central Europe et me dire si cela a réglé le problème ?