Fehler / Verbindung mit Service NetAtmo verloren

Hallo @Terdious, heute Morgen habe ich festgestellt, dass mein NetAtmo-Thermostat keine Daten mehr an Gladys überträgt.
In den Einstellungen war der Dienst nicht mehr verbunden. Ich habe dann auf Speichern und verbinden geklickt und auf der sich öffnenden NetAtmo-Seite erneut bestätigt.
Leider werden die Daten immer noch nicht übertragen.
Ich habe versucht, den Thermostat zu löschen und wieder hinzuzufügen, aber ohne Erfolg.
In den Logs erhalte ich den folgenden Fehler:

025-03-22T13:22:08+0100 <info> netatmo.loadDevices.js:146 (NetatmoHandler.loadDevices) Netatmo devices not supported : 0
2025-03-22T13:22:08+0100 <info> netatmo.discoverDevices.js:23 (NetatmoHandler.discoverDevices) 2 Netatmo devices found
2025-03-22T13:22:08+0100 <info> netatmo.convertDeviceEnergy.js:108 (NetatmoHandler.convertDeviceEnergy) Netatmo Energy device "undefined, NAPlug" converted
2025-03-22T13:22:08+0100 <info> netatmo.convertDeviceEnergy.js:108 (NetatmoHandler.convertDeviceEnergy) Netatmo Energy device "Thermostat, NATherm1" converted
2025-03-22T13:22:11+0100 <error> netatmo.loadDeviceDetails.js:101 (NetatmoHandler.loadDeviceDetails) Error getting devices details - error:  AxiosError: Request failed with status code 400
    at settle (/src/server/services/netatmo/node_modules/axios/lib/core/settle.js:19:12)
    at IncomingMessage.handleStreamEnd (/src/server/services/netatmo/node_modules/axios/lib/adapters/http.js:585:11)
    at IncomingMessage.emit (node:events:530:35)
    at endReadableNT (node:internal/streams/readable:1698:12)
    at processTicksAndRejections (node:internal/process/task_queues:90:21) {
  code: 'ERR_BAD_REQUEST',
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },

Ich habe die vollständigen Logs nicht angehängt, da sie persönliche Informationen enthalten, aber wenn nötig, kann ich sie dir privat schicken.

Ein weiterer Punkt: Auf der NetAtmo-Erkennungsseite findet er meinen Thermostat nicht und Gladys ist eingefroren. Kein Knopf funktioniert mehr.

Hast du Probleme auf deiner Seite?

PS: Mein Thermostat ist gut mit der NetAtmo-App verbunden und ich kann ihn von meiner Telefon-App aus ohne Probleme steuern.

Hallo @Will_71,

Ja, ich hatte tatsächlich das gleiche Problem. Ich musste zur Seite von dev.netatmo gehen, um mich „unbannen“ zu lassen. Offensichtlich hat Gladys zu viele Anfragen gestellt und die API hat die Anwendung gesperrt … :

Nach einem Update??

Aber ich habe trotzdem viele fehlende Daten. Ich muss diese Woche mal einen Blick darauf werfen, ob sich etwas an der API oder bei Gladys durch ein Update geändert hat…

Okay, danke für deine Rückmeldung. Ich kann nicht genau bestätigen, ob das Problem vor oder nach dem letzten Update aufgetreten ist.
Um es zu testen, habe ich eine App in NetAtmo neu erstellt und versucht, den Dienst neu zu konfigurieren, aber nichts funktioniert mehr. Gladys erkennt meinen Thermostat nicht mehr und die Konfigurationsseite friert ein.

Ok! Ich versuche morgen zu debuggen und lasse dich wissen, falls ich deine Logs brauche!!
Mein Node-red hat auch Probleme, also …
Bei Gladys, wenn ich die Kurven für 30 Tage hochlade, sehe ich den letzten Datensatz vom 15.03. Also nicht mit einem Update verbunden.
Aber meine Befehle gehen durch … seltsam alles das.

Ich habe Netatmo in NodeRed reaktiviert und bestätige, dass es auch nicht funktioniert.
Zumindest funktioniert es 5 Minuten, wenn ich ein Token generiere, und dann nichts mehr.

Hier sind die Daten mit NodeRed zurück


Das bestätigt, dass es nur eine bestimmte Zeit funktioniert, nachdem man bei Netatmo ein Token neu erstellt hat.
Also gibt es tatsächlich ein Problem bei ihnen oder sie haben etwas geändert.

https://helpcenter.netatmo.com/hc/de/community/posts/24778172322578-Weather-API-kann-keine-neuen-Tokens-abrufen

https://helpcenter.netatmo.com/hc/de/community/posts/25380088749202-Weather-API-gibt-HTTP-Status-404-aus

https://helpcenter.netatmo.com/hc/de/community/posts/25460250126226-HTTP-411-Fehler-in-API-setroomthermpoint

Tadam! Nach dem Update von Axios:

…

Aber nein, nichts weiter! Und die Antwort von chatGPT ist für Axios… verhängnisvoll… Das ist verrückt!!

@pierre-gilles, eine Idee für eine Umgehung? Ich teste hier mit undici als Vorabversion? Ich kenne mich nicht aus, also frage ich lieber, bevor ich loslege.

Der Vorschlag von ChatGPT ist gut, undici ist eine seriöse Bibliothek, die von Mitgliedern des Node.js-Teams entwickelt wurde, stabil und leichtgewichtig:

Daher ist die Migration dorthin tatsächlich eine gute Lösung, das sollte nicht allzu kompliziert sein, denke ich.

Ich habe tatsächlich am Wochenende mehrere E-Mails in meinem Gladys-Postfach erhalten, in denen steht, dass die Netatmo-Integration kaputt ist :stuck_out_tongue:

Perfekt, ich teste den Fix.

Gut, zum Glück mache ich meine tägliche Runde ^^ Ich hatte seit dem 15.03 nichts bemerkt…

Danke @Will_71 !!

Gute Nachricht!! Es klappt!!

Super !! Sag mir Bescheid, sobald du einen PR hast :smiley:

Die Tests dauerten lange … Entschuldigung

Normalerweise ist es gut @pierre-gilles !

Danke für das PR!

Ich habe dir Feedback gegeben :slight_smile:

https://github.com/GladysAssistant/Gladys/pull/2256#pullrequestreview-2710845558

Danke !!

Frage: Ich verwende es in den Tests, deshalb habe ich es zusätzlich zum Service global installiert. Sollte ich es anders machen? Es in den Tests neu installieren?

In diesem Fall kannst du es in den devDependencies installieren! :slight_smile:

Beantwortet und korrigiert!!

Ich habe dir geantwortet :slight_smile:

https://github.com/GladysAssistant/Gladys/pull/2256#discussion_r2013523910

Hallo @pierre-gilles,

Danke für das Review und deine Gründlichkeit. Für mich ist es scheiße … ich kann die richtigen Infos nicht finden.

Kurz gesagt… Ich habe es nach deinen Angaben korrigiert.
Allerdings ist der letzte Test bei meinem letzten Push, der nur textuell war, bei etwas anderem als der PR gescheitert:

  2815 bestanden (2m)
  1 fehlgeschlagen

  1) house.arm
       sollte ein Haus bewaffnen:
     erwartet wurde, dass emit 4 Mal aufgerufen wird, aber es wurde zweimal aufgerufen
    emit(websocket.send-all, { payload: { house: "test-house" }, type: "alarm.arming" }) => null at House.arm (/home/runner/work/Gladys/Gladys/server/lib/house/house.arm.js:11:35)
    emit(trigger.check, { house: "test-house", type: "alarm.arming" }) => null at House.arm (/home/runner/work/Gladys/Gladys/server/lib/house/house.arm.js:12:36)
  AssertError: erwartet wurde, dass emit 4 Mal aufgerufen wird, aber es wurde zweimal aufgerufen
      emit(websocket.send-all, { payload: { house: "test-house" }, type: "alarm.arming" }) => null at House.arm (lib/house/house.arm.js:11:35)
      emit(trigger.check, { house: "test-house", type: "alarm.arming" }) => null at House.arm (lib/house/house.arm.js:12:36)
      at Object.fail (node_modules/sinon/lib/sinon/assert.js:107:21)
      at failAssertion (node_modules/sinon/lib/sinon/assert.js:66:16)
      at Object.assertCallCount [as callCount] (node_modules/sinon/lib/sinon/assert.js:148:13)
      at Context.<anonymous> (test/lib/house/house.arm.test.js:33:12)

Man kann sie immer noch nicht neu starten, wenn sie fehlschlagen. Das Problem ist, dass ich jetzt denselben Fehler lokal habe … Ich verstehe das nicht!

Es tut mir leid, aber ich brauche Hilfe, wenn das auch lokal auftritt, muss es einen Grund geben, der vielleicht schon vorher bestand, aber … verdeckt wurde? Könntest du mir helfen, das zu verstehen und wie man das Problem findet?

EDIT: Das Schlimmste ist, dass wenn ich diesen Test allein starte, er immer noch abstürzt???

Oh Mann, ich verstehe nicht, warum das plötzlich passiert ist. Wenn ich nur die Tests von server/test/lib/house/house.arm.test.js 10 Mal starte, stürzt es jetzt ständig lokal auf dem Ursprung ab:

  it('should arm a house', async () => {
    await house.arm('test-house');
    await Promise.delay(5);
    assert.callCount(event.emit, 4);

Wenn ich den Delay auf 8 erhöhe, stürzt es 1 Mal von 8 Malen ab:

  it('should arm a house', async () => {
    await house.arm('test-house');
    await Promise.delay(8);
    assert.callCount(event.emit, 4);

Und wenn ich den Delay auf 10 erhöhe, stürzt es nicht mehr ab:

  it('should arm a house', async () => {
    await house.arm('test-house');
    await Promise.delay(10);
    assert.callCount(event.emit, 4);

Ich kann nicht feststellen, was meine Änderungen am Verhalten dieses Tests im Besonderen ändern …

Ich habe einen Befehl ausgeführt, um die Tests für den Netatmo-Service + lib/house zu starten, wobei der Delay auf 8 eingestellt ist, kein Problem dreimal hintereinander… aber immer noch 1 Mal von 2 Malen mit einem Delay von 5 …

Edit: Ich habe eine Änderung gepusht: Hinzufügen von Leerzeichen in einigen Fehlermeldungen und die Tests funktionieren. Aber wäre es möglich, dass wir trotzdem zusammen herausfinden, warum wir solche zufälligen Fehler haben (und offensichtlich nicht so zufällig, wie lokal…).