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

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é 
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 
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