Newan / ioBroker.easee

easee is a wallbox with an REST-API. This adapter for ioBroker can used to connect the wallbox with your home environment
MIT License
21 stars 8 forks source link

RefreshToken error #71

Open Heini1985 opened 1 year ago

Heini1985 commented 1 year ago

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

Newan commented 1 year ago

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

ivo443 commented 12 months ago

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

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

NCIceWolf commented 12 months ago

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.

Newan commented 12 months ago

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.

NCIceWolf commented 12 months ago

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.

barznet commented 11 months ago

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

Newan commented 11 months ago

Hab ich auch beobachtet und teste gerade in meinem Evcc

unstressable commented 10 months ago

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.

Bulls91 commented 9 months ago

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

NCIceWolf commented 6 months ago

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); } });

Bulls91 commented 6 months ago

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

NCIceWolf commented 6 months ago

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.

unstressable commented 6 months ago

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 commented 6 months ago

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.