ioBroker.easee icon indicating copy to clipboard operation
ioBroker.easee copied to clipboard

RefreshToken error

Open Heini1985 opened this issue 1 year ago • 14 comments

Hallo zusammen ich habe seit einiger zeit diesen Fehler.

AxiosError: Request failed with status code 401 RefreshToken error

Seit heute geht die Instanz auf rot. Wenn ich SignalR an habe funktioniert es zwar aber sehr träge und die Instanz ist gelb. ich habe die Version 1.0.10 installiert.

image

image

könnt ihr mir weiter helfen?

Gruß

Heini1985

Heini1985 avatar Aug 28 '23 15:08 Heini1985

Es gab wohl wieder eine Änderung an der api. Muss ich genauer bei sehen

Newan avatar Aug 28 '23 19:08 Newan

Es gab wohl wieder eine Änderung an der api. Muss ich genauer bei sehen

Hi Newan, schon News hier? Danke dir. LG Ivo

ivo443 avatar Sep 05 '23 14:09 ivo443

Hatte ich bei mir auch im Log. Die letzten drei Tage gab es aber eine Menge Wartungsarbeiten von Easee.

Seit der letzten heute Nachmittag und einem Neustart des Adapters danach ist bei mir wieder alles sauber. Lag also vielleicht einfach an der Cloud API, nicht am Adapter.

NCIceWolf avatar Sep 05 '23 19:09 NCIceWolf

Ja es funktioniert immer mal wieder. Solange da easee die Server net stabil hat, ist es ein zeitliches Problem hier durchgehend Support zu geben. Denke wir warten noch 1-2 Tage ab.

Newan avatar Sep 06 '23 05:09 Newan

Da ich heute mal wieder das Auto geladen habe: Fehlermeldungen habe ich zwar nicht mehr, aber es scheint Probleme mit SignalR zu geben. Updates gab es nur zum Abfrageintervall, jedoch nicht über SignalR. Irgendwas hat Easee hier also definitiv geändert.

Im Changelog finde ich allerdings nichts. Das letzte war der SignalR URI Change, den hast du ja schon eingebaut.

NCIceWolf avatar Sep 06 '23 14:09 NCIceWolf

Vielleicht hilft das https://github.com/evcc-io/evcc/issues/9717

barznet avatar Sep 10 '23 15:09 barznet

Hab ich auch beobachtet und teste gerade in meinem Evcc

Newan avatar Sep 10 '23 16:09 Newan

Hatte den heute auch bekommen und er hat das log vollgespammt: `

easee.0 2023-11-05 13:13:23.936 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:13:23.936 error RefreshToken error
easee.0 2023-11-05 13:12:52.845 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:12:52.844 error RefreshToken error
easee.0 2023-11-05 13:12:22.415 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:12:22.415 error RefreshToken error
easee.0 2023-11-05 13:11:52.044 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:11:52.043 error RefreshToken error
easee.0 2023-11-05 13:11:21.634 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:11:21.634 error RefreshToken error
easee.0 2023-11-05 13:10:51.203 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:10:51.202 error RefreshToken error
easee.0 2023-11-05 13:10:20.835 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:10:20.834 error RefreshToken error
easee.0 2023-11-05 13:09:50.445 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:09:50.444 error RefreshToken error
easee.0 2023-11-05 13:09:20.008 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:09:20.008 error RefreshToken error
easee.0 2023-11-05 13:08:49.588 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:08:49.588 error RefreshToken error
easee.0 2023-11-05 13:08:19.138 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:08:19.138 error RefreshToken error
easee.0 2023-11-05 13:07:48.805 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:07:48.804 error RefreshToken error
easee.0 2023-11-05 13:07:18.315 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:07:18.314 error RefreshToken error
easee.0 2023-11-05 13:06:47.870 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:06:47.870 error RefreshToken error
easee.0 2023-11-05 13:06:17.434 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:06:17.434 error RefreshToken error
easee.0 2023-11-05 13:05:46.979 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:05:46.978 error RefreshToken error
easee.0 2023-11-05 13:05:16.496 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:05:16.496 error RefreshToken error
easee.0 2023-11-05 13:04:46.066 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:04:46.065 error RefreshToken error
easee.0 2023-11-05 13:04:15.601 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:04:15.600 error RefreshToken error
easee.0 2023-11-05 13:03:45.235 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:03:45.234 error RefreshToken error
easee.0 2023-11-05 13:03:14.797 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:03:14.797 error RefreshToken error
easee.0 2023-11-05 13:02:44.200 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:02:44.199 error RefreshToken error
easee.0 2023-11-05 13:02:13.766 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:02:13.765 error RefreshToken error
easee.0 2023-11-05 13:01:43.357 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:01:43.356 error RefreshToken error
easee.0 2023-11-05 13:01:12.989 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:01:12.988 error RefreshToken error
easee.0 2023-11-05 13:00:42.466 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:00:42.465 error RefreshToken error
easee.0 2023-11-05 13:00:12.095 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 13:00:12.095 error RefreshToken error
daswetter.0 2023-11-05 13:00:12.004 error exception in HourlyForecast [TypeError: Cannot read properties of undefined (reading 'city')]
easee.0 2023-11-05 12:59:41.613 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:59:41.612 error RefreshToken error
easee.0 2023-11-05 12:59:11.120 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:59:11.119 error RefreshToken error
easee.0 2023-11-05 12:58:40.739 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:58:40.739 error RefreshToken error
easee.0 2023-11-05 12:58:10.351 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:58:10.350 error RefreshToken error
easee.0 2023-11-05 12:57:39.940 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:57:39.939 error RefreshToken error
easee.0 2023-11-05 12:57:09.535 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:57:09.534 error RefreshToken error
easee.0 2023-11-05 12:56:39.104 error AxiosError: Request failed with status code 401
easee.0 2023-11-05 12:56:39.103 error RefreshToken error
easee.0 2023-11-05 12:56:08.748 error AxiosError: Request failed with status code 401
`

Vielleicht kann man das irgendwie abfangen, dass der Fehler nur 1x pro 10 Minuten oder so angezeigt wird und nicht jede halbe Minute.

unstressable avatar Nov 05 '23 12:11 unstressable

habe den gleichen Fehler. Wenn man die Instanz von hand stoppt und 2 mins wartet dann wieder startet, dann tritt der Fehler für ein paar stunden bis zu einem Tag nicht mehr auf. Wäre schön wenn man das irgendwie abfangen könnte

Bulls91 avatar Nov 16 '23 14:11 Bulls91

Falls das jemandem hilft, habe mir hierfür ein Skript gebaut was genau diesen Fall abfängt und den Adapter von selbst neu startet. sollte dieser einmal nicht erreichbar sein:

// Easee adapter Neustarten falls offline on({ id: 'system.adapter.easee.0.alive' /* easee.0 alive /, val: false }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; setStateDelayed('system.adapter.easee.0.alive' / easee.0 alive /, true, 10000, false); console.error('Easee Adapter gestoppt, Start in 10 Sekunden'); (() => { if (timeout) { clearTimeout(timeout); timeout = null; }})(); }); // Easee adapter Neustarten falls offline on({ id: 'easee.0.info.connection' / If communication with easee works /, change: 'any' }, async (obj) => { let value = obj.state.val; let oldValue = obj.oldState.val; if (getState('easee.0.info.connection').val == true) { console.debug('Easee wieder erreichbar'); (() => { if (timeout) { clearTimeout(timeout); timeout = null; }})(); } else { console.warn('Easee nicht erreichbar, Timer gestartet'); timeout = setTimeout(async () => { timeout = null; setState('system.adapter.easee.0.alive' / easee.0 alive */, false); console.error('Easee nicht erreichbar, Adapter Stopp'); }, 180000); } });

NCIceWolf avatar Feb 29 '24 14:02 NCIceWolf

Danke @NCIceWolf für das Skript. Wenn ich das so übernehme, bekomme ich es jedoch in der Zeile 20 mit setState('system.adapter.easee.0.alive' / easee.0 alive */, false); nicht zum laufen. Da sagt mir der javascript-Adapter liegt ein Fehler vor.

Ich habe mir den Code auf folgendes angepasst und so startet er bei mir:

let timeout = null; // Timeout-Variable außerhalb der Funktionen deklarieren

// Wenn der Adapter offline ist
on({ id: 'system.adapter.easee.0.alive', val: false }, async (obj) => {
    let value = obj.state.val;
    let oldValue = obj.oldState.val;
    setStateDelayed('system.adapter.easee.0.alive', true, 10000, false); // Adapterstatus auf true setzen
    console.error('Easee Adapter gestoppt, Start in 10 Sekunden'); // Fehlermeldung ausgeben
    if (timeout) {
        clearTimeout(timeout); // Timeout löschen, wenn es existiert
        timeout = null;
    }
});

// Überwachen der Verbindung zum Easee
on({ id: 'easee.0.info.connection', change: 'any' }, async (obj) => {
    let value = obj.state.val;
    let oldValue = obj.oldState.val;
    if (getState('easee.0.info.connection').val === true) {
        console.debug('Easee wieder erreichbar'); // Debugmeldung ausgeben
        if (timeout) {
            clearTimeout(timeout); // Timeout löschen, wenn es existiert
            timeout = null;
        }
    } else {
        console.warn('Easee nicht erreichbar, Timer gestartet'); // Warnmeldung ausgeben
        if (timeout) {
            clearTimeout(timeout); // Timeout löschen, wenn es existiert
            timeout = null;
        }
        timeout = setTimeout(async () => {
            setState('system.adapter.easee.0.alive', false); // Adapterstatus auf false setzen
            console.error('Easee nicht erreichbar, Adapter Stopp'); // Fehlermeldung ausgeben
            timeout = null;
        }, 180000); // 180 Sekunden Timeout
    }
});

Da ich zum jetzigen Zeitpunkt den Fehlerfall nicht hatte, kann ich noch nicht sagen, ob es läuft

Bulls91 avatar Feb 29 '24 15:02 Bulls91

Danke @NCIceWolf für das Skript. Wenn ich das so übernehme, bekomme ich es jedoch in der Zeile 20 mit setState('system.adapter.easee.0.alive' / easee.0 alive */, false); nicht zum laufen. Da sagt mir der javascript-Adapter liegt ein Fehler vor.

Scheinbar hatte er die Definition des Timeouts nicht übernommen, hab nur eben schnell das Blockly konvertiert und hier rein kopiert. Zumindest bei mir klappt das Skript bisher sehr gut. Und das Easee immer mal wieder Probleme mit der API-Erreichbarkeit hat, ist leider Fakt.

Praktisch wäre wenn man die Wallbox direkt ansteuern könnte, das geht aber wohl nur über OCPP. Und da müsste jemand schon viel Langeweile mitbringen um den Adapter hier umzubauen... Oder man baut die Prüfung der Erreichbarkeit mit in diesen Adapter ein, ist aber natürlich auch etwas Aufwand.

NCIceWolf avatar Mar 01 '24 06:03 NCIceWolf

Danke @NCIceWolf für das Skript. Wenn ich das so übernehme, bekomme ich es jedoch in der Zeile 20 mit setState('system.adapter.easee.0.alive' / easee.0 alive */, false); nicht zum laufen. Da sagt mir der javascript-Adapter liegt ein Fehler vor.

Scheinbar hatte er die Definition des Timeouts nicht übernommen, hab nur eben schnell das Blockly konvertiert und hier rein kopiert. Zumindest bei mir klappt das Skript bisher sehr gut. Und das Easee immer mal wieder Probleme mit der API-Erreichbarkeit hat, ist leider Fakt.

Praktisch wäre wenn man die Wallbox direkt ansteuern könnte, das geht aber wohl nur über OCPP. Und da müsste jemand schon viel Langeweile mitbringen um den Adapter hier umzubauen... Oder man baut die Prüfung der Erreichbarkeit mit in diesen Adapter ein, ist aber natürlich auch etwas Aufwand.

Also wenn ich dein Script als Blockly importiere passiert gar nichts. Als JavaScript kommt dieser Fehler: `

javascript.0 | 2024-03-01 09:27:56.288 | error | at processImmediate (node:internal/timers:478:21) -- | -- | -- | -- javascript.0 | 2024-03-01 09:27:56.288 | error | at Immediate._onImmediate (/opt/iobroker/node_modules/iobroker.javascript/main.js:1670:17) javascript.0 | 2024-03-01 09:27:56.288 | error | at /opt/iobroker/node_modules/iobroker.javascript/main.js:2195:17 javascript.0 | 2024-03-01 09:27:56.288 | error | at prepareScript (/opt/iobroker/node_modules/iobroker.javascript/main.js:2097:37) javascript.0 | 2024-03-01 09:27:56.288 | error | at createVM (/opt/iobroker/node_modules/iobroker.javascript/main.js:1844:21) javascript.0 | 2024-03-01 09:27:56.287 | error | at new Script (node:vm:94:7) javascript.0 | 2024-03-01 09:27:56.287 | error | SyntaxError: Unexpected token ')' javascript.0 | 2024-03-01 09:27:56.287 | error | ^ javascript.0 | 2024-03-01 09:27:56.287 | error | setState('system.adapter.easee.0.alive' / easee.0 alive */, false); javascript.0 | 2024-03-01 09:27:56.286 | error | script.js.Erkennungslogiken.Störungserkennungen.Easee-Adapter.Neustart compile failed: at script.js.Erkennungslogiken.Störungserkennungen.Easee-Adapter.Neustart:20 `

unstressable avatar Mar 01 '24 08:03 unstressable

Danke @NCIceWolf für das Skript. Wenn ich das so übernehme, bekomme ich es jedoch in der Zeile 20 mit setState('system.adapter.easee.0.alive' / easee.0 alive */, false); nicht zum laufen. Da sagt mir der javascript-Adapter liegt ein Fehler vor.

Ich habe mir den Code auf folgendes angepasst und so startet er bei mir:

let timeout = null; // Timeout-Variable außerhalb der Funktionen deklarieren

// Wenn der Adapter offline ist
on({ id: 'system.adapter.easee.0.alive', val: false }, async (obj) => {
    let value = obj.state.val;
    let oldValue = obj.oldState.val;
    setStateDelayed('system.adapter.easee.0.alive', true, 10000, false); // Adapterstatus auf true setzen
    console.error('Easee Adapter gestoppt, Start in 10 Sekunden'); // Fehlermeldung ausgeben
    if (timeout) {
        clearTimeout(timeout); // Timeout löschen, wenn es existiert
        timeout = null;
    }
});

// Überwachen der Verbindung zum Easee
on({ id: 'easee.0.info.connection', change: 'any' }, async (obj) => {
    let value = obj.state.val;
    let oldValue = obj.oldState.val;
    if (getState('easee.0.info.connection').val === true) {
        console.debug('Easee wieder erreichbar'); // Debugmeldung ausgeben
        if (timeout) {
            clearTimeout(timeout); // Timeout löschen, wenn es existiert
            timeout = null;
        }
    } else {
        console.warn('Easee nicht erreichbar, Timer gestartet'); // Warnmeldung ausgeben
        if (timeout) {
            clearTimeout(timeout); // Timeout löschen, wenn es existiert
            timeout = null;
        }
        timeout = setTimeout(async () => {
            setState('system.adapter.easee.0.alive', false); // Adapterstatus auf false setzen
            console.error('Easee nicht erreichbar, Adapter Stopp'); // Fehlermeldung ausgeben
            timeout = null;
        }, 180000); // 180 Sekunden Timeout
    }
});

Da ich zum jetzigen Zeitpunkt den Fehlerfall nicht hatte, kann ich noch nicht sagen, ob es läuft

Danke, dein Script funktioniert bei mir auch, also bringt keine Fehler beim Start. Ob es auch den Adapter ordentlich neu startet und das Problem behebt, wird sich zeigen.

unstressable avatar Mar 01 '24 08:03 unstressable