Connexion à MELcloud

Bonjour à tous,

Nouvel utilisateur de Gladys j’ai essayé de configurer MELcloud mais lorsque je rentre Identifiant et mot de passe je n’ai aucune connexion (identifiant et mot de passe vérifié en me connectant directement sur MELCloud)
La documentation MELCloud m’amnene vers une page introuvable sur le site de gladys et je ne retrouve pas MELcloud dans la liste des intégration sur le site de gladys.
Est ce que j’ai raté une étape ? dois-je faire quelque chose au préalable ?
Merci pour votre aide.

Romain

Bonjour @manoredge :slight_smile:

Bienvenue sur Gladys !

Tu as des informations complémentaires pour pouvoir t’aider ?

Quelle page introuvable ? :slight_smile:

Bonjour Oui bien sur,

Sur sur la page configuration : dashboard/integration/device/melcloud/setup : Je rentre mon identifiant et MDP Melcloud , ça mouline 1 seconde puis reviens sur la même page avec mon Id et MDP affiché mais il ne sais rien passé. Je n’ai aucune info ni de connexion ni d’échec.
Lorsque je clique sur « documentation MELcloud » (4ème onglet en bas à gauche cela m’emmène sur une page introuvable : https://gladysassistant.com/fr/docs/integrations/melcloud
Enfin sur la page des intégration : Intégrations | Gladys Assistant je ne retrouve pas MELcloud.
Dois je faire une manipulation avant de rentrer mon identifiant et mon mot de passe MELcloud. Suis-je censé avoir un message de connexion une fois ID et MDP rentré ?

@manoredge Merci pour les informations, est-ce que ça te dérangerait de me fournir ton identifiant/mot de passe pour que je fasse le test et débug ce souci de mon côté ? (change le mot de passe temporairement pour ce test)

Je n’ai pas de MELCloud chez moi, et le développeur qui a développé cette intégration n’est malheureusement plus actif dans la communauté donc pas trop le choix :smiley:

(Si oui, envoie moi tout ça en MP)

Merci @manoredge pour tes identifiants, j’ai fais une PR qui corrige le souci :

A ta disposition pour faire un test en réel avec allumage/extinction de la clim dès que tu es chez toi

Merci pour le rapide call @manoredge, comme ça corrige bien le souci je sors ce correctif dans la prochaine version de Gladys, probablement semaine prochaine :slight_smile:

Merci à toi @pierre-gilles, hyper efficace, test concluant

C’est disponible dans Gladys Assistant 4.42 :

Hello,
je déterre le sujet car depuis aujourd’hui j’ai des PAC Mitsubishi :cold_face: :hot_face: :grimacing:

Donc je mets mes id/pwd, je clique sur Enregistrer la configurationet .. rien. Rien ne se passe et quand je vais dans Découverte MELCloud, ça me dit que je ne suis pas connecté :frowning:

Je précise que dans mon email j’ai un + et mon login fonctionne sur l’appli Melcloud Home et aussi via le web.
En parallèle j’ai aussi testé avec le plugin matterbridge et ça ne fonctionne pas non plus.

Voici les logs de Gladys :

2026-05-21T18:29:47+0200 <info> index.js:27 (Object.start) Starting MELCloud service 52848819-9e44-4ed8-a74d-4f6cfdcc6023

2026-05-21T18:29:47+0200 <error> melcloud.connect.js:44 (MELCloudHandler.connect) Error connecting to Tuya: null

2026-05-21T18:29:47+0200 <warn> service.start.js:44 (Service.start) Unable to start service melcloud AxiosError: Request failed with status code 401

    at settle (/src/server/services/melcloud/node_modules/axios/lib/core/settle.js:19:12)

    at IncomingMessage.handleStreamEnd (/src/server/services/melcloud/node_modules/axios/lib/adapters/http.js:570:11)

    at IncomingMessage.emit (node:events:531:35)

    at endReadableNT (node:internal/streams/readable:1698:12)

    at processTicksAndRejections (node:internal/process/task_queues:89:21) {

  code: 'ERR_BAD_REQUEST',

  config: {

    transitional: {

      silentJSONParsing: true,

      forcedJSONParsing: true,

      clarifyTimeoutError: false

    },

    adapter: [ 'xhr', 'http' ],

    transformRequest: [ [Function: transformRequest] ],

    transformResponse: [ [Function: transformResponse] ],

    timeout: 5000,

    xsrfCookieName: 'XSRF-TOKEN',

    xsrfHeaderName: 'X-XSRF-TOKEN',

    maxContentLength: -1,

    maxBodyLength: -1,

    env: { FormData: [Function], Blob: [class Blob] },

    validateStatus: [Function: validateStatus],

    headers: AxiosHeaders {

      Accept: 'application/json, text/javascript, */*; q=0.01',

      'Content-Type': 'application/json',

      'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:73.0) ',

      'Accept-Language': 'en-US,en;q=0.5',

      'Accept-Encoding': 'gzip, deflate, br',

      'X-MitsContextKey': null,

      'X-Requested-With': 'XMLHttpRequest',

      Cookie: 'policyaccepted=true'

    },

    baseURL: 'https://app.melcloud.com/Mitsubishi.Wifi.Client/',

    method: 'get',

    url: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

    data: undefined

  },

  request: <ref *1> ClientRequest {

    _events: [Object: null prototype] {

      abort: [Function (anonymous)],

      aborted: [Function (anonymous)],

      connect: [Function (anonymous)],

      error: [Function (anonymous)],

      socket: [Function (anonymous)],

      timeout: [Function (anonymous)],

      finish: [Function: requestOnFinish]

    },

    _eventsCount: 7,

    _maxListeners: undefined,

    outputData: [],

    outputSize: 0,

    writable: true,

    destroyed: true,

    _last: true,

    chunkedEncoding: false,

    shouldKeepAlive: true,

    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: true,

    _header: 'GET /Mitsubishi.Wifi.Client//User/ListDevices HTTP/1.1\r\n' +

      'Accept: application/json, text/javascript, */*; q=0.01\r\n' +

      'Content-Type: application/json\r\n' +

      'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:73.0) \r\n' +

      'Accept-Language: en-US,en;q=0.5\r\n' +

      'Accept-Encoding: gzip, deflate, br\r\n' +

      'X-Requested-With: XMLHttpRequest\r\n' +

      'Cookie: policyaccepted=true\r\n' +

      'Host: app.melcloud.com\r\n' +

      'Connection: keep-alive\r\n' +

      '\r\n',

    _keepAliveTimeout: 0,

    _onPendingData: [Function: nop],

    agent: Agent {

      _events: [Object: null prototype],

      _eventsCount: 2,

      _maxListeners: undefined,

      options: [Object: null prototype],

      defaultPort: 443,

      protocol: 'https:',

      requests: [Object: null prototype] {},

      sockets: [Object: null prototype] {},

      freeSockets: [Object: null prototype],

      keepAliveMsecs: 1000,

      keepAlive: true,

      maxSockets: Infinity,

      maxFreeSockets: 256,

      scheduling: 'lifo',

      maxTotalSockets: Infinity,

      totalSocketCount: 1,

      agentKeepAliveTimeoutBuffer: 1000,

      maxCachedSessions: 100,

      _sessionCache: [Object],

      [Symbol(shapeMode)]: false,

      [Symbol(kCapture)]: false

    },

    socketPath: undefined,

    method: 'GET',

    maxHeaderSize: undefined,

    insecureHTTPParser: undefined,

    joinDuplicateHeaders: undefined,

    path: '/Mitsubishi.Wifi.Client//User/ListDevices',

    _ended: true,

    res: IncomingMessage {

      _events: [Object],

      _readableState: [ReadableState],

      _maxListeners: undefined,

      socket: null,

      httpVersionMajor: 1,

      httpVersionMinor: 1,

      httpVersion: '1.1',

      complete: true,

      rawHeaders: [Array],

      rawTrailers: [],

      joinDuplicateHeaders: undefined,

      aborted: false,

      upgrade: false,

      url: '',

      method: null,

      statusCode: 401,

      statusMessage: 'Unauthorized',

      client: [TLSSocket],

      _consuming: false,

      _dumped: false,

      req: [Circular *1],

      _eventsCount: 4,

      responseUrl: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      redirects: [],

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false,

      [Symbol(kHeaders)]: [Object],

      [Symbol(kHeadersCount)]: 24,

      [Symbol(kTrailers)]: null,

      [Symbol(kTrailersCount)]: 0

    },

    aborted: false,

    timeoutCb: null,

    upgradeOrConnect: false,

    parser: null,

    maxHeadersCount: null,

    reusedSocket: true,

    host: 'app.melcloud.com',

    protocol: 'https:',

    _redirectable: Writable {

      _events: [Object],

      _writableState: [WritableState],

      _maxListeners: undefined,

      _options: [Object],

      _ended: true,

      _ending: true,

      _redirectCount: 0,

      _redirects: [],

      _requestBodyLength: 0,

      _requestBodyBuffers: [],

      _eventsCount: 3,

      _onNativeResponse: [Function (anonymous)],

      _currentRequest: [Circular *1],

      _currentUrl: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      _timeout: null,

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false

    },

    [Symbol(shapeMode)]: false,

    [Symbol(kCapture)]: false,

    [Symbol(kBytesWritten)]: 0,

    [Symbol(kNeedDrain)]: false,

    [Symbol(corked)]: 0,

    [Symbol(kChunkedBuffer)]: [],

    [Symbol(kChunkedLength)]: 0,

    [Symbol(kSocket)]: TLSSocket {

      _tlsOptions: [Object],

      _secureEstablished: true,

      _securePending: false,

      _newSessionPending: false,

      _controlReleased: true,

      secureConnecting: false,

      _SNICallback: null,

      servername: 'app.melcloud.com',

      alpnProtocol: false,

      authorized: true,

      authorizationError: null,

      encrypted: true,

      _events: [Object: null prototype],

      _eventsCount: 9,

      connecting: false,

      _hadError: false,

      _parent: null,

      _host: 'app.melcloud.com',

      _closeAfterHandlingError: false,

      _readableState: [ReadableState],

      _writableState: [WritableState],

      allowHalfOpen: false,

      _maxListeners: undefined,

      _sockname: null,

      _pendingData: null,

      _pendingEncoding: '',

      server: undefined,

      _server: null,

      ssl: [TLSWrap],

      _requestCert: true,

      _rejectUnauthorized: true,

      timeout: 5000,

      parser: null,

      _httpMessage: null,

      autoSelectFamilyAttemptedAddresses: [Array],

      [Symbol(alpncallback)]: null,

      [Symbol(res)]: [TLSWrap],

      [Symbol(verified)]: true,

      [Symbol(pendingSession)]: null,

      [Symbol(async_id_symbol)]: -1,

      [Symbol(kHandle)]: [TLSWrap],

      [Symbol(lastWriteQueueSize)]: 0,

      [Symbol(timeout)]: Timeout {

        _idleTimeout: 5000,

        _idlePrev: [TimersList],

        _idleNext: [Timeout],

        _idleStart: 269871797,

        _onTimeout: [Function: bound ],

        _timerArgs: undefined,

        _repeat: null,

        _destroyed: false,

        [Symbol(refed)]: false,

        [Symbol(kHasPrimitive)]: false,

        [Symbol(asyncId)]: 15098503,

        [Symbol(triggerId)]: 15098501,

        [Symbol(kAsyncContextFrame)]: undefined

      },

      [Symbol(kBuffer)]: null,

      [Symbol(kBufferCb)]: null,

      [Symbol(kBufferGen)]: null,

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false,

      [Symbol(kSetNoDelay)]: false,

      [Symbol(kSetKeepAlive)]: true,

      [Symbol(kSetKeepAliveInitialDelay)]: 1,

      [Symbol(kBytesRead)]: 0,

      [Symbol(kBytesWritten)]: 0,

      [Symbol(connect-options)]: [Object]

    },

    [Symbol(kOutHeaders)]: [Object: null prototype] {

      accept: [Array],

      'content-type': [Array],

      'user-agent': [Array],

      'accept-language': [Array],

      'accept-encoding': [Array],

      'x-requested-with': [Array],

      cookie: [Array],

      host: [Array]

    },

    [Symbol(errored)]: null,

    [Symbol(kHighWaterMark)]: 65536,

    [Symbol(kRejectNonStandardBodyWrites)]: false,

    [Symbol(kUniqueHeaders)]: null

  },

  response: {

    status: 401,

    statusText: 'Unauthorized',

    headers: AxiosHeaders {

      date: 'Thu, 21 May 2026 16:29:47 GMT',

      'content-type': 'text/html',

      'content-length': '1293',

      connection: 'keep-alive',

      'cache-control': 'no-cache, no-store, must-revalidate',

      pragma: 'no-cache',

      expires: '-1',

      server: 'Microsoft-IIS/10.0',

      'strict-transport-security': 'max-age=63072000; includeSubDomains',

      'x-robots-tag': 'noindex, nofollow, noimageindex',

      'x-content-type-options': 'nosniff',

      'access-control-allow-origin': '*'

    },

    config: {

      transitional: [Object],

      adapter: [Array],

      transformRequest: [Array],

      transformResponse: [Array],

      timeout: 5000,

      xsrfCookieName: 'XSRF-TOKEN',

      xsrfHeaderName: 'X-XSRF-TOKEN',

      maxContentLength: -1,

      maxBodyLength: -1,

      env: [Object],

      validateStatus: [Function: validateStatus],

      headers: [AxiosHeaders],

      baseURL: 'https://app.melcloud.com/Mitsubishi.Wifi.Client/',

      method: 'get',

      url: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      data: undefined

    },

    request: <ref *1> ClientRequest {

      _events: [Object: null prototype],

      _eventsCount: 7,

      _maxListeners: undefined,

      outputData: [],

      outputSize: 0,

      writable: true,

      destroyed: true,

      _last: true,

      chunkedEncoding: false,

      shouldKeepAlive: true,

      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: true,

      _header: 'GET /Mitsubishi.Wifi.Client//User/ListDevices HTTP/1.1\r\n' +

        'Accept: application/json, text/javascript, */*; q=0.01\r\n' +

        'Content-Type: application/json\r\n' +

        'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:73.0) \r\n' +

        'Accept-Language: en-US,en;q=0.5\r\n' +

        'Accept-Encoding: gzip, deflate, br\r\n' +

        'X-Requested-With: XMLHttpRequest\r\n' +

        'Cookie: policyaccepted=true\r\n' +

        'Host: app.melcloud.com\r\n' +

        'Connection: keep-alive\r\n' +

        '\r\n',

      _keepAliveTimeout: 0,

      _onPendingData: [Function: nop],

      agent: [Agent],

      socketPath: undefined,

      method: 'GET',

      maxHeaderSize: undefined,

      insecureHTTPParser: undefined,

      joinDuplicateHeaders: undefined,

      path: '/Mitsubishi.Wifi.Client//User/ListDevices',

      _ended: true,

      res: [IncomingMessage],

      aborted: false,

      timeoutCb: null,

      upgradeOrConnect: false,

      parser: null,

      maxHeadersCount: null,

      reusedSocket: true,

      host: 'app.melcloud.com',

      protocol: 'https:',

      _redirectable: [Writable],

      [Symbol(shapeMode)]: false,

      [Symbol(kCapture)]: false,

      [Symbol(kBytesWritten)]: 0,

      [Symbol(kNeedDrain)]: false,

      [Symbol(corked)]: 0,

      [Symbol(kChunkedBuffer)]: [],

      [Symbol(kChunkedLength)]: 0,

      [Symbol(kSocket)]: [TLSSocket],

      [Symbol(kOutHeaders)]: [Object: null prototype],

      [Symbol(errored)]: null,

      [Symbol(kHighWaterMark)]: 65536,

      [Symbol(kRejectNonStandardBodyWrites)]: false,

      [Symbol(kUniqueHeaders)]: null

    },

    data: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r\n' +

      '<html xmlns="http://www.w3.org/1999/xhtml">\r\n' +

      '<head>\r\n' +

      '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>\r\n' +

      '<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>\r\n' +

      '<style type="text/css">\r\n' +

      '<!--\r\n' +

      'body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\n' +

      'fieldset{padding:0 15px 10px 15px;} \r\n' +

      'h1{font-size:2.4em;margin:0;color:#FFF;}\r\n' +

      'h2{font-size:1.7em;margin:0;color:#CC0000;} \r\n' +

      'h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n' +

      '#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;\r\n' +

      'background-color:#555555;}\r\n' +

      '#content{margin:0 0 0 2%;position:relative;}\r\n' +

      '.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n' +

      '-->\r\n' +

      '</style>\r\n' +

      '</head>\r\n' +

      '<body>\r\n' +

      '<div id="header"><h1>Server Error</h1></div>\r\n' +

      '<div id="content">\r\n' +

      ' <div class="content-container"><fieldset>\r\n' +

      '  <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n' +

      '  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>\r\n' +

      ' </fieldset></div>\r\n' +

      '</div>\r\n' +

      '</body>\r\n' +

      '</html>\r\n'

  }

}

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:27 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Calculating consumption from index in timezone Europe/Paris for window Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:34 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Found 50 energy devices

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:65 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Found 16 devices with both INDEX and THIRTY_MINUTES_CONSUMPTION features

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Borne VE at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Clim mobile at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Climatisation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Leds cuisine at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0.07999999999992724 for device Prise congélateur at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Prise lave-linge at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0.7830000000000006 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device Téléinformation at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0.010000000000005116 for device ampli freebox at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device prise compresseur at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device prise_04 at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Saved consumption 0 for device relais_fp_01 at Thu May 21 2026 18:30:00 GMT+0200 (Central European Summer Time)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:160 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Finished calculating consumption from index for 16 devices

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateCostFrom.js:34 (EnergyMonitoringHandler.calculateCostFrom) Calculating cost in timezone Europe/Paris

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateCostFrom.js:38 (EnergyMonitoringHandler.calculateCostFrom) Found 21 energy devices

2026-05-21T18:30:02+0200 <info> energy-monitoring.calculateCostFrom.js:126 () Device 2b993985-4690-47e0-89ab-523e35ade901 has tempo prices and Map is empty, getting EDF tempo historical

2026-05-21T18:30:02+0200 <info> contracts.buildEdfTempoDayMap.js:19 (buildEdfTempoDayMap) Building EDF tempo historical map from 2026-05-20

2026-05-21T18:30:02+0200 <info> contracts.buildEdfTempoDayMap.js:52 (buildEdfTempoDayMap) All 2 EDF tempo days found in cache (from 2026-05-20 to 2026-05-21)

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 7393b8a6-31cd-484f-a6a5-4748b897820b.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = b17ed9a0-bb8f-4eab-aa18-49e1e360322c.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 7647d3f1-2e5c-4773-94dc-d53ddcc24b32.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 2dea3c15-23d8-4a9e-a9b6-90f0c0d5593f.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 0883c4ae-66b7-475d-a8ca-7ab3ef09dadb.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = bdb4a7d1-bb27-4132-96c2-e09e4f40f381.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = c7ab8f9e-0f99-4927-b8f3-de864b85e9c3.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = edff3d91-ae7c-4599-aea2-216d2e442786.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = a1e3f62f-5cd2-4c73-b0e8-b988bfed5d3f.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = c9a07104-f362-404f-bac4-7fc4a7f79f3e.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 8c223390-c8ad-4bfe-ad28-644baf931376.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = d5684fbf-a0f8-414f-b45c-ef28555fe7f1.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = f8b9c646-7fe2-4e86-8aaa-b49e3aa0f910.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = a5113c01-711c-4552-9e06-dfe03819d4a8.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = 27d71bd3-11f9-48d2-b59d-c6257bf5177e.

2026-05-21T18:30:02+0200 <info> index.js:156 () DuckDB : Inserting chunk 0 for deviceFeature = e1c91792-0b39-4b09-b583-1003d9ab50a0.

2026-05-21T18:30:07+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:30:12+0200 <info> netatmo.loadDevices.js:155 (NetatmoHandler.loadDevices) Netatmo devices not supported : 0

2026-05-21T18:30:37+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:30:40+0200 <error> handleMqttMessage.js:123 () Failed to convert value for device capteur_humidite: Error: Zigbee2mqqt expose not found on device "capteur_humidite" with property "soil_moisture".

    at Zigbee2mqttManager.readValue (/src/server/services/zigbee2mqtt/lib/readValue.js:16:11)

    at /src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:119:31

    at Array.forEach (<anonymous>)

    at Zigbee2mqttManager.handleMqttMessage (/src/server/services/zigbee2mqtt/lib/handleMqttMessage.js:111:41)

    at MqttClient.<anonymous> (/src/server/services/zigbee2mqtt/lib/connect.js:60:12)

    at MqttClient.emit (node:events:519:28)

    at MqttClient._handlePublish (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:1277:12)

    at MqttClient._handlePacket (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:410:12)

    at work (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:321:12)

    at Writable.writable._write (/src/server/services/zigbee2mqtt/node_modules/mqtt/lib/client.js:335:5)

    at doWrite (/src/server/services/zigbee2mqtt/node_modules/readable-stream/lib/_stream_writable.js:409:139)

    at writeOrBuffer (/src/server/services/zigbee2mqtt/node_modules/readable-stream/lib/_stream_writable.js:398:5)

    at Writable.write (/src/server/services/zigbee2mqtt/node_modules/readable-stream/lib/_stream_writable.js:307:11)

    at Socket.ondata (node:internal/streams/readable:1009:22)

    at Socket.emit (node:events:519:28)

    at addChunk (node:internal/streams/readable:561:12)

    at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)

    at Socket.Readable.push (node:internal/streams/readable:392:5)

    at TCP.onStreamRead (node:internal/stream_base_commons:189:23)

2026-05-21T18:31:09+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" not found (or not added to Gladys), skipping state update.

2026-05-21T18:31:13+0200 <info> index.js:27 (Object.start) Starting MELCloud service 52848819-9e44-4ed8-a74d-4f6cfdcc6023

2026-05-21T18:31:13+0200 <error> melcloud.connect.js:44 (MELCloudHandler.connect) Error connecting to Tuya: null

2026-05-21T18:31:13+0200 <warn> service.start.js:44 (Service.start) Unable to start service melcloud AxiosError: Request failed with status code 401

    at settle (/src/server/services/melcloud/node_modules/axios/lib/core/settle.js:19:12)

    at IncomingMessage.handleStreamEnd (/src/server/services/melcloud/node_modules/axios/lib/adapters/http.js:570:11)

    at IncomingMessage.emit (node:events:531:35)

    at endReadableNT (node:internal/streams/readable:1698:12)

    at processTicksAndRejections (node:internal/process/task_queues:89:21) {

  code: 'ERR_BAD_REQUEST',

  config: {

    transitional: {

      silentJSONParsing: true,

      forcedJSONParsing: true,

      clarifyTimeoutError: false

    },

    adapter: [ 'xhr', 'http' ],

    transformRequest: [ [Function: transformRequest] ],

    transformResponse: [ [Function: transformResponse] ],

    timeout: 5000,

    xsrfCookieName: 'XSRF-TOKEN',

    xsrfHeaderName: 'X-XSRF-TOKEN',

    maxContentLength: -1,

    maxBodyLength: -1,

    env: { FormData: [Function], Blob: [class Blob] },

    validateStatus: [Function: validateStatus],

    headers: AxiosHeaders {

      Accept: 'application/json, text/javascript, */*; q=0.01',

      'Content-Type': 'application/json',

      'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:73.0) ',

      'Accept-Language': 'en-US,en;q=0.5',

      'Accept-Encoding': 'gzip, deflate, br',

      'X-MitsContextKey': null,

      'X-Requested-With': 'XMLHttpRequest',

      Cookie: 'policyaccepted=true'

    },

    baseURL: 'https://app.melcloud.com/Mitsubishi.Wifi.Client/',

    method: 'get',

    url: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

    data: undefined

  },

  request: <ref *1> ClientRequest {

    _events: [Object: null prototype] {

      abort: [Function (anonymous)],

      aborted: [Function (anonymous)],

      connect: [Function (anonymous)],

      error: [Function (anonymous)],

      socket: [Function (anonymous)],

      timeout: [Function (anonymous)],

      finish: [Function: requestOnFinish]

    },

    _eventsCount: 7,

    _maxListeners: undefined,

    outputData: [],

    outputSize: 0,

    writable: true,

    destroyed: true,

    _last: true,

    chunkedEncoding: false,

    shouldKeepAlive: true,

    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: true,

    _header: 'GET /Mitsubishi.Wifi.Client//User/ListDevices HTTP/1.1\r\n' +

      'Accept: application/json, text/javascript, */*; q=0.01\r\n' +

      'Content-Type: application/json\r\n' +

      'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:73.0) \r\n' +

      'Accept-Language: en-US,en;q=0.5\r\n' +

      'Accept-Encoding: gzip, deflate, br\r\n' +

      'X-Requested-With: XMLHttpRequest\r\n' +

      'Cookie: policyaccepted=true\r\n' +

      'Host: app.melcloud.com\r\n' +

      'Connection: keep-alive\r\n' +

      '\r\n',

    _keepAliveTimeout: 0,

    _onPendingData: [Function: nop],

    agent: Agent {

      _events: [Object: null prototype],

      _eventsCount: 2,

      _maxListeners: undefined,

      options: [Object: null prototype],

      defaultPort: 443,

      protocol: 'https:',

      requests: [Object: null prototype] {},

      sockets: [Object: null prototype] {},

      freeSockets: [Object: null prototype],

      keepAliveMsecs: 1000,

      keepAlive: true,

      maxSockets: Infinity,

      maxFreeSockets: 256,

      scheduling: 'lifo',

      maxTotalSockets: Infinity,

      totalSocketCount: 1,

      agentKeepAliveTimeoutBuffer: 1000,

      maxCachedSessions: 100,

      _sessionCache: [Object],

      [Symbol(shapeMode)]: false,

      [Symbol(kCapture)]: false

    },

    socketPath: undefined,

    method: 'GET',

    maxHeaderSize: undefined,

    insecureHTTPParser: undefined,

    joinDuplicateHeaders: undefined,

    path: '/Mitsubishi.Wifi.Client//User/ListDevices',

    _ended: true,

    res: IncomingMessage {

      _events: [Object],

      _readableState: [ReadableState],

      _maxListeners: undefined,

      socket: null,

      httpVersionMajor: 1,

      httpVersionMinor: 1,

      httpVersion: '1.1',

      complete: true,

      rawHeaders: [Array],

      rawTrailers: [],

      joinDuplicateHeaders: undefined,

      aborted: false,

      upgrade: false,

      url: '',

      method: null,

      statusCode: 401,

      statusMessage: 'Unauthorized',

      client: [TLSSocket],

      _consuming: false,

      _dumped: false,

      req: [Circular *1],

      _eventsCount: 4,

      responseUrl: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      redirects: [],

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false,

      [Symbol(kHeaders)]: [Object],

      [Symbol(kHeadersCount)]: 24,

      [Symbol(kTrailers)]: null,

      [Symbol(kTrailersCount)]: 0

    },

    aborted: false,

    timeoutCb: null,

    upgradeOrConnect: false,

    parser: null,

    maxHeadersCount: null,

    reusedSocket: true,

    host: 'app.melcloud.com',

    protocol: 'https:',

    _redirectable: Writable {

      _events: [Object],

      _writableState: [WritableState],

      _maxListeners: undefined,

      _options: [Object],

      _ended: true,

      _ending: true,

      _redirectCount: 0,

      _redirects: [],

      _requestBodyLength: 0,

      _requestBodyBuffers: [],

      _eventsCount: 3,

      _onNativeResponse: [Function (anonymous)],

      _currentRequest: [Circular *1],

      _currentUrl: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      _timeout: null,

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false

    },

    [Symbol(shapeMode)]: false,

    [Symbol(kCapture)]: false,

    [Symbol(kBytesWritten)]: 0,

    [Symbol(kNeedDrain)]: false,

    [Symbol(corked)]: 0,

    [Symbol(kChunkedBuffer)]: [],

    [Symbol(kChunkedLength)]: 0,

    [Symbol(kSocket)]: TLSSocket {

      _tlsOptions: [Object],

      _secureEstablished: true,

      _securePending: false,

      _newSessionPending: false,

      _controlReleased: true,

      secureConnecting: false,

      _SNICallback: null,

      servername: 'app.melcloud.com',

      alpnProtocol: false,

      authorized: true,

      authorizationError: null,

      encrypted: true,

      _events: [Object: null prototype],

      _eventsCount: 9,

      connecting: false,

      _hadError: false,

      _parent: null,

      _host: 'app.melcloud.com',

      _closeAfterHandlingError: false,

      _readableState: [ReadableState],

      _writableState: [WritableState],

      allowHalfOpen: false,

      _maxListeners: undefined,

      _sockname: null,

      _pendingData: null,

      _pendingEncoding: '',

      server: undefined,

      _server: null,

      ssl: [TLSWrap],

      _requestCert: true,

      _rejectUnauthorized: true,

      timeout: 5000,

      parser: null,

      _httpMessage: null,

      autoSelectFamilyAttemptedAddresses: [Array],

      [Symbol(alpncallback)]: null,

      [Symbol(res)]: [TLSWrap],

      [Symbol(verified)]: true,

      [Symbol(pendingSession)]: null,

      [Symbol(async_id_symbol)]: -1,

      [Symbol(kHandle)]: [TLSWrap],

      [Symbol(lastWriteQueueSize)]: 0,

      [Symbol(timeout)]: Timeout {

        _idleTimeout: 5000,

        _idlePrev: [TimersList],

        _idleNext: [Timeout],

        _idleStart: 269958086,

        _onTimeout: [Function: bound ],

        _timerArgs: undefined,

        _repeat: null,

        _destroyed: false,

        [Symbol(refed)]: false,

        [Symbol(kHasPrimitive)]: false,

        [Symbol(asyncId)]: 15104056,

        [Symbol(triggerId)]: 15104054,

        [Symbol(kAsyncContextFrame)]: undefined

      },

      [Symbol(kBuffer)]: null,

      [Symbol(kBufferCb)]: null,

      [Symbol(kBufferGen)]: null,

      [Symbol(shapeMode)]: true,

      [Symbol(kCapture)]: false,

      [Symbol(kSetNoDelay)]: false,

      [Symbol(kSetKeepAlive)]: true,

      [Symbol(kSetKeepAliveInitialDelay)]: 1,

      [Symbol(kBytesRead)]: 0,

      [Symbol(kBytesWritten)]: 0,

      [Symbol(connect-options)]: [Object]

    },

    [Symbol(kOutHeaders)]: [Object: null prototype] {

      accept: [Array],

      'content-type': [Array],

      'user-agent': [Array],

      'accept-language': [Array],

      'accept-encoding': [Array],

      'x-requested-with': [Array],

      cookie: [Array],

      host: [Array]

    },

    [Symbol(errored)]: null,

    [Symbol(kHighWaterMark)]: 65536,

    [Symbol(kRejectNonStandardBodyWrites)]: false,

    [Symbol(kUniqueHeaders)]: null

  },

  response: {

    status: 401,

    statusText: 'Unauthorized',

    headers: AxiosHeaders {

      date: 'Thu, 21 May 2026 16:31:13 GMT',

      'content-type': 'text/html',

      'content-length': '1293',

      connection: 'keep-alive',

      'cache-control': 'no-cache, no-store, must-revalidate',

      pragma: 'no-cache',

      expires: '-1',

      server: 'Microsoft-IIS/10.0',

      'strict-transport-security': 'max-age=63072000; includeSubDomains',

      'x-robots-tag': 'noindex, nofollow, noimageindex',

      'x-content-type-options': 'nosniff',

      'access-control-allow-origin': '*'

    },

    config: {

      transitional: [Object],

      adapter: [Array],

      transformRequest: [Array],

      transformResponse: [Array],

      timeout: 5000,

      xsrfCookieName: 'XSRF-TOKEN',

      xsrfHeaderName: 'X-XSRF-TOKEN',

      maxContentLength: -1,

      maxBodyLength: -1,

      env: [Object],

      validateStatus: [Function: validateStatus],

      headers: [AxiosHeaders],

      baseURL: 'https://app.melcloud.com/Mitsubishi.Wifi.Client/',

      method: 'get',

      url: 'https://app.melcloud.com/Mitsubishi.Wifi.Client//User/ListDevices',

      data: undefined

    },

    request: <ref *1> ClientRequest {

      _events: [Object: null prototype],

      _eventsCount: 7,

      _maxListeners: undefined,

      outputData: [],

      outputSize: 0,

      writable: true,

      destroyed: true,

      _last: true,

      chunkedEncoding: false,

      shouldKeepAlive: true,

      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: true,

      _header: 'GET /Mitsubishi.Wifi.Client//User/ListDevices HTTP/1.1\r\n' +

        'Accept: application/json, text/javascript, */*; q=0.01\r\n' +

        'Content-Type: application/json\r\n' +

        'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:73.0) \r\n' +

        'Accept-Language: en-US,en;q=0.5\r\n' +

        'Accept-Encoding: gzip, deflate, br\r\n' +

        'X-Requested-With: XMLHttpRequest\r\n' +

        'Cookie: policyaccepted=true\r\n' +

        'Host: app.melcloud.com\r\n' +

        'Connection: keep-alive\r\n' +

        '\r\n',

      _keepAliveTimeout: 0,

      _onPendingData: [Function: nop],

      agent: [Agent],

      socketPath: undefined,

      method: 'GET',

      maxHeaderSize: undefined,

      insecureHTTPParser: undefined,

      joinDuplicateHeaders: undefined,

      path: '/Mitsubishi.Wifi.Client//User/ListDevices',

      _ended: true,

      res: [IncomingMessage],

      aborted: false,

      timeoutCb: null,

      upgradeOrConnect: false,

      parser: null,

      maxHeadersCount: null,

      reusedSocket: true,

      host: 'app.melcloud.com',

      protocol: 'https:',

      _redirectable: [Writable],

      [Symbol(shapeMode)]: false,

      [Symbol(kCapture)]: false,

      [Symbol(kBytesWritten)]: 0,

      [Symbol(kNeedDrain)]: false,

      [Symbol(corked)]: 0,

      [Symbol(kChunkedBuffer)]: [],

      [Symbol(kChunkedLength)]: 0,

      [Symbol(kSocket)]: [TLSSocket],

      [Symbol(kOutHeaders)]: [Object: null prototype],

      [Symbol(errored)]: null,

      [Symbol(kHighWaterMark)]: 65536,

      [Symbol(kRejectNonStandardBodyWrites)]: false,

      [Symbol(kUniqueHeaders)]: null

    },

    data: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r\n' +

      '<html xmlns="http://www.w3.org/1999/xhtml">\r\n' +

      '<head>\r\n' +

      '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>\r\n' +

      '<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>\r\n' +

      '<style type="text/css">\r\n' +

      '<!--\r\n' +

      'body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}\r\n' +

      'fieldset{padding:0 15px 10px 15px;} \r\n' +

      'h1{font-size:2.4em;margin:0;color:#FFF;}\r\n' +

      'h2{font-size:1.7em;margin:0;color:#CC0000;} \r\n' +

      'h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} \r\n' +

      '#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;\r\n' +

      'background-color:#555555;}\r\n' +

      '#content{margin:0 0 0 2%;position:relative;}\r\n' +

      '.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}\r\n' +

      '-->\r\n' +

      '</style>\r\n' +

      '</head>\r\n' +

      '<body>\r\n' +

      '<div id="header"><h1>Server Error</h1></div>\r\n' +

      '<div id="content">\r\n' +

      ' <div class="content-container"><fieldset>\r\n' +

      '  <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>\r\n' +

      '  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>\r\n' +

      ' </fieldset></div>\r\n' +

      '</div>\r\n' +

      '</body>\r\n' +

      '</html>\r\n'

  }

}

Et petite question mais pourquoi il y a une connexion avec Tuya, et Axios (que je ne connais pas) ?

EDIT : petite précision, j’utilise Melcloud Home et non pas l’ancien Melcloud.
EDIT 2 : d’après Claude, c’est le problème car Gladys utilise app.melcloud.comet moi je suis sur melcloudhome.com. Argh :frowning:
EDIT 3 : je viens de créer une issue sur github avec Claude : MELCloud integration incompatible with MELCloud Home (melcloudhome.com) · Issue #2532 · GladysAssistant/Gladys · GitHub

A voir ce que fait l’usine là, mais je me demande si ce n’est pas un nouveau plugin qu’il faudrait créer :slight_smile:

Bonsoir @mutmut . De mon côté, PaC Mitsubishi installée depuis janvier. Je n’arrivais pas à la connecter dans gladys avec l’intégration, et Pierre-Gilles m’avait indiqué que ça venait de la différence de PaC Air-air et Air-eau. Depuis, je m’en suis sorti en passant par Node-red. C’est ce sujet : Intégration MELCloud : PaC non prise en charge. A ajouter?

Et j’ai fait comme toi au début, j’avais connecté ma PaC sur le nouveau MEL Cloud, l’interface de l’appli me semblant plus complet, ou en tout cas plus moderne (= moins moche). Mais avec ce mail cloud-là, pas d’API disponible ! En tout cas, pas encore… Donc retour à l’ancien MEL CLoud, qui lui dispose bien d’une API. Et donc à l’appli moche, mais qu’en fait je n’utilise pas puisque je pilote depuis Gladys.

Merci @StephaneB ! Je crois que je vais passer sur l’ancien système alors.

C’est quand même dingue tous ces fabricants, ils font tout pour verrouiller, il n’y a qu’à voir Daikin que l’on pouvait piloter en local avant que leur solution cloud Onecta n’arrive.
C’est vraiment une plaie :weary_face:

Une autre solution que je vais regarder, mais plus technique, c’est de passer tout en local avec un ESP, il faut que je retrouve les infos par contre.

Pour info, le plugin Melcloud datait des débuts de l’usine à plugins, et depuis, celle-ci a beaucoup évolué.
Du coup, le plugin reposait sur d’anciens mécanismes qui pouvaient réintroduire des bugs déjà corrigés entre-temps.

J’ai fermé le ticket pour repartir sur quelque chose de plus propre. Je pense que le mieux serait d’en recréer un nouveau :+1:

À noter aussi qu’il existe pas mal de plugins Melcloud côté Homebridge, qui peuvent servir d’inspiration intéressante. En revanche, ils ne sont pas encore adaptés à Matter :slight_smile: