NEWS
dev-server watch
-
ich versuche gerade ein wenig beim Enocean-Adapter mit zu helfen.
Dazu habe ich den dev-server installiert. wenn ich den nun starte mitnpm run dev-server watch default
läuft alles normal.laut der readme vom dev-server soll ich den Adapter nicht manuell starten:
DO NOT start the adapter manually in ioBroker.admin! If you see errors like ADAPTER_ALREADY_RUNNING then most likely you ignored this info
der Adapter startet dann zwar, wie ich der Konsole vom dev-server sehe, aber im Admin bleibt der Adapter gestoppt.
Es funktioniert dann zwar (fast) alles. der Adapter Läuft, States bekommen werte etc... es kommt mir trotzdem komisch vor.
Ist dieses Verhalten normal? woran könnte das liegen?
ich habe ein einziges Problem, bei der Nutzung von (im adapter ADAPTER)
this.deleteDeviceAsync(id)
bekomme ich die Fehlermeldung:2023-09-04 10:55:27.657 - error: enocean.0 (65766) unhandled promise rejection: Cannot access 'id' before initialization
2023-09-04 10:55:27.666 - error: enocean.0 (65766) ReferenceError: Cannot access 'id' before initializationich vermute, dass das am "nicht gestartetem" Adpater liegt... könnte da aber auch komplett falsch mit liegen...
diesen Codeabschnitt habe ich nicht angefasst und "in production" kann man devices löschen...
-
@holger-will sagte in dev-server watch:
Ist dieses Verhalten normal? woran könnte das liegen?
ja das ist normal.
da der adapter nicht von iobroker gestartet wurde, kennt er den laufzeitstatus nicht.
der adapter wird als separater prozess direkt vom skript aus gestartet
und läuft daher trotzdem und kann ganz normal funktionieren.ReferenceError: Cannot access 'id' before initialization
Eigentlich kann dieser Fehler jetzt nicht direkt am nicht gestarteten Adapter liegen. Die Fehlermeldung sagt aus, das du eine Variable verwendest, bevor sie initialisiert wurde.
An welcher Stelle hast du die Variable mit var/let initialisisert bzw. über einen funktionskopf an diese stelle des codes übergeben?auch hängt es davon ab, an welcher stelle man let oder var notiert hat,
aber bei einem aufgeräumten code findet man var ja immer am anfang eines blocks und let auf jeden fall kurz vor der ersten verwendung einer variabledas funktioniert
console.log(a); var a =1
das funktioniert nicht
console.log(a); let a =1
stichwort ist hoisting
-
@oliverio Danke erstmal!
ist nicht mein Code, ich versuche mich da gerade ein zu arbeiten...
aber deklariert ist da alles ordentlich:
const id = obj.message.replace(this.namespace + '.', ''); await this.deleteDeviceAsync(id);
in in der Produktion funktioniert das ja, nur halt im dev-server nicht...
-
@oliverio OK, vergiss es... ich hatte davor noch irgendwo ein console.log(id) drin... sorry! und Danke!