Conexión a 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 :

Hola,
vuelvo a sacar el tema porque desde hoy tengo PAC Mitsubishi :cold_face: :hot_face: :grimacing:

Pues pongo mis id/contraseña, hago clic en Guardar la configuración y … nada. No pasa nada y cuando voy a Descubrimiento MELCloud, me dice que no estoy conectado :frowning:

Aclaro que en mi correo electrónico hay un + y mi inicio de sesión funciona en la aplicación Melcloud Home y también a través de la web.
En paralelo también he probado con el plugin matterbridge y tampoco funciona.

Aquí están los registros de Gladys:

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

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

2026-05-21T18:29:47+0200 <warn> service.start.js:44 (Service.start) No se pudo iniciar el servicio melcloud AxiosError: La solicitud falló con el código de estado 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(kCapture)]: false

      },

      [Symbol(kCapture)]: false

    },

    [Symbol(kCapture)]: false

  },

  [Symbol(kCapture)]: 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: 'No autorizado',

    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 - No autorizado: Se deniega el acceso debido a credenciales no válidas.</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>Error del servidor</h1></div>\r\n' +

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

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

      '  <h2>401 - No autorizado: Se deniega el acceso debido a credenciales no válidas.</h2>\r\n' +

      '  <h3>No tiene permiso para ver este directorio o página con las credenciales que ha proporcionado.</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) Calculando consumo a partir del índice en la zona horaria Europa/París para la ventana Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:34 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Se encontraron 50 dispositivos de energía

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:65 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Se encontraron 16 dispositivos con ambas características INDEX y THIRTY_MINUTES_CONSUMPTION

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Borne VE a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Clim mobile a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:00+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Climatisation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Leds cuisine a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0.07999999999992724 para el dispositivo Prise congélateur a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Prise lave-linge a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0.7830000000000006 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo Téléinformation a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0.010000000000005116 para el dispositivo ampli freebox a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo prise compresseur a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo prise_04 a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:149 () Se guardó el consumo 0 para el dispositivo relais_fp_01 a las Jue May 21 2026 18:30:00 GMT+0200 (Hora de verano de Europa central)

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateConsumptionFromIndex.js:160 (EnergyMonitoringHandler.calculateConsumptionFromIndex) Finalizado el cálculo del consumo a partir del índice para 16 dispositivos

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateCostFrom.js:34 (EnergyMonitoringHandler.calculateCostFrom) Calculando el costo en la zona horaria Europa/París

2026-05-21T18:30:01+0200 <info> energy-monitoring.calculateCostFrom.js:38 (EnergyMonitoringHandler.calculateCostFrom) Se encontraron 21 dispositivos de energía

2026-05-21T18:30:02+0200 <info> energy-monitoring.calculateCostFrom.js:126 () El dispositivo 2b993985-4690-47e0-89ab-523e35ade901 tiene precios tempo y el mapa está vacío, obteniendo el histórico de EDF tempo

2026-05-21T18:30:02+0200 <info> contracts.buildEdfTempoDayMap.js:19 (buildEdfTempoDayMap) Construyendo el mapa histórico de EDF tempo a partir del 2026-05-20

2026-05-21T18:30:02+0200 <info> contracts.buildEdfTempoDayMap.js:52 (buildEdfTempoDayMap) Se encontraron todos los 2 días de EDF tempo en la caché (del 2026-05-20 al 2026-05-21)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2026-05-21T18:30:07+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:30:12+0200 <info> netatmo.loadDevices.js:155 (NetatmoHandler.loadDevices) Dispositivos Netatmo no soportados: 0

2026-05-21T18:30:37+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:30:40+0200 <error> handleMqttMessage.js:123 () Error al convertir el valor para el dispositivo capteur_humidite: Error: No se encontró la exposición de Zigbee2mqqt en el dispositivo "capteur_humidite" con la propiedad "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) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

2026-05-21T18:31:10+0200 <info> device.newStateEvent.js:17 (DeviceManager.newStateEvent) No se encontró el DeviceFeature "zwavejs-ui:41:0:binary_sensor:general_purpose" (o no se agregó a Gladys), se omite la actualización del estado.

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

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

2026-05-21T18:31:13+0200 <warn> service.start.js:44 (Service.start) No se pudo iniciar el servicio melcloud AxiosError: La solicitud falló con el código de estado 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'

  }

}

¿Y una pequeña pregunta, pero por qué hay una conexión con Tuya, y Axios (que no conozco)?

EDIT: pequeña precisión, uso Melcloud Home y no el antiguo Melcloud.
EDIT 2: según Claude, es el problema porque Gladys utiliza app.melcloud.com y yo estoy en melcloudhome.com. Argh :frowning:
EDIT 3: acabo de crear una issue en github con Claude: MELCloud integration incompatible with MELCloud Home (melcloudhome.com) · Issue #2532 · GladysAssistant/Gladys · GitHub

A ver qué hace la fábrica, pero me pregunto si no habría que crear un nuevo plugin :slight_smile:

Buenas noches @mutmut. Por mi parte, tengo la PaC Mitsubishi instalada desde enero. No podía conectarla en Gladys con la integración, y Pierre-Gilles me indicó que se debía a la diferencia entre PaC aire-aire y aire-agua. Desde entonces, lo he solucionado pasando por Node-red. Es este tema: Intégration MELCloud : PaC non prise en charge. A ajouter?

Y al principio hice como tú, conecté mi PaC en el nuevo MEL Cloud, ya que la interfaz de la aplicación me parecía más completa, o al menos más moderna (= menos fea). Pero con este MEL Cloud no hay API disponible. Al menos, todavía no… Así que volví al antiguo MEL Cloud, que sí tiene una API. Y, por lo tanto, a la aplicación fea, pero que en realidad no uso, ya que la controlo desde Gladys.

¡Gracias @StephaneB! Creo que voy a volver al sistema antiguo.

Es increíble cómo todos estos fabricantes hacen todo lo posible para bloquear, solo hay que ver Daikin, que antes se podía controlar localmente hasta que llegó su solución en la nube Onecta.
Es realmente un dolor de cabeza :weary_face:

Otra solución que voy a mirar, pero más técnica, es pasar todo a local con un ESP, aunque tengo que encontrar la información.

Por información, el plugin Melcloud databa de los inicios de la fábrica de plugins, y desde entonces, esta ha evolucionado mucho.
Por lo tanto, el plugin se basaba en mecanismos antiguos que podían reintroducir errores ya corregidos.

He cerrado el ticket para empezar de nuevo con algo más limpio. Creo que lo mejor sería crear uno nuevo :+1:

También hay que señalar que existen muchos plugins Melcloud en Homebridge, que pueden servir de inspiración interesante. Sin embargo, aún no están adaptados a Matter :slight_smile: